From 8a3e4f14d1ab4149befdf84c8e4cf546d13bd3f5 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Sun, 25 Jul 2021 04:06:02 +0200 Subject: [PATCH 0001/1618] Add tests and `.qlref` --- .../Security/CWE-614/InsecureCookie.qlref | 1 + .../Security/CWE-614/django_bad.py | 13 +++++++ .../Security/CWE-614/django_good.py | 19 +++++++++++ .../query-tests/Security/CWE-614/flask_bad.py | 34 +++++++++++++++++++ .../Security/CWE-614/flask_good.py | 34 +++++++++++++++++++ 5 files changed, 101 insertions(+) create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.qlref create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-614/django_good.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.qlref b/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.qlref new file mode 100644 index 00000000000..378d5dcae1a --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-614/InsecureCookie.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py b/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py new file mode 100644 index 00000000000..877231f8f14 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py @@ -0,0 +1,13 @@ +import django.http + + +def django_response(request): + resp = django.http.HttpResponse() + resp.set_cookie("name", "value", secure=None) + return resp + + +def django_response(request): + resp = django.http.HttpResponse() + resp.set_cookie("name", "value") + return resp diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/django_good.py b/python/ql/test/experimental/query-tests/Security/CWE-614/django_good.py new file mode 100644 index 00000000000..ebf16236de2 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/django_good.py @@ -0,0 +1,19 @@ +import django.http + + +def django_response(request): + resp = django.http.HttpResponse() + resp['Set-Cookie'] = "name=value; Secure;" + return resp + + +def django_response(request): + resp = django.http.HttpResponse() + resp.set_cookie("name", "value", secure=True) + return resp + + +def indeterminate(secure): + resp = django.http.HttpResponse() + resp.set_cookie("name", "value", secure) + return resp diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py new file mode 100644 index 00000000000..7c7d6e8acd0 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py @@ -0,0 +1,34 @@ +from flask import Flask, request, make_response, Response + +app = Flask(__name__) + + +@app.route("/false") +def false(): + resp = make_response() + resp.set_cookie("name", value="value", secure=False) + return resp + + +@app.route("/none") +def none(): + resp = make_response() + resp.set_cookie("name", value="value", secure=None) + return resp + + +@app.route("/flask_Response") +def flask_Response(): + resp = Response() + resp.headers['Set-Cookie'] = "name=value;" + return resp + + +@app.route("/flask_make_response") +def flask_make_response(): + resp = make_response("hello") + resp.headers['Set-Cookie'] = "name=value;" + return resp + +# if __name__ == "__main__": +# app.run(debug=True) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py new file mode 100644 index 00000000000..05ee3f28657 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py @@ -0,0 +1,34 @@ +from flask import Flask, request, make_response, Response + +app = Flask(__name__) + + +@app.route("/true") +def true(): + resp = make_response() + resp.set_cookie("name", value="value", secure=True) + return resp + + +@app.route("/flask_Response") +def flask_Response(): + resp = Response() + resp.headers['Set-Cookie'] = "name=value; Secure;" + return resp + + +@app.route("/flask_make_response") +def flask_make_response(): + resp = make_response("hello") + resp.headers['Set-Cookie'] = "name=value; Secure;" + return resp + + +def indeterminate(secure): + resp = make_response() + resp.set_cookie("name", value="value", secure=secure) + return resp + + +# if __name__ == "__main__": +# app.run(debug=True) From c8983be947adac8c3faba902056c9c898cf848af Mon Sep 17 00:00:00 2001 From: jorgectf Date: Sun, 25 Jul 2021 04:06:44 +0200 Subject: [PATCH 0002/1618] Add query --- .../Security/CWE-614/InsecureCookie.ql | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql diff --git a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql new file mode 100644 index 00000000000..2405d6ddd4e --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql @@ -0,0 +1,30 @@ +/** + * @name Failure to use secure cookies + * @description Insecure cookies may be sent in cleartext, which makes them vulnerable to + * interception. + * @kind problem + * @problem.severity error + * @id py/insecure-cookie + * @tags security + * external/cwe/cwe-614 + */ + +// determine precision above +import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.Concepts +import experimental.semmle.python.Concepts + +from HeaderDeclaration headerWrite, False f, None n +where + exists(StrConst headerName, StrConst headerValue | + headerName.getText() = "Set-Cookie" and + DataFlow::exprNode(headerName).(DataFlow::LocalSourceNode).flowsTo(headerWrite.getNameArg()) and + not headerValue.getText().regexpMatch(".*; *Secure;.*") and + DataFlow::exprNode(headerValue).(DataFlow::LocalSourceNode).flowsTo(headerWrite.getValueArg()) + ) + or + [DataFlow::exprNode(f), DataFlow::exprNode(n)] + .(DataFlow::LocalSourceNode) + .flowsTo(headerWrite.(DataFlow::CallCfgNode).getArgByName("secure")) +select headerWrite, "Cookie is added to response without the 'secure' flag being set." From 4f68a1777ce5efe87507dce2847b3c4dcfb15066 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Sun, 25 Jul 2021 04:07:05 +0200 Subject: [PATCH 0003/1618] Write documentation and example --- .../Security/CWE-614/InsecureCookie.py | 15 +++++++++++ .../Security/CWE-614/InsecureCookie.qhelp | 26 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 python/ql/src/experimental/Security/CWE-614/InsecureCookie.py create mode 100644 python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp diff --git a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.py b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.py new file mode 100644 index 00000000000..54bbeff7d12 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.py @@ -0,0 +1,15 @@ +from flask import Flask, request, make_response, Response + + +@app.route("/true") +def true(): + resp = make_response() + resp.set_cookie("name", value="value", secure=True) + return resp + + +@app.route("/flask_make_response") +def flask_make_response(): + resp = make_response("hello") + resp.headers['Set-Cookie'] = "name=value; Secure;" + return resp \ No newline at end of file diff --git a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp new file mode 100644 index 00000000000..ab5e3031629 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp @@ -0,0 +1,26 @@ + + + + +

Failing to set the 'secure' flag on a cookie can cause it to be sent in cleartext. +This makes it easier for an attacker to intercept.

+
+ + +

Always set secure to True or add "; Secure;" to the cookie's raw value.

+
+ + +

This example shows two ways of adding a cookie to a Flask response. The first way uses set_cookie's +secure flag and the second adds the secure flag in the cookie's raw value.

+ +
+ + +
  • Detectify: Cookie lack Secure flag.
  • +
  • PortSwigger: TLS cookie without secure flag set.
  • +
    + +
    \ No newline at end of file From 65044293dd680552ac9782656d48354e0fa06b42 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Sun, 25 Jul 2021 17:53:58 +0200 Subject: [PATCH 0004/1618] Add `CookieWrite` concept --- .../experimental/semmle/python/Concepts.qll | 58 +++++++++++++++++++ .../semmle/python/frameworks/Django.qll | 11 ++++ 2 files changed, 69 insertions(+) diff --git a/python/ql/src/experimental/semmle/python/Concepts.qll b/python/ql/src/experimental/semmle/python/Concepts.qll index 809176a9d52..56543246784 100644 --- a/python/ql/src/experimental/semmle/python/Concepts.qll +++ b/python/ql/src/experimental/semmle/python/Concepts.qll @@ -252,3 +252,61 @@ class HeaderDeclaration extends DataFlow::Node { */ DataFlow::Node getValueArg() { result = range.getValueArg() } } + +module ExperimentalHTTP { + /** + * A data-flow node that sets a cookie in an HTTP response. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `HTTP::CookieWrite::Range` instead. + */ + class CookieWrite extends DataFlow::Node { + CookieWrite::Range range; + + CookieWrite() { this = range } + + /** + * Gets the argument, if any, specifying the raw cookie header. + */ + DataFlow::Node getHeaderArg() { result = range.getHeaderArg() } + + /** + * Gets the argument, if any, specifying the cookie name. + */ + DataFlow::Node getNameArg() { result = range.getNameArg() } + + /** + * Gets the argument, if any, specifying the cookie value. + */ + DataFlow::Node getValueArg() { result = range.getValueArg() } + } + + /** Provides a class for modeling new cookie writes on HTTP responses. */ + module CookieWrite { + /** + * A data-flow node that sets a cookie in an HTTP response. + * + * Note: we don't require that this redirect must be sent to a client (a kind of + * "if a tree falls in a forest and nobody hears it" situation). + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `HttpResponse` instead. + */ + abstract class Range extends DataFlow::Node { + /** + * Gets the argument, if any, specifying the raw cookie header. + */ + abstract DataFlow::Node getHeaderArg(); + + /** + * Gets the argument, if any, specifying the cookie name. + */ + abstract DataFlow::Node getNameArg(); + + /** + * Gets the argument, if any, specifying the cookie value. + */ + abstract DataFlow::Node getValueArg(); + } + } +} diff --git a/python/ql/src/experimental/semmle/python/frameworks/Django.qll b/python/ql/src/experimental/semmle/python/frameworks/Django.qll index c525b73b40e..da7db6fd18b 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Django.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Django.qll @@ -75,6 +75,17 @@ private module PrivateDjango { override DataFlow::Node getValueArg() { result = headerInput } } + + class DjangoSetCookieCall extends DataFlow::CallCfgNode, + ExperimentalHTTP::CookieWrite::Range { + DjangoSetCookieCall() { this = baseClassRef().getMember("set_cookie").getACall() } + + override DataFlow::Node getHeaderArg() { none() } + + override DataFlow::Node getNameArg() { result = this.getArg(0) } + + override DataFlow::Node getValueArg() { result = this.getArg(1) } + } } } } From 983465963aeeb403673ffce9ab4b61c275bd1af3 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Sun, 25 Jul 2021 18:18:29 +0200 Subject: [PATCH 0005/1618] Polish `CookieWrite` --- .../Security/CWE-614/InsecureCookie.ql | 18 +++++++++++------- .../semmle/python/frameworks/Flask.qll | 16 ++++++++++++++++ .../query-tests/Security/CWE-614/django_bad.py | 2 +- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql index 2405d6ddd4e..8a57aea8d69 100644 --- a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql +++ b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql @@ -15,16 +15,20 @@ import semmle.python.dataflow.new.DataFlow import semmle.python.Concepts import experimental.semmle.python.Concepts -from HeaderDeclaration headerWrite, False f, None n +from Expr cookieExpr, False f, None n where - exists(StrConst headerName, StrConst headerValue | + exists(HeaderDeclaration headerWrite, StrConst headerName, StrConst headerValue | headerName.getText() = "Set-Cookie" and DataFlow::exprNode(headerName).(DataFlow::LocalSourceNode).flowsTo(headerWrite.getNameArg()) and not headerValue.getText().regexpMatch(".*; *Secure;.*") and - DataFlow::exprNode(headerValue).(DataFlow::LocalSourceNode).flowsTo(headerWrite.getValueArg()) + DataFlow::exprNode(headerValue).(DataFlow::LocalSourceNode).flowsTo(headerWrite.getValueArg()) and + cookieExpr = headerWrite.asExpr() ) or - [DataFlow::exprNode(f), DataFlow::exprNode(n)] - .(DataFlow::LocalSourceNode) - .flowsTo(headerWrite.(DataFlow::CallCfgNode).getArgByName("secure")) -select headerWrite, "Cookie is added to response without the 'secure' flag being set." + exists(ExperimentalHTTP::CookieWrite cookieWrite | + [DataFlow::exprNode(f), DataFlow::exprNode(n)] + .(DataFlow::LocalSourceNode) + .flowsTo(cookieWrite.(DataFlow::CallCfgNode).getArgByName("secure")) and + cookieExpr = cookieWrite.asExpr() + ) +select cookieExpr, "Cookie is added to response without the 'secure' flag being set." diff --git a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll index 9c66d9a4601..2a2cc68fe84 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll @@ -81,4 +81,20 @@ module ExperimentalFlask { override DataFlow::Node getValueArg() { result.asExpr() = item.getValue() } } + + class DjangoSetCookieCall extends DataFlow::CallCfgNode, ExperimentalHTTP::CookieWrite::Range { + DjangoSetCookieCall() { + this = + [Flask::Response::classRef(), flaskMakeResponse()] + .getReturn() + .getMember("set_cookie") + .getACall() + } + + override DataFlow::Node getHeaderArg() { none() } + + override DataFlow::Node getNameArg() { result = this.getArg(0) } + + override DataFlow::Node getValueArg() { result = this.getArg(1) } + } } diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py b/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py index 877231f8f14..02752d32f99 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py @@ -9,5 +9,5 @@ def django_response(request): def django_response(request): resp = django.http.HttpResponse() - resp.set_cookie("name", "value") + resp.set_cookie("name", "value", secure=False) return resp From c8a7f48d6efa57bd9907086742b0860a4d3bb4a0 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Sun, 25 Jul 2021 18:18:38 +0200 Subject: [PATCH 0006/1618] Add `.expected` --- .../query-tests/Security/CWE-614/InsecureCookie.expected | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected b/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected new file mode 100644 index 00000000000..5c157a11976 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected @@ -0,0 +1,6 @@ +| django_bad.py:6:5:6:49 | Attribute() | Cookie is added to response without the 'secure' flag being set. | +| django_bad.py:12:5:12:50 | Attribute() | Cookie is added to response without the 'secure' flag being set. | +| flask_bad.py:9:5:9:56 | Attribute() | Cookie is added to response without the 'secure' flag being set. | +| flask_bad.py:16:5:16:55 | Attribute() | Cookie is added to response without the 'secure' flag being set. | +| flask_bad.py:23:5:23:30 | Subscript | Cookie is added to response without the 'secure' flag being set. | +| flask_bad.py:30:5:30:30 | Subscript | Cookie is added to response without the 'secure' flag being set. | From 54ed25a925caf2e05e2c5189dc3c0e4f99d463d9 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Sun, 25 Jul 2021 18:21:16 +0200 Subject: [PATCH 0007/1618] Change `False` and `None` scopes --- python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql index 8a57aea8d69..02b1280abab 100644 --- a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql +++ b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql @@ -15,7 +15,7 @@ import semmle.python.dataflow.new.DataFlow import semmle.python.Concepts import experimental.semmle.python.Concepts -from Expr cookieExpr, False f, None n +from Expr cookieExpr where exists(HeaderDeclaration headerWrite, StrConst headerName, StrConst headerValue | headerName.getText() = "Set-Cookie" and @@ -25,7 +25,7 @@ where cookieExpr = headerWrite.asExpr() ) or - exists(ExperimentalHTTP::CookieWrite cookieWrite | + exists(ExperimentalHTTP::CookieWrite cookieWrite, False f, None n | [DataFlow::exprNode(f), DataFlow::exprNode(n)] .(DataFlow::LocalSourceNode) .flowsTo(cookieWrite.(DataFlow::CallCfgNode).getArgByName("secure")) and From a082ed917cf8ef4f27f3ec4ee1303a9a993c59ce Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 22 Sep 2021 19:43:48 +0200 Subject: [PATCH 0008/1618] track flow through string replace calls that just replace single chars --- .../PolynomialReDoSCustomizations.qll | 19 +++++++++++++--- .../ReDoS/PolynomialBackTracking.expected | 2 ++ .../ReDoS/PolynomialReDoS.expected | 22 +++++++++++++++++++ .../Performance/ReDoS/polynomial-redos.js | 6 +++++ 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/security/performance/PolynomialReDoSCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/performance/PolynomialReDoSCustomizations.qll index 9574e6e6376..2f46ca5f2b6 100644 --- a/javascript/ql/lib/semmle/javascript/security/performance/PolynomialReDoSCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/performance/PolynomialReDoSCustomizations.qll @@ -95,15 +95,28 @@ module PolynomialReDoS { this.(StringReplaceCall).isGlobal() and // not lone char classes - they don't remove any repeated pattern. not exists(RegExpTerm root | root = this.(StringReplaceCall).getRegExp().getRoot() | - root instanceof RegExpCharacterClass - or - root instanceof RegExpCharacterClassEscape + isCharClassLike(root) ) or this.(DataFlow::MethodCallNode).getMethodName() = StringOps::substringMethodName() } } + /** + * Holds if `term` matches a set of strings of length 1. + */ + predicate isCharClassLike(RegExpTerm term) { + term instanceof RegExpCharacterClass + or + term instanceof RegExpCharacterClassEscape + or + term.(RegExpConstant).getValue().length() = 1 + or + exists(RegExpAlt alt | term = alt | + forall(RegExpTerm choice | choice = alt.getAlternative() | isCharClassLike(choice)) + ) + } + /** * An check on the length of a string, seen as a sanitizer guard. */ diff --git a/javascript/ql/test/query-tests/Performance/ReDoS/PolynomialBackTracking.expected b/javascript/ql/test/query-tests/Performance/ReDoS/PolynomialBackTracking.expected index a38b8cb37fe..bc00d3193c3 100644 --- a/javascript/ql/test/query-tests/Performance/ReDoS/PolynomialBackTracking.expected +++ b/javascript/ql/test/query-tests/Performance/ReDoS/PolynomialBackTracking.expected @@ -113,6 +113,8 @@ | polynomial-redos.js:116:21:116:28 | [\\d\\D]*? | Strings starting with '/*' and with many repetitions of 'a/*' can start matching anywhere after the start of the preceeding \\/\\*[\\d\\D]*?\\*\\/ | | polynomial-redos.js:118:17:118:23 | (#\\d+)+ | Strings with many repetitions of '9' can start matching anywhere after the start of the preceeding \\d+ | | polynomial-redos.js:124:33:124:35 | \\s+ | Strings with many repetitions of ' ' can start matching anywhere after the start of the preceeding \\s+$ | +| polynomial-redos.js:130:21:130:22 | c+ | Strings starting with 'c' and with many repetitions of 'c' can start matching anywhere after the start of the preceeding cc+D | +| polynomial-redos.js:133:22:133:23 | f+ | Strings starting with 'f' and with many repetitions of 'f' can start matching anywhere after the start of the preceeding ff+G | | regexplib/address.js:27:3:27:5 | \\s* | Strings with many repetitions of ' ' can start matching anywhere after the start of the preceeding (\\s*\\(?0\\d{4}\\)?(\\s*\|-)\\d{3}(\\s*\|-)\\d{3}\\s*) | | regexplib/address.js:27:48:27:50 | \\s* | Strings with many repetitions of ' ' can start matching anywhere after the start of the preceeding (\\s*\\(?0\\d{3}\\)?(\\s*\|-)\\d{3}(\\s*\|-)\\d{4}\\s*) | | regexplib/address.js:27:93:27:95 | \\s* | Strings with many repetitions of ' ' can start matching anywhere after the start of the preceeding (\\s*(7\|8)(\\d{7}\|\\d{3}(\\-\|\\s{1})\\d{4})\\s*) | diff --git a/javascript/ql/test/query-tests/Performance/ReDoS/PolynomialReDoS.expected b/javascript/ql/test/query-tests/Performance/ReDoS/PolynomialReDoS.expected index bd49ef91504..3598d336592 100644 --- a/javascript/ql/test/query-tests/Performance/ReDoS/PolynomialReDoS.expected +++ b/javascript/ql/test/query-tests/Performance/ReDoS/PolynomialReDoS.expected @@ -165,6 +165,16 @@ nodes | polynomial-redos.js:123:13:123:20 | replaced | | polynomial-redos.js:124:12:124:17 | result | | polynomial-redos.js:124:12:124:17 | result | +| polynomial-redos.js:129:6:129:42 | modified | +| polynomial-redos.js:129:17:129:23 | tainted | +| polynomial-redos.js:129:17:129:42 | tainted ... g, "b") | +| polynomial-redos.js:130:2:130:9 | modified | +| polynomial-redos.js:130:2:130:9 | modified | +| polynomial-redos.js:132:6:132:50 | modified2 | +| polynomial-redos.js:132:18:132:24 | tainted | +| polynomial-redos.js:132:18:132:50 | tainted ... g, "e") | +| polynomial-redos.js:133:2:133:10 | modified2 | +| polynomial-redos.js:133:2:133:10 | modified2 | edges | lib/closure.js:3:21:3:21 | x | lib/closure.js:4:16:4:16 | x | | lib/closure.js:3:21:3:21 | x | lib/closure.js:4:16:4:16 | x | @@ -317,6 +327,8 @@ edges | polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:118:2:118:8 | tainted | | polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:118:2:118:8 | tainted | | polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:121:18:121:24 | tainted | +| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:129:17:129:23 | tainted | +| polynomial-redos.js:5:6:5:32 | tainted | polynomial-redos.js:132:18:132:24 | tainted | | polynomial-redos.js:5:16:5:32 | req.query.tainted | polynomial-redos.js:5:6:5:32 | tainted | | polynomial-redos.js:5:16:5:32 | req.query.tainted | polynomial-redos.js:5:6:5:32 | tainted | | polynomial-redos.js:68:18:68:24 | req.url | polynomial-redos.js:68:18:68:24 | req.url | @@ -327,6 +339,14 @@ edges | polynomial-redos.js:123:3:123:20 | result | polynomial-redos.js:124:12:124:17 | result | | polynomial-redos.js:123:3:123:20 | result | polynomial-redos.js:124:12:124:17 | result | | polynomial-redos.js:123:13:123:20 | replaced | polynomial-redos.js:123:3:123:20 | result | +| polynomial-redos.js:129:6:129:42 | modified | polynomial-redos.js:130:2:130:9 | modified | +| polynomial-redos.js:129:6:129:42 | modified | polynomial-redos.js:130:2:130:9 | modified | +| polynomial-redos.js:129:17:129:23 | tainted | polynomial-redos.js:129:17:129:42 | tainted ... g, "b") | +| polynomial-redos.js:129:17:129:42 | tainted ... g, "b") | polynomial-redos.js:129:6:129:42 | modified | +| polynomial-redos.js:132:6:132:50 | modified2 | polynomial-redos.js:133:2:133:10 | modified2 | +| polynomial-redos.js:132:6:132:50 | modified2 | polynomial-redos.js:133:2:133:10 | modified2 | +| polynomial-redos.js:132:18:132:24 | tainted | polynomial-redos.js:132:18:132:50 | tainted ... g, "e") | +| polynomial-redos.js:132:18:132:50 | tainted ... g, "e") | polynomial-redos.js:132:6:132:50 | modified2 | #select | lib/closure.js:4:5:4:17 | /u*o/.test(x) | lib/closure.js:3:21:3:21 | x | lib/closure.js:4:16:4:16 | x | This $@ that depends on $@ may run slow on strings with many repetitions of 'u'. | lib/closure.js:4:6:4:7 | u* | regular expression | lib/closure.js:3:21:3:21 | x | library input | | lib/lib.js:4:2:4:18 | regexp.test(name) | lib/lib.js:3:28:3:31 | name | lib/lib.js:4:14:4:17 | name | This $@ that depends on $@ may run slow on strings with many repetitions of 'a'. | lib/lib.js:1:15:1:16 | a* | regular expression | lib/lib.js:3:28:3:31 | name | library input | @@ -409,3 +429,5 @@ edges | polynomial-redos.js:116:2:116:35 | tainted ... \\*\\//g) | polynomial-redos.js:5:16:5:32 | req.query.tainted | polynomial-redos.js:116:2:116:8 | tainted | This $@ that depends on $@ may run slow on strings starting with '/*' and with many repetitions of 'a/*'. | polynomial-redos.js:116:21:116:28 | [\\d\\D]*? | regular expression | polynomial-redos.js:5:16:5:32 | req.query.tainted | a user-provided value | | polynomial-redos.js:118:2:118:25 | tainted ... \\d+)+/) | polynomial-redos.js:5:16:5:32 | req.query.tainted | polynomial-redos.js:118:2:118:8 | tainted | This $@ that depends on $@ may run slow on strings with many repetitions of '9'. | polynomial-redos.js:118:17:118:23 | (#\\d+)+ | regular expression | polynomial-redos.js:5:16:5:32 | req.query.tainted | a user-provided value | | polynomial-redos.js:124:12:124:43 | result. ... /g, '') | polynomial-redos.js:5:16:5:32 | req.query.tainted | polynomial-redos.js:124:12:124:17 | result | This $@ that depends on $@ may run slow on strings with many repetitions of ' '. | polynomial-redos.js:124:33:124:35 | \\s+ | regular expression | polynomial-redos.js:5:16:5:32 | req.query.tainted | a user-provided value | +| polynomial-redos.js:130:2:130:31 | modifie ... g, "b") | polynomial-redos.js:5:16:5:32 | req.query.tainted | polynomial-redos.js:130:2:130:9 | modified | This $@ that depends on $@ may run slow on strings starting with 'c' and with many repetitions of 'c'. | polynomial-redos.js:130:21:130:22 | c+ | regular expression | polynomial-redos.js:5:16:5:32 | req.query.tainted | a user-provided value | +| polynomial-redos.js:133:2:133:32 | modifie ... g, "b") | polynomial-redos.js:5:16:5:32 | req.query.tainted | polynomial-redos.js:133:2:133:10 | modified2 | This $@ that depends on $@ may run slow on strings starting with 'f' and with many repetitions of 'f'. | polynomial-redos.js:133:22:133:23 | f+ | regular expression | polynomial-redos.js:5:16:5:32 | req.query.tainted | a user-provided value | diff --git a/javascript/ql/test/query-tests/Performance/ReDoS/polynomial-redos.js b/javascript/ql/test/query-tests/Performance/ReDoS/polynomial-redos.js index a6648c0ed65..2e08d436516 100644 --- a/javascript/ql/test/query-tests/Performance/ReDoS/polynomial-redos.js +++ b/javascript/ql/test/query-tests/Performance/ReDoS/polynomial-redos.js @@ -125,4 +125,10 @@ app.use(function(req, res) { })(); tainted.match(/(https?:\/\/[^\s]+)/gm); // OK + + var modified = tainted.replace(/a/g, "b"); + modified.replace(/cc+D/g, "b"); // NOT OK + + var modified2 = tainted.replace(/a|b|c|\d/g, "e"); + modified2.replace(/ff+G/g, "b"); // NOT OK }); From 48c3c3d8a8df6cf3d0a65d00fe400aae1537314a Mon Sep 17 00:00:00 2001 From: jorgectf Date: Wed, 27 Oct 2021 21:00:50 +0200 Subject: [PATCH 0009/1618] Broaden scope --- .../Security/CWE-614/InsecureCookie.ql | 25 +++++------- .../experimental/semmle/python/Concepts.qll | 39 +++++++++---------- .../semmle/python/CookieHeader.qll | 26 +++++++++++++ .../semmle/python/frameworks/Django.qll | 19 ++++++--- .../semmle/python/frameworks/Flask.qll | 20 +++++++--- 5 files changed, 82 insertions(+), 47 deletions(-) create mode 100644 python/ql/src/experimental/semmle/python/CookieHeader.qll diff --git a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql index 02b1280abab..bf0ff22d45e 100644 --- a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql +++ b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql @@ -12,23 +12,16 @@ // determine precision above import python import semmle.python.dataflow.new.DataFlow -import semmle.python.Concepts import experimental.semmle.python.Concepts -from Expr cookieExpr +from Cookie cookie, string alert where - exists(HeaderDeclaration headerWrite, StrConst headerName, StrConst headerValue | - headerName.getText() = "Set-Cookie" and - DataFlow::exprNode(headerName).(DataFlow::LocalSourceNode).flowsTo(headerWrite.getNameArg()) and - not headerValue.getText().regexpMatch(".*; *Secure;.*") and - DataFlow::exprNode(headerValue).(DataFlow::LocalSourceNode).flowsTo(headerWrite.getValueArg()) and - cookieExpr = headerWrite.asExpr() - ) + cookie.isSecure() and + alert = "secure" or - exists(ExperimentalHTTP::CookieWrite cookieWrite, False f, None n | - [DataFlow::exprNode(f), DataFlow::exprNode(n)] - .(DataFlow::LocalSourceNode) - .flowsTo(cookieWrite.(DataFlow::CallCfgNode).getArgByName("secure")) and - cookieExpr = cookieWrite.asExpr() - ) -select cookieExpr, "Cookie is added to response without the 'secure' flag being set." + not cookie.isHttpOnly() and + alert = "httponly" + or + cookie.isSameSite() and + alert = "samesite" +select cookie, "Cookie is added without the ", alert, " flag properly set." diff --git a/python/ql/src/experimental/semmle/python/Concepts.qll b/python/ql/src/experimental/semmle/python/Concepts.qll index 9da35b854a5..b6a15cb025b 100644 --- a/python/ql/src/experimental/semmle/python/Concepts.qll +++ b/python/ql/src/experimental/semmle/python/Concepts.qll @@ -301,54 +301,51 @@ class HeaderDeclaration extends DataFlow::Node { * A data-flow node that sets a cookie in an HTTP response. * * Extend this class to refine existing API models. If you want to model new APIs, - * extend `HTTP::CookieWrite::Range` instead. + * extend `Cookie::Range` instead. */ -class CookieWrite extends DataFlow::Node { - CookieWrite::Range range; +class Cookie extends DataFlow::Node { + Cookie::Range range; - CookieWrite() { this = range } + Cookie() { this = range } /** - * Gets the argument, if any, specifying the raw cookie header. + * Holds if this cookie is secure. */ - DataFlow::Node getHeaderArg() { result = range.getHeaderArg() } + predicate isSecure() { range.isSecure() } /** - * Gets the argument, if any, specifying the cookie name. + * Holds if this cookie is HttpOnly. */ - DataFlow::Node getNameArg() { result = range.getNameArg() } + predicate isHttpOnly() { range.isHttpOnly() } /** - * Gets the argument, if any, specifying the cookie value. + * Holds if the cookie is SameSite */ - DataFlow::Node getValueArg() { result = range.getValueArg() } + predicate isSameSite() { range.isSameSite() } } /** Provides a class for modeling new cookie writes on HTTP responses. */ -module CookieWrite { +module Cookie { /** * A data-flow node that sets a cookie in an HTTP response. * - * Note: we don't require that this redirect must be sent to a client (a kind of - * "if a tree falls in a forest and nobody hears it" situation). - * * Extend this class to model new APIs. If you want to refine existing API models, - * extend `HttpResponse` instead. + * extend `Cookie` instead. */ abstract class Range extends DataFlow::Node { /** - * Gets the argument, if any, specifying the raw cookie header. + * Holds if this cookie is secure. */ - abstract DataFlow::Node getHeaderArg(); + abstract predicate isSecure(); /** - * Gets the argument, if any, specifying the cookie name. + * Holds if this cookie is HttpOnly. */ - abstract DataFlow::Node getNameArg(); + abstract predicate isHttpOnly(); /** - * Gets the argument, if any, specifying the cookie value. + * Holds if the cookie is SameSite. */ - abstract DataFlow::Node getValueArg(); + abstract predicate isSameSite(); } } diff --git a/python/ql/src/experimental/semmle/python/CookieHeader.qll b/python/ql/src/experimental/semmle/python/CookieHeader.qll new file mode 100644 index 00000000000..610fa311310 --- /dev/null +++ b/python/ql/src/experimental/semmle/python/CookieHeader.qll @@ -0,0 +1,26 @@ +/** + * Temporary: provides a class to extend current cookies to header declarations + */ + +import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking +import experimental.semmle.python.Concepts + +class CookieHeader extends HeaderDeclaration, Cookie::Range { + CookieHeader() { + this instanceof HeaderDeclaration and this.getNameArg().asExpr().(Str_).getS() = "Set-Cookie" + } + + override predicate isSecure() { + this.getValueArg().asExpr().(Str_).getS().regexpMatch(".*; *Secure;.*") + } + + override predicate isHttpOnly() { + this.getValueArg().asExpr().(Str_).getS().regexpMatch(".*; *HttpOnly;.*") + } + + override predicate isSameSite() { + this.getValueArg().asExpr().(Str_).getS().regexpMatch(".*; *SameSite=(Strict|Lax);.*") + } +} diff --git a/python/ql/src/experimental/semmle/python/frameworks/Django.qll b/python/ql/src/experimental/semmle/python/frameworks/Django.qll index 1a3c5c1cf10..fb6762d3dc3 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Django.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Django.qll @@ -87,15 +87,24 @@ private module PrivateDjango { override DataFlow::Node getValueArg() { result = headerInput } } - class DjangoSetCookieCall extends DataFlow::CallCfgNode, - ExperimentalHTTP::CookieWrite::Range { + class DjangoSetCookieCall extends DataFlow::CallCfgNode, Cookie::Range { DjangoSetCookieCall() { this = baseClassRef().getMember("set_cookie").getACall() } - override DataFlow::Node getHeaderArg() { none() } + override predicate isSecure() { + DataFlow::exprNode(any(True t)) + .(DataFlow::LocalSourceNode) + .flowsTo(this.getArgByName("secure")) + } - override DataFlow::Node getNameArg() { result = this.getArg(0) } + override predicate isHttpOnly() { + DataFlow::exprNode(any(True t)) + .(DataFlow::LocalSourceNode) + .flowsTo(this.getArgByName("httponly")) + } - override DataFlow::Node getValueArg() { result = this.getArg(1) } + override predicate isSameSite() { + this.getArgByName("samesite").asExpr().(Str_).getS() in ["Strict", "Lax"] + } } } } diff --git a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll index 2a2cc68fe84..614e0738bcc 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll @@ -82,8 +82,8 @@ module ExperimentalFlask { override DataFlow::Node getValueArg() { result.asExpr() = item.getValue() } } - class DjangoSetCookieCall extends DataFlow::CallCfgNode, ExperimentalHTTP::CookieWrite::Range { - DjangoSetCookieCall() { + class FlaskSetCookieCall extends DataFlow::CallCfgNode, Cookie::Range { + FlaskSetCookieCall() { this = [Flask::Response::classRef(), flaskMakeResponse()] .getReturn() @@ -91,10 +91,20 @@ module ExperimentalFlask { .getACall() } - override DataFlow::Node getHeaderArg() { none() } + override predicate isSecure() { + DataFlow::exprNode(any(True t)) + .(DataFlow::LocalSourceNode) + .flowsTo(this.getArgByName("secure")) + } - override DataFlow::Node getNameArg() { result = this.getArg(0) } + override predicate isHttpOnly() { + DataFlow::exprNode(any(True t)) + .(DataFlow::LocalSourceNode) + .flowsTo(this.getArgByName("httponly")) + } - override DataFlow::Node getValueArg() { result = this.getArg(1) } + override predicate isSameSite() { + this.getArgByName("samesite").asExpr().(Str_).getS() in ["Strict", "Lax"] + } } } From 0f2b81e0d2ae3ed0b56763870d0f7787696ae54e Mon Sep 17 00:00:00 2001 From: jorgectf Date: Thu, 28 Oct 2021 09:24:47 +0200 Subject: [PATCH 0010/1618] Polish tests --- .../query-tests/Security/CWE-614/django_bad.py | 6 ++++-- .../query-tests/Security/CWE-614/django_good.py | 5 +++-- .../query-tests/Security/CWE-614/flask_bad.py | 12 +++--------- .../query-tests/Security/CWE-614/flask_good.py | 7 ++++--- 4 files changed, 14 insertions(+), 16 deletions(-) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py b/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py index 02752d32f99..340291a6b9c 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py @@ -3,11 +3,13 @@ import django.http def django_response(request): resp = django.http.HttpResponse() - resp.set_cookie("name", "value", secure=None) + resp.set_cookie("name", "value", secure=False, + httponly=False, samesite='None') return resp def django_response(request): resp = django.http.HttpResponse() - resp.set_cookie("name", "value", secure=False) + resp.set_cookie("name", "value", secure=False, + httponly=False, samesite='None') return resp diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/django_good.py b/python/ql/test/experimental/query-tests/Security/CWE-614/django_good.py index ebf16236de2..7476971cbb5 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/django_good.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/django_good.py @@ -3,13 +3,14 @@ import django.http def django_response(request): resp = django.http.HttpResponse() - resp['Set-Cookie'] = "name=value; Secure;" + resp['Set-Cookie'] = "name=value; Secure; HttpOnly; SameSite=Lax;" return resp def django_response(request): resp = django.http.HttpResponse() - resp.set_cookie("name", "value", secure=True) + resp.set_cookie("name", "value", secure=True, + httponly=True, samesite='Lax') return resp diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py index 7c7d6e8acd0..f32d28a6f65 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py @@ -6,14 +6,8 @@ app = Flask(__name__) @app.route("/false") def false(): resp = make_response() - resp.set_cookie("name", value="value", secure=False) - return resp - - -@app.route("/none") -def none(): - resp = make_response() - resp.set_cookie("name", value="value", secure=None) + resp.set_cookie("name", value="value", secure=False, + httponly=False, samesite='None') return resp @@ -27,7 +21,7 @@ def flask_Response(): @app.route("/flask_make_response") def flask_make_response(): resp = make_response("hello") - resp.headers['Set-Cookie'] = "name=value;" + resp.headers['Set-Cookie'] = "name=value; SameSite=None;" return resp # if __name__ == "__main__": diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py index 05ee3f28657..5b9f83e1a63 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py @@ -6,21 +6,22 @@ app = Flask(__name__) @app.route("/true") def true(): resp = make_response() - resp.set_cookie("name", value="value", secure=True) + resp.set_cookie("name", value="value", secure=True, + httponly=True, samesite='Lax') return resp @app.route("/flask_Response") def flask_Response(): resp = Response() - resp.headers['Set-Cookie'] = "name=value; Secure;" + resp.headers['Set-Cookie'] = "name=value; Secure; HttpOnly; SameSite=Lax;" return resp @app.route("/flask_make_response") def flask_make_response(): resp = make_response("hello") - resp.headers['Set-Cookie'] = "name=value; Secure;" + resp.headers['Set-Cookie'] = "name=value; Secure; HttpOnly; SameSite=Lax;" return resp From 5dc1ad6f8ab9e3c656e5faac12e5b918a54ac730 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Thu, 28 Oct 2021 09:25:47 +0200 Subject: [PATCH 0011/1618] Polish `.ql` --- .../src/experimental/Security/CWE-614/InsecureCookie.qhelp | 2 +- .../ql/src/experimental/Security/CWE-614/InsecureCookie.ql | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp index ab5e3031629..97df2e49e13 100644 --- a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp +++ b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp @@ -23,4 +23,4 @@ secure flag and the second adds the secure flag in the cookie's raw value.

  • PortSwigger: TLS cookie without secure flag set.
  • - \ No newline at end of file + diff --git a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql index bf0ff22d45e..ee22243e5c3 100644 --- a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql +++ b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.ql @@ -13,15 +13,16 @@ import python import semmle.python.dataflow.new.DataFlow import experimental.semmle.python.Concepts +import experimental.semmle.python.CookieHeader from Cookie cookie, string alert where - cookie.isSecure() and + not cookie.isSecure() and alert = "secure" or not cookie.isHttpOnly() and alert = "httponly" or - cookie.isSameSite() and + not cookie.isSameSite() and alert = "samesite" select cookie, "Cookie is added without the ", alert, " flag properly set." From 129edd605ea7092fa3d309b3f0e322f983d69b3e Mon Sep 17 00:00:00 2001 From: jorgectf Date: Thu, 28 Oct 2021 09:25:56 +0200 Subject: [PATCH 0012/1618] Update `.expected` --- .../Security/CWE-614/InsecureCookie.expected | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected b/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected index 5c157a11976..a04ad9cdafe 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected @@ -1,6 +1,21 @@ -| django_bad.py:6:5:6:49 | Attribute() | Cookie is added to response without the 'secure' flag being set. | -| django_bad.py:12:5:12:50 | Attribute() | Cookie is added to response without the 'secure' flag being set. | -| flask_bad.py:9:5:9:56 | Attribute() | Cookie is added to response without the 'secure' flag being set. | -| flask_bad.py:16:5:16:55 | Attribute() | Cookie is added to response without the 'secure' flag being set. | -| flask_bad.py:23:5:23:30 | Subscript | Cookie is added to response without the 'secure' flag being set. | -| flask_bad.py:30:5:30:30 | Subscript | Cookie is added to response without the 'secure' flag being set. | +| django_bad.py:6:5:7:52 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | +| django_bad.py:6:5:7:52 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | +| django_bad.py:6:5:7:52 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | +| django_bad.py:13:5:14:52 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | +| django_bad.py:13:5:14:52 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | +| django_bad.py:13:5:14:52 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | +| django_good.py:19:5:19:44 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | +| django_good.py:19:5:19:44 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | +| django_good.py:19:5:19:44 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | +| flask_bad.py:9:5:10:52 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | +| flask_bad.py:9:5:10:52 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | +| flask_bad.py:9:5:10:52 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | +| flask_bad.py:17:5:17:30 | ControlFlowNode for Subscript | Cookie is added without the | httponly | flag properly set. | +| flask_bad.py:17:5:17:30 | ControlFlowNode for Subscript | Cookie is added without the | samesite | flag properly set. | +| flask_bad.py:17:5:17:30 | ControlFlowNode for Subscript | Cookie is added without the | secure | flag properly set. | +| flask_bad.py:24:5:24:30 | ControlFlowNode for Subscript | Cookie is added without the | httponly | flag properly set. | +| flask_bad.py:24:5:24:30 | ControlFlowNode for Subscript | Cookie is added without the | samesite | flag properly set. | +| flask_bad.py:24:5:24:30 | ControlFlowNode for Subscript | Cookie is added without the | secure | flag properly set. | +| flask_good.py:31:5:31:57 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | +| flask_good.py:31:5:31:57 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | +| flask_good.py:31:5:31:57 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | From cf9e9f9dd4b0ffc99d169d910e914cef78725bae Mon Sep 17 00:00:00 2001 From: jorgectf Date: Thu, 28 Oct 2021 10:28:45 +0200 Subject: [PATCH 0013/1618] Add cookie injection query missing proper tests --- .../Security/CWE-614/CookieInjection.ql | 28 +++++++++++++ .../experimental/semmle/python/Concepts.qll | 20 ++++++++++ .../semmle/python/CookieHeader.qll | 18 +++++++-- .../semmle/python/frameworks/Django.qll | 4 ++ .../semmle/python/frameworks/Flask.qll | 4 ++ .../security/injection/CookieInjection.qll | 40 +++++++++++++++++++ .../query-tests/Security/CWE-614/flask_bad.py | 2 +- 7 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 python/ql/src/experimental/Security/CWE-614/CookieInjection.ql create mode 100644 python/ql/src/experimental/semmle/python/security/injection/CookieInjection.qll diff --git a/python/ql/src/experimental/Security/CWE-614/CookieInjection.ql b/python/ql/src/experimental/Security/CWE-614/CookieInjection.ql new file mode 100644 index 00000000000..e97ff962919 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-614/CookieInjection.ql @@ -0,0 +1,28 @@ +/** + * @name Failure to use secure cookies + * @description Insecure cookies may be sent in cleartext, which makes them vulnerable to + * interception. + * @kind problem + * @problem.severity error + * @id py/insecure-cookie + * @tags security + * external/cwe/cwe-614 + */ + +// determine precision above +import python +import semmle.python.dataflow.new.DataFlow +import experimental.semmle.python.Concepts +import experimental.semmle.python.CookieHeader +import experimental.semmle.python.security.injection.CookieInjection + +from + CookieInjectionFlowConfig config, DataFlow::PathNode source, DataFlow::PathNode sink, + string insecure +where + config.hasFlowPath(source, sink) and + if exists(sink.getNode().(CookieSink)) + then insecure = "and it's " + sink.getNode().(CookieSink).getFlag() + " flag is not properly set" + else insecure = "" +select sink.getNode(), "Cookie is constructed from a", source.getNode(), "user-supplied input", + insecure diff --git a/python/ql/src/experimental/semmle/python/Concepts.qll b/python/ql/src/experimental/semmle/python/Concepts.qll index b6a15cb025b..64aa755d9cf 100644 --- a/python/ql/src/experimental/semmle/python/Concepts.qll +++ b/python/ql/src/experimental/semmle/python/Concepts.qll @@ -322,6 +322,16 @@ class Cookie extends DataFlow::Node { * Holds if the cookie is SameSite */ predicate isSameSite() { range.isSameSite() } + + /** + * Gets the argument containing the header name. + */ + DataFlow::Node getName() { result = range.getName() } + + /** + * Gets the argument containing the header value. + */ + DataFlow::Node getValue() { result = range.getValue() } } /** Provides a class for modeling new cookie writes on HTTP responses. */ @@ -347,5 +357,15 @@ module Cookie { * Holds if the cookie is SameSite. */ abstract predicate isSameSite(); + + /** + * Gets the argument containing the header name. + */ + abstract DataFlow::Node getName(); + + /** + * Gets the argument containing the header value. + */ + abstract DataFlow::Node getValue(); } } diff --git a/python/ql/src/experimental/semmle/python/CookieHeader.qll b/python/ql/src/experimental/semmle/python/CookieHeader.qll index 610fa311310..c7779aadd80 100644 --- a/python/ql/src/experimental/semmle/python/CookieHeader.qll +++ b/python/ql/src/experimental/semmle/python/CookieHeader.qll @@ -9,18 +9,28 @@ import experimental.semmle.python.Concepts class CookieHeader extends HeaderDeclaration, Cookie::Range { CookieHeader() { - this instanceof HeaderDeclaration and this.getNameArg().asExpr().(Str_).getS() = "Set-Cookie" + this instanceof HeaderDeclaration and + this.(HeaderDeclaration).getNameArg().asExpr().(Str_).getS() = "Set-Cookie" } override predicate isSecure() { - this.getValueArg().asExpr().(Str_).getS().regexpMatch(".*; *Secure;.*") + this.(HeaderDeclaration).getValueArg().asExpr().(Str_).getS().regexpMatch(".*; *Secure;.*") } override predicate isHttpOnly() { - this.getValueArg().asExpr().(Str_).getS().regexpMatch(".*; *HttpOnly;.*") + this.(HeaderDeclaration).getValueArg().asExpr().(Str_).getS().regexpMatch(".*; *HttpOnly;.*") } override predicate isSameSite() { - this.getValueArg().asExpr().(Str_).getS().regexpMatch(".*; *SameSite=(Strict|Lax);.*") + this.(HeaderDeclaration) + .getValueArg() + .asExpr() + .(Str_) + .getS() + .regexpMatch(".*; *SameSite=(Strict|Lax);.*") } + + override DataFlow::Node getName() { result = this.(HeaderDeclaration).getValueArg() } + + override DataFlow::Node getValue() { result = this.(HeaderDeclaration).getValueArg() } } diff --git a/python/ql/src/experimental/semmle/python/frameworks/Django.qll b/python/ql/src/experimental/semmle/python/frameworks/Django.qll index fb6762d3dc3..ba99ddaa800 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Django.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Django.qll @@ -90,6 +90,10 @@ private module PrivateDjango { class DjangoSetCookieCall extends DataFlow::CallCfgNode, Cookie::Range { DjangoSetCookieCall() { this = baseClassRef().getMember("set_cookie").getACall() } + override DataFlow::Node getName() { result = this.getArg(0) } + + override DataFlow::Node getValue() { result = this.getArgByName("value") } + override predicate isSecure() { DataFlow::exprNode(any(True t)) .(DataFlow::LocalSourceNode) diff --git a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll index 614e0738bcc..b93e6713846 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll @@ -91,6 +91,10 @@ module ExperimentalFlask { .getACall() } + override DataFlow::Node getName() { result = this.getArg(0) } + + override DataFlow::Node getValue() { result = this.getArgByName("value") } + override predicate isSecure() { DataFlow::exprNode(any(True t)) .(DataFlow::LocalSourceNode) diff --git a/python/ql/src/experimental/semmle/python/security/injection/CookieInjection.qll b/python/ql/src/experimental/semmle/python/security/injection/CookieInjection.qll new file mode 100644 index 00000000000..41f7c2af7d3 --- /dev/null +++ b/python/ql/src/experimental/semmle/python/security/injection/CookieInjection.qll @@ -0,0 +1,40 @@ +import python +import experimental.semmle.python.Concepts +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking +import semmle.python.dataflow.new.RemoteFlowSources + +class CookieSink extends DataFlow::Node { + string flag; + + CookieSink() { + exists(Cookie cookie | + this in [cookie.getName(), cookie.getValue()] and + ( + not cookie.isSecure() and + flag = "secure" + or + not cookie.isHttpOnly() and + flag = "httponly" + or + not cookie.isSameSite() and + flag = "samesite" + ) + ) + } + + string getFlag() { result = flag } +} + +/** + * A taint-tracking configuration for detecting Cookie injections. + */ +class CookieInjectionFlowConfig extends TaintTracking::Configuration { + CookieInjectionFlowConfig() { this = "CookieInjectionFlowConfig" } + + override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { + exists(Cookie c | sink in [c.getName(), c.getValue()]) + } +} diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py index f32d28a6f65..fc0177e3012 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py @@ -6,7 +6,7 @@ app = Flask(__name__) @app.route("/false") def false(): resp = make_response() - resp.set_cookie("name", value="value", secure=False, + resp.set_cookie(request.args["name"], value=request.args["value"], secure=False, httponly=False, samesite='None') return resp From 4cb78ac654981ba68960bb13352da99b9590bc1c Mon Sep 17 00:00:00 2001 From: jorgectf Date: Fri, 5 Nov 2021 20:08:37 +0100 Subject: [PATCH 0014/1618] Fix typo --- python/ql/src/experimental/Security/CWE-614/CookieInjection.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/experimental/Security/CWE-614/CookieInjection.ql b/python/ql/src/experimental/Security/CWE-614/CookieInjection.ql index e97ff962919..b4a880e9a58 100644 --- a/python/ql/src/experimental/Security/CWE-614/CookieInjection.ql +++ b/python/ql/src/experimental/Security/CWE-614/CookieInjection.ql @@ -22,7 +22,7 @@ from where config.hasFlowPath(source, sink) and if exists(sink.getNode().(CookieSink)) - then insecure = "and it's " + sink.getNode().(CookieSink).getFlag() + " flag is not properly set" + then insecure = "and its " + sink.getNode().(CookieSink).getFlag() + " flag is not properly set" else insecure = "" select sink.getNode(), "Cookie is constructed from a", source.getNode(), "user-supplied input", insecure From d7a79469e62e8cc98e2ccff0b6f53b2f43a0058e Mon Sep 17 00:00:00 2001 From: jorgectf Date: Fri, 5 Nov 2021 20:08:52 +0100 Subject: [PATCH 0015/1618] Improve tests --- .../Security/CWE-614/django_bad.py | 17 ++++++++++++-- .../query-tests/Security/CWE-614/flask_bad.py | 23 +++++++++++++------ .../Security/CWE-614/flask_good.py | 7 ------ 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py b/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py index 340291a6b9c..6f1916930e5 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/django_bad.py @@ -8,8 +8,21 @@ def django_response(request): return resp +def django_response(): + response = django.http.HttpResponse() + response['Set-Cookie'] = "name=value; SameSite=None;" + return response + + def django_response(request): resp = django.http.HttpResponse() - resp.set_cookie("name", "value", secure=False, - httponly=False, samesite='None') + resp.set_cookie(django.http.request.GET.get("name"), + django.http.request.GET.get("value"), + secure=False, httponly=False, samesite='None') return resp + + +def django_response(): + response = django.http.HttpResponse() + response['Set-Cookie'] = f"{django.http.request.GET.get('name')}={django.http.request.GET.get('value')}; SameSite=None;" + return response diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py index fc0177e3012..740070a7b53 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py @@ -3,6 +3,21 @@ from flask import Flask, request, make_response, Response app = Flask(__name__) +@app.route("/false") +def false(): + resp = make_response() + resp.set_cookie("name", value="value", secure=False, + httponly=False, samesite='None') + return resp + + +@app.route("/flask_Response") +def flask_Response(): + resp = Response() + resp.headers['Set-Cookie'] = "name=value; SameSite=None;" + return resp + + @app.route("/false") def false(): resp = make_response() @@ -14,15 +29,9 @@ def false(): @app.route("/flask_Response") def flask_Response(): resp = Response() - resp.headers['Set-Cookie'] = "name=value;" + resp.headers['Set-Cookie'] = f"{request.args['name']}={request.args['value']}; SameSite=None;" return resp -@app.route("/flask_make_response") -def flask_make_response(): - resp = make_response("hello") - resp.headers['Set-Cookie'] = "name=value; SameSite=None;" - return resp - # if __name__ == "__main__": # app.run(debug=True) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py index 5b9f83e1a63..724f8de8289 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py @@ -18,13 +18,6 @@ def flask_Response(): return resp -@app.route("/flask_make_response") -def flask_make_response(): - resp = make_response("hello") - resp.headers['Set-Cookie'] = "name=value; Secure; HttpOnly; SameSite=Lax;" - return resp - - def indeterminate(secure): resp = make_response() resp.set_cookie("name", value="value", secure=secure) From b3258ce20f64abf22d72282ed28bcaffeca007db Mon Sep 17 00:00:00 2001 From: jorgectf Date: Fri, 5 Nov 2021 20:12:05 +0100 Subject: [PATCH 0016/1618] Add `CookieInjection` sample and `.qhelp` --- .../Security/CWE-614/CookieInjection.py | 16 +++++++++++ .../Security/CWE-614/CookieInjection.qhelp | 28 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 python/ql/src/experimental/Security/CWE-614/CookieInjection.py create mode 100644 python/ql/src/experimental/Security/CWE-614/CookieInjection.qhelp diff --git a/python/ql/src/experimental/Security/CWE-614/CookieInjection.py b/python/ql/src/experimental/Security/CWE-614/CookieInjection.py new file mode 100644 index 00000000000..55d211bafc1 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-614/CookieInjection.py @@ -0,0 +1,16 @@ +from flask import request, make_response + + +@app.route("/1") +def true(): + resp = make_response() + resp.set_cookie(request.args["name"], + value=request.args["name"]) + return resp + + +@app.route("/2") +def flask_make_response(): + resp = make_response("hello") + resp.headers['Set-Cookie'] = f"{request.args['name']}={request.args['name']};" + return resp diff --git a/python/ql/src/experimental/Security/CWE-614/CookieInjection.qhelp b/python/ql/src/experimental/Security/CWE-614/CookieInjection.qhelp new file mode 100644 index 00000000000..4b5ec11726c --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-614/CookieInjection.qhelp @@ -0,0 +1,28 @@ + + + + +

    Constructing cookies from user input may allow an attacker to perform a Cookie Poisoning attack. +It is possible, however, to perform other parameter-like attacks through cookie poisoning techniques, +such as SQL Injection, Directory Traversal, or Stealth Commanding, etc. Additionally, +cookie injection may relate to attempts to perform Access of Administrative Interface. +

    +
    + + +

    Do not use raw user input to construct cookies.

    +
    + + +

    This example shows two ways of adding a cookie to a Flask response. The first way uses set_cookie's +and the second sets a cookie's raw value through a header, both using user-supplied input.

    + +
    + + +
  • Imperva: Cookie injection.
  • +
    + +
    From cf47e8eb9ce3d6a33e38c905f70c06c6dbea754e Mon Sep 17 00:00:00 2001 From: jorgectf Date: Fri, 5 Nov 2021 20:12:35 +0100 Subject: [PATCH 0017/1618] Fix endpoints' naming --- .../src/experimental/Security/CWE-614/InsecureCookie.py | 6 +++--- .../query-tests/Security/CWE-614/flask_bad.py | 8 ++++---- .../query-tests/Security/CWE-614/flask_good.py | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.py b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.py index 54bbeff7d12..4087830f7eb 100644 --- a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.py +++ b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.py @@ -1,15 +1,15 @@ from flask import Flask, request, make_response, Response -@app.route("/true") +@app.route("/1") def true(): resp = make_response() resp.set_cookie("name", value="value", secure=True) return resp -@app.route("/flask_make_response") +@app.route("/2") def flask_make_response(): resp = make_response("hello") resp.headers['Set-Cookie'] = "name=value; Secure;" - return resp \ No newline at end of file + return resp diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py index 740070a7b53..431df5eb4d8 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_bad.py @@ -3,7 +3,7 @@ from flask import Flask, request, make_response, Response app = Flask(__name__) -@app.route("/false") +@app.route("/1") def false(): resp = make_response() resp.set_cookie("name", value="value", secure=False, @@ -11,14 +11,14 @@ def false(): return resp -@app.route("/flask_Response") +@app.route("/2") def flask_Response(): resp = Response() resp.headers['Set-Cookie'] = "name=value; SameSite=None;" return resp -@app.route("/false") +@app.route("/3") def false(): resp = make_response() resp.set_cookie(request.args["name"], value=request.args["value"], secure=False, @@ -26,7 +26,7 @@ def false(): return resp -@app.route("/flask_Response") +@app.route("/4") def flask_Response(): resp = Response() resp.headers['Set-Cookie'] = f"{request.args['name']}={request.args['value']}; SameSite=None;" diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py index 724f8de8289..4cb23bd84b3 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/flask_good.py @@ -3,7 +3,7 @@ from flask import Flask, request, make_response, Response app = Flask(__name__) -@app.route("/true") +@app.route("/1") def true(): resp = make_response() resp.set_cookie("name", value="value", secure=True, @@ -11,7 +11,7 @@ def true(): return resp -@app.route("/flask_Response") +@app.route("/2") def flask_Response(): resp = Response() resp.headers['Set-Cookie'] = "name=value; Secure; HttpOnly; SameSite=Lax;" From a420e6e18dae60e7013ad314d0df8e78eb840c45 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Fri, 5 Nov 2021 20:12:56 +0100 Subject: [PATCH 0018/1618] Add `CookieInjection.qlref` --- .../query-tests/Security/CWE-614/CookieInjection.qlref | 1 + 1 file changed, 1 insertion(+) create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.qlref diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.qlref b/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.qlref new file mode 100644 index 00000000000..5710a3322de --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-614/CookieInjection.ql From 86aac7c215408e41389866da890842052a39fcfd Mon Sep 17 00:00:00 2001 From: jorgectf Date: Fri, 5 Nov 2021 20:13:12 +0100 Subject: [PATCH 0019/1618] Add/Update `.expected` files. --- .../Security/CWE-614/CookieInjection.expected | 24 +++++++++++++++++ .../Security/CWE-614/InsecureCookie.expected | 27 ++++++++++++------- 2 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected new file mode 100644 index 00000000000..fc368c95323 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected @@ -0,0 +1,24 @@ +| django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | Cookie is constructed from a | django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | user-supplied input | and its httponly flag is not properly set | +| django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | Cookie is constructed from a | django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | user-supplied input | and its samesite flag is not properly set | +| django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | Cookie is constructed from a | django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | user-supplied input | and its secure flag is not properly set | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | user-supplied input | and its httponly flag is not properly set | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | user-supplied input | and its samesite flag is not properly set | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | user-supplied input | and its secure flag is not properly set | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a | django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | user-supplied input | and its httponly flag is not properly set | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a | django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | user-supplied input | and its samesite flag is not properly set | +| django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a | django_bad.py:27:71:27:106 | ControlFlowNode for Attribute() | user-supplied input | and its secure flag is not properly set | +| flask_bad.py:24:21:24:40 | ControlFlowNode for Subscript | Cookie is constructed from a | flask_bad.py:24:21:24:27 | ControlFlowNode for request | user-supplied input | and its httponly flag is not properly set | +| flask_bad.py:24:21:24:40 | ControlFlowNode for Subscript | Cookie is constructed from a | flask_bad.py:24:21:24:27 | ControlFlowNode for request | user-supplied input | and its samesite flag is not properly set | +| flask_bad.py:24:21:24:40 | ControlFlowNode for Subscript | Cookie is constructed from a | flask_bad.py:24:21:24:27 | ControlFlowNode for request | user-supplied input | and its secure flag is not properly set | +| flask_bad.py:24:49:24:69 | ControlFlowNode for Subscript | Cookie is constructed from a | flask_bad.py:24:21:24:27 | ControlFlowNode for request | user-supplied input | and its httponly flag is not properly set | +| flask_bad.py:24:49:24:69 | ControlFlowNode for Subscript | Cookie is constructed from a | flask_bad.py:24:21:24:27 | ControlFlowNode for request | user-supplied input | and its samesite flag is not properly set | +| flask_bad.py:24:49:24:69 | ControlFlowNode for Subscript | Cookie is constructed from a | flask_bad.py:24:21:24:27 | ControlFlowNode for request | user-supplied input | and its secure flag is not properly set | +| flask_bad.py:24:49:24:69 | ControlFlowNode for Subscript | Cookie is constructed from a | flask_bad.py:24:49:24:55 | ControlFlowNode for request | user-supplied input | and its httponly flag is not properly set | +| flask_bad.py:24:49:24:69 | ControlFlowNode for Subscript | Cookie is constructed from a | flask_bad.py:24:49:24:55 | ControlFlowNode for request | user-supplied input | and its samesite flag is not properly set | +| flask_bad.py:24:49:24:69 | ControlFlowNode for Subscript | Cookie is constructed from a | flask_bad.py:24:49:24:55 | ControlFlowNode for request | user-supplied input | and its secure flag is not properly set | +| flask_bad.py:32:34:32:98 | ControlFlowNode for Fstring | Cookie is constructed from a | flask_bad.py:32:37:32:43 | ControlFlowNode for request | user-supplied input | and its httponly flag is not properly set | +| flask_bad.py:32:34:32:98 | ControlFlowNode for Fstring | Cookie is constructed from a | flask_bad.py:32:37:32:43 | ControlFlowNode for request | user-supplied input | and its samesite flag is not properly set | +| flask_bad.py:32:34:32:98 | ControlFlowNode for Fstring | Cookie is constructed from a | flask_bad.py:32:37:32:43 | ControlFlowNode for request | user-supplied input | and its secure flag is not properly set | +| flask_bad.py:32:34:32:98 | ControlFlowNode for Fstring | Cookie is constructed from a | flask_bad.py:32:60:32:66 | ControlFlowNode for request | user-supplied input | and its httponly flag is not properly set | +| flask_bad.py:32:34:32:98 | ControlFlowNode for Fstring | Cookie is constructed from a | flask_bad.py:32:60:32:66 | ControlFlowNode for request | user-supplied input | and its samesite flag is not properly set | +| flask_bad.py:32:34:32:98 | ControlFlowNode for Fstring | Cookie is constructed from a | flask_bad.py:32:60:32:66 | ControlFlowNode for request | user-supplied input | and its secure flag is not properly set | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected b/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected index a04ad9cdafe..1ece5048db8 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/InsecureCookie.expected @@ -1,9 +1,15 @@ | django_bad.py:6:5:7:52 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | | django_bad.py:6:5:7:52 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | | django_bad.py:6:5:7:52 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | -| django_bad.py:13:5:14:52 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | -| django_bad.py:13:5:14:52 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | -| django_bad.py:13:5:14:52 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | +| django_bad.py:13:5:13:26 | ControlFlowNode for Subscript | Cookie is added without the | httponly | flag properly set. | +| django_bad.py:13:5:13:26 | ControlFlowNode for Subscript | Cookie is added without the | samesite | flag properly set. | +| django_bad.py:13:5:13:26 | ControlFlowNode for Subscript | Cookie is added without the | secure | flag properly set. | +| django_bad.py:19:5:21:66 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | +| django_bad.py:19:5:21:66 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | +| django_bad.py:19:5:21:66 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | +| django_bad.py:27:5:27:26 | ControlFlowNode for Subscript | Cookie is added without the | httponly | flag properly set. | +| django_bad.py:27:5:27:26 | ControlFlowNode for Subscript | Cookie is added without the | samesite | flag properly set. | +| django_bad.py:27:5:27:26 | ControlFlowNode for Subscript | Cookie is added without the | secure | flag properly set. | | django_good.py:19:5:19:44 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | | django_good.py:19:5:19:44 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | | django_good.py:19:5:19:44 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | @@ -13,9 +19,12 @@ | flask_bad.py:17:5:17:30 | ControlFlowNode for Subscript | Cookie is added without the | httponly | flag properly set. | | flask_bad.py:17:5:17:30 | ControlFlowNode for Subscript | Cookie is added without the | samesite | flag properly set. | | flask_bad.py:17:5:17:30 | ControlFlowNode for Subscript | Cookie is added without the | secure | flag properly set. | -| flask_bad.py:24:5:24:30 | ControlFlowNode for Subscript | Cookie is added without the | httponly | flag properly set. | -| flask_bad.py:24:5:24:30 | ControlFlowNode for Subscript | Cookie is added without the | samesite | flag properly set. | -| flask_bad.py:24:5:24:30 | ControlFlowNode for Subscript | Cookie is added without the | secure | flag properly set. | -| flask_good.py:31:5:31:57 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | -| flask_good.py:31:5:31:57 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | -| flask_good.py:31:5:31:57 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | +| flask_bad.py:24:5:25:52 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | +| flask_bad.py:24:5:25:52 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | +| flask_bad.py:24:5:25:52 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | +| flask_bad.py:32:5:32:30 | ControlFlowNode for Subscript | Cookie is added without the | httponly | flag properly set. | +| flask_bad.py:32:5:32:30 | ControlFlowNode for Subscript | Cookie is added without the | samesite | flag properly set. | +| flask_bad.py:32:5:32:30 | ControlFlowNode for Subscript | Cookie is added without the | secure | flag properly set. | +| flask_good.py:23:5:23:57 | ControlFlowNode for Attribute() | Cookie is added without the | httponly | flag properly set. | +| flask_good.py:23:5:23:57 | ControlFlowNode for Attribute() | Cookie is added without the | samesite | flag properly set. | +| flask_good.py:23:5:23:57 | ControlFlowNode for Attribute() | Cookie is added without the | secure | flag properly set. | From 83e3de1fed2ccb90bc16325a4ba940a8feeb3253 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Fri, 5 Nov 2021 21:05:33 +0100 Subject: [PATCH 0020/1618] Polish documentation. --- .../Security/CWE-614/CookieInjection.ql | 7 +++---- .../Security/CWE-614/InsecureCookie.qhelp | 9 +++++++-- .../semmle/python/CookieHeader.qll | 19 ++++++++++++++++++ .../semmle/python/frameworks/Django.qll | 19 ++++++++++++++++++ .../semmle/python/frameworks/Flask.qll | 20 +++++++++++++++++++ 5 files changed, 68 insertions(+), 6 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-614/CookieInjection.ql b/python/ql/src/experimental/Security/CWE-614/CookieInjection.ql index b4a880e9a58..8f7ef99789b 100644 --- a/python/ql/src/experimental/Security/CWE-614/CookieInjection.ql +++ b/python/ql/src/experimental/Security/CWE-614/CookieInjection.ql @@ -1,10 +1,9 @@ /** - * @name Failure to use secure cookies - * @description Insecure cookies may be sent in cleartext, which makes them vulnerable to - * interception. + * @name Construction of a cookie using user-supplied input. + * @description Constructing cookies from user input may allow an attacker to perform a Cookie Poisoning attack. * @kind problem * @problem.severity error - * @id py/insecure-cookie + * @id py/cookie-injection * @tags security * external/cwe/cwe-614 */ diff --git a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp index 97df2e49e13..c76ab17954a 100644 --- a/python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp +++ b/python/ql/src/experimental/Security/CWE-614/InsecureCookie.qhelp @@ -4,12 +4,17 @@ -

    Failing to set the 'secure' flag on a cookie can cause it to be sent in cleartext. -This makes it easier for an attacker to intercept.

    +

    Setting the 'secure' flag on a cookie to False can cause it to be sent in cleartext. +Setting the 'httponly' flag on a cookie to False may allow attackers access it via JavaScript. +Setting the 'samesite' flag on a cookie to 'None' will make the cookie to be sent in third-party +contexts which may be attacker-controlled.

    Always set secure to True or add "; Secure;" to the cookie's raw value.

    +

    Always set httponly to True or add "; HttpOnly;" to the cookie's raw value.

    +

    Always set samesite to Lax or Strict, or add "; SameSite=Lax;", or +"; Samesite=Strict;" to the cookie's raw header value.

    diff --git a/python/ql/src/experimental/semmle/python/CookieHeader.qll b/python/ql/src/experimental/semmle/python/CookieHeader.qll index c7779aadd80..ab6bde4bb82 100644 --- a/python/ql/src/experimental/semmle/python/CookieHeader.qll +++ b/python/ql/src/experimental/semmle/python/CookieHeader.qll @@ -7,6 +7,25 @@ import semmle.python.dataflow.new.DataFlow import semmle.python.dataflow.new.TaintTracking import experimental.semmle.python.Concepts +/** + * Gets a header setting a cookie. + * + * Given the following example: + * + * ```py + * @app.route("/") + * def flask_make_response(): + * resp = make_response("") + * resp.headers['Set-Cookie'] = "name=value; Secure;" + * return resp + * ``` + * + * * `this` would be `resp.headers['Set-Cookie'] = "name=value; Secure;"`. + * * `isSecure()` predicate would succeed. + * * `isHttpOnly()` predicate would fail. + * * `isSameSite()` predicate would fail. + * * `getName()` and `getValue()` results would be `"name=value; Secure;"`. + */ class CookieHeader extends HeaderDeclaration, Cookie::Range { CookieHeader() { this instanceof HeaderDeclaration and diff --git a/python/ql/src/experimental/semmle/python/frameworks/Django.qll b/python/ql/src/experimental/semmle/python/frameworks/Django.qll index ba99ddaa800..7fb7b65989e 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Django.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Django.qll @@ -87,6 +87,25 @@ private module PrivateDjango { override DataFlow::Node getValueArg() { result = headerInput } } + /** + * Gets a call to `set_cookie()`. + * + * Given the following example: + * + * ```py + * def django_response(request): + * resp = django.http.HttpResponse() + * resp.set_cookie("name", "value", secure=True, httponly=True, samesite='Lax') + * return resp + * ``` + * + * * `this` would be `resp.set_cookie("name", "value", secure=False, httponly=False, samesite='None')`. + * * `getName()`'s result would be `"name"`. + * * `getValue()`'s result would be `"value"`. + * * `isSecure()` predicate would succeed. + * * `isHttpOnly()` predicate would succeed. + * * `isSameSite()` predicate would succeed. + */ class DjangoSetCookieCall extends DataFlow::CallCfgNode, Cookie::Range { DjangoSetCookieCall() { this = baseClassRef().getMember("set_cookie").getACall() } diff --git a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll index b93e6713846..c07092ee761 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll @@ -82,6 +82,26 @@ module ExperimentalFlask { override DataFlow::Node getValueArg() { result.asExpr() = item.getValue() } } + /** + * Gets a call to `set_cookie()`. + * + * Given the following example: + * + * ```py + * @app.route("/") + * def false(): + * resp = make_response() + * resp.set_cookie("name", value="value", secure=True, httponly=True, samesite='Lax') + * return resp + * ``` + * + * * `this` would be `resp.set_cookie("name", value="value", secure=False, httponly=False, samesite='None')`. + * * `getName()`'s result would be `"name"`. + * * `getValue()`'s result would be `"value"`. + * * `isSecure()` predicate would succeed. + * * `isHttpOnly()` predicate would succeed. + * * `isSameSite()` predicate would succeed. + */ class FlaskSetCookieCall extends DataFlow::CallCfgNode, Cookie::Range { FlaskSetCookieCall() { this = From e7d649f36dd74321f4588cfd9c3d0e69e5b00ce1 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Tue, 16 Nov 2021 13:54:25 +0100 Subject: [PATCH 0021/1618] Make `Cookie` concept extend `HTTP::Server::CookieWrite` --- .../experimental/semmle/python/Concepts.qll | 35 ++++--------------- .../semmle/python/CookieHeader.qll | 8 +++-- .../semmle/python/frameworks/Django.qll | 6 ++-- .../semmle/python/frameworks/Flask.qll | 6 ++-- .../security/injection/CookieInjection.qll | 4 +-- .../Security/CWE-614/CookieInjection.expected | 3 ++ 6 files changed, 24 insertions(+), 38 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/Concepts.qll b/python/ql/src/experimental/semmle/python/Concepts.qll index 64aa755d9cf..91b1a5f777d 100644 --- a/python/ql/src/experimental/semmle/python/Concepts.qll +++ b/python/ql/src/experimental/semmle/python/Concepts.qll @@ -13,6 +13,7 @@ private import semmle.python.dataflow.new.DataFlow private import semmle.python.dataflow.new.RemoteFlowSources private import semmle.python.dataflow.new.TaintTracking private import experimental.semmle.python.Frameworks +private import semmle.python.Concepts /** Provides classes for modeling log related APIs. */ module LogOutput { @@ -303,35 +304,21 @@ class HeaderDeclaration extends DataFlow::Node { * Extend this class to refine existing API models. If you want to model new APIs, * extend `Cookie::Range` instead. */ -class Cookie extends DataFlow::Node { - Cookie::Range range; - - Cookie() { this = range } - +class Cookie extends HTTP::Server::CookieWrite instanceof Cookie::Range { /** * Holds if this cookie is secure. */ - predicate isSecure() { range.isSecure() } + predicate isSecure() { super.isSecure() } /** * Holds if this cookie is HttpOnly. */ - predicate isHttpOnly() { range.isHttpOnly() } + predicate isHttpOnly() { super.isHttpOnly() } /** * Holds if the cookie is SameSite */ - predicate isSameSite() { range.isSameSite() } - - /** - * Gets the argument containing the header name. - */ - DataFlow::Node getName() { result = range.getName() } - - /** - * Gets the argument containing the header value. - */ - DataFlow::Node getValue() { result = range.getValue() } + predicate isSameSite() { super.isSameSite() } } /** Provides a class for modeling new cookie writes on HTTP responses. */ @@ -342,7 +329,7 @@ module Cookie { * Extend this class to model new APIs. If you want to refine existing API models, * extend `Cookie` instead. */ - abstract class Range extends DataFlow::Node { + abstract class Range extends HTTP::Server::CookieWrite::Range { /** * Holds if this cookie is secure. */ @@ -357,15 +344,5 @@ module Cookie { * Holds if the cookie is SameSite. */ abstract predicate isSameSite(); - - /** - * Gets the argument containing the header name. - */ - abstract DataFlow::Node getName(); - - /** - * Gets the argument containing the header value. - */ - abstract DataFlow::Node getValue(); } } diff --git a/python/ql/src/experimental/semmle/python/CookieHeader.qll b/python/ql/src/experimental/semmle/python/CookieHeader.qll index ab6bde4bb82..2fda527c69f 100644 --- a/python/ql/src/experimental/semmle/python/CookieHeader.qll +++ b/python/ql/src/experimental/semmle/python/CookieHeader.qll @@ -26,7 +26,7 @@ import experimental.semmle.python.Concepts * * `isSameSite()` predicate would fail. * * `getName()` and `getValue()` results would be `"name=value; Secure;"`. */ -class CookieHeader extends HeaderDeclaration, Cookie::Range { +class CookieHeader extends Cookie::Range instanceof HeaderDeclaration { CookieHeader() { this instanceof HeaderDeclaration and this.(HeaderDeclaration).getNameArg().asExpr().(Str_).getS() = "Set-Cookie" @@ -49,7 +49,9 @@ class CookieHeader extends HeaderDeclaration, Cookie::Range { .regexpMatch(".*; *SameSite=(Strict|Lax);.*") } - override DataFlow::Node getName() { result = this.(HeaderDeclaration).getValueArg() } + override DataFlow::Node getNameArg() { result = this.(HeaderDeclaration).getValueArg() } - override DataFlow::Node getValue() { result = this.(HeaderDeclaration).getValueArg() } + override DataFlow::Node getValueArg() { result = this.(HeaderDeclaration).getValueArg() } + + override DataFlow::Node getHeaderArg() { none() } } diff --git a/python/ql/src/experimental/semmle/python/frameworks/Django.qll b/python/ql/src/experimental/semmle/python/frameworks/Django.qll index 7fb7b65989e..11b4665d6c8 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Django.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Django.qll @@ -109,9 +109,9 @@ private module PrivateDjango { class DjangoSetCookieCall extends DataFlow::CallCfgNode, Cookie::Range { DjangoSetCookieCall() { this = baseClassRef().getMember("set_cookie").getACall() } - override DataFlow::Node getName() { result = this.getArg(0) } + override DataFlow::Node getNameArg() { result = this.getArg(0) } - override DataFlow::Node getValue() { result = this.getArgByName("value") } + override DataFlow::Node getValueArg() { result = this.getArgByName("value") } override predicate isSecure() { DataFlow::exprNode(any(True t)) @@ -128,6 +128,8 @@ private module PrivateDjango { override predicate isSameSite() { this.getArgByName("samesite").asExpr().(Str_).getS() in ["Strict", "Lax"] } + + override DataFlow::Node getHeaderArg() { none() } } } } diff --git a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll index c07092ee761..92a019599c0 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll @@ -111,9 +111,9 @@ module ExperimentalFlask { .getACall() } - override DataFlow::Node getName() { result = this.getArg(0) } + override DataFlow::Node getNameArg() { result = this.getArg(0) } - override DataFlow::Node getValue() { result = this.getArgByName("value") } + override DataFlow::Node getValueArg() { result = this.getArgByName("value") } override predicate isSecure() { DataFlow::exprNode(any(True t)) @@ -130,5 +130,7 @@ module ExperimentalFlask { override predicate isSameSite() { this.getArgByName("samesite").asExpr().(Str_).getS() in ["Strict", "Lax"] } + + override DataFlow::Node getHeaderArg() { none() } } } diff --git a/python/ql/src/experimental/semmle/python/security/injection/CookieInjection.qll b/python/ql/src/experimental/semmle/python/security/injection/CookieInjection.qll index 41f7c2af7d3..87f3b1fd76b 100644 --- a/python/ql/src/experimental/semmle/python/security/injection/CookieInjection.qll +++ b/python/ql/src/experimental/semmle/python/security/injection/CookieInjection.qll @@ -9,7 +9,7 @@ class CookieSink extends DataFlow::Node { CookieSink() { exists(Cookie cookie | - this in [cookie.getName(), cookie.getValue()] and + this in [cookie.getNameArg(), cookie.getValueArg()] and ( not cookie.isSecure() and flag = "secure" @@ -35,6 +35,6 @@ class CookieInjectionFlowConfig extends TaintTracking::Configuration { override predicate isSource(DataFlow::Node source) { source instanceof RemoteFlowSource } override predicate isSink(DataFlow::Node sink) { - exists(Cookie c | sink in [c.getName(), c.getValue()]) + exists(Cookie c | sink in [c.getNameArg(), c.getValueArg()]) } } diff --git a/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected index fc368c95323..879b1088002 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-614/CookieInjection.expected @@ -1,6 +1,9 @@ | django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | Cookie is constructed from a | django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | user-supplied input | and its httponly flag is not properly set | | django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | Cookie is constructed from a | django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | user-supplied input | and its samesite flag is not properly set | | django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | Cookie is constructed from a | django_bad.py:19:21:19:55 | ControlFlowNode for Attribute() | user-supplied input | and its secure flag is not properly set | +| django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | Cookie is constructed from a | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | user-supplied input | and its httponly flag is not properly set | +| django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | Cookie is constructed from a | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | user-supplied input | and its samesite flag is not properly set | +| django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | Cookie is constructed from a | django_bad.py:20:21:20:56 | ControlFlowNode for Attribute() | user-supplied input | and its secure flag is not properly set | | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | user-supplied input | and its httponly flag is not properly set | | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | user-supplied input | and its samesite flag is not properly set | | django_bad.py:27:30:27:124 | ControlFlowNode for Fstring | Cookie is constructed from a | django_bad.py:27:33:27:67 | ControlFlowNode for Attribute() | user-supplied input | and its secure flag is not properly set | From 6ecb6d1a1b599104590c11d7e6febbbaf4e06e8b Mon Sep 17 00:00:00 2001 From: jorgectf Date: Tue, 16 Nov 2021 14:59:41 +0100 Subject: [PATCH 0022/1618] Adapt Django and Flask to their main modelings --- .../semmle/python/frameworks/Django.qll | 73 ++++++++++++++++--- .../semmle/python/frameworks/Flask.qll | 23 +++--- 2 files changed, 71 insertions(+), 25 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/Django.qll b/python/ql/src/experimental/semmle/python/frameworks/Django.qll index 11b4665d6c8..1c2d13f76cf 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Django.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Django.qll @@ -9,6 +9,7 @@ private import semmle.python.dataflow.new.DataFlow private import experimental.semmle.python.Concepts private import semmle.python.ApiGraphs import semmle.python.dataflow.new.RemoteFlowSources +private import semmle.python.Concepts private module PrivateDjango { private module django { @@ -32,22 +33,64 @@ private module PrivateDjango { module response { module HttpResponse { API::Node baseClassRef() { - result = response().getMember("HttpResponse").getReturn() + result = response().getMember("HttpResponse") or // Handle `django.http.HttpResponse` alias - result = http().getMember("HttpResponse").getReturn() + result = http().getMember("HttpResponse") } + /** Gets a reference to the `django.http.response.HttpResponse` class. */ + API::Node classRef() { result = baseClassRef().getASubclass*() } + + /** + * A source of instances of `django.http.response.HttpResponse`, extend this class to model new instances. + * + * This can include instantiations of the class, return values from function + * calls, or a special parameter that will be set when functions are called by an external + * library. + * + * Use the predicate `HttpResponse::instance()` to get references to instances of `django.http.response.HttpResponse`. + */ + abstract class InstanceSource extends HTTP::Server::HttpResponse::Range, DataFlow::Node { + } + + /** A direct instantiation of `django.http.response.HttpResponse`. */ + private class ClassInstantiation extends InstanceSource, DataFlow::CallCfgNode { + ClassInstantiation() { this = classRef().getACall() } + + override DataFlow::Node getBody() { + result in [this.getArg(0), this.getArgByName("content")] + } + + // How to support the `headers` argument here? + override DataFlow::Node getMimetypeOrContentTypeArg() { + result in [this.getArg(1), this.getArgByName("content_type")] + } + + override string getMimetypeDefault() { result = "text/html" } + } + + /** Gets a reference to an instance of `django.http.response.HttpResponse`. */ + private DataFlow::TypeTrackingNode instance(DataFlow::TypeTracker t) { + t.start() and + result instanceof InstanceSource + or + exists(DataFlow::TypeTracker t2 | result = instance(t2).track(t2, t)) + } + + /** Gets a reference to an instance of `django.http.response.HttpResponse`. */ + DataFlow::Node instance() { instance(DataFlow::TypeTracker::end()).flowsTo(result) } + /** Gets a reference to a header instance. */ private DataFlow::LocalSourceNode headerInstance(DataFlow::TypeTracker t) { t.start() and ( exists(SubscriptNode subscript | - subscript.getObject() = baseClassRef().getAUse().asCfgNode() and + subscript.getObject() = baseClassRef().getReturn().getAUse().asCfgNode() and result.asCfgNode() = subscript ) or - result.(DataFlow::AttrRead).getObject() = baseClassRef().getAUse() + result.(DataFlow::AttrRead).getObject() = baseClassRef().getReturn().getAUse() ) or exists(DataFlow::TypeTracker t2 | result = headerInstance(t2).track(t2, t)) @@ -106,27 +149,35 @@ private module PrivateDjango { * * `isHttpOnly()` predicate would succeed. * * `isSameSite()` predicate would succeed. */ - class DjangoSetCookieCall extends DataFlow::CallCfgNode, Cookie::Range { - DjangoSetCookieCall() { this = baseClassRef().getMember("set_cookie").getACall() } + class DjangoResponseSetCookieCall extends DataFlow::MethodCallNode, Cookie::Range { + DjangoResponseSetCookieCall() { + this.calls(django::http::response::HttpResponse::instance(), "set_cookie") + } - override DataFlow::Node getNameArg() { result = this.getArg(0) } + override DataFlow::Node getNameArg() { + result in [this.getArg(0), this.getArgByName("key")] + } - override DataFlow::Node getValueArg() { result = this.getArgByName("value") } + override DataFlow::Node getValueArg() { + result in [this.getArg(1), this.getArgByName("value")] + } override predicate isSecure() { DataFlow::exprNode(any(True t)) .(DataFlow::LocalSourceNode) - .flowsTo(this.getArgByName("secure")) + .flowsTo(this.(DataFlow::CallCfgNode).getArgByName("secure")) } override predicate isHttpOnly() { DataFlow::exprNode(any(True t)) .(DataFlow::LocalSourceNode) - .flowsTo(this.getArgByName("httponly")) + .flowsTo(this.(DataFlow::CallCfgNode).getArgByName("httponly")) } override predicate isSameSite() { - this.getArgByName("samesite").asExpr().(Str_).getS() in ["Strict", "Lax"] + this.(DataFlow::CallCfgNode).getArgByName("samesite").asExpr().(Str_).getS() in [ + "Strict", "Lax" + ] } override DataFlow::Node getHeaderArg() { none() } diff --git a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll index 92a019599c0..c07abc0e177 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll @@ -8,6 +8,7 @@ private import semmle.python.frameworks.Flask private import semmle.python.dataflow.new.DataFlow private import experimental.semmle.python.Concepts private import semmle.python.ApiGraphs +private import semmle.python.frameworks.Flask module ExperimentalFlask { /** @@ -102,33 +103,27 @@ module ExperimentalFlask { * * `isHttpOnly()` predicate would succeed. * * `isSameSite()` predicate would succeed. */ - class FlaskSetCookieCall extends DataFlow::CallCfgNode, Cookie::Range { - FlaskSetCookieCall() { - this = - [Flask::Response::classRef(), flaskMakeResponse()] - .getReturn() - .getMember("set_cookie") - .getACall() - } + class FlaskSetCookieCall extends Cookie::Range instanceof Flask::FlaskResponseSetCookieCall { + override DataFlow::Node getNameArg() { result = this.getNameArg() } - override DataFlow::Node getNameArg() { result = this.getArg(0) } - - override DataFlow::Node getValueArg() { result = this.getArgByName("value") } + override DataFlow::Node getValueArg() { result = this.getValueArg() } override predicate isSecure() { DataFlow::exprNode(any(True t)) .(DataFlow::LocalSourceNode) - .flowsTo(this.getArgByName("secure")) + .flowsTo(this.(DataFlow::CallCfgNode).getArgByName("secure")) } override predicate isHttpOnly() { DataFlow::exprNode(any(True t)) .(DataFlow::LocalSourceNode) - .flowsTo(this.getArgByName("httponly")) + .flowsTo(this.(DataFlow::CallCfgNode).getArgByName("httponly")) } override predicate isSameSite() { - this.getArgByName("samesite").asExpr().(Str_).getS() in ["Strict", "Lax"] + this.(DataFlow::CallCfgNode).getArgByName("samesite").asExpr().(Str_).getS() in [ + "Strict", "Lax" + ] } override DataFlow::Node getHeaderArg() { none() } From a4204cc04f3dd7886017e1db6d7787354ca673d4 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Tue, 16 Nov 2021 19:00:04 +0100 Subject: [PATCH 0023/1618] Avoid using `Str_` internal class --- .../src/experimental/semmle/python/frameworks/Django.qll | 9 ++++++--- .../src/experimental/semmle/python/frameworks/Flask.qll | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/Django.qll b/python/ql/src/experimental/semmle/python/frameworks/Django.qll index 1c2d13f76cf..2fef35d276c 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Django.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Django.qll @@ -175,9 +175,12 @@ private module PrivateDjango { } override predicate isSameSite() { - this.(DataFlow::CallCfgNode).getArgByName("samesite").asExpr().(Str_).getS() in [ - "Strict", "Lax" - ] + exists(StrConst str | + str.getText() in ["Strict", "Lax"] and + DataFlow::exprNode(str) + .(DataFlow::LocalSourceNode) + .flowsTo(this.(DataFlow::CallCfgNode).getArgByName("samesite")) + ) } override DataFlow::Node getHeaderArg() { none() } diff --git a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll index c07abc0e177..b9283dafd92 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll @@ -121,9 +121,12 @@ module ExperimentalFlask { } override predicate isSameSite() { - this.(DataFlow::CallCfgNode).getArgByName("samesite").asExpr().(Str_).getS() in [ - "Strict", "Lax" - ] + exists(StrConst str | + str.getText() in ["Strict", "Lax"] and + DataFlow::exprNode(str) + .(DataFlow::LocalSourceNode) + .flowsTo(this.(DataFlow::CallCfgNode).getArgByName("samesite")) + ) } override DataFlow::Node getHeaderArg() { none() } From 840cded9b022c300db528f3e3b7bf73789fdafad Mon Sep 17 00:00:00 2001 From: jorgectf Date: Tue, 16 Nov 2021 19:18:00 +0100 Subject: [PATCH 0024/1618] Avoid using `Str_` in `CookieHeader` --- .../semmle/python/CookieHeader.qll | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/CookieHeader.qll b/python/ql/src/experimental/semmle/python/CookieHeader.qll index 2fda527c69f..1d28548e5a4 100644 --- a/python/ql/src/experimental/semmle/python/CookieHeader.qll +++ b/python/ql/src/experimental/semmle/python/CookieHeader.qll @@ -29,24 +29,39 @@ import experimental.semmle.python.Concepts class CookieHeader extends Cookie::Range instanceof HeaderDeclaration { CookieHeader() { this instanceof HeaderDeclaration and - this.(HeaderDeclaration).getNameArg().asExpr().(Str_).getS() = "Set-Cookie" + exists(StrConst str | + str.getText() = "Set-Cookie" and + DataFlow::exprNode(str) + .(DataFlow::LocalSourceNode) + .flowsTo(this.(HeaderDeclaration).getNameArg()) + ) } override predicate isSecure() { - this.(HeaderDeclaration).getValueArg().asExpr().(Str_).getS().regexpMatch(".*; *Secure;.*") + exists(StrConst str | + str.getText().regexpMatch(".*; *Secure;.*") and + DataFlow::exprNode(str) + .(DataFlow::LocalSourceNode) + .flowsTo(this.(HeaderDeclaration).getValueArg()) + ) } override predicate isHttpOnly() { - this.(HeaderDeclaration).getValueArg().asExpr().(Str_).getS().regexpMatch(".*; *HttpOnly;.*") + exists(StrConst str | + str.getText().regexpMatch(".*; *HttpOnly;.*") and + DataFlow::exprNode(str) + .(DataFlow::LocalSourceNode) + .flowsTo(this.(HeaderDeclaration).getValueArg()) + ) } override predicate isSameSite() { - this.(HeaderDeclaration) - .getValueArg() - .asExpr() - .(Str_) - .getS() - .regexpMatch(".*; *SameSite=(Strict|Lax);.*") + exists(StrConst str | + str.getText().regexpMatch(".*; *SameSite=(Strict|Lax);.*") and + DataFlow::exprNode(str) + .(DataFlow::LocalSourceNode) + .flowsTo(this.(HeaderDeclaration).getValueArg()) + ) } override DataFlow::Node getNameArg() { result = this.(HeaderDeclaration).getValueArg() } From 2433eafef2ad726bb55d2dbdac89be36c52bf20b Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 18 Jan 2022 11:23:22 +0100 Subject: [PATCH 0025/1618] add query for detecting insecure temprary files --- .../InsecureTemporaryFileCustomizations.qll | 96 +++++++++++++++++++ .../dataflow/InsecureTemporaryFileQuery.qll | 27 ++++++ .../CWE-377/InsecureTemporaryFile.qhelp | 43 +++++++++ .../Security/CWE-377/InsecureTemporaryFile.ql | 21 ++++ .../examples/insecure-temporary-file.js | 6 ++ .../CWE-377/examples/secure-temporary-file.js | 5 + .../2022-01-18-insecure-temporary-file.md | 4 + .../CWE-377/InsecureTemporaryFile.expected | 53 ++++++++++ .../CWE-377/InsecureTemporaryFile.qlref | 1 + .../CWE-377/insecure-temporary-file.js | 30 ++++++ 10 files changed, 286 insertions(+) create mode 100644 javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll create mode 100644 javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileQuery.qll create mode 100644 javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp create mode 100644 javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.ql create mode 100644 javascript/ql/src/Security/CWE-377/examples/insecure-temporary-file.js create mode 100644 javascript/ql/src/Security/CWE-377/examples/secure-temporary-file.js create mode 100644 javascript/ql/src/change-notes/2022-01-18-insecure-temporary-file.md create mode 100644 javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.expected create mode 100644 javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.qlref create mode 100644 javascript/ql/test/query-tests/Security/CWE-377/insecure-temporary-file.js diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll new file mode 100644 index 00000000000..b507c88dbb8 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll @@ -0,0 +1,96 @@ +/** + * Provides default sources, sinks and sanitizers for reasoning about + * insecure temporary file creation, as well as + * extension points for adding your own. + */ + +import javascript + +/** + * Classes and predicates for reasoning about insecure temporary file creation. + */ +module InsecureTemporaryFile { + /** + * A data flow source for insecure temporary file creation. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for insecure temporary file creation. + */ + abstract class Sink extends DataFlow::Node { } + + /** + * A sanitizer for random insecure temporary file creation. + */ + abstract class Sanitizer extends DataFlow::Node { } + + /** A call that opens a file with a given path. */ + class OpenFileCall extends DataFlow::CallNode { + string methodName; + + OpenFileCall() { + methodName = ["open", "openSync", "writeFile", "writeFileSync"] and + this = NodeJSLib::FS::moduleMember(methodName).getACall() + } + + DataFlow::Node getPath() { result = this.getArgument(0) } + + DataFlow::Node getMode() { + methodName = ["open", "openSync"] and + result = this.getArgument(2) + or + methodName = ["writeFile", "writeFileSync"] and + result = this.getOptionArgument(2, "mode") + } + } + + /** Holds if the `mode` ensure no access to other users. */ + bindingset[mode] + private predicate isSecureMode(int mode) { + // the lowest 6 bits should be 0. + // E.g. `0o600` is secure (each digit in a octal number is 3 bits) + mode.bitAnd(1) = 0 and + mode.bitAnd(2) = 0 and + mode.bitAnd(4) = 0 and + mode.bitAnd(8) = 0 and + mode.bitAnd(16) = 0 and + mode.bitAnd(32) = 0 + } + + /** The path in a call that opens a file without specifying a secure `mode`. Seen as a sink for insecure temporary file creation. */ + class InsecureFileOpen extends Sink { + InsecureFileOpen() { + exists(OpenFileCall call | + not exists(call.getMode()) + or + exists(int mode | mode = call.getMode().getIntValue() | not isSecureMode(mode)) + | + this = call.getPath() + ) + } + } + + /** A a string that references the global tmp dir. Seen as a source for insecure temporary file creation. */ + class OSTempDir extends Source { + OSTempDir() { + this = DataFlow::moduleImport("os").getAMemberCall("tmpdir") + or + this.getStringValue().matches("/tmp/%") + } + } + + /** A non-first leaf in a string-concatenation. Seen as a sanitizer for insecure temporary file creation. */ + class NonFirstStringConcatLeaf extends Sanitizer { + NonFirstStringConcatLeaf() { + exists(StringOps::ConcatenationRoot root | + this = root.getALeaf() and + not this = root.getFirstLeaf() + ) + or + exists(DataFlow::CallNode join | join = DataFlow::moduleMember("path", "join").getACall() | + this = join.getArgument([1 .. join.getNumArgument() - 1]) + ) + } + } +} diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileQuery.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileQuery.qll new file mode 100644 index 00000000000..56c22972c16 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileQuery.qll @@ -0,0 +1,27 @@ +/** + * Provides a taint tracking configuration for reasoning about insecure temporary + * file creation. + * + * Note, for performance reasons: only import this file if + * `InsecureTemporaryFile::Configuration` is needed, otherwise + * `InsecureTemporaryFileCustomizations` should be imported instead. + */ + +import javascript +import InsecureTemporaryFileCustomizations::InsecureTemporaryFile + +/** + * A taint-tracking configuration for reasoning about insecure temporary file creation. + */ +class Configuration extends TaintTracking::Configuration { + Configuration() { this = "InsecureTemporaryFile" } + + override predicate isSource(DataFlow::Node source) { source instanceof Source } + + override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + override predicate isSanitizer(DataFlow::Node node) { + super.isSanitizer(node) or + node instanceof Sanitizer + } +} diff --git a/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp b/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp new file mode 100644 index 00000000000..e0925ef3d0e --- /dev/null +++ b/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp @@ -0,0 +1,43 @@ + + + + +

    +Temporary files created in the operating system tmp directory are by default accessible +to other users. This can in some cases lead to information exposure, or in the worst +case to remote code execution. +

    +
    + + +

    +Use a well tested library like tmp +for creating temprary files. These libraries ensure both that the file is inaccesible +to other users and that the file does not already exist. +

    +
    + + +

    +The following example creates a temporary file in the operating system tmp directory. +

    + + +

    +The file created above is accessible to other users, and there is no guarantee that +the file does not already exist. +

    +

    +The below example uses the tmp library +to securely create a temporary file. +

    + + +
    + + +
  • Mitre.org: CWE-377.
  • +
  • NPM: tmp.
  • +
    + +
    diff --git a/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.ql b/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.ql new file mode 100644 index 00000000000..8bfce571835 --- /dev/null +++ b/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.ql @@ -0,0 +1,21 @@ +/** + * @name Insecure temporary file + * @description Creating a temporary file that is accessible by other users TODO: + * @kind path-problem + * @id js/insecure-temporary-file + * @problem.severity warning + * @security-severity 7.0 + * @precision medium + * @tags external/cwe/cwe-377 + * external/cwe/cwe-378 + * security + */ + +import javascript +import DataFlow::PathGraph +import semmle.javascript.security.dataflow.InsecureTemporaryFileQuery + +from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink +where cfg.hasFlowPath(source, sink) +select sink.getNode(), source, sink, "Insecure creation of file in $@.", source.getNode(), + "the os temp dir" diff --git a/javascript/ql/src/Security/CWE-377/examples/insecure-temporary-file.js b/javascript/ql/src/Security/CWE-377/examples/insecure-temporary-file.js new file mode 100644 index 00000000000..af94b4b3972 --- /dev/null +++ b/javascript/ql/src/Security/CWE-377/examples/insecure-temporary-file.js @@ -0,0 +1,6 @@ +const fs = require('fs'); +const os = require('os'); +const path = require('path'); + +const file = path.join(os.tmpdir(), "test-" + (new Date()).getTime() + ".txt"); +fs.writeFileSync(file, "content"); \ No newline at end of file diff --git a/javascript/ql/src/Security/CWE-377/examples/secure-temporary-file.js b/javascript/ql/src/Security/CWE-377/examples/secure-temporary-file.js new file mode 100644 index 00000000000..229f7ec81d1 --- /dev/null +++ b/javascript/ql/src/Security/CWE-377/examples/secure-temporary-file.js @@ -0,0 +1,5 @@ +const fs = require('fs'); +const tmp = require('tmp'); + +const file = tmp.fileSync().name; +fs.writeFileSync(file, "content"); \ No newline at end of file diff --git a/javascript/ql/src/change-notes/2022-01-18-insecure-temporary-file.md b/javascript/ql/src/change-notes/2022-01-18-insecure-temporary-file.md new file mode 100644 index 00000000000..e8713e94b76 --- /dev/null +++ b/javascript/ql/src/change-notes/2022-01-18-insecure-temporary-file.md @@ -0,0 +1,4 @@ +--- +category: newQuery +--- +* A new query `js/insecure-temporary-file` has been added. The query detects the creation of temporary files that may be accessible by others users. The query is not run by default. diff --git a/javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.expected b/javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.expected new file mode 100644 index 00000000000..8952998dd9c --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.expected @@ -0,0 +1,53 @@ +nodes +| insecure-temporary-file.js:7:9:11:5 | tmpLocation | +| insecure-temporary-file.js:7:23:11:5 | path.jo ... )\\n ) | +| insecure-temporary-file.js:8:9:8:45 | os.tmpd ... mpDir() | +| insecure-temporary-file.js:8:21:8:31 | os.tmpdir() | +| insecure-temporary-file.js:8:21:8:31 | os.tmpdir() | +| insecure-temporary-file.js:13:22:13:32 | tmpLocation | +| insecure-temporary-file.js:13:22:13:32 | tmpLocation | +| insecure-temporary-file.js:15:9:15:34 | tmpPath | +| insecure-temporary-file.js:15:19:15:34 | "/tmp/something" | +| insecure-temporary-file.js:15:19:15:34 | "/tmp/something" | +| insecure-temporary-file.js:17:22:17:49 | path.jo ... /foo/") | +| insecure-temporary-file.js:17:22:17:49 | path.jo ... /foo/") | +| insecure-temporary-file.js:17:32:17:38 | tmpPath | +| insecure-temporary-file.js:23:22:23:49 | path.jo ... /foo/") | +| insecure-temporary-file.js:23:22:23:49 | path.jo ... /foo/") | +| insecure-temporary-file.js:23:32:23:38 | tmpPath | +| insecure-temporary-file.js:25:11:25:92 | tmpPath2 | +| insecure-temporary-file.js:25:22:25:92 | path.jo ... )}.md`) | +| insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | +| insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | +| insecure-temporary-file.js:26:22:26:29 | tmpPath2 | +| insecure-temporary-file.js:26:22:26:29 | tmpPath2 | +| insecure-temporary-file.js:28:17:28:24 | tmpPath2 | +| insecure-temporary-file.js:28:17:28:24 | tmpPath2 | +edges +| insecure-temporary-file.js:7:9:11:5 | tmpLocation | insecure-temporary-file.js:13:22:13:32 | tmpLocation | +| insecure-temporary-file.js:7:9:11:5 | tmpLocation | insecure-temporary-file.js:13:22:13:32 | tmpLocation | +| insecure-temporary-file.js:7:23:11:5 | path.jo ... )\\n ) | insecure-temporary-file.js:7:9:11:5 | tmpLocation | +| insecure-temporary-file.js:8:9:8:45 | os.tmpd ... mpDir() | insecure-temporary-file.js:7:23:11:5 | path.jo ... )\\n ) | +| insecure-temporary-file.js:8:21:8:31 | os.tmpdir() | insecure-temporary-file.js:8:9:8:45 | os.tmpd ... mpDir() | +| insecure-temporary-file.js:8:21:8:31 | os.tmpdir() | insecure-temporary-file.js:8:9:8:45 | os.tmpd ... mpDir() | +| insecure-temporary-file.js:15:9:15:34 | tmpPath | insecure-temporary-file.js:17:32:17:38 | tmpPath | +| insecure-temporary-file.js:15:9:15:34 | tmpPath | insecure-temporary-file.js:23:32:23:38 | tmpPath | +| insecure-temporary-file.js:15:19:15:34 | "/tmp/something" | insecure-temporary-file.js:15:9:15:34 | tmpPath | +| insecure-temporary-file.js:15:19:15:34 | "/tmp/something" | insecure-temporary-file.js:15:9:15:34 | tmpPath | +| insecure-temporary-file.js:17:32:17:38 | tmpPath | insecure-temporary-file.js:17:22:17:49 | path.jo ... /foo/") | +| insecure-temporary-file.js:17:32:17:38 | tmpPath | insecure-temporary-file.js:17:22:17:49 | path.jo ... /foo/") | +| insecure-temporary-file.js:23:32:23:38 | tmpPath | insecure-temporary-file.js:23:22:23:49 | path.jo ... /foo/") | +| insecure-temporary-file.js:23:32:23:38 | tmpPath | insecure-temporary-file.js:23:22:23:49 | path.jo ... /foo/") | +| insecure-temporary-file.js:25:11:25:92 | tmpPath2 | insecure-temporary-file.js:26:22:26:29 | tmpPath2 | +| insecure-temporary-file.js:25:11:25:92 | tmpPath2 | insecure-temporary-file.js:26:22:26:29 | tmpPath2 | +| insecure-temporary-file.js:25:11:25:92 | tmpPath2 | insecure-temporary-file.js:28:17:28:24 | tmpPath2 | +| insecure-temporary-file.js:25:11:25:92 | tmpPath2 | insecure-temporary-file.js:28:17:28:24 | tmpPath2 | +| insecure-temporary-file.js:25:22:25:92 | path.jo ... )}.md`) | insecure-temporary-file.js:25:11:25:92 | tmpPath2 | +| insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | insecure-temporary-file.js:25:22:25:92 | path.jo ... )}.md`) | +| insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | insecure-temporary-file.js:25:22:25:92 | path.jo ... )}.md`) | +#select +| insecure-temporary-file.js:13:22:13:32 | tmpLocation | insecure-temporary-file.js:8:21:8:31 | os.tmpdir() | insecure-temporary-file.js:13:22:13:32 | tmpLocation | Insecure creation of file in $@. | insecure-temporary-file.js:8:21:8:31 | os.tmpdir() | the os temp dir | +| insecure-temporary-file.js:17:22:17:49 | path.jo ... /foo/") | insecure-temporary-file.js:15:19:15:34 | "/tmp/something" | insecure-temporary-file.js:17:22:17:49 | path.jo ... /foo/") | Insecure creation of file in $@. | insecure-temporary-file.js:15:19:15:34 | "/tmp/something" | the os temp dir | +| insecure-temporary-file.js:23:22:23:49 | path.jo ... /foo/") | insecure-temporary-file.js:15:19:15:34 | "/tmp/something" | insecure-temporary-file.js:23:22:23:49 | path.jo ... /foo/") | Insecure creation of file in $@. | insecure-temporary-file.js:15:19:15:34 | "/tmp/something" | the os temp dir | +| insecure-temporary-file.js:26:22:26:29 | tmpPath2 | insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | insecure-temporary-file.js:26:22:26:29 | tmpPath2 | Insecure creation of file in $@. | insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | the os temp dir | +| insecure-temporary-file.js:28:17:28:24 | tmpPath2 | insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | insecure-temporary-file.js:28:17:28:24 | tmpPath2 | Insecure creation of file in $@. | insecure-temporary-file.js:25:32:25:42 | os.tmpdir() | the os temp dir | diff --git a/javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.qlref b/javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.qlref new file mode 100644 index 00000000000..68a27dfb269 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-377/InsecureTemporaryFile.qlref @@ -0,0 +1 @@ +Security/CWE-377/InsecureTemporaryFile.ql diff --git a/javascript/ql/test/query-tests/Security/CWE-377/insecure-temporary-file.js b/javascript/ql/test/query-tests/Security/CWE-377/insecure-temporary-file.js new file mode 100644 index 00000000000..641b89a3ebe --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-377/insecure-temporary-file.js @@ -0,0 +1,30 @@ +const os = require('os'); +const uuid = require('node-uuid'); +const fs = require('fs'); +const path = require('path'); + +(function main() { + var tmpLocation = path.join( + os.tmpdir ? os.tmpdir() : os.tmpDir(), + 'something', + uuid.v4().slice(0, 8) + ); + + fs.writeFileSync(tmpLocation, content); // NOT OK + + var tmpPath = "/tmp/something"; + fs.writeFileSync(path.join("./foo/", tmpPath), content); // OK + fs.writeFileSync(path.join(tmpPath, "./foo/"), content); // NOT OK + + fs.writeFileSync(path.join(tmpPath, "./foo/"), content, {mode: 0o600}); // OK + + fs.writeFileSync(path.join(tmpPath, "./foo/"), content, {mode: mode}); // OK - assumed unknown mode is secure + + fs.writeFileSync(path.join(tmpPath, "./foo/"), content, {mode: 0o666}); // NOT OK - explicitly insecure + + const tmpPath2 = path.join(os.tmpdir(), `tmp_${Math.floor(Math.random() * 1000000)}.md`); + fs.writeFileSync(tmpPath2, content); // NOT OK + + fs.openSync(tmpPath2, 'w'); // NOT OK + fs.openSync(tmpPath2, 'w', 0o600); // OK +}) From 4338c06b0d90cb168a1abf9bcdfe7ba67d489970 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 27 Jan 2022 17:20:16 +0100 Subject: [PATCH 0026/1618] Python: Support Django FileField.upload_to --- .../lib/semmle/python/frameworks/Django.qll | 60 +++++++++++++++++++ .../web/django/FileField_test.py | 27 +++++++++ 2 files changed, 87 insertions(+) create mode 100644 python/ql/test/library-tests/web/django/FileField_test.py diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index 9e66c728f6e..45b9977d5ab 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -576,6 +576,38 @@ module PrivateDjango { } } + /** + * Provides models for the `django.db.models.FileField` class and `ImageField` subclasses. + * + * See + * - https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.FileField + * - https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.ImageField + */ + module FileField { + /** Gets a reference to the `flask.views.View` class or any subclass. */ + API::Node subclassRef() { + exists(string className | className in ["FileField", "ImageField"] | + // commonly used alias + result = + API::moduleImport("django") + .getMember("db") + .getMember("models") + .getMember(className) + .getASubclass*() + or + // actual class definition + result = + API::moduleImport("django") + .getMember("db") + .getMember("models") + .getMember("fields") + .getMember("files") + .getMember(className) + .getASubclass*() + ) + } + } + /** * Gets a reference to the Manager (django.db.models.Manager) for a django Model, * accessed by `.objects`. @@ -2236,6 +2268,34 @@ module PrivateDjango { } } + /** + * A parameter that accepts the filename used to upload a file. This is the second + * parameter in functions used for the `upload_to` argument to a `FileField`. + * + * See + * - https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.FileField.upload_to + * - https://docs.djangoproject.com/en/3.1/topics/http/file-uploads/#handling-uploaded-files-with-a-model + */ + private class DjangoFileFieldUploadToFunctionFilenameParam extends RemoteFlowSource::Range, + DataFlow::ParameterNode { + DjangoFileFieldUploadToFunctionFilenameParam() { + exists(DataFlow::CallCfgNode call, DataFlow::Node uploadToArg, Function func | + this.getParameter() = func.getArg(1) and + call = django::db::models::FileField::subclassRef().getACall() and + ( + uploadToArg = call.getArg(2) + or + uploadToArg = call.getArgByName("upload_to") + ) and + uploadToArg = poorMansFunctionTracker(func) + ) + } + + override string getSourceType() { + result = "django filename parameter to function used in FileField.upload_to" + } + } + // --------------------------------------------------------------------------- // django.shortcuts.redirect // --------------------------------------------------------------------------- diff --git a/python/ql/test/library-tests/web/django/FileField_test.py b/python/ql/test/library-tests/web/django/FileField_test.py new file mode 100644 index 00000000000..688885c272a --- /dev/null +++ b/python/ql/test/library-tests/web/django/FileField_test.py @@ -0,0 +1,27 @@ +from django.db import models +import django.db.models.fields.files + +def custom_path_function_1(instance, filename): + ensure_tainted(filename) # $ tainted + +def custom_path_function_2(instance, filename): + ensure_tainted(filename) # $ tainted + +def custom_path_function_3(instance, filename): + ensure_tainted(filename) # $ tainted + +def custom_path_function_4(instance, filename): + ensure_tainted(filename) # $ tainted + + +class CustomFileFieldSubclass(models.FileField): + pass + + +class MyModel(models.Model): + upload_1 = models.FileField(None, None, custom_path_function_1) + upload_2 = django.db.models.fields.files.FileField(upload_to=custom_path_function_2) + + upload_3 = models.ImageField(upload_to=custom_path_function_3) + + upload_4 = CustomFileFieldSubclass(upload_to=custom_path_function_4) From f962d8e72cdb4990507f3f1676c2595231439120 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 28 Jan 2022 11:33:21 +0100 Subject: [PATCH 0027/1618] Python: Move test to correct location --- .../{web/django => frameworks/django-v2-v3}/FileField_test.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename python/ql/test/library-tests/{web/django => frameworks/django-v2-v3}/FileField_test.py (100%) diff --git a/python/ql/test/library-tests/web/django/FileField_test.py b/python/ql/test/library-tests/frameworks/django-v2-v3/FileField_test.py similarity index 100% rename from python/ql/test/library-tests/web/django/FileField_test.py rename to python/ql/test/library-tests/frameworks/django-v2-v3/FileField_test.py From 3e71d7f9bbeaf85d349dcbaa1e7d9c0950804029 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Fri, 28 Jan 2022 12:16:52 +0100 Subject: [PATCH 0028/1618] Python: Add note about `/` for Django upload_to I did a test locally, something like import requests req = requests.Request( "POST", "http://127.0.0.1:8000/app/upload-test/", data={"name": "foo"}, files={"upload" : ("wat/haha|!#$%^&", open("foo.txt", "rb"))}, ) # print(req.prepare().body.decode('ascii')) requests.session().send(req.prepare()) and the `wat/` part was stripped from the filename --- python/ql/lib/semmle/python/frameworks/Django.qll | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index 45b9977d5ab..d2285b72d19 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2272,6 +2272,12 @@ module PrivateDjango { * A parameter that accepts the filename used to upload a file. This is the second * parameter in functions used for the `upload_to` argument to a `FileField`. * + * Note that the value this parameter accepts cannot contain a slash. Even when + * forcing the filename to contain a slash when sending the request, django does + * something like `input_filename.split("/")[-1]` (so other special characters still + * allowed). This also means that although the return value from `upload_to` is used + * to construct a path, path injection is not possible. + * * See * - https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.FileField.upload_to * - https://docs.djangoproject.com/en/3.1/topics/http/file-uploads/#handling-uploaded-files-with-a-model From 573f17dc630032ce6bde5a9f065eef58cbf139b6 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 2 Feb 2022 15:00:38 +0100 Subject: [PATCH 0029/1618] fix typos in documentation Co-authored-by: Stephan Brandauer --- .../security/dataflow/InsecureTemporaryFileCustomizations.qll | 2 +- javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll index b507c88dbb8..52b30721df2 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll @@ -71,7 +71,7 @@ module InsecureTemporaryFile { } } - /** A a string that references the global tmp dir. Seen as a source for insecure temporary file creation. */ + /** A string that references the global tmp dir. Seen as a source for insecure temporary file creation. */ class OSTempDir extends Source { OSTempDir() { this = DataFlow::moduleImport("os").getAMemberCall("tmpdir") diff --git a/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp b/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp index e0925ef3d0e..b9e4bdb5ca0 100644 --- a/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp +++ b/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp @@ -12,7 +12,7 @@ case to remote code execution.

    Use a well tested library like tmp -for creating temprary files. These libraries ensure both that the file is inaccesible +for creating temporary files. These libraries ensure both that the file is inaccessible to other users and that the file does not already exist.

    From 35999a7f8ff93ae1d905712681b16957b221de37 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 2 Feb 2022 15:14:43 +0100 Subject: [PATCH 0030/1618] add support for fs-extra methods in insecure-temporary-file --- .../dataflow/InsecureTemporaryFileCustomizations.qll | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll index 52b30721df2..216482947ab 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/InsecureTemporaryFileCustomizations.qll @@ -30,7 +30,12 @@ module InsecureTemporaryFile { string methodName; OpenFileCall() { - methodName = ["open", "openSync", "writeFile", "writeFileSync"] and + methodName = + [ + "open", "openSync", "writeFile", "writeFileSync", "writeJson", "writeJSON", + "writeJsonSync", "writeJSONSync", "outputJson", "outputJSON", "outputJsonSync", + "outputJSONSync", "outputFile", "outputFileSync" + ] and this = NodeJSLib::FS::moduleMember(methodName).getACall() } @@ -40,7 +45,7 @@ module InsecureTemporaryFile { methodName = ["open", "openSync"] and result = this.getArgument(2) or - methodName = ["writeFile", "writeFileSync"] and + not methodName = ["open", "openSync"] and result = this.getOptionArgument(2, "mode") } } @@ -88,7 +93,8 @@ module InsecureTemporaryFile { not this = root.getFirstLeaf() ) or - exists(DataFlow::CallNode join | join = DataFlow::moduleMember("path", "join").getACall() | + exists(DataFlow::CallNode join | + join = DataFlow::moduleMember("path", "join").getACall() and this = join.getArgument([1 .. join.getNumArgument() - 1]) ) } From 4c317f5753b2258dfe302966299f8163d259c85c Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 7 Feb 2022 09:43:49 +0100 Subject: [PATCH 0031/1618] apply suggestions from doc review Co-authored-by: Matt Pollard --- .../src/Security/CWE-377/InsecureTemporaryFile.qhelp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp b/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp index b9e4bdb5ca0..13bc9514b99 100644 --- a/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp +++ b/javascript/ql/src/Security/CWE-377/InsecureTemporaryFile.qhelp @@ -3,15 +3,15 @@

    -Temporary files created in the operating system tmp directory are by default accessible -to other users. This can in some cases lead to information exposure, or in the worst -case to remote code execution. +Temporary files created in the operating system's temporary directory are by default accessible +to other users. In some cases, this can lead to information exposure, or in the worst +case, to remote code execution.

    -Use a well tested library like tmp +Use a well-tested library like tmp for creating temporary files. These libraries ensure both that the file is inaccessible to other users and that the file does not already exist.

    @@ -19,7 +19,7 @@ to other users and that the file does not already exist.

    -The following example creates a temporary file in the operating system tmp directory. +The following example creates a temporary file in the operating system's temporary directory.

    From cd4685c4c5337e003efde0b3a1cde298bca2a37e Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 16 Feb 2022 09:56:48 +0100 Subject: [PATCH 0032/1618] cache RegExpCreationNode::getAReference --- javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll | 6 +++++- .../ql/lib/semmle/javascript/internal/CachedStages.qll | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll index bc6a6688a9b..412d4e8c6fc 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Nodes.qll @@ -1650,5 +1650,9 @@ class RegExpCreationNode extends DataFlow::SourceNode { } /** Gets a data flow node referring to this regular expression. */ - DataFlow::SourceNode getAReference() { result = this.getAReference(DataFlow::TypeTracker::end()) } + cached + DataFlow::SourceNode getAReference() { + Stages::FlowSteps::ref() and + result = this.getAReference(DataFlow::TypeTracker::end()) + } } diff --git a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll index cda0727f136..950f002f919 100644 --- a/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll +++ b/javascript/ql/lib/semmle/javascript/internal/CachedStages.qll @@ -238,6 +238,8 @@ module Stages { AccessPath::DominatingPaths::hasDominatingWrite(_) or DataFlow::SharedFlowStep::step(_, _) + or + exists(any(DataFlow::RegExpCreationNode e).getAReference()) } } From 025701170e30a72f83b3ac6b45b4cb09dc6fa4f6 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Fri, 25 Feb 2022 11:07:48 +0300 Subject: [PATCH 0033/1618] Add files via upload --- .../CWE-476/DangerousUseOfExceptionBlocks.cpp | 48 +++++ .../DangerousUseOfExceptionBlocks.qhelp | 23 +++ .../CWE-476/DangerousUseOfExceptionBlocks.ql | 164 ++++++++++++++++++ 3 files changed, 235 insertions(+) create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp create mode 100644 cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp new file mode 100644 index 00000000000..680d4d71cf6 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp @@ -0,0 +1,48 @@ +... +try { + if (chackValue) throw exception(); + valData->bufMyData = new myData*[valData->sizeInt]; + + } + catch (...) + { + for (size_t i = 0; i < valData->sizeInt; i++) + { + delete[] valData->bufMyData[i]->buffer; // BAD + delete valData->bufMyData[i]; + } +... +try { + if (chackValue) throw exception(); + valData->bufMyData = new myData*[valData->sizeInt]; + + } + catch (...) + { + for (size_t i = 0; i < valData->sizeInt; i++) + { + if(delete valData->bufMyData[i]) + { + delete[] valData->bufMyData[i]->buffer; // GOOD + delete valData->bufMyData[i]; + } + } + +... + catch (const exception &) { + delete valData; + throw; + } + catch (...) + { + delete valData; // BAD +... + catch (const exception &) { + delete valData; + valData = NULL; + throw; + } + catch (...) + { + delete valData; // GOOD +... diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp new file mode 100644 index 00000000000..059387a7c30 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp @@ -0,0 +1,23 @@ + + + +

    When clearing the data in the catch block, you must be sure that the memory was allocated before the exception.

    + +
    + + +

    The following example shows erroneous and fixed ways to use exception handling.

    + + +
    + + +
  • + CERT C Coding Standard: + EXP34-C. Do not dereference null pointers. +
  • + +
    +
    diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql new file mode 100644 index 00000000000..926a9923108 --- /dev/null +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql @@ -0,0 +1,164 @@ +/** + * @name Dangerous use of exception blocks. + * @description When clearing the data in the catch block, you must be sure that the memory was allocated before the exception. + * @kind problem + * @id cpp/dangerous-use-of-exception-blocks + * @problem.severity warning + * @precision medium + * @tags correctness + * security + * external/cwe/cwe-476 + */ + +import cpp + +/** Holds if the release can occur twice. in the current block of catch and above in the block of try or other block catch. */ +pragma[inline] +predicate doubleCallDelete(CatchAnyBlock cb, Variable vr) { + // Search for exceptions after freeing memory. + exists(Expr e1 | + ( + e1 = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(DeleteArrayExpr) or + e1 = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(DeleteExpr) + ) and + e1.getEnclosingFunction() = cb.getEnclosingFunction() and + ( + e1.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + exists(Expr e2, ThrowExpr th | + ( + e2 = th or + e2 = th.getEnclosingFunction().getACallToThisFunction() + ) and + e2.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + e1.getASuccessor+() = e2 + ) and + not exists(AssignExpr ae | + ae.getLValue().(VariableAccess).getTarget() = vr and + ae.getRValue().getValue() = "0" and + e1.getASuccessor+() = ae and + ae.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() + ) + or + // Search for a situation when there is a higher catch block that also frees memory. + exists(CatchBlock cbt, Expr e2, ThrowExpr th | + e1.getEnclosingStmt().getParentStmt*() = cbt and + exists(cbt.getParameter()) and + ( + e2 = th or + e2 = th.getEnclosingFunction().getACallToThisFunction() + ) and + e2.getEnclosingStmt().getParentStmt*() = cbt and + e1.getASuccessor+() = e2 and + not exists(AssignExpr ae | + ae.getLValue().(VariableAccess).getTarget() = vr and + ae.getRValue().getValue() = "0" and + e1.getASuccessor+() = ae and + ae.getEnclosingStmt().getParentStmt*() = cbt + ) + ) + ) and + // Exclude the presence of a check in catch block. + not exists(IfStmt ifst | + ifst.getEnclosingStmt().getParentStmt*() = cb.getAStmt() + ) + ) +} + +/** Holds if an exception can be thrown before the memory is allocated, and when the exception is handled, an attempt is made to access unallocated memory in the catch block. */ +pragma[inline] +predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { + // Search exceptions before allocating memory. + exists(Expr e0, Expr e1 | + ( + exists(AssignExpr ase | + ase = vro.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and + ( + e0 = ase.getRValue().(NewOrNewArrayExpr) or + e0 = ase.getRValue().(NewOrNewArrayExpr).getEnclosingFunction().getACallToThisFunction() + ) and + vro = ase.getLValue().(VariableAccess).getTarget() + ) + or + exists(AssignExpr ase | + ase = vro.getAnAccess().(Qualifier).getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and + ( + e0 = ase.getRValue().(NewOrNewArrayExpr) or + e0 = ase.getRValue().(NewOrNewArrayExpr).getEnclosingFunction().getACallToThisFunction() + ) and + not ase.getLValue() instanceof VariableAccess and + vro = ase.getLValue().getAPredecessor().(VariableAccess).getTarget() + ) + ) and + exists(AssignExpr ase | + ase = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and + ( + e1 = ase.getRValue().(NewOrNewArrayExpr) or + e1 = ase.getRValue().(NewOrNewArrayExpr).getEnclosingFunction().getACallToThisFunction() + ) and + vr = ase.getLValue().(VariableAccess).getTarget() + ) and + e0.getASuccessor*() = e1 and + e0.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + e1.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + exists(Expr e2, ThrowExpr th | + ( + e2 = th or + e2 = th.getEnclosingFunction().getACallToThisFunction() + ) and + e2.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + e2.getASuccessor+() = e0 + ) + ) and + // We exclude checking the value of a variable or its parent in the catch block. + not exists(IfStmt ifst | + ifst.getEnclosingStmt().getParentStmt*() = cb.getAStmt() and + ( + ifst.getCondition().getAChild*().(VariableAccess).getTarget() = vr or + ifst.getCondition().getAChild*().(VariableAccess).getTarget() = vro + ) + ) +} + +from CatchAnyBlock cb, string msg +where + exists(Variable vr, Variable vro, Expr exp | + exp.getEnclosingStmt().getParentStmt*() = cb and + exists(VariableAccess va | + ( + ( + va = exp.(DeleteArrayExpr).getExpr().getAPredecessor+().(Qualifier).(VariableAccess) or + va = exp.(DeleteArrayExpr).getExpr().getAPredecessor+().(VariableAccess) + ) and + vr = exp.(DeleteArrayExpr).getExpr().(VariableAccess).getTarget() + or + ( + va = exp.(DeleteExpr).getExpr().getAPredecessor+().(Qualifier).(VariableAccess) or + va = exp.(DeleteExpr).getExpr().getAPredecessor+().(VariableAccess) + ) and + vr = exp.(DeleteExpr).getExpr().(VariableAccess).getTarget() + ) and + va.getEnclosingStmt() = exp.getEnclosingStmt() and + vro = va.getTarget() and + vr != vro + ) and + pointerDereference(cb, vr, vro) and + msg = + "it is possible to dereference a pointer when accessing a " + vr.getName() + + ", since it is possible to throw an exception before the memory for the " + vro.getName() + + " is allocated" + ) + or + exists(Expr exp, Variable vr | + ( + exp.(DeleteExpr).getEnclosingStmt().getParentStmt*() = cb and + vr = exp.(DeleteExpr).getExpr().(VariableAccess).getTarget() + or + exp.(DeleteArrayExpr).getEnclosingStmt().getParentStmt*() = cb and + vr = exp.(DeleteArrayExpr).getExpr().(VariableAccess).getTarget() + ) and + doubleCallDelete(cb, vr) and + msg = + "perhaps a situation of uncertainty due to the repeated call of the delete function for the variable " + + vr.getName() + ) +select cb, msg From a9a2ca38503321fa7d41616a64eae4aa9029cad0 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Fri, 25 Feb 2022 11:09:25 +0300 Subject: [PATCH 0034/1618] Add files via upload --- .../DangerousUseOfExceptionBlocks.expected | 3 + .../tests/DangerousUseOfExceptionBlocks.qlref | 1 + .../CWE/CWE-476/semmle/tests/test.cpp | 252 ++++++++++++++++++ 3 files changed, 256 insertions(+) create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.qlref create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected new file mode 100644 index 00000000000..26e9adebb9c --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected @@ -0,0 +1,3 @@ +| test.cpp:63:3:71:3 | { ... } | it is possible to dereference a pointer when accessing a buffer, since it is possible to throw an exception before the memory for the bufMyData is allocated | +| test.cpp:178:3:180:3 | { ... } | perhaps a situation of uncertainty due to the repeated call of the delete function for the variable valData | +| test.cpp:216:3:218:3 | { ... } | perhaps a situation of uncertainty due to the repeated call of the delete function for the variable valData | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.qlref b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.qlref new file mode 100644 index 00000000000..c67adb8774b --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp new file mode 100644 index 00000000000..d60cd54b719 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp @@ -0,0 +1,252 @@ +#define NULL ((void*)0) +typedef unsigned long size_t; +namespace std { + enum class align_val_t : size_t {}; +} + +class exception {}; + +void cleanFunction(); + +void* operator new(size_t, float); +void* operator new[](size_t, float); +void* operator new(size_t, std::align_val_t, float); +void* operator new[](size_t, std::align_val_t, float); +void operator delete(void*, float); +void operator delete[](void*, float); +void operator delete(void*, std::align_val_t, float); +void operator delete[](void*, std::align_val_t, float); + +struct myData +{ + int sizeInt; + char* buffer; +}; + +struct myGlobalData +{ + int sizeInt; + myData** bufMyData; +}; + +void allocData(myGlobalData * dataP) { + for (size_t i = 0; i < dataP->sizeInt; i++) + { + dataP->bufMyData[i] = new myData; + dataP->bufMyData[i]->sizeInt = 10; + dataP->bufMyData[i]->buffer = new char[dataP->bufMyData[i]->sizeInt]; + } +} + + +void throwFunction(int a) { + if (a == 5) throw "my exception!"; +} +void throwFunction2(int a) { + if (a == 5) throw exception(); +} +void funcWork1b() { + int a; + myGlobalData *valData = new myGlobalData; + + try { + cleanFunction(); + throwFunction(a); + valData->sizeInt = 10; + valData->bufMyData = new myData*[valData->sizeInt]; + cleanFunction(); + allocData(valData); + cleanFunction(); + + } + catch (...) + { + for (size_t i = 0; i < valData->sizeInt; i++) + { + delete[] valData->bufMyData[i]->buffer; // BAD + delete valData->bufMyData[i]; + } + delete [] valData->bufMyData; + delete valData; + } +} + +void funcWork1() { + int a; + myGlobalData *valData = new myGlobalData; + valData->sizeInt = 10; + valData->bufMyData = new myData*[valData->sizeInt]; + try { + cleanFunction(); + throwFunction(a); + cleanFunction(); + allocData(valData); + cleanFunction(); + + } + catch (...) + { + for (size_t i = 0; i < valData->sizeInt; i++) + { + if (valData->bufMyData[i]) + delete[] valData->bufMyData[i]->buffer; // GOOD + delete valData->bufMyData[i]; + } + delete [] valData->bufMyData; + delete valData; + } +} + +void funcWork2() { + int a; + myGlobalData *valData = new myGlobalData; + valData->sizeInt = 10; + valData->bufMyData = new myData*[valData->sizeInt]; + try { + do { + cleanFunction(); + allocData(valData); + cleanFunction(); + throwFunction(a); + + } + while(0); + + } + catch (...) + { + for (size_t i = 0; i < valData->sizeInt; i++) + { + delete[] valData->bufMyData[i]->buffer; // GOOD + delete valData->bufMyData[i]; + } + delete [] valData->bufMyData; + delete valData; + } +} +void funcWork3() { + int a; + myGlobalData *valData = new myGlobalData; + valData->sizeInt = 10; + valData->bufMyData = new myData*[valData->sizeInt]; + try { + cleanFunction(); + allocData(valData); + cleanFunction(); + throwFunction(a); + + } + catch (...) + { + for (size_t i = 0; i < valData->sizeInt; i++) + { + delete[] valData->bufMyData[i]->buffer; // GOOD + delete valData->bufMyData[i]; + } + delete [] valData->bufMyData; + delete valData; + } +} + + +void funcWork4() { + int a; + myGlobalData *valData; + try { + valData = new myGlobalData; + cleanFunction(); + delete valData; + valData = 0; + throwFunction(a); + } + catch (...) + { + delete valData; // GOOD + } +} + +void funcWork4b() { + int a; + myGlobalData *valData; + try { + valData = new myGlobalData; + cleanFunction(); + delete valData; + throwFunction(a); + } + catch (...) + { + delete valData; // BAD + } +} +void funcWork5() { + int a; + myGlobalData *valData; + try { + valData = new myGlobalData; + cleanFunction(); + delete valData; + valData = 0; + throwFunction2(a); + } + catch (const exception &) { + delete valData; + valData = 0; + throw; + } + catch (...) + { + delete valData; // GOOD + } +} + +void funcWork5b() { + int a; + myGlobalData *valData; + try { + valData = new myGlobalData; + cleanFunction(); + throwFunction2(a); + } + catch (const exception &) { + delete valData; + throw; + } + catch (...) + { + delete valData; // BAD + } +} +void funcWork6() { + int a; + int flagB = 0; + myGlobalData *valData; + try { + valData = new myGlobalData; + cleanFunction(); + throwFunction2(a); + } + catch (const exception &) { + delete valData; + flagB = 1; + throw; + } + catch (...) + { + if(flagB == 0) + delete valData; // GOOD + } +} + +void runnerFunc() +{ + funcWork1(); + funcWork1b(); + funcWork2(); + funcWork3(); + funcWork4(); + funcWork4b(); + funcWork5(); + funcWork5b(); + funcWork6(); +} From 2309f67e9b80aa0a5a26844cc404a7b51fbbba96 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 1 Mar 2022 15:50:21 +0100 Subject: [PATCH 0035/1618] Python: Apply suggestions from code review Co-authored-by: yoff --- python/ql/lib/semmle/python/frameworks/Django.qll | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index d2285b72d19..d530afaf89e 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -584,7 +584,7 @@ module PrivateDjango { * - https://docs.djangoproject.com/en/3.1/ref/models/fields/#django.db.models.ImageField */ module FileField { - /** Gets a reference to the `flask.views.View` class or any subclass. */ + /** Gets a reference to the `django.db.models.FileField` or the `django.db.models.ImageField` class or any subclass. */ API::Node subclassRef() { exists(string className | className in ["FileField", "ImageField"] | // commonly used alias @@ -2288,11 +2288,7 @@ module PrivateDjango { exists(DataFlow::CallCfgNode call, DataFlow::Node uploadToArg, Function func | this.getParameter() = func.getArg(1) and call = django::db::models::FileField::subclassRef().getACall() and - ( - uploadToArg = call.getArg(2) - or - uploadToArg = call.getArgByName("upload_to") - ) and + uploadToArg in [call.getArg(2), call.getArgByName("upload_to")] and uploadToArg = poorMansFunctionTracker(func) ) } From 93750fe17fbc1133642d6a7af63826b314d19d15 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 4 Mar 2022 12:47:23 +0100 Subject: [PATCH 0036/1618] python: minimal CSRF implementation - currectly only looks for custom django middleware --- python/ql/lib/semmle/python/Concepts.qll | 31 ++++++++++ .../lib/semmle/python/frameworks/Django.qll | 31 ++++++++++ .../CWE-352/CSRFProtectionDisabled.qhelp | 60 +++++++++++++++++++ .../CWE-352/CSRFProtectionDisabled.ql | 19 ++++++ .../src/Security/CWE-352/examples/setting.py | 9 +++ 5 files changed, 150 insertions(+) create mode 100644 python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp create mode 100644 python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql create mode 100644 python/ql/src/Security/CWE-352/examples/setting.py diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index 6c67b0e5d91..8e4f810d4a0 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -105,6 +105,37 @@ module FileSystemWriteAccess { } } +/** + * A data-flow node that may set or unset Cross-site request forgery protection. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `CSRFProtectionSetting::Range` instead. + */ +class CSRFProtectionSetting extends DataFlow::Node instanceof CSRFProtectionSetting::Range { + /** + * Gets the boolean value corresponding to if CSRF protection is enabled + * (`true`) or disabled (`false`) by this node. + */ + boolean getVerificationSetting() { result = super.getVerificationSetting() } +} + +/** Provides a class for modeling new CSRF protection setting APIs. */ +module CSRFProtectionSetting { + /** + * A data-flow node that may set or unset Cross-site request forgery protection. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `CSRFProtectionSetting` instead. + */ + abstract class Range extends DataFlow::Node { + /** + * Gets the boolean value corresponding to if CSRF protection is enabled + * (`true`) or disabled (`false`) by this node. + */ + abstract boolean getVerificationSetting(); + } +} + /** Provides classes for modeling path-related APIs. */ module Path { /** diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index 8f34043f093..f5989badfe4 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2313,4 +2313,35 @@ module PrivateDjango { .getAnImmediateUse() } } + + // --------------------------------------------------------------------------- + // Settings + // --------------------------------------------------------------------------- + /** + * A custom middleware stack + */ + private class DjangoSettingsMiddlewareStack extends CSRFProtectionSetting::Range { + List list; + + DjangoSettingsMiddlewareStack() { + this.asExpr() = list and + // we look for an assignment to the `MIDDLEWARE` setting + exists(DataFlow::Node mw, string djangomw | + mw.asVar().getName() = "MIDDLEWARE" and + DataFlow::localFlow(this, mw) + | + // check that the list contains at least one reference to `django` + list.getAnElt().(StrConst).getText() = djangomw and + // TODO: Consider requiring `django.middleware.security.SecurityMiddleware` + // or something indicating that a security middleware is enabled. + djangomw.matches("django.%") + ) + } + + override boolean getVerificationSetting() { + if list.getAnElt().(StrConst).getText() = "django.middleware.csrf.CsrfViewMiddleware" + then result = true + else result = false + } + } } diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp new file mode 100644 index 00000000000..98a5dae20ba --- /dev/null +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp @@ -0,0 +1,60 @@ + + + + +

    + Cross-site request forgery (CSRF) is a type of vulnerability in which an + attacker is able to force a user carry out an action that the user did + not intend. +

    + +

    + The attacker tricks an authenticated user into submitting a request to the + web application. Typically this request will result in a state change on + the server, such as changing the user's password. The request can be + initiated when the user visits a site controlled by the attacker. If the + web application relies only on cookies for authentication, or on other + credentials that are automatically included in the request, then this + request will appear as legitimate to the server. +

    + +

    + A common countermeasure for CSRF is to generate a unique token to be + included in the HTML sent from the server to a user. This token can be + used as a hidden field to be sent back with requests to the server, where + the server can then check that the token is valid and associated with the + relevant user session. +

    +
    + + +

    + In many web frameworks, CSRF protection is enabled by default. In these + cases, using the default configuration is sufficient to guard against most + CSRF attacks. +

    +
    + + +

    + The following example shows a case where CSRF protection is disabled by + overriding the default middleware stack and not including the one protecting against CSRF. +

    + + + +

    + The protecting middleware was probably commented out during a testing phase, when server-side token generation was not set up. + Simply commenting it back in (or remove the custom middleware stack) will enable CSRF protection. +

    + +
    + + +
  • Wikipedia: Cross-site request forgery
  • +
  • OWASP: Cross-site request forgery
  • +
    + +
    diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql new file mode 100644 index 00000000000..00f2cad5050 --- /dev/null +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql @@ -0,0 +1,19 @@ +/** + * @name CSRF protection weakened or disabled + * @description Disabling or weakening CSRF protection may make the application + * vulnerable to a Cross-Site Request Forgery (CSRF) attack. + * @kind problem + * @problem.severity warning + * @security-severity 8.8 + * @precision high + * @id py/csrf-protection-disabled + * @tags security + * external/cwe/cwe-352 + */ + +import python +import semmle.python.Concepts + +from CSRFProtectionSetting s +where s.getVerificationSetting() = false +select s, "Potential CSRF vulnerability due to forgery protection being disabled or weakened." diff --git a/python/ql/src/Security/CWE-352/examples/setting.py b/python/ql/src/Security/CWE-352/examples/setting.py new file mode 100644 index 00000000000..d1f1f983cef --- /dev/null +++ b/python/ql/src/Security/CWE-352/examples/setting.py @@ -0,0 +1,9 @@ +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] From 895ce755c1891da7285adcec45e095eca1667975 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 7 Mar 2022 13:03:04 +0100 Subject: [PATCH 0037/1618] python: correct file name --- .../ql/src/Security/CWE-352/examples/{setting.py => settings.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename python/ql/src/Security/CWE-352/examples/{setting.py => settings.py} (100%) diff --git a/python/ql/src/Security/CWE-352/examples/setting.py b/python/ql/src/Security/CWE-352/examples/settings.py similarity index 100% rename from python/ql/src/Security/CWE-352/examples/setting.py rename to python/ql/src/Security/CWE-352/examples/settings.py From e000163614a85c95e0bdddb749c07ae826652312 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Wed, 9 Mar 2022 04:20:34 +0100 Subject: [PATCH 0038/1618] Properly model `AbstractSQL` sinks and taint steps --- .../semmle/code/java/frameworks/MyBatis.qll | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index 14c38740198..5564e499f84 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -102,3 +102,40 @@ class MyBatisSqlOperationAnnotationMethod extends Method { class TypeParam extends Interface { TypeParam() { this.hasQualifiedName("org.apache.ibatis.annotations", "Param") } } + +module ProviderInjection { + private import semmle.code.java.dataflow.DataFlow + + class MyBatisInjectionSink extends DataFlow::Node { + MyBatisInjectionSink() { + exists(Annotation a, Method m, TypeLiteral type, Class c | + a.getType() + .hasQualifiedName("org.apache.ibatis.annotations", + ["Select", "Delete", "Insert", "Update"] + "Provider") and + type = a.getValue(["type", "value"]) and + c.hasMethod(m, type.getTypeName().getType()) and + m.hasName(a.getTarget().getName()) and + this.asExpr() = m.getBody().getAStmt().(ReturnStmt).getResult() + ) + } + } + + class MyBatisAbstractSQLStep extends Unit { + predicate step(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma | + ma.getMethod() + .getDeclaringType() + .hasQualifiedName("org.apache.ibatis.jdbc", ["AbstractSQL", "AbstractSQL"]) and + ma.getMethod() + .hasName([ + "SELECT", "OFFSET_ROWS", "FETCH_FIRST_ROWS_ONLY", "OFFSET", "LIMIT", "ORDER_BY", + "HAVING", "GROUP_BY", "WHERE", "OUTER_JOIN", "RIGHT_OUTER_JOIN", "LEFT_OUTER_JOIN", + "INNER_JOIN", "JOIN", "FROM", "DELETE_FROM", "SELECT_DISTINCT", "SELECT", + "INTO_VALUES", "INTO_COLUMNS", "VALUES", "INSERT_INTO", "SET", "UPDATE" + ]) and + ma.getArgument([0, 1]) = node1.asExpr() and + ma = node2.asExpr() + ) + } + } +} From 447636bf1ce1b34ae29f6e037f28a85859cc87f3 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Wed, 9 Mar 2022 04:21:26 +0100 Subject: [PATCH 0039/1618] Attempt to add `MyBatis`' sinks and taint steps to `SQL` and `OGNL` injection queries --- .../ql/lib/semmle/code/java/security/OgnlInjection.qll | 10 ++++++++++ .../lib/semmle/code/java/security/QueryInjection.qll | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/java/ql/lib/semmle/code/java/security/OgnlInjection.qll b/java/ql/lib/semmle/code/java/security/OgnlInjection.qll index 5f411afa9ae..6d2dc7765ba 100644 --- a/java/ql/lib/semmle/code/java/security/OgnlInjection.qll +++ b/java/ql/lib/semmle/code/java/security/OgnlInjection.qll @@ -122,3 +122,13 @@ private class DefaultOgnlInjectionAdditionalTaintStep extends OgnlInjectionAddit setExpressionStep(node1, node2) } } + +private import semmle.code.java.frameworks.MyBatis::ProviderInjection + +private class MyBatisOgnlInjectionSink extends OgnlInjectionSink instanceof MyBatisInjectionSink { } + +private class MyBatisAbstractSQLOgnlInjectionStep extends OgnlInjectionAdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + any(MyBatisAbstractSQLStep step).step(node1, node2) + } +} diff --git a/java/ql/lib/semmle/code/java/security/QueryInjection.qll b/java/ql/lib/semmle/code/java/security/QueryInjection.qll index 86bd6dac4ad..6bb5d3082a4 100644 --- a/java/ql/lib/semmle/code/java/security/QueryInjection.qll +++ b/java/ql/lib/semmle/code/java/security/QueryInjection.qll @@ -66,3 +66,13 @@ private class MongoJsonStep extends AdditionalQueryInjectionTaintStep { ) } } + +private import semmle.code.java.frameworks.MyBatis::ProviderInjection + +private class MyBatisSqlInjectionSink extends QueryInjectionSink instanceof MyBatisInjectionSink { } + +private class MyBatisAbstractSQLInjectionStep extends AdditionalQueryInjectionTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + any(MyBatisAbstractSQLStep step).step(node1, node2) + } +} From ded9663f2b6558c54e788a98ca4e4d32e107a8cf Mon Sep 17 00:00:00 2001 From: jorgectf Date: Sun, 13 Mar 2022 13:59:03 +0100 Subject: [PATCH 0040/1618] Finish taint steps --- .../semmle/code/java/frameworks/MyBatis.qll | 91 +++++++++++++++---- .../code/java/security/OgnlInjection.qll | 2 +- .../code/java/security/QueryInjection.qll | 2 +- 3 files changed, 76 insertions(+), 19 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index 5564e499f84..96d88ef7975 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -4,6 +4,8 @@ import java import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.dataflow.TaintTracking /** The class `org.apache.ibatis.jdbc.SqlRunner`. */ class MyBatisSqlRunner extends RefType { @@ -104,38 +106,93 @@ class TypeParam extends Interface { } module ProviderInjection { - private import semmle.code.java.dataflow.DataFlow + private class MyBatisAbstractSQL extends RefType { + MyBatisAbstractSQL() { this.hasQualifiedName("org.apache.ibatis.jdbc", "AbstractSQL") } + } + + private class MyBatisProvider extends RefType { + MyBatisProvider() { + this.hasQualifiedName("org.apache.ibatis.annotations", + ["Select", "Delete", "Insert", "Update"] + "Provider") + } + } + + private class MyBatisAbstractSQLMethodNames extends string { + MyBatisAbstractSQLMethodNames() { + this in [ + "SELECT", "OFFSET_ROWS", "FETCH_FIRST_ROWS_ONLY", "OFFSET", "LIMIT", "ORDER_BY", "HAVING", + "GROUP_BY", "WHERE", "OUTER_JOIN", "RIGHT_OUTER_JOIN", "LEFT_OUTER_JOIN", "INNER_JOIN", + "JOIN", "FROM", "DELETE_FROM", "SELECT_DISTINCT", "SELECT", "INTO_VALUES", "INTO_COLUMNS", + "VALUES", "INSERT_INTO", "SET", "UPDATE" + ] + } + } class MyBatisInjectionSink extends DataFlow::Node { MyBatisInjectionSink() { exists(Annotation a, Method m, TypeLiteral type, Class c | - a.getType() - .hasQualifiedName("org.apache.ibatis.annotations", - ["Select", "Delete", "Insert", "Update"] + "Provider") and + a.getType() instanceof MyBatisProvider and type = a.getValue(["type", "value"]) and c.hasMethod(m, type.getTypeName().getType()) and - m.hasName(a.getTarget().getName()) and + m.hasName(a.getValue("method").(StringLiteral).getValue()) and this.asExpr() = m.getBody().getAStmt().(ReturnStmt).getResult() ) } } - class MyBatisAbstractSQLStep extends Unit { - predicate step(DataFlow::Node node1, DataFlow::Node node2) { + class MyBatisAdditionalTaintStep extends TaintTracking::AdditionalTaintStep { + abstract override predicate step(DataFlow::Node node1, DataFlow::Node node2); + } + + private class MyBatisProviderStep extends MyBatisAdditionalTaintStep { + override predicate step(DataFlow::Node n1, DataFlow::Node n2) { + exists( + MethodAccess ma, Annotation a, Method annotatedMethod, Method providerMethod, + TypeLiteral type, Class c + | + a.getType() instanceof MyBatisProvider and + annotatedMethod.getAnAnnotation() = a and + ma.getMethod() = annotatedMethod and + ma.getAnArgument() = n1.asExpr() and + type = a.getValue(["type", "value"]) and + providerMethod.hasName(a.getValue("method").(StringLiteral).getValue()) and + c.hasMethod(providerMethod, type.getTypeName().getType()) and + providerMethod.getAParameter() = n2.asParameter() + ) + } + } + + private class MyBatisAbstractSQLToStringStep extends MyBatisAdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { exists(MethodAccess ma | - ma.getMethod() - .getDeclaringType() - .hasQualifiedName("org.apache.ibatis.jdbc", ["AbstractSQL", "AbstractSQL"]) and - ma.getMethod() - .hasName([ - "SELECT", "OFFSET_ROWS", "FETCH_FIRST_ROWS_ONLY", "OFFSET", "LIMIT", "ORDER_BY", - "HAVING", "GROUP_BY", "WHERE", "OUTER_JOIN", "RIGHT_OUTER_JOIN", "LEFT_OUTER_JOIN", - "INNER_JOIN", "JOIN", "FROM", "DELETE_FROM", "SELECT_DISTINCT", "SELECT", - "INTO_VALUES", "INTO_COLUMNS", "VALUES", "INSERT_INTO", "SET", "UPDATE" - ]) and + ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and + ma.getMethod().getName() = "toString" and + ma.getQualifier() = node1.asExpr() and + ma = node2.asExpr() + ) + } + } + + private class MyBatisAbstractSQLMethodsStep extends MyBatisAdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma | + ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and + ma.getMethod().getName() instanceof MyBatisAbstractSQLMethodNames and ma.getArgument([0, 1]) = node1.asExpr() and ma = node2.asExpr() ) } } + + private class MyBatisAbstractSQLAnonymousClassStep extends MyBatisAdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma, ClassInstanceExpr c | + ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and + ma.getMethod().getName() instanceof MyBatisAbstractSQLMethodNames and + c.getAnonymousClass().getACallable() = ma.getCaller() and + node1.asExpr() = ma and + node2.asExpr() = c + ) + } + } } diff --git a/java/ql/lib/semmle/code/java/security/OgnlInjection.qll b/java/ql/lib/semmle/code/java/security/OgnlInjection.qll index 6d2dc7765ba..d7a0c08c7c5 100644 --- a/java/ql/lib/semmle/code/java/security/OgnlInjection.qll +++ b/java/ql/lib/semmle/code/java/security/OgnlInjection.qll @@ -129,6 +129,6 @@ private class MyBatisOgnlInjectionSink extends OgnlInjectionSink instanceof MyBa private class MyBatisAbstractSQLOgnlInjectionStep extends OgnlInjectionAdditionalTaintStep { override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - any(MyBatisAbstractSQLStep step).step(node1, node2) + any(MyBatisAdditionalTaintStep step).step(node1, node2) } } diff --git a/java/ql/lib/semmle/code/java/security/QueryInjection.qll b/java/ql/lib/semmle/code/java/security/QueryInjection.qll index 6bb5d3082a4..71f1cdb6218 100644 --- a/java/ql/lib/semmle/code/java/security/QueryInjection.qll +++ b/java/ql/lib/semmle/code/java/security/QueryInjection.qll @@ -73,6 +73,6 @@ private class MyBatisSqlInjectionSink extends QueryInjectionSink instanceof MyBa private class MyBatisAbstractSQLInjectionStep extends AdditionalQueryInjectionTaintStep { override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - any(MyBatisAbstractSQLStep step).step(node1, node2) + any(MyBatisAdditionalTaintStep step).step(node1, node2) } } From a0bf68f7cd041201d9b5699d1bd642bd7b7ca8db Mon Sep 17 00:00:00 2001 From: jorgectf Date: Mon, 14 Mar 2022 13:39:20 +0100 Subject: [PATCH 0041/1618] Generally extend `TaintTracking::AdditionalTaintStep` --- .../semmle/code/java/frameworks/MyBatis.qll | 170 +++++++++--------- .../code/java/security/OgnlInjection.qll | 9 +- .../code/java/security/QueryInjection.qll | 9 +- 3 files changed, 84 insertions(+), 104 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index 96d88ef7975..2ec89cac25a 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -105,94 +105,88 @@ class TypeParam extends Interface { TypeParam() { this.hasQualifiedName("org.apache.ibatis.annotations", "Param") } } -module ProviderInjection { - private class MyBatisAbstractSQL extends RefType { - MyBatisAbstractSQL() { this.hasQualifiedName("org.apache.ibatis.jdbc", "AbstractSQL") } - } +private class MyBatisAbstractSQL extends RefType { + MyBatisAbstractSQL() { this.hasQualifiedName("org.apache.ibatis.jdbc", "AbstractSQL") } +} - private class MyBatisProvider extends RefType { - MyBatisProvider() { - this.hasQualifiedName("org.apache.ibatis.annotations", - ["Select", "Delete", "Insert", "Update"] + "Provider") - } - } - - private class MyBatisAbstractSQLMethodNames extends string { - MyBatisAbstractSQLMethodNames() { - this in [ - "SELECT", "OFFSET_ROWS", "FETCH_FIRST_ROWS_ONLY", "OFFSET", "LIMIT", "ORDER_BY", "HAVING", - "GROUP_BY", "WHERE", "OUTER_JOIN", "RIGHT_OUTER_JOIN", "LEFT_OUTER_JOIN", "INNER_JOIN", - "JOIN", "FROM", "DELETE_FROM", "SELECT_DISTINCT", "SELECT", "INTO_VALUES", "INTO_COLUMNS", - "VALUES", "INSERT_INTO", "SET", "UPDATE" - ] - } - } - - class MyBatisInjectionSink extends DataFlow::Node { - MyBatisInjectionSink() { - exists(Annotation a, Method m, TypeLiteral type, Class c | - a.getType() instanceof MyBatisProvider and - type = a.getValue(["type", "value"]) and - c.hasMethod(m, type.getTypeName().getType()) and - m.hasName(a.getValue("method").(StringLiteral).getValue()) and - this.asExpr() = m.getBody().getAStmt().(ReturnStmt).getResult() - ) - } - } - - class MyBatisAdditionalTaintStep extends TaintTracking::AdditionalTaintStep { - abstract override predicate step(DataFlow::Node node1, DataFlow::Node node2); - } - - private class MyBatisProviderStep extends MyBatisAdditionalTaintStep { - override predicate step(DataFlow::Node n1, DataFlow::Node n2) { - exists( - MethodAccess ma, Annotation a, Method annotatedMethod, Method providerMethod, - TypeLiteral type, Class c - | - a.getType() instanceof MyBatisProvider and - annotatedMethod.getAnAnnotation() = a and - ma.getMethod() = annotatedMethod and - ma.getAnArgument() = n1.asExpr() and - type = a.getValue(["type", "value"]) and - providerMethod.hasName(a.getValue("method").(StringLiteral).getValue()) and - c.hasMethod(providerMethod, type.getTypeName().getType()) and - providerMethod.getAParameter() = n2.asParameter() - ) - } - } - - private class MyBatisAbstractSQLToStringStep extends MyBatisAdditionalTaintStep { - override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma | - ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and - ma.getMethod().getName() = "toString" and - ma.getQualifier() = node1.asExpr() and - ma = node2.asExpr() - ) - } - } - - private class MyBatisAbstractSQLMethodsStep extends MyBatisAdditionalTaintStep { - override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma | - ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and - ma.getMethod().getName() instanceof MyBatisAbstractSQLMethodNames and - ma.getArgument([0, 1]) = node1.asExpr() and - ma = node2.asExpr() - ) - } - } - - private class MyBatisAbstractSQLAnonymousClassStep extends MyBatisAdditionalTaintStep { - override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma, ClassInstanceExpr c | - ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and - ma.getMethod().getName() instanceof MyBatisAbstractSQLMethodNames and - c.getAnonymousClass().getACallable() = ma.getCaller() and - node1.asExpr() = ma and - node2.asExpr() = c - ) - } +private class MyBatisProvider extends RefType { + MyBatisProvider() { + this.hasQualifiedName("org.apache.ibatis.annotations", + ["Select", "Delete", "Insert", "Update"] + "Provider") + } +} + +private class MyBatisAbstractSQLMethodNames extends string { + MyBatisAbstractSQLMethodNames() { + this in [ + "SELECT", "OFFSET_ROWS", "FETCH_FIRST_ROWS_ONLY", "OFFSET", "LIMIT", "ORDER_BY", "HAVING", + "GROUP_BY", "WHERE", "OUTER_JOIN", "RIGHT_OUTER_JOIN", "LEFT_OUTER_JOIN", "INNER_JOIN", + "JOIN", "FROM", "DELETE_FROM", "SELECT_DISTINCT", "SELECT", "INTO_VALUES", "INTO_COLUMNS", + "VALUES", "INSERT_INTO", "SET", "UPDATE" + ] + } +} + +class MyBatisInjectionSink extends DataFlow::Node { + MyBatisInjectionSink() { + exists(Annotation a, Method m, TypeLiteral type, Class c | + a.getType() instanceof MyBatisProvider and + type = a.getValue(["type", "value"]) and + c.hasMethod(m, type.getTypeName().getType()) and + m.hasName(a.getValue("method").(StringLiteral).getValue()) and + this.asExpr() = m.getBody().getAStmt().(ReturnStmt).getResult() + ) + } +} + +private class MyBatisProviderStep extends TaintTracking::AdditionalTaintStep { + override predicate step(DataFlow::Node n1, DataFlow::Node n2) { + exists( + MethodAccess ma, Annotation a, Method annotatedMethod, Method providerMethod, + TypeLiteral type, Class c + | + a.getType() instanceof MyBatisProvider and + annotatedMethod.getAnAnnotation() = a and + ma.getMethod() = annotatedMethod and + ma.getAnArgument() = n1.asExpr() and + type = a.getValue(["type", "value"]) and + providerMethod.hasName(a.getValue("method").(StringLiteral).getValue()) and + c.hasMethod(providerMethod, type.getTypeName().getType()) and + providerMethod.getAParameter() = n2.asParameter() + ) + } +} + +private class MyBatisAbstractSQLToStringStep extends TaintTracking::AdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma | + ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and + ma.getMethod().getName() = "toString" and + ma.getQualifier() = node1.asExpr() and + ma = node2.asExpr() + ) + } +} + +private class MyBatisAbstractSQLMethodsStep extends TaintTracking::AdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma | + ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and + ma.getMethod().getName() instanceof MyBatisAbstractSQLMethodNames and + ma.getArgument([0, 1]) = node1.asExpr() and + ma = node2.asExpr() + ) + } +} + +private class MyBatisAbstractSQLAnonymousClassStep extends TaintTracking::AdditionalTaintStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma, ClassInstanceExpr c | + ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and + ma.getMethod().getName() instanceof MyBatisAbstractSQLMethodNames and + c.getAnonymousClass().getACallable() = ma.getCaller() and + node1.asExpr() = ma and + node2.asExpr() = c + ) } } diff --git a/java/ql/lib/semmle/code/java/security/OgnlInjection.qll b/java/ql/lib/semmle/code/java/security/OgnlInjection.qll index d7a0c08c7c5..222da6d9996 100644 --- a/java/ql/lib/semmle/code/java/security/OgnlInjection.qll +++ b/java/ql/lib/semmle/code/java/security/OgnlInjection.qll @@ -3,6 +3,7 @@ import java private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.frameworks.MyBatis /** * A data flow sink for unvalidated user input that is used in OGNL EL evaluation. @@ -123,12 +124,4 @@ private class DefaultOgnlInjectionAdditionalTaintStep extends OgnlInjectionAddit } } -private import semmle.code.java.frameworks.MyBatis::ProviderInjection - private class MyBatisOgnlInjectionSink extends OgnlInjectionSink instanceof MyBatisInjectionSink { } - -private class MyBatisAbstractSQLOgnlInjectionStep extends OgnlInjectionAdditionalTaintStep { - override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - any(MyBatisAdditionalTaintStep step).step(node1, node2) - } -} diff --git a/java/ql/lib/semmle/code/java/security/QueryInjection.qll b/java/ql/lib/semmle/code/java/security/QueryInjection.qll index 71f1cdb6218..f4fe51969b9 100644 --- a/java/ql/lib/semmle/code/java/security/QueryInjection.qll +++ b/java/ql/lib/semmle/code/java/security/QueryInjection.qll @@ -3,6 +3,7 @@ import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.frameworks.javaee.Persistence +private import semmle.code.java.frameworks.MyBatis import semmle.code.java.dataflow.ExternalFlow /** A sink for database query language injection vulnerabilities. */ @@ -67,12 +68,4 @@ private class MongoJsonStep extends AdditionalQueryInjectionTaintStep { } } -private import semmle.code.java.frameworks.MyBatis::ProviderInjection - private class MyBatisSqlInjectionSink extends QueryInjectionSink instanceof MyBatisInjectionSink { } - -private class MyBatisAbstractSQLInjectionStep extends AdditionalQueryInjectionTaintStep { - override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - any(MyBatisAdditionalTaintStep step).step(node1, node2) - } -} From 158366ab4684d88f4266b6f7e9eb8a000d19996f Mon Sep 17 00:00:00 2001 From: Jorge <46056498+jorgectf@users.noreply.github.com> Date: Mon, 14 Mar 2022 21:27:37 +0100 Subject: [PATCH 0042/1618] Apply suggestions from code review Co-authored-by: Tony Torralba --- .../semmle/code/java/frameworks/MyBatis.qll | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index 2ec89cac25a..f3f73087397 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -129,10 +129,9 @@ private class MyBatisAbstractSQLMethodNames extends string { class MyBatisInjectionSink extends DataFlow::Node { MyBatisInjectionSink() { - exists(Annotation a, Method m, TypeLiteral type, Class c | + exists(Annotation a, Method m | a.getType() instanceof MyBatisProvider and - type = a.getValue(["type", "value"]) and - c.hasMethod(m, type.getTypeName().getType()) and + m.getDeclaringType() = a.getValue(["type", "value"]).(TypeLiteral).getTypeName().getType() and m.hasName(a.getValue("method").(StringLiteral).getValue()) and this.asExpr() = m.getBody().getAStmt().(ReturnStmt).getResult() ) @@ -141,18 +140,17 @@ class MyBatisInjectionSink extends DataFlow::Node { private class MyBatisProviderStep extends TaintTracking::AdditionalTaintStep { override predicate step(DataFlow::Node n1, DataFlow::Node n2) { - exists( - MethodAccess ma, Annotation a, Method annotatedMethod, Method providerMethod, - TypeLiteral type, Class c + exists(MethodAccess ma, Annotation a, Method providerMethod | + exists(int i | + ma.getArgument(i) = n1.asExpr() and + providerMethod.getParameter(i) = n2.asParameter() + ) | - a.getType() instanceof MyBatisProvider and - annotatedMethod.getAnAnnotation() = a and - ma.getMethod() = annotatedMethod and - ma.getAnArgument() = n1.asExpr() and - type = a.getValue(["type", "value"]) and - providerMethod.hasName(a.getValue("method").(StringLiteral).getValue()) and - c.hasMethod(providerMethod, type.getTypeName().getType()) and - providerMethod.getAParameter() = n2.asParameter() + a.getType() instanceof MyBatisProvider and + ma.getMethod().getAnAnnotation() = a and + providerMethod.getDeclaringType() = + a.getValue(["type", "value"]).(TypeLiteral).getTypeName().getType() and + providerMethod.hasName(a.getValue("method").(StringLiteral).getValue()) ) } } From d47fcedd2135ef6778621201369395ccd61e8a1b Mon Sep 17 00:00:00 2001 From: jorgectf Date: Mon, 14 Mar 2022 21:31:51 +0100 Subject: [PATCH 0043/1618] Add tests --- .../CWE-089/src/main/MyBatisProvider.java | 35 ++++ .../CWE-089/src/main/MybatisSqlInjection.java | 21 +++ .../src/main/MybatisSqlInjectionService.java | 17 ++ .../CWE-089/src/main/SqlInjectionMapper.java | 29 ++++ .../ibatis/annotations/DeleteProvider.java | 29 ++++ .../ibatis/annotations/InsertProvider.java | 29 ++++ .../ibatis/annotations/SelectProvider.java | 29 ++++ .../ibatis/annotations/UpdateProvider.java | 29 ++++ .../org/apache/ibatis/jdbc/AbstractSQL.java | 154 ++++++++++++++++++ .../org/apache/ibatis/jdbc/SQL.java | 10 ++ 10 files changed, 382 insertions(+) create mode 100644 java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisProvider.java create mode 100644 java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/DeleteProvider.java create mode 100644 java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/InsertProvider.java create mode 100644 java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/SelectProvider.java create mode 100644 java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/UpdateProvider.java create mode 100644 java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/jdbc/AbstractSQL.java create mode 100644 java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/jdbc/SQL.java diff --git a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisProvider.java b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisProvider.java new file mode 100644 index 00000000000..e1eceae4f71 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisProvider.java @@ -0,0 +1,35 @@ +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.jdbc.SQL; + +public class MyBatisProvider { + public String badSelect(@Param("input") final String input) { + String s = (new SQL() { + { + this.SELECT("password"); + this.FROM("users"); + this.WHERE("username = '" + input + "'"); + } + }).toString(); + return s; + } + + public String badDelete(@Param("input") final String input) { + return "DELETE FROM users WHERE username = '" + input + "';"; + } + + public String badUpdate(@Param("input") final String input) { + String s = (new SQL() { + { + this.UPDATE("users"); + this.SET("balance = 0"); + this.WHERE("username = '" + input + "'"); + } + }).toString(); + return s; + } + + public String badInsert(@Param("input") final String input) { + return "INSERT INTO users VALUES (1, '" + input + "', 'hunter2');"; + } +} + diff --git a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjection.java b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjection.java index 9f37e2eaa15..624f27ad81d 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjection.java +++ b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjection.java @@ -68,4 +68,25 @@ public class MybatisSqlInjection { List result = mybatisSqlInjectionService.good1(id); return result; } + + // using providers + @GetMapping(value = "badSelect") + public String badSelect(@RequestParam String name) { + return mybatisSqlInjectionService.badSelect(name); + } + + @GetMapping(value = "badDelete") + public void badDelete(@RequestParam String name) { + mybatisSqlInjectionService.badDelete(name); + } + + @GetMapping(value = "badUpdate") + public void badUpdate(@RequestParam String name) { + mybatisSqlInjectionService.badUpdate(name); + } + + @GetMapping(value = "badInsert") + public void badInsert(@RequestParam String name) { + mybatisSqlInjectionService.badInsert(name); + } } diff --git a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjectionService.java b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjectionService.java index 88ae4581ce0..6b995fb17b9 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjectionService.java +++ b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjectionService.java @@ -55,4 +55,21 @@ public class MybatisSqlInjectionService { List result = sqlInjectionMapper.good1(id); return result; } + + // using providers + public String badSelect(String input) { + return sqlInjectionMapper.badSelect(input); + } + + public void badDelete(String input) { + sqlInjectionMapper.badDelete(input); + } + + public void badUpdate(String input) { + sqlInjectionMapper.badUpdate(input); + } + + public void badInsert(String input) { + sqlInjectionMapper.badInsert(input); + } } diff --git a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/SqlInjectionMapper.java b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/SqlInjectionMapper.java index 7823bdc78a1..20765bdd607 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/SqlInjectionMapper.java +++ b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/SqlInjectionMapper.java @@ -5,6 +5,10 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.SelectProvider; +import org.apache.ibatis.annotations.DeleteProvider; +import org.apache.ibatis.annotations.UpdateProvider; +import org.apache.ibatis.annotations.InsertProvider; @Mapper @Repository @@ -30,4 +34,29 @@ public interface SqlInjectionMapper { public Test bad9(HashMap map); List good1(Integer id); + + //using providers + @SelectProvider( + type = MyBatisProvider.class, + method = "badSelect" + ) + String badSelect(String input); + + @DeleteProvider( + type = MyBatisProvider.class, + method = "badDelete" + ) + void badDelete(String input); + + @UpdateProvider( + type = MyBatisProvider.class, + method = "badUpdate" + ) + void badUpdate(String input); + + @InsertProvider( + type = MyBatisProvider.class, + method = "badInsert" + ) + void badInsert(String input); } diff --git a/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/DeleteProvider.java b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/DeleteProvider.java new file mode 100644 index 00000000000..1f18d95a5f9 --- /dev/null +++ b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/DeleteProvider.java @@ -0,0 +1,29 @@ +package org.apache.ibatis.annotations; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +@Repeatable(DeleteProvider.List.class) +public @interface DeleteProvider { + + Class value() default void.class; + + Class type() default void.class; + + String method() default ""; + + @Documented + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + @interface List { + DeleteProvider[] value(); + } + +} \ No newline at end of file diff --git a/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/InsertProvider.java b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/InsertProvider.java new file mode 100644 index 00000000000..04646c6538e --- /dev/null +++ b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/InsertProvider.java @@ -0,0 +1,29 @@ +package org.apache.ibatis.annotations; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +@Repeatable(InsertProvider.List.class) +public @interface InsertProvider { + + Class value() default void.class; + + Class type() default void.class; + + String method() default ""; + + @Documented + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + @interface List { + InsertProvider[] value(); + } + +} \ No newline at end of file diff --git a/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/SelectProvider.java b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/SelectProvider.java new file mode 100644 index 00000000000..4c3b4e176cb --- /dev/null +++ b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/SelectProvider.java @@ -0,0 +1,29 @@ +package org.apache.ibatis.annotations; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +@Repeatable(SelectProvider.List.class) +public @interface SelectProvider { + + Class value() default void.class; + + Class type() default void.class; + + String method() default ""; + + @Documented + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + @interface List { + SelectProvider[] value(); + } + +} \ No newline at end of file diff --git a/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/UpdateProvider.java b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/UpdateProvider.java new file mode 100644 index 00000000000..32d2c21ad97 --- /dev/null +++ b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/annotations/UpdateProvider.java @@ -0,0 +1,29 @@ +package org.apache.ibatis.annotations; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +@Repeatable(UpdateProvider.List.class) +public @interface UpdateProvider { + + Class value() default void.class; + + Class type() default void.class; + + String method() default ""; + + @Documented + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.METHOD) + @interface List { + UpdateProvider[] value(); + } + +} \ No newline at end of file diff --git a/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/jdbc/AbstractSQL.java b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/jdbc/AbstractSQL.java new file mode 100644 index 00000000000..b5764e0cf0d --- /dev/null +++ b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/jdbc/AbstractSQL.java @@ -0,0 +1,154 @@ +package org.apache.ibatis.jdbc; + +public abstract class AbstractSQL { + public abstract T getSelf(); + + public T UPDATE(String table) { + return getSelf(); + } + + public T SET(String sets) { + return getSelf(); + } + + public T SET(String ... sets) { + return getSelf(); + } + + public T INSERT_INTO(String tableName) { + return getSelf(); + } + + public T VALUES(String columns, String values) { + return getSelf(); + } + + public T INTO_COLUMNS(String ... columns) { + return getSelf(); + } + + public T INTO_VALUES(String ... values) { + return getSelf(); + } + + public T SELECT(String columns) { + return getSelf(); + } + + public T SELECT(String ... columns) { + return getSelf(); + } + + public T SELECT_DISTINCT(String columns) { + return getSelf(); + } + + public T SELECT_DISTINCT(String ... columns) { + return getSelf(); + } + + public T DELETE_FROM(String table) { + return getSelf(); + } + + public T FROM(String table) { + return getSelf(); + } + + public T FROM(String ... tables) { + return getSelf(); + } + + public T JOIN(String join) { + return getSelf(); + } + + public T JOIN(String ... joins) { + return getSelf(); + } + + public T INNER_JOIN(String join) { + return getSelf(); + } + + public T INNER_JOIN(String ... joins) { + return getSelf(); + } + + public T LEFT_OUTER_JOIN(String join) { + return getSelf(); + } + + public T LEFT_OUTER_JOIN(String ... joins) { + return getSelf(); + } + + public T RIGHT_OUTER_JOIN(String join) { + return getSelf(); + } + + public T RIGHT_OUTER_JOIN(String ... joins) { + return getSelf(); + } + + public T OUTER_JOIN(String join) { + return getSelf(); + } + + public T OUTER_JOIN(String ... joins) { + return getSelf(); + } + + public T WHERE(String conditions) { + return getSelf(); + } + + public T WHERE(String ... conditions) { + return getSelf(); + } + + public T GROUP_BY(String columns) { + return getSelf(); + } + + public T GROUP_BY(String ... columns) { + return getSelf(); + } + + public T HAVING(String conditions) { + return getSelf(); + } + + public T HAVING(String ... conditions) { + return getSelf(); + } + + public T ORDER_BY(String columns) { + return getSelf(); + } + + public T ORDER_BY(String ... columns) { + return getSelf(); + } + + public T LIMIT(String variable) { + return getSelf(); + } + + public T OFFSET(String variable) { + return getSelf(); + } + + public T FETCH_FIRST_ROWS_ONLY(String variable) { + return getSelf(); + } + + public T OFFSET_ROWS(String variable) { + return getSelf(); + } + + @Override + public String toString() { + return ""; + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/jdbc/SQL.java b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/jdbc/SQL.java new file mode 100644 index 00000000000..37969f8be8c --- /dev/null +++ b/java/ql/test/stubs/org.mybatis-3.5.4/org/apache/ibatis/jdbc/SQL.java @@ -0,0 +1,10 @@ +package org.apache.ibatis.jdbc; + +public class SQL extends AbstractSQL { + + @Override + public SQL getSelf() { + return this; + } + +} \ No newline at end of file From 32f494eba1da51ee4a6a74254eb670576789cbcf Mon Sep 17 00:00:00 2001 From: jorgectf Date: Mon, 14 Mar 2022 21:32:55 +0100 Subject: [PATCH 0044/1618] Use `SummaryModelCsv` in `MyBatisAbstractSQLMethodsStep` --- .../semmle/code/java/frameworks/MyBatis.qll | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index f3f73087397..d00888fc617 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -146,7 +146,7 @@ private class MyBatisProviderStep extends TaintTracking::AdditionalTaintStep { providerMethod.getParameter(i) = n2.asParameter() ) | - a.getType() instanceof MyBatisProvider and + a.getType() instanceof MyBatisProvider and ma.getMethod().getAnAnnotation() = a and providerMethod.getDeclaringType() = a.getValue(["type", "value"]).(TypeLiteral).getTypeName().getType() and @@ -155,25 +155,13 @@ private class MyBatisProviderStep extends TaintTracking::AdditionalTaintStep { } } -private class MyBatisAbstractSQLToStringStep extends TaintTracking::AdditionalTaintStep { - override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma | - ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and - ma.getMethod().getName() = "toString" and - ma.getQualifier() = node1.asExpr() and - ma = node2.asExpr() - ) - } -} - -private class MyBatisAbstractSQLMethodsStep extends TaintTracking::AdditionalTaintStep { - override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma | - ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and - ma.getMethod().getName() instanceof MyBatisAbstractSQLMethodNames and - ma.getArgument([0, 1]) = node1.asExpr() and - ma = node2.asExpr() - ) +private class MyBatisAbstractSQLMethodsStep extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + "org.apache.ibatis.jdbc;AbstractSQL;true;" + any(MyBatisAbstractSQLMethodNames m) + + ";;;Argument[0..1];ReturnValue;taint" + ] } } From 8482c019595595e407f713e9f121f6514d336ce4 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Mon, 14 Mar 2022 21:35:26 +0100 Subject: [PATCH 0045/1618] Make `MyBatisProviderStep` an `AdditionalValueStep` --- java/ql/lib/semmle/code/java/frameworks/MyBatis.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index d00888fc617..401a859153c 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -138,7 +138,7 @@ class MyBatisInjectionSink extends DataFlow::Node { } } -private class MyBatisProviderStep extends TaintTracking::AdditionalTaintStep { +private class MyBatisProviderStep extends TaintTracking::AdditionalValueStep { override predicate step(DataFlow::Node n1, DataFlow::Node n2) { exists(MethodAccess ma, Annotation a, Method providerMethod | exists(int i | From c683b48af714814ddf44c80be1a0f72b6ee5b5b8 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Mon, 14 Mar 2022 21:41:36 +0100 Subject: [PATCH 0046/1618] Add `MyBatisInjectionSink`'s QLDoc --- java/ql/lib/semmle/code/java/frameworks/MyBatis.qll | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index 401a859153c..176a41c1f5e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -127,6 +127,13 @@ private class MyBatisAbstractSQLMethodNames extends string { } } +/** + * A return statement of a method used in a MyBatis Provider. + * + * See + * - `MyBatisProvider` + * - https://mybatis.org/mybatis-3/apidocs/org/apache/ibatis/annotations/package-summary.html + */ class MyBatisInjectionSink extends DataFlow::Node { MyBatisInjectionSink() { exists(Annotation a, Method m | From b62b8c8d28a0b326bba02b1c7a8e6a1601c392ef Mon Sep 17 00:00:00 2001 From: jorgectf Date: Mon, 14 Mar 2022 21:47:06 +0100 Subject: [PATCH 0047/1618] Use `SummaryModelCsv` for the `toString` taint step --- java/ql/lib/semmle/code/java/frameworks/MyBatis.qll | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index 176a41c1f5e..7d118e26a43 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -162,6 +162,12 @@ private class MyBatisProviderStep extends TaintTracking::AdditionalValueStep { } } +private class MyBatisAbstractSQLToStringStep extends SummaryModelCsv { + override predicate row(string row) { + row = ["org.apache.ibatis.jdbc;AbstractSQL;true;toString;;;Argument[-1];ReturnValue;taint"] + } +} + private class MyBatisAbstractSQLMethodsStep extends SummaryModelCsv { override predicate row(string row) { row = From f10dac31f927d2def655cb0bdc8b8c424199d5fc Mon Sep 17 00:00:00 2001 From: jorgectf Date: Mon, 14 Mar 2022 22:12:22 +0100 Subject: [PATCH 0048/1618] Format some tests --- .../src/main/MybatisSqlInjectionService.java | 16 +++++----- .../CWE-089/src/main/SqlInjectionMapper.java | 30 +++++++++---------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjectionService.java b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjectionService.java index 6b995fb17b9..89dbd599d71 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjectionService.java +++ b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MybatisSqlInjectionService.java @@ -58,18 +58,18 @@ public class MybatisSqlInjectionService { // using providers public String badSelect(String input) { - return sqlInjectionMapper.badSelect(input); - } + return sqlInjectionMapper.badSelect(input); + } public void badDelete(String input) { - sqlInjectionMapper.badDelete(input); - } + sqlInjectionMapper.badDelete(input); + } public void badUpdate(String input) { - sqlInjectionMapper.badUpdate(input); - } + sqlInjectionMapper.badUpdate(input); + } public void badInsert(String input) { - sqlInjectionMapper.badInsert(input); - } + sqlInjectionMapper.badInsert(input); + } } diff --git a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/SqlInjectionMapper.java b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/SqlInjectionMapper.java index 20765bdd607..5b159817297 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/SqlInjectionMapper.java +++ b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/SqlInjectionMapper.java @@ -42,21 +42,21 @@ public interface SqlInjectionMapper { ) String badSelect(String input); - @DeleteProvider( - type = MyBatisProvider.class, - method = "badDelete" - ) - void badDelete(String input); + @DeleteProvider( + type = MyBatisProvider.class, + method = "badDelete" + ) + void badDelete(String input); - @UpdateProvider( - type = MyBatisProvider.class, - method = "badUpdate" - ) - void badUpdate(String input); + @UpdateProvider( + type = MyBatisProvider.class, + method = "badUpdate" + ) + void badUpdate(String input); - @InsertProvider( - type = MyBatisProvider.class, - method = "badInsert" - ) - void badInsert(String input); + @InsertProvider( + type = MyBatisProvider.class, + method = "badInsert" + ) + void badInsert(String input); } From e99eaeb2564d864dd10497363cdfdad9b2aa58ae Mon Sep 17 00:00:00 2001 From: ihsinme Date: Tue, 15 Mar 2022 08:53:00 +0300 Subject: [PATCH 0049/1618] Apply suggestions from code review Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp | 4 ++-- .../CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp | 2 +- .../Security/CWE/CWE-476/semmle/tests/test.cpp | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp index 680d4d71cf6..38b498a5704 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp @@ -1,6 +1,6 @@ ... try { - if (chackValue) throw exception(); + if (checkValue) throw exception(); valData->bufMyData = new myData*[valData->sizeInt]; } @@ -13,7 +13,7 @@ try { } ... try { - if (chackValue) throw exception(); + if (checkValue) throw exception(); valData->bufMyData = new myData*[valData->sizeInt]; } diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp index 059387a7c30..b9a2e3db331 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.qhelp @@ -3,7 +3,7 @@ "qhelp.dtd"> -

    When clearing the data in the catch block, you must be sure that the memory was allocated before the exception.

    +

    When releasing memory in a catch block, be sure that the memory was allocated and has not already been released.

    diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp index d60cd54b719..3736ff30b8f 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp @@ -151,7 +151,7 @@ void funcWork3() { void funcWork4() { int a; - myGlobalData *valData; + myGlobalData *valData = 0; try { valData = new myGlobalData; cleanFunction(); @@ -167,7 +167,7 @@ void funcWork4() { void funcWork4b() { int a; - myGlobalData *valData; + myGlobalData *valData = 0; try { valData = new myGlobalData; cleanFunction(); @@ -181,7 +181,7 @@ void funcWork4b() { } void funcWork5() { int a; - myGlobalData *valData; + myGlobalData *valData = 0; try { valData = new myGlobalData; cleanFunction(); @@ -202,7 +202,7 @@ void funcWork5() { void funcWork5b() { int a; - myGlobalData *valData; + myGlobalData *valData = 0; try { valData = new myGlobalData; cleanFunction(); @@ -220,7 +220,7 @@ void funcWork5b() { void funcWork6() { int a; int flagB = 0; - myGlobalData *valData; + myGlobalData *valData = 0; try { valData = new myGlobalData; cleanFunction(); From 62ecf54aaa2bde21d9c82173fcb257d76d3a09b0 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Tue, 15 Mar 2022 08:53:38 +0300 Subject: [PATCH 0050/1618] Update DangerousUseOfExceptionBlocks.cpp --- .../Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp index 38b498a5704..ac08e5d043c 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp @@ -21,7 +21,7 @@ try { { for (size_t i = 0; i < valData->sizeInt; i++) { - if(delete valData->bufMyData[i]) + if(valData->bufMyData[i]) { delete[] valData->bufMyData[i]->buffer; // GOOD delete valData->bufMyData[i]; From 9aa440e5b6e9fd47d9ca12c749146be3a522deca Mon Sep 17 00:00:00 2001 From: jorgectf Date: Tue, 15 Mar 2022 13:23:23 +0100 Subject: [PATCH 0051/1618] Refactor `MyBatisAbstractSQLMethodsStep` and `MyBatisAbstractSQLMethod` See https://github.com/github/codeql/pull/8345\#discussion_r826734537 --- .../semmle/code/java/frameworks/MyBatis.qll | 50 +++++++++++++------ 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index 7d118e26a43..063be7a9357 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -116,15 +116,36 @@ private class MyBatisProvider extends RefType { } } -private class MyBatisAbstractSQLMethodNames extends string { - MyBatisAbstractSQLMethodNames() { - this in [ - "SELECT", "OFFSET_ROWS", "FETCH_FIRST_ROWS_ONLY", "OFFSET", "LIMIT", "ORDER_BY", "HAVING", - "GROUP_BY", "WHERE", "OUTER_JOIN", "RIGHT_OUTER_JOIN", "LEFT_OUTER_JOIN", "INNER_JOIN", - "JOIN", "FROM", "DELETE_FROM", "SELECT_DISTINCT", "SELECT", "INTO_VALUES", "INTO_COLUMNS", - "VALUES", "INSERT_INTO", "SET", "UPDATE" - ] +private class MyBatisAbstractSQLMethod extends Method { + string taintedArgs; + string signature; + + MyBatisAbstractSQLMethod() { + this.getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and + ( + this.hasName([ + "UPDATE", "SET", "INSERT_INTO", "SELECT", "OFFSET_ROWS", "LIMIT", "OFFSET", + "FETCH_FIRST_ROWS_ONLY", "DELETE_FROM", "INNER_JOIN", "ORDER_BY", "WHERE", "HAVING", + "OUTER_JOIN", "LEFT_OUTER_JOIN", "RIGHT_OUTER_JOIN", "GROUP_BY", "FROM", "SELECT_DISTINCT" + ]) and + taintedArgs = "Argument[0]" and + signature = "String" + or + this.hasName([ + "SET", "INTO_COLUMNS", "INTO_VALUES", "SELECT_DISTINCT", "FROM", "JOIN", "INNER_JOIN", + "LEFT_OUTER_JOIN", "RIGHT_OUTER_JOIN", "OUTER_JOIN", "WHERE", "GROUP_BY", "HAVING", + "ORDER_BY" + ]) and + taintedArgs = "Argument[0].ArrayElement" and + signature = "String[]" + or + this.hasName("VALUES") and taintedArgs = "Argument[0..1]" and signature = "String,String" + ) } + + string getTaintedArgs() { result = taintedArgs } + + string getCsvSignature() { result = signature } } /** @@ -170,19 +191,18 @@ private class MyBatisAbstractSQLToStringStep extends SummaryModelCsv { private class MyBatisAbstractSQLMethodsStep extends SummaryModelCsv { override predicate row(string row) { - row = - [ - "org.apache.ibatis.jdbc;AbstractSQL;true;" + any(MyBatisAbstractSQLMethodNames m) + - ";;;Argument[0..1];ReturnValue;taint" - ] + exists(MyBatisAbstractSQLMethod m | + row = + "org.apache.ibatis.jdbc;AbstractSQL;true;" + m.getName() + ";(" + m.getCsvSignature() + + ");;" + m.getTaintedArgs() + ";ReturnValue;taint" + ) } } private class MyBatisAbstractSQLAnonymousClassStep extends TaintTracking::AdditionalTaintStep { override predicate step(DataFlow::Node node1, DataFlow::Node node2) { exists(MethodAccess ma, ClassInstanceExpr c | - ma.getMethod().getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and - ma.getMethod().getName() instanceof MyBatisAbstractSQLMethodNames and + ma.getMethod() instanceof MyBatisAbstractSQLMethod and c.getAnonymousClass().getACallable() = ma.getCaller() and node1.asExpr() = ma and node2.asExpr() = c From ed198709b45db6eb58b25e51044e4a428890400d Mon Sep 17 00:00:00 2001 From: jorgectf Date: Tue, 15 Mar 2022 13:46:06 +0100 Subject: [PATCH 0052/1618] Refactor `MyBatisAbstractSQLMethodsStep` Set output to `Argument[-1]` instead of `ReturnValue` to be able to get rid of `MyBatisAbstractSQLAnonymousClassStep`. Thanks @pwntester! --- java/ql/lib/semmle/code/java/frameworks/MyBatis.qll | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index 063be7a9357..61fef1475eb 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -194,18 +194,7 @@ private class MyBatisAbstractSQLMethodsStep extends SummaryModelCsv { exists(MyBatisAbstractSQLMethod m | row = "org.apache.ibatis.jdbc;AbstractSQL;true;" + m.getName() + ";(" + m.getCsvSignature() + - ");;" + m.getTaintedArgs() + ";ReturnValue;taint" - ) - } -} - -private class MyBatisAbstractSQLAnonymousClassStep extends TaintTracking::AdditionalTaintStep { - override predicate step(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma, ClassInstanceExpr c | - ma.getMethod() instanceof MyBatisAbstractSQLMethod and - c.getAnonymousClass().getACallable() = ma.getCaller() and - node1.asExpr() = ma and - node2.asExpr() = c + ");;" + m.getTaintedArgs() + ";Argument[-1];taint" ) } } From 3356bc4085e6f2c639b30605407134967b0738cd Mon Sep 17 00:00:00 2001 From: jorgectf Date: Tue, 15 Mar 2022 16:26:34 +0100 Subject: [PATCH 0053/1618] Add change note --- java/ql/src/change-notes/2022-03-15-mybatis-providers.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/src/change-notes/2022-03-15-mybatis-providers.md diff --git a/java/ql/src/change-notes/2022-03-15-mybatis-providers.md b/java/ql/src/change-notes/2022-03-15-mybatis-providers.md new file mode 100644 index 00000000000..0e9cc640a63 --- /dev/null +++ b/java/ql/src/change-notes/2022-03-15-mybatis-providers.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added modeling for `MyBatis` (`org.apache.ibatis`) Providers. Added it as sink in `java/ql/lib/semmle/code/java/security/OgnlInjection.qll` and `java/ql/lib/semmle/code/java/security/QueryInjection.qll`. \ No newline at end of file From e0952ba4327046a336da194c1198251eae09bf09 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Tue, 15 Mar 2022 16:41:32 +0100 Subject: [PATCH 0054/1618] Fix change note Thanks @atorralba! --- java/ql/lib/change-notes/2022-03-15-mybatis-providers.md | 4 ++++ java/ql/src/change-notes/2022-03-15-mybatis-providers.md | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 java/ql/lib/change-notes/2022-03-15-mybatis-providers.md delete mode 100644 java/ql/src/change-notes/2022-03-15-mybatis-providers.md diff --git a/java/ql/lib/change-notes/2022-03-15-mybatis-providers.md b/java/ql/lib/change-notes/2022-03-15-mybatis-providers.md new file mode 100644 index 00000000000..32ba9c23c12 --- /dev/null +++ b/java/ql/lib/change-notes/2022-03-15-mybatis-providers.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added modeling of MyBatis (`org.apache.ibatis`) Providers, resulting in additional sinks for the queries `java/ognl-injection`, `java/sql-injection`, `java/sql-injection-local` and `java/concatenated-sql-query`. \ No newline at end of file diff --git a/java/ql/src/change-notes/2022-03-15-mybatis-providers.md b/java/ql/src/change-notes/2022-03-15-mybatis-providers.md deleted file mode 100644 index 0e9cc640a63..00000000000 --- a/java/ql/src/change-notes/2022-03-15-mybatis-providers.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added modeling for `MyBatis` (`org.apache.ibatis`) Providers. Added it as sink in `java/ql/lib/semmle/code/java/security/OgnlInjection.qll` and `java/ql/lib/semmle/code/java/security/QueryInjection.qll`. \ No newline at end of file From 295915019888f12755c9df1ae3a5511d50173b17 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Wed, 16 Mar 2022 09:30:38 +0300 Subject: [PATCH 0055/1618] Update DangerousUseOfExceptionBlocks.ql --- .../Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql index 926a9923108..8235249b527 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql @@ -8,6 +8,7 @@ * @tags correctness * security * external/cwe/cwe-476 + * external/cwe/cwe-415 */ import cpp From cd561dd19cf6189d0528ac093dd85ce72bc5e102 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Wed, 16 Mar 2022 09:53:45 +0300 Subject: [PATCH 0056/1618] Update test.cpp --- .../query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp index 3736ff30b8f..a5a1be59d1c 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp @@ -73,9 +73,12 @@ void funcWork1b() { void funcWork1() { int a; + int i; myGlobalData *valData = new myGlobalData; valData->sizeInt = 10; valData->bufMyData = new myData*[valData->sizeInt]; + for (i = 0; i < valData->sizeInt; i++) + valData->bufMyData[i] = 0; try { cleanFunction(); throwFunction(a); From ccbb4434de00e278378d33c897028d868eb61486 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Wed, 16 Mar 2022 09:54:35 +0300 Subject: [PATCH 0057/1618] Update DangerousUseOfExceptionBlocks.expected --- .../semmle/tests/DangerousUseOfExceptionBlocks.expected | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected index 26e9adebb9c..8f44dc5abe8 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected @@ -1,3 +1,3 @@ | test.cpp:63:3:71:3 | { ... } | it is possible to dereference a pointer when accessing a buffer, since it is possible to throw an exception before the memory for the bufMyData is allocated | -| test.cpp:178:3:180:3 | { ... } | perhaps a situation of uncertainty due to the repeated call of the delete function for the variable valData | -| test.cpp:216:3:218:3 | { ... } | perhaps a situation of uncertainty due to the repeated call of the delete function for the variable valData | +| test.cpp:181:3:183:3 | { ... } | perhaps a situation of uncertainty due to the repeated call of the delete function for the variable valData | +| test.cpp:219:3:221:3 | { ... } | perhaps a situation of uncertainty due to the repeated call of the delete function for the variable valData | From f6eb83fd223f89937261139b3cbd77ee84ffac96 Mon Sep 17 00:00:00 2001 From: jorgectf Date: Wed, 16 Mar 2022 10:12:38 +0100 Subject: [PATCH 0058/1618] Update `MyBatisAnnotationSqlInjection.qlref` By adding more imports in the test file, the expected result's lines changed. --- .../CWE-089/src/main/MyBatisAnnotationSqlInjection.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected index 8a9b7a3437b..dfc923f9b58 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-089/src/main/MyBatisAnnotationSqlInjection.expected @@ -13,4 +13,4 @@ nodes | MybatisSqlInjectionService.java:51:27:51:33 | hashMap | semmle.label | hashMap | subpaths #select -| MybatisSqlInjectionService.java:51:27:51:33 | hashMap | MybatisSqlInjection.java:62:19:62:43 | name : String | MybatisSqlInjectionService.java:51:27:51:33 | hashMap | MyBatis annotation SQL injection might include code from $@ to $@. | MybatisSqlInjection.java:62:19:62:43 | name | this user input | SqlInjectionMapper.java:29:2:29:54 | Select | this SQL operation | +| MybatisSqlInjectionService.java:51:27:51:33 | hashMap | MybatisSqlInjection.java:62:19:62:43 | name : String | MybatisSqlInjectionService.java:51:27:51:33 | hashMap | MyBatis annotation SQL injection might include code from $@ to $@. | MybatisSqlInjection.java:62:19:62:43 | name | this user input | SqlInjectionMapper.java:33:2:33:54 | Select | this SQL operation | From 8790df7a34aeccbe04253736aa8daa8ae3910c18 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 16 Mar 2022 15:07:43 +0100 Subject: [PATCH 0059/1618] Style fixes --- .../semmle/code/java/frameworks/MyBatis.qll | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index 61fef1475eb..4ddec87ff16 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -105,8 +105,8 @@ class TypeParam extends Interface { TypeParam() { this.hasQualifiedName("org.apache.ibatis.annotations", "Param") } } -private class MyBatisAbstractSQL extends RefType { - MyBatisAbstractSQL() { this.hasQualifiedName("org.apache.ibatis.jdbc", "AbstractSQL") } +private class MyBatisAbstractSql extends RefType { + MyBatisAbstractSql() { this.hasQualifiedName("org.apache.ibatis.jdbc", "AbstractSQL") } } private class MyBatisProvider extends RefType { @@ -116,12 +116,12 @@ private class MyBatisProvider extends RefType { } } -private class MyBatisAbstractSQLMethod extends Method { +private class MyBatisAbstractSqlMethod extends Method { string taintedArgs; string signature; - MyBatisAbstractSQLMethod() { - this.getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSQL and + MyBatisAbstractSqlMethod() { + this.getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSql and ( this.hasName([ "UPDATE", "SET", "INSERT_INTO", "SELECT", "OFFSET_ROWS", "LIMIT", "OFFSET", @@ -183,15 +183,15 @@ private class MyBatisProviderStep extends TaintTracking::AdditionalValueStep { } } -private class MyBatisAbstractSQLToStringStep extends SummaryModelCsv { +private class MyBatisAbstractSqlToStringStep extends SummaryModelCsv { override predicate row(string row) { - row = ["org.apache.ibatis.jdbc;AbstractSQL;true;toString;;;Argument[-1];ReturnValue;taint"] + row = "org.apache.ibatis.jdbc;AbstractSQL;true;toString;;;Argument[-1];ReturnValue;taint" } } -private class MyBatisAbstractSQLMethodsStep extends SummaryModelCsv { +private class MyBatisAbstractSqlMethodsStep extends SummaryModelCsv { override predicate row(string row) { - exists(MyBatisAbstractSQLMethod m | + exists(MyBatisAbstractSqlMethod m | row = "org.apache.ibatis.jdbc;AbstractSQL;true;" + m.getName() + ";(" + m.getCsvSignature() + ");;" + m.getTaintedArgs() + ";Argument[-1];taint" From d5fd0d6724081aface1cd549be92349596ada21c Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Wed, 26 Jan 2022 19:35:21 +0100 Subject: [PATCH 0060/1618] add ql/unused-field query --- ql/ql/src/queries/performance/UnusedField.ql | 43 ++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 ql/ql/src/queries/performance/UnusedField.ql diff --git a/ql/ql/src/queries/performance/UnusedField.ql b/ql/ql/src/queries/performance/UnusedField.ql new file mode 100644 index 00000000000..bc7385a1523 --- /dev/null +++ b/ql/ql/src/queries/performance/UnusedField.ql @@ -0,0 +1,43 @@ +/** + * @name UnusedField + * @description A field that is not used in the characteristic predicate will contain every value + * of its type when accessed in other predicates, which is probably not intended. + * @kind problem + * @problem.severity warning + * @id ql/unused-field + * @precision high + */ + +import ql + +from ClassType clz, ClassType implClz, FieldDecl field, string extraMsg +where + clz.getDeclaration().getAField() = field and + implClz.getASuperType*() = clz and + // The field is not accessed in the charpred (of any of the classes) + not exists(FieldAccess access | + access.getEnclosingPredicate() = + [clz.getDeclaration().getCharPred(), implClz.getDeclaration().getCharPred()] + ) and + // The implementation class is not abstract, and the field is not an override + not implClz.getDeclaration().isAbstract() and + not field.isOverride() and + // There doesn't exist a class in between `clz` and `implClz` that binds `field`. + not exists(ClassType c, CharPred p | + c.getASuperType*() = clz and + implClz.getASuperType*() = c and + p = c.getDeclaration().getCharPred() and + exists(FieldAccess access | access.getDeclaration() = field | + access.getEnclosingPredicate() = p + ) + ) and + (if clz = implClz then extraMsg = "." else extraMsg = " of any class between it and $@.") and + // The `implClz` does not override `field` with a more specific type. + not exists(FieldDecl override | + override = implClz.getDeclaration().getAField() and + override.getName() = field.getName() and + override.hasAnnotation("override") and + override.getVarDecl().getType() != field.getVarDecl().getType() + ) +select clz, "The field $@ declared in $@ is not used in the characteristic predicate" + extraMsg, + field, field.getName(), clz, clz.getName(), implClz, implClz.getName() From 879680057e37ac45eb702f1136b17d066c2f3d60 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 17 Mar 2022 09:41:42 +0100 Subject: [PATCH 0061/1618] fix all ql/unused-field warnings --- .../code/java/security/IntentUriPermissionManipulation.qll | 2 -- java/ql/src/experimental/semmle/code/java/PathSanitizer.qll | 2 -- .../ql/lib/semmle/javascript/frameworks/ClientRequests.qll | 2 -- .../ql/lib/semmle/javascript/frameworks/CryptoLibraries.qll | 2 -- .../ql/src/experimental/semmle/python/frameworks/Flask.qll | 5 ++++- 5 files changed, 4 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulation.qll b/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulation.qll index 8a51de7efd7..e82ad7a4b35 100644 --- a/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulation.qll +++ b/java/ql/lib/semmle/code/java/security/IntentUriPermissionManipulation.qll @@ -96,8 +96,6 @@ private class IntentFlagsOrDataChangedSanitizer extends IntentUriPermissionManip * ``` */ private class IntentFlagsOrDataCheckedGuard extends IntentUriPermissionManipulationGuard { - Expr condition; - IntentFlagsOrDataCheckedGuard() { intentFlagsOrDataChecked(this, _, _) } override predicate checks(Expr e, boolean branch) { intentFlagsOrDataChecked(this, e, branch) } diff --git a/java/ql/src/experimental/semmle/code/java/PathSanitizer.qll b/java/ql/src/experimental/semmle/code/java/PathSanitizer.qll index aba7bba5238..3d2118f7e27 100644 --- a/java/ql/src/experimental/semmle/code/java/PathSanitizer.qll +++ b/java/ql/src/experimental/semmle/code/java/PathSanitizer.qll @@ -136,8 +136,6 @@ private predicate isDisallowedWord(CompileTimeConstantExpr word) { /** A complementary guard that protects against path traversal, by looking for the literal `..`. */ class PathTraversalGuard extends Guard instanceof MethodAccess { - Expr checked; - PathTraversalGuard() { super.getMethod().getDeclaringType() instanceof TypeString and super.getMethod().hasName(["contains", "indexOf"]) and diff --git a/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll b/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll index d6006545827..e86af94463f 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/ClientRequests.qll @@ -330,8 +330,6 @@ module ClientRequest { * A model of a URL request made using `require("needle")(...)`. */ class PromisedNeedleRequest extends ClientRequest::Range { - DataFlow::Node url; - PromisedNeedleRequest() { this = DataFlow::moduleImport("needle").getACall() } override DataFlow::Node getUrl() { result = this.getArgument(1) } diff --git a/javascript/ql/lib/semmle/javascript/frameworks/CryptoLibraries.qll b/javascript/ql/lib/semmle/javascript/frameworks/CryptoLibraries.qll index 617d1720ab1..9dcd4d9fbb9 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/CryptoLibraries.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/CryptoLibraries.qll @@ -683,8 +683,6 @@ private module ExpressJwt { */ private module NodeRsa { private class CreateKey extends CryptographicKeyCreation, API::InvokeNode { - CryptographicAlgorithm algorithm; - CreateKey() { this = API::moduleImport("node-rsa").getAnInstantiation() or diff --git a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll index 9c66d9a4601..2bd354c151e 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Flask.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Flask.qll @@ -75,7 +75,10 @@ module ExperimentalFlask { private class FlaskResponse extends DataFlow::CallCfgNode, HeaderDeclaration::Range { KeyValuePair item; - FlaskResponse() { this = Flask::Response::classRef().getACall() } + FlaskResponse() { + this = Flask::Response::classRef().getACall() and + item = this.getArg(_).asExpr().(Dict).getAnItem() + } override DataFlow::Node getNameArg() { result.asExpr() = item.getKey() } From f3ca6bbc2e9b668e8cf85d28563ec16394aa7c92 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 17 Mar 2022 09:42:30 +0100 Subject: [PATCH 0062/1618] PY: update expected output after fixing bug in flask model --- .../query-tests/Security/CWE-113/HeaderInjection.expected | 6 ------ 1 file changed, 6 deletions(-) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-113/HeaderInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-113/HeaderInjection.expected index 48fc4dfab07..100beb0f4b3 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-113/HeaderInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-113/HeaderInjection.expected @@ -13,8 +13,6 @@ edges | flask_bad.py:35:18:35:24 | ControlFlowNode for request | flask_bad.py:35:18:35:29 | ControlFlowNode for Attribute | | flask_bad.py:35:18:35:29 | ControlFlowNode for Attribute | flask_bad.py:35:18:35:43 | ControlFlowNode for Subscript | | flask_bad.py:35:18:35:43 | ControlFlowNode for Subscript | flask_bad.py:38:24:38:33 | ControlFlowNode for rfs_header | -| flask_bad.py:44:44:44:50 | ControlFlowNode for request | flask_bad.py:44:44:44:55 | ControlFlowNode for Attribute | -| flask_bad.py:44:44:44:55 | ControlFlowNode for Attribute | flask_bad.py:44:44:44:69 | ControlFlowNode for Subscript | nodes | django_bad.py:5:18:5:58 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | django_bad.py:7:40:7:49 | ControlFlowNode for rfs_header | semmle.label | ControlFlowNode for rfs_header | @@ -36,9 +34,6 @@ nodes | flask_bad.py:35:18:35:29 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | | flask_bad.py:35:18:35:43 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | | flask_bad.py:38:24:38:33 | ControlFlowNode for rfs_header | semmle.label | ControlFlowNode for rfs_header | -| flask_bad.py:44:44:44:50 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| flask_bad.py:44:44:44:55 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| flask_bad.py:44:44:44:69 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | subpaths #select | django_bad.py:7:40:7:49 | ControlFlowNode for rfs_header | django_bad.py:5:18:5:58 | ControlFlowNode for Attribute() | django_bad.py:7:40:7:49 | ControlFlowNode for rfs_header | $@ HTTP header is constructed from a $@. | django_bad.py:7:40:7:49 | ControlFlowNode for rfs_header | This | django_bad.py:5:18:5:58 | ControlFlowNode for Attribute() | user-provided value | @@ -47,4 +42,3 @@ subpaths | flask_bad.py:21:38:21:47 | ControlFlowNode for rfs_header | flask_bad.py:19:18:19:24 | ControlFlowNode for request | flask_bad.py:21:38:21:47 | ControlFlowNode for rfs_header | $@ HTTP header is constructed from a $@. | flask_bad.py:21:38:21:47 | ControlFlowNode for rfs_header | This | flask_bad.py:19:18:19:24 | ControlFlowNode for request | user-provided value | | flask_bad.py:29:34:29:43 | ControlFlowNode for rfs_header | flask_bad.py:27:18:27:24 | ControlFlowNode for request | flask_bad.py:29:34:29:43 | ControlFlowNode for rfs_header | $@ HTTP header is constructed from a $@. | flask_bad.py:29:34:29:43 | ControlFlowNode for rfs_header | This | flask_bad.py:27:18:27:24 | ControlFlowNode for request | user-provided value | | flask_bad.py:38:24:38:33 | ControlFlowNode for rfs_header | flask_bad.py:35:18:35:24 | ControlFlowNode for request | flask_bad.py:38:24:38:33 | ControlFlowNode for rfs_header | $@ HTTP header is constructed from a $@. | flask_bad.py:38:24:38:33 | ControlFlowNode for rfs_header | This | flask_bad.py:35:18:35:24 | ControlFlowNode for request | user-provided value | -| flask_bad.py:44:44:44:69 | ControlFlowNode for Subscript | flask_bad.py:44:44:44:50 | ControlFlowNode for request | flask_bad.py:44:44:44:69 | ControlFlowNode for Subscript | $@ HTTP header is constructed from a $@. | flask_bad.py:44:44:44:69 | ControlFlowNode for Subscript | This | flask_bad.py:44:44:44:50 | ControlFlowNode for request | user-provided value | From 22cf3f7b2095888576d8c5fd0efc731a2f7b22dd Mon Sep 17 00:00:00 2001 From: ihsinme Date: Mon, 21 Mar 2022 09:50:30 +0300 Subject: [PATCH 0063/1618] Update test.cpp --- .../CWE/CWE-476/semmle/tests/test.cpp | 88 +++++++++---------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp index a5a1be59d1c..9bf5767e19d 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp @@ -29,12 +29,12 @@ struct myGlobalData myData** bufMyData; }; -void allocData(myGlobalData * dataP) { - for (size_t i = 0; i < dataP->sizeInt; i++) +void allocData(myData ** bufMyData) { + for (size_t i = 0; i < 10; i++) { - dataP->bufMyData[i] = new myData; - dataP->bufMyData[i]->sizeInt = 10; - dataP->bufMyData[i]->buffer = new char[dataP->bufMyData[i]->sizeInt]; + bufMyData[i] = new myData; + bufMyData[i]->sizeInt = 10; + bufMyData[i]->buffer = new char[10]; } } @@ -47,68 +47,68 @@ void throwFunction2(int a) { } void funcWork1b() { int a; - myGlobalData *valData = new myGlobalData; + myData **bufMyData; try { cleanFunction(); throwFunction(a); - valData->sizeInt = 10; - valData->bufMyData = new myData*[valData->sizeInt]; + + bufMyData = new myData*[10]; cleanFunction(); - allocData(valData); + allocData(bufMyData); cleanFunction(); } catch (...) { - for (size_t i = 0; i < valData->sizeInt; i++) + for (size_t i = 0; i < 10; i++) { - delete[] valData->bufMyData[i]->buffer; // BAD - delete valData->bufMyData[i]; + delete[] bufMyData[i]->buffer; // BAD + delete bufMyData[i]; } - delete [] valData->bufMyData; - delete valData; + delete [] bufMyData; + } } void funcWork1() { int a; int i; - myGlobalData *valData = new myGlobalData; - valData->sizeInt = 10; - valData->bufMyData = new myData*[valData->sizeInt]; - for (i = 0; i < valData->sizeInt; i++) - valData->bufMyData[i] = 0; + myData **bufMyData; + + bufMyData = new myData*[10]; + for (i = 0; i < 10; i++) + bufMyData[i] = 0; try { cleanFunction(); throwFunction(a); cleanFunction(); - allocData(valData); + allocData(bufMyData); cleanFunction(); } catch (...) { - for (size_t i = 0; i < valData->sizeInt; i++) + for (size_t i = 0; i < 10; i++) { - if (valData->bufMyData[i]) - delete[] valData->bufMyData[i]->buffer; // GOOD - delete valData->bufMyData[i]; + if (bufMyData[i]) + delete[] bufMyData[i]->buffer; // GOOD + delete bufMyData[i]; } - delete [] valData->bufMyData; - delete valData; + delete [] bufMyData; + } } void funcWork2() { int a; - myGlobalData *valData = new myGlobalData; - valData->sizeInt = 10; - valData->bufMyData = new myData*[valData->sizeInt]; + myData **bufMyData; + + bufMyData = new myData*[10]; try { do { cleanFunction(); - allocData(valData); + allocData(bufMyData); cleanFunction(); throwFunction(a); @@ -118,36 +118,36 @@ void funcWork2() { } catch (...) { - for (size_t i = 0; i < valData->sizeInt; i++) + for (size_t i = 0; i < 10; i++) { - delete[] valData->bufMyData[i]->buffer; // GOOD - delete valData->bufMyData[i]; + delete[] bufMyData[i]->buffer; // GOOD + delete bufMyData[i]; } - delete [] valData->bufMyData; - delete valData; + delete [] bufMyData; + } } void funcWork3() { int a; - myGlobalData *valData = new myGlobalData; - valData->sizeInt = 10; - valData->bufMyData = new myData*[valData->sizeInt]; + myData **bufMyData; + + bufMyData = new myData*[10]; try { cleanFunction(); - allocData(valData); + allocData(bufMyData); cleanFunction(); throwFunction(a); } catch (...) { - for (size_t i = 0; i < valData->sizeInt; i++) + for (size_t i = 0; i < 10; i++) { - delete[] valData->bufMyData[i]->buffer; // GOOD - delete valData->bufMyData[i]; + delete[] bufMyData[i]->buffer; // GOOD + delete bufMyData[i]; } - delete [] valData->bufMyData; - delete valData; + delete [] bufMyData; + } } From 151c93f5022ea91300b11df6c2f1d981b5364c40 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Mon, 21 Mar 2022 09:52:14 +0300 Subject: [PATCH 0064/1618] Update DangerousUseOfExceptionBlocks.cpp --- .../CWE-476/DangerousUseOfExceptionBlocks.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp index ac08e5d043c..ea4686fdb8c 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.cpp @@ -1,30 +1,30 @@ ... try { if (checkValue) throw exception(); - valData->bufMyData = new myData*[valData->sizeInt]; + bufMyData = new myData*[sizeInt]; } catch (...) { - for (size_t i = 0; i < valData->sizeInt; i++) + for (size_t i = 0; i < sizeInt; i++) { - delete[] valData->bufMyData[i]->buffer; // BAD - delete valData->bufMyData[i]; + delete[] bufMyData[i]->buffer; // BAD + delete bufMyData[i]; } ... try { if (checkValue) throw exception(); - valData->bufMyData = new myData*[valData->sizeInt]; + bufMyData = new myData*[sizeInt]; } catch (...) { - for (size_t i = 0; i < valData->sizeInt; i++) + for (size_t i = 0; i < sizeInt; i++) { - if(valData->bufMyData[i]) + if(bufMyData[i]) { - delete[] valData->bufMyData[i]->buffer; // GOOD - delete valData->bufMyData[i]; + delete[] bufMyData[i]->buffer; // GOOD + delete bufMyData[i]; } } From f5b53083ae77a6a9ed459e9189877cb7326f2ed1 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Tue, 22 Mar 2022 08:44:19 +0100 Subject: [PATCH 0065/1618] python: require authentication middleware for CSRF to be relevant --- python/ql/lib/semmle/python/frameworks/Django.qll | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index f5989badfe4..ee273a9f2a6 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2326,15 +2326,16 @@ module PrivateDjango { DjangoSettingsMiddlewareStack() { this.asExpr() = list and // we look for an assignment to the `MIDDLEWARE` setting - exists(DataFlow::Node mw, string djangomw | + exists(DataFlow::Node mw | mw.asVar().getName() = "MIDDLEWARE" and DataFlow::localFlow(this, mw) | - // check that the list contains at least one reference to `django` - list.getAnElt().(StrConst).getText() = djangomw and - // TODO: Consider requiring `django.middleware.security.SecurityMiddleware` - // or something indicating that a security middleware is enabled. - djangomw.matches("django.%") + // it only counts as setting the CSRF protection, if the app uses authentication, + // so check that the list contains the django authentication middleware. + // + // This also strongly implies that we are actually looking at the `MIDDLEWARE` setting. + list.getAnElt().(StrConst).getText() = + "django.contrib.auth.middleware.AuthenticationMiddleware" ) } From 0f2c21c8bd6f953a41ed13721e93de8245b2fd1a Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Tue, 22 Mar 2022 13:42:52 +0100 Subject: [PATCH 0066/1618] python: require local protection to be absent for CSRF to be likely --- python/ql/lib/semmle/python/Concepts.qll | 39 ++++++++++++++++++- .../lib/semmle/python/frameworks/Django.qll | 17 ++++++++ .../CWE-352/CSRFProtectionDisabled.ql | 4 +- .../frameworks/django-v2-v3/response_test.py | 2 + 4 files changed, 59 insertions(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index 8e4f810d4a0..04d4d63aca3 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -106,7 +106,8 @@ module FileSystemWriteAccess { } /** - * A data-flow node that may set or unset Cross-site request forgery protection. + * A data-flow node that may set or unset Cross-site request forgery protection + * in a global manner. * * Extend this class to refine existing API models. If you want to model new APIs, * extend `CSRFProtectionSetting::Range` instead. @@ -122,7 +123,8 @@ class CSRFProtectionSetting extends DataFlow::Node instanceof CSRFProtectionSett /** Provides a class for modeling new CSRF protection setting APIs. */ module CSRFProtectionSetting { /** - * A data-flow node that may set or unset Cross-site request forgery protection. + * A data-flow node that may set or unset Cross-site request forgery protection + * in a global manner. * * Extend this class to model new APIs. If you want to refine existing API models, * extend `CSRFProtectionSetting` instead. @@ -136,6 +138,39 @@ module CSRFProtectionSetting { } } +/** + * A data-flow node that provides Cross-site request forgery protection + * for a specific part of an application. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `CSRFProtection::Range` instead. + */ +class CSRFProtection extends DataFlow::Node instanceof CSRFProtection::Range { + /** + * Gets a `Function` representing the protected interaction + * (probably a request handler). + */ + Function getProtected() { result = super.getProtected() } +} + +/** Provides a class for modeling new CSRF protection setting APIs. */ +module CSRFProtection { + /** + * A data-flow node that provides Cross-site request forgery protection + * for a specific part of an application. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `CSRFProtection` instead. + */ + abstract class Range extends DataFlow::Node { + /** + * Gets a `Function` representing the protected interaction + * (probably a request handler). + */ + abstract Function getProtected(); + } +} + /** Provides classes for modeling path-related APIs. */ module Path { /** diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index ee273a9f2a6..baa81c682ea 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2346,3 +2346,20 @@ module PrivateDjango { } } } + +private class DjangoCSRFDecorator extends CSRFProtection::Range { + Function function; + + DjangoCSRFDecorator() { + this = + API::moduleImport("django") + .getMember("views") + .getMember("decorators") + .getMember("csrf") + .getMember("csrf_protect") + .getAUse() and + this.asExpr() = function.getADecorator() + } + + override Function getProtected() { result = function } +} diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql index 00f2cad5050..489ed1ea53c 100644 --- a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql @@ -15,5 +15,7 @@ import python import semmle.python.Concepts from CSRFProtectionSetting s -where s.getVerificationSetting() = false +where + s.getVerificationSetting() = false and + not exists(CSRFProtection p) select s, "Potential CSRF vulnerability due to forgery protection being disabled or weakened." diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py b/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py index 74f306e8357..4007b2d8063 100644 --- a/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py @@ -1,5 +1,6 @@ from django.http.response import HttpResponse, HttpResponseRedirect, HttpResponsePermanentRedirect, JsonResponse, HttpResponseNotFound from django.views.generic import RedirectView +from django.views.decorators.csrf import csrf_protect import django.shortcuts import json @@ -117,6 +118,7 @@ class CustomJsonResponse(JsonResponse): def __init__(self, banner, content, *args, **kwargs): super().__init__(content, *args, content_type="text/html", **kwargs) +@csrf_protect def safe__custom_json_response(request): return CustomJsonResponse("ACME Responses", {"foo": request.GET.get("foo")}) # $HttpResponse mimetype=application/json MISSING: responseBody=Dict SPURIOUS: responseBody="ACME Responses" From 53de8287f532d14beae84b1398c18a4b033b03b6 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Tue, 22 Mar 2022 14:57:05 +0100 Subject: [PATCH 0067/1618] python: rule out test code for CSRF --- python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql index 489ed1ea53c..5caa19d3d88 100644 --- a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql @@ -17,5 +17,7 @@ import semmle.python.Concepts from CSRFProtectionSetting s where s.getVerificationSetting() = false and - not exists(CSRFProtection p) + not exists(CSRFProtection p) and + // rule out test code as this is a common place to turn off CSRF protection + not s.getLocation().getFile().getAbsolutePath().matches("%test%") select s, "Potential CSRF vulnerability due to forgery protection being disabled or weakened." From 441e206cfaa776cdafa775dfdee567052b5dea94 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 23 Mar 2022 11:29:27 +0100 Subject: [PATCH 0068/1618] python: CSRF -> Csrf --- python/ql/lib/semmle/python/Concepts.qll | 16 +++++----- .../lib/semmle/python/frameworks/Django.qll | 30 +++++++++---------- .../CWE-352/CSRFProtectionDisabled.ql | 4 +-- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index 04d4d63aca3..1f4aca0b21a 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -110,9 +110,9 @@ module FileSystemWriteAccess { * in a global manner. * * Extend this class to refine existing API models. If you want to model new APIs, - * extend `CSRFProtectionSetting::Range` instead. + * extend `CsrfProtectionSetting::Range` instead. */ -class CSRFProtectionSetting extends DataFlow::Node instanceof CSRFProtectionSetting::Range { +class CsrfProtectionSetting extends DataFlow::Node instanceof CsrfProtectionSetting::Range { /** * Gets the boolean value corresponding to if CSRF protection is enabled * (`true`) or disabled (`false`) by this node. @@ -121,13 +121,13 @@ class CSRFProtectionSetting extends DataFlow::Node instanceof CSRFProtectionSett } /** Provides a class for modeling new CSRF protection setting APIs. */ -module CSRFProtectionSetting { +module CsrfProtectionSetting { /** * A data-flow node that may set or unset Cross-site request forgery protection * in a global manner. * * Extend this class to model new APIs. If you want to refine existing API models, - * extend `CSRFProtectionSetting` instead. + * extend `CsrfProtectionSetting` instead. */ abstract class Range extends DataFlow::Node { /** @@ -143,9 +143,9 @@ module CSRFProtectionSetting { * for a specific part of an application. * * Extend this class to refine existing API models. If you want to model new APIs, - * extend `CSRFProtection::Range` instead. + * extend `CsrfLocalProtection::Range` instead. */ -class CSRFProtection extends DataFlow::Node instanceof CSRFProtection::Range { +class CsrfLocalProtection extends DataFlow::Node instanceof CsrfLocalProtection::Range { /** * Gets a `Function` representing the protected interaction * (probably a request handler). @@ -154,13 +154,13 @@ class CSRFProtection extends DataFlow::Node instanceof CSRFProtection::Range { } /** Provides a class for modeling new CSRF protection setting APIs. */ -module CSRFProtection { +module CsrfLocalProtection { /** * A data-flow node that provides Cross-site request forgery protection * for a specific part of an application. * * Extend this class to model new APIs. If you want to refine existing API models, - * extend `CSRFProtection` instead. + * extend `CsrfLocalProtection` instead. */ abstract class Range extends DataFlow::Node { /** diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index baa81c682ea..efa1a0eaa48 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2320,7 +2320,7 @@ module PrivateDjango { /** * A custom middleware stack */ - private class DjangoSettingsMiddlewareStack extends CSRFProtectionSetting::Range { + private class DjangoSettingsMiddlewareStack extends CsrfProtectionSetting::Range { List list; DjangoSettingsMiddlewareStack() { @@ -2345,21 +2345,21 @@ module PrivateDjango { else result = false } } -} -private class DjangoCSRFDecorator extends CSRFProtection::Range { - Function function; + private class DjangoCsrfDecorator extends CsrfLocalProtection::Range { + Function function; - DjangoCSRFDecorator() { - this = - API::moduleImport("django") - .getMember("views") - .getMember("decorators") - .getMember("csrf") - .getMember("csrf_protect") - .getAUse() and - this.asExpr() = function.getADecorator() + DjangoCsrfDecorator() { + this = + API::moduleImport("django") + .getMember("views") + .getMember("decorators") + .getMember("csrf") + .getMember("csrf_protect") + .getAUse() and + this.asExpr() = function.getADecorator() + } + + override Function getProtected() { result = function } } - - override Function getProtected() { result = function } } diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql index 5caa19d3d88..91609c25adb 100644 --- a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql @@ -14,10 +14,10 @@ import python import semmle.python.Concepts -from CSRFProtectionSetting s +from CsrfProtectionSetting s where s.getVerificationSetting() = false and - not exists(CSRFProtection p) and + not exists(CsrfLocalProtection p) and // rule out test code as this is a common place to turn off CSRF protection not s.getLocation().getFile().getAbsolutePath().matches("%test%") select s, "Potential CSRF vulnerability due to forgery protection being disabled or weakened." From 6c2449564a768a96989e8c60fae4d041a39bd80b Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 23 Mar 2022 12:05:09 +0100 Subject: [PATCH 0069/1618] python: add concept tests --- .../test/experimental/meta/ConceptsTest.qll | 32 +++++++++++++++++++ .../frameworks/django-v2-v3/response_test.py | 2 +- .../django-v2-v3/testproj/settings.py | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/python/ql/test/experimental/meta/ConceptsTest.qll b/python/ql/test/experimental/meta/ConceptsTest.qll index 517f3a50bf7..6fd15e586f5 100644 --- a/python/ql/test/experimental/meta/ConceptsTest.qll +++ b/python/ql/test/experimental/meta/ConceptsTest.qll @@ -503,3 +503,35 @@ class HttpClientRequestTest extends InlineExpectationsTest { ) } } + +class CsrfProtectionSettingTest extends InlineExpectationsTest { + CsrfProtectionSettingTest() { this = "CsrfProtectionSettingTest" } + + override string getARelevantTag() { result = "CsrfProtectionSetting" } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + exists(location.getFile().getRelativePath()) and + exists(CsrfProtectionSetting setting | + location = setting.getLocation() and + element = setting.toString() and + value = setting.getVerificationSetting().toString() and + tag = "CsrfProtectionSetting" + ) + } +} + +class CsrfLocalProtectionTest extends InlineExpectationsTest { + CsrfLocalProtectionTest() { this = "CsrfLocalProtectionTest" } + + override string getARelevantTag() { result = "CsrfLocalProtection" } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + exists(location.getFile().getRelativePath()) and + exists(CsrfLocalProtection p | + location = p.getLocation() and + element = p.toString() and + value = p.getProtected().getName().toString() and + tag = "CsrfLocalProtection" + ) + } +} diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py b/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py index 4007b2d8063..73517f261fd 100644 --- a/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py @@ -118,7 +118,7 @@ class CustomJsonResponse(JsonResponse): def __init__(self, banner, content, *args, **kwargs): super().__init__(content, *args, content_type="text/html", **kwargs) -@csrf_protect +@csrf_protect # $CsrfLocalProtection=safe__custom_json_response def safe__custom_json_response(request): return CustomJsonResponse("ACME Responses", {"foo": request.GET.get("foo")}) # $HttpResponse mimetype=application/json MISSING: responseBody=Dict SPURIOUS: responseBody="ACME Responses" diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/testproj/settings.py b/python/ql/test/library-tests/frameworks/django-v2-v3/testproj/settings.py index 5343182c1c9..7a0c10a21f6 100644 --- a/python/ql/test/library-tests/frameworks/django-v2-v3/testproj/settings.py +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/testproj/settings.py @@ -40,7 +40,7 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', ] -MIDDLEWARE = [ +MIDDLEWARE = [ # $CsrfProtectionSetting=false 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', From 93336bcb16cedf671e8a1665c3b7ffeb45dfa0b5 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Wed, 23 Mar 2022 12:27:51 +0100 Subject: [PATCH 0070/1618] python: allow alternative middleware (observed [on LGTM](https://lgtm.com/projects/g/mozilla/mozillians/snapshot/9d6a7ee180addf7652fce96c21bafbad14d1dda7/files/mozillians/settings.py?sort=name&dir=ASC&mode=heatmap#L96)) --- python/ql/lib/semmle/python/frameworks/Django.qll | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index efa1a0eaa48..d623c663442 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2340,7 +2340,12 @@ module PrivateDjango { } override boolean getVerificationSetting() { - if list.getAnElt().(StrConst).getText() = "django.middleware.csrf.CsrfViewMiddleware" + if + list.getAnElt().(StrConst).getText() in [ + "django.middleware.csrf.CsrfViewMiddleware", + // see https://github.com/mozilla/django-session-csrf + "session_csrf.CsrfMiddleware" + ] then result = true else result = false } From aecf4e48f8cd18526440fcdcfd400be2c733c013 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 24 Mar 2022 11:43:07 +0100 Subject: [PATCH 0071/1618] python: add change note --- python/ql/src/change-notes/2022-03-24-csrf-protection.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 python/ql/src/change-notes/2022-03-24-csrf-protection.md diff --git a/python/ql/src/change-notes/2022-03-24-csrf-protection.md b/python/ql/src/change-notes/2022-03-24-csrf-protection.md new file mode 100644 index 00000000000..fc733b7b030 --- /dev/null +++ b/python/ql/src/change-notes/2022-03-24-csrf-protection.md @@ -0,0 +1,4 @@ +--- + category: newQuery + --- + * The query "CSRF protection weakened or disabled" (`py/csrf-protection-disabled`) has been implemented. Its results will now appear by default. \ No newline at end of file From ce017394e6e8fd4242639412f5db14126c6dcb71 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Thu, 24 Mar 2022 12:01:46 +0100 Subject: [PATCH 0072/1618] python: fix change note (hepofully) --- python/ql/src/change-notes/2022-03-24-csrf-protection.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/src/change-notes/2022-03-24-csrf-protection.md b/python/ql/src/change-notes/2022-03-24-csrf-protection.md index fc733b7b030..14a291d5f78 100644 --- a/python/ql/src/change-notes/2022-03-24-csrf-protection.md +++ b/python/ql/src/change-notes/2022-03-24-csrf-protection.md @@ -1,4 +1,4 @@ --- category: newQuery - --- - * The query "CSRF protection weakened or disabled" (`py/csrf-protection-disabled`) has been implemented. Its results will now appear by default. \ No newline at end of file +--- +* The query "CSRF protection weakened or disabled" (`py/csrf-protection-disabled`) has been implemented. Its results will now appear by default. From 47a9376e816abe7d8dec6567126f49160ea16f7c Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 24 Mar 2022 16:09:10 +0100 Subject: [PATCH 0073/1618] fix bad join in js/unreachable-method-overloads --- .../UnreachableMethodOverloads.ql | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql b/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql index 5ef8c0a0f3a..cb3dbffff35 100644 --- a/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql +++ b/javascript/ql/src/Declarations/UnreachableMethodOverloads.ql @@ -59,16 +59,25 @@ private class MethodCallSig extends CallSignatureType { string getName() { result = name } } +pragma[noinline] +private MethodCallSig getMethodCallSigWithFingerprint( + string name, int optionalParams, int numParams, int requiredParms, SignatureKind kind +) { + name = result.getName() and + optionalParams = result.getNumOptionalParameter() and + numParams = result.getNumParameter() and + requiredParms = result.getNumRequiredParameter() and + kind = result.getKind() +} + /** * Holds if the two call signatures could be overloads of each other and have the same parameter types. */ predicate matchingCallSignature(MethodCallSig method, MethodCallSig other) { - method.getName() = other.getName() and - method.getNumOptionalParameter() = other.getNumOptionalParameter() and - method.getNumParameter() = other.getNumParameter() and - method.getNumRequiredParameter() = other.getNumRequiredParameter() and + other = + getMethodCallSigWithFingerprint(method.getName(), method.getNumOptionalParameter(), + method.getNumParameter(), method.getNumRequiredParameter(), method.getKind()) and // purposely not looking at number of type arguments. - method.getKind() = other.getKind() and forall(int i | i in [0 .. -1 + method.getNumParameter()] | method.getParameter(i) = other.getParameter(i) // This is sometimes imprecise, so it is still a good idea to compare type annotations. ) and @@ -88,18 +97,24 @@ int getOverloadIndex(MethodSignature sig) { sig.getDeclaringType().getMethodOverload(sig.getName(), result) = sig } +pragma[noinline] +private MethodSignature getMethodSignatureWithFingerprint( + ClassOrInterface declaringType, string name, int numParameters, string kind +) { + result.getDeclaringType() = declaringType and + result.getName() = name and + getKind(result) = kind and + result.getBody().getNumParameter() = numParameters +} + /** * Holds if the two method signatures are overloads of each other and have the same parameter types. */ predicate signaturesMatch(MethodSignature method, MethodSignature other) { - // declared in the same interface/class. - method.getDeclaringType() = other.getDeclaringType() and - // same static modifier. - getKind(method) = getKind(other) and - // same name. - method.getName() = other.getName() and - // same number of parameters. - method.getBody().getNumParameter() = other.getBody().getNumParameter() and + // the intial search for another overload in a single call for better join-order. + other = + getMethodSignatureWithFingerprint(method.getDeclaringType(), method.getName(), + method.getBody().getNumParameter(), getKind(method)) and // same this parameter (if exists) ( not exists(method.getBody().getThisTypeAnnotation()) and From 85f1d92a0dfe7bb2617f440eb03ae14dba1a4e7b Mon Sep 17 00:00:00 2001 From: yoff Date: Fri, 25 Mar 2022 11:42:32 +0100 Subject: [PATCH 0074/1618] Apply suggestions from code review Co-authored-by: Rasmus Wriedt Larsen --- python/ql/lib/semmle/python/Concepts.qll | 2 +- python/ql/lib/semmle/python/frameworks/Django.qll | 8 ++++++-- .../ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index 1f4aca0b21a..31fd2a5cf0e 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -106,7 +106,7 @@ module FileSystemWriteAccess { } /** - * A data-flow node that may set or unset Cross-site request forgery protection + * A data-flow node that enables or disables Cross-site request forgery protection * in a global manner. * * Extend this class to refine existing API models. If you want to model new APIs, diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index d623c663442..5e7226a2f3a 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2330,8 +2330,12 @@ module PrivateDjango { mw.asVar().getName() = "MIDDLEWARE" and DataFlow::localFlow(this, mw) | - // it only counts as setting the CSRF protection, if the app uses authentication, - // so check that the list contains the django authentication middleware. + // To only include results where CSRF protection matters, we only care about CSRF + // protection when the django authentication middleware is enabled. + // Since an active session cookie is exactly what would allow an attacker to perform + // a CSRF attack. + // Notice that this does not ensure that this is not a FP, since the authentication + // middleware might be unused. // // This also strongly implies that we are actually looking at the `MIDDLEWARE` setting. list.getAnElt().(StrConst).getText() = diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp index 98a5dae20ba..c9a6d4f0f16 100644 --- a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp @@ -6,7 +6,7 @@

    Cross-site request forgery (CSRF) is a type of vulnerability in which an - attacker is able to force a user carry out an action that the user did + attacker is able to force a user to carry out an action that the user did not intend.

    From 778a88f32c7575ab273d2472b6552940646b9899 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 25 Mar 2022 11:49:06 +0100 Subject: [PATCH 0075/1618] python: update qhelp removing custom middleware stack will _not_ enable CSRF protection --- python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp index c9a6d4f0f16..51745c11632 100644 --- a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.qhelp @@ -47,7 +47,7 @@

    The protecting middleware was probably commented out during a testing phase, when server-side token generation was not set up. - Simply commenting it back in (or remove the custom middleware stack) will enable CSRF protection. + Simply commenting it back in will enable CSRF protection.

    From 179f77b123958ba4f07e381b7b0b2e51e3f7f29f Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 25 Mar 2022 11:51:24 +0100 Subject: [PATCH 0076/1618] python: clearer comment --- python/ql/lib/semmle/python/frameworks/Django.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index 5e7226a2f3a..f2d0019e3fc 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2337,7 +2337,8 @@ module PrivateDjango { // Notice that this does not ensure that this is not a FP, since the authentication // middleware might be unused. // - // This also strongly implies that we are actually looking at the `MIDDLEWARE` setting. + // This also strongly implies that `mw` is in fact a Django middleware setting and + // not just a variable named `MIDDLEWARE`. list.getAnElt().(StrConst).getText() = "django.contrib.auth.middleware.AuthenticationMiddleware" ) From 1e9840d7794f800037d169365ba7ec82d99e1a95 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 25 Mar 2022 12:28:33 +0100 Subject: [PATCH 0077/1618] python: broaden local protection concept --- python/ql/lib/semmle/python/Concepts.qll | 30 +++++++++++-------- .../lib/semmle/python/frameworks/Django.qll | 10 +++++-- .../CWE-352/CSRFProtectionDisabled.ql | 2 +- .../test/experimental/meta/ConceptsTest.qll | 14 +++++---- .../frameworks/django-v2-v3/response_test.py | 2 +- 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index 31fd2a5cf0e..01aa16d2094 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -123,7 +123,7 @@ class CsrfProtectionSetting extends DataFlow::Node instanceof CsrfProtectionSett /** Provides a class for modeling new CSRF protection setting APIs. */ module CsrfProtectionSetting { /** - * A data-flow node that may set or unset Cross-site request forgery protection + * A data-flow node that enables or disables Cross-site request forgery protection * in a global manner. * * Extend this class to model new APIs. If you want to refine existing API models, @@ -139,35 +139,39 @@ module CsrfProtectionSetting { } /** - * A data-flow node that provides Cross-site request forgery protection + * A data-flow node that enables or disables Cross-site request forgery protection * for a specific part of an application. * * Extend this class to refine existing API models. If you want to model new APIs, - * extend `CsrfLocalProtection::Range` instead. + * extend `CsrfLocalProtectionSetting::Range` instead. */ -class CsrfLocalProtection extends DataFlow::Node instanceof CsrfLocalProtection::Range { +class CsrfLocalProtectionSetting extends DataFlow::Node instanceof CsrfLocalProtectionSetting::Range { /** - * Gets a `Function` representing the protected interaction - * (probably a request handler). + * Gets a request handler whose CSRF protection is changed. */ - Function getProtected() { result = super.getProtected() } + Function getRequestHandler() { result = super.getRequestHandler() } + + /** Holds if CSRF protection is enabled by this setting */ + predicate csrfEnabled() { super.csrfEnabled() } } /** Provides a class for modeling new CSRF protection setting APIs. */ -module CsrfLocalProtection { +module CsrfLocalProtectionSetting { /** - * A data-flow node that provides Cross-site request forgery protection + * A data-flow node that enables or disables Cross-site request forgery protection * for a specific part of an application. * * Extend this class to model new APIs. If you want to refine existing API models, - * extend `CsrfLocalProtection` instead. + * extend `CsrfLocalProtectionSetting` instead. */ abstract class Range extends DataFlow::Node { /** - * Gets a `Function` representing the protected interaction - * (probably a request handler). + * Gets a request handler whose CSRF protection is changed. */ - abstract Function getProtected(); + abstract Function getRequestHandler(); + + /** Holds if CSRF protection is enabled by this setting */ + abstract predicate csrfEnabled(); } } diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index f2d0019e3fc..c2852187b48 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2356,20 +2356,24 @@ module PrivateDjango { } } - private class DjangoCsrfDecorator extends CsrfLocalProtection::Range { + private class DjangoCsrfDecorator extends CsrfLocalProtectionSetting::Range { + string decoratorName; Function function; DjangoCsrfDecorator() { + decoratorName in ["csrf_protect", "csrf_exempt", "requires_csrf_token", "ensure_csrf_cookie"] and this = API::moduleImport("django") .getMember("views") .getMember("decorators") .getMember("csrf") - .getMember("csrf_protect") + .getMember(decoratorName) .getAUse() and this.asExpr() = function.getADecorator() } - override Function getProtected() { result = function } + override Function getRequestHandler() { result = function } + + override predicate csrfEnabled() { decoratorName in ["csrf_protect", "requires_csrf_token"] } } } diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql index 91609c25adb..e7202a361e5 100644 --- a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql @@ -17,7 +17,7 @@ import semmle.python.Concepts from CsrfProtectionSetting s where s.getVerificationSetting() = false and - not exists(CsrfLocalProtection p) and + not exists(CsrfLocalProtectionSetting p | p.csrfEnabled()) and // rule out test code as this is a common place to turn off CSRF protection not s.getLocation().getFile().getAbsolutePath().matches("%test%") select s, "Potential CSRF vulnerability due to forgery protection being disabled or weakened." diff --git a/python/ql/test/experimental/meta/ConceptsTest.qll b/python/ql/test/experimental/meta/ConceptsTest.qll index 6fd15e586f5..339087d50d6 100644 --- a/python/ql/test/experimental/meta/ConceptsTest.qll +++ b/python/ql/test/experimental/meta/ConceptsTest.qll @@ -520,18 +520,20 @@ class CsrfProtectionSettingTest extends InlineExpectationsTest { } } -class CsrfLocalProtectionTest extends InlineExpectationsTest { - CsrfLocalProtectionTest() { this = "CsrfLocalProtectionTest" } +class CsrfLocalProtectionSettingTest extends InlineExpectationsTest { + CsrfLocalProtectionSettingTest() { this = "CsrfLocalProtectionSettingTest" } - override string getARelevantTag() { result = "CsrfLocalProtection" } + override string getARelevantTag() { result = "CsrfLocalProtection" + ["Enabled", "Disabled"] } override predicate hasActualResult(Location location, string element, string tag, string value) { exists(location.getFile().getRelativePath()) and - exists(CsrfLocalProtection p | + exists(CsrfLocalProtectionSetting p | location = p.getLocation() and element = p.toString() and - value = p.getProtected().getName().toString() and - tag = "CsrfLocalProtection" + value = p.getRequestHandler().getName().toString() and + if p.csrfEnabled() + then tag = "CsrfLocalProtectionEnabled" + else tag = "CsrfLocalProtectionDisabled" ) } } diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py b/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py index 73517f261fd..dd78cd51016 100644 --- a/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/response_test.py @@ -118,7 +118,7 @@ class CustomJsonResponse(JsonResponse): def __init__(self, banner, content, *args, **kwargs): super().__init__(content, *args, content_type="text/html", **kwargs) -@csrf_protect # $CsrfLocalProtection=safe__custom_json_response +@csrf_protect # $CsrfLocalProtectionEnabled=safe__custom_json_response def safe__custom_json_response(request): return CustomJsonResponse("ACME Responses", {"foo": request.GET.get("foo")}) # $HttpResponse mimetype=application/json MISSING: responseBody=Dict SPURIOUS: responseBody="ACME Responses" From f19ade3446319c4d9ac9b72f068a4a8c4cccc9c4 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sun, 27 Mar 2022 01:28:00 +0100 Subject: [PATCH 0078/1618] Java: Add `StmtExpr` --- .../2022-03-27-statement-expression.md | 4 ++ java/ql/lib/semmle/code/java/Collections.qll | 2 +- java/ql/lib/semmle/code/java/Expr.qll | 38 +++++++++++ java/ql/lib/semmle/code/java/Maps.qll | 2 +- .../Statements/ReturnValueIgnored.ql | 2 +- .../IgnoreExceptionalReturn.ql | 2 +- .../CWE-297/IgnoredHostnameVerification.ql | 2 +- .../library-tests/StmtExpr/StmtExpr.expected | 14 ++++ .../test/library-tests/StmtExpr/StmtExpr.java | 68 +++++++++++++++++++ .../test/library-tests/StmtExpr/StmtExpr.ql | 4 ++ java/ql/test/library-tests/StmtExpr/options | 1 + 11 files changed, 134 insertions(+), 5 deletions(-) create mode 100644 java/ql/lib/change-notes/2022-03-27-statement-expression.md create mode 100644 java/ql/test/library-tests/StmtExpr/StmtExpr.expected create mode 100644 java/ql/test/library-tests/StmtExpr/StmtExpr.java create mode 100644 java/ql/test/library-tests/StmtExpr/StmtExpr.ql create mode 100644 java/ql/test/library-tests/StmtExpr/options diff --git a/java/ql/lib/change-notes/2022-03-27-statement-expression.md b/java/ql/lib/change-notes/2022-03-27-statement-expression.md new file mode 100644 index 00000000000..bb261f66878 --- /dev/null +++ b/java/ql/lib/change-notes/2022-03-27-statement-expression.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* The QL class `StmtExpr` has been added to model statement expressions, that is, expressions whose result is discarded. diff --git a/java/ql/lib/semmle/code/java/Collections.qll b/java/ql/lib/semmle/code/java/Collections.qll index d557d6281de..e6da65faa04 100644 --- a/java/ql/lib/semmle/code/java/Collections.qll +++ b/java/ql/lib/semmle/code/java/Collections.qll @@ -84,7 +84,7 @@ class CollectionMutation extends MethodAccess { CollectionMutation() { this.getMethod() instanceof CollectionMutator } /** Holds if the result of this call is not immediately discarded. */ - predicate resultIsChecked() { not this.getParent() instanceof ExprStmt } + predicate resultIsChecked() { not this instanceof StmtExpr } } /** A method that queries the contents of a collection without mutating it. */ diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 8f77b1800a2..4659d0e78fc 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2133,3 +2133,41 @@ class Argument extends Expr { ) } } + +/** + * A statement expression, as specified by JLS 17 section 14.8. + * The result of a statement expression, if any, is discarded. + * + * Not to be confused with `ExprStmt`; while the child of an `ExprStmt` is always + * a `StmtExpr`, the opposite is not true. A `StmtExpr` occurs for example also + * as 'init' of a `for` statement. + */ +class StmtExpr extends Expr { + StmtExpr() { + this = any(ExprStmt s).getExpr() + or + this = any(ForStmt s).getAnInit() and not this instanceof LocalVariableDeclExpr + or + this = any(ForStmt s).getAnUpdate() + or + // Only applies to SwitchStmt, but not to SwitchExpr, see JLS 17 section 14.11.2 + // TODO: Possibly redundant depending on how https://github.com/github/codeql/issues/8570 is resolved + this = any(SwitchStmt s).getACase().getRuleExpression() + or + // TODO: Workarounds for https://github.com/github/codeql/issues/3605 + exists(LambdaExpr lambda | + this = lambda.getExprBody() and + lambda.asMethod().getReturnType() instanceof VoidType + ) + or + exists(MemberRefExpr memberRef, Method implicitMethod, Method overridden | + implicitMethod = memberRef.asMethod() + | + this.getParent().(ReturnStmt).getEnclosingCallable() = implicitMethod and + // asMethod() has bogus method with wrong return type as result, e.g. `run(): String` (overriding `Runnable.run(): void`) + // Therefore need to check the overridden method + implicitMethod.getSourceDeclaration().overridesOrInstantiates*(overridden) and + overridden.getReturnType() instanceof VoidType + ) + } +} diff --git a/java/ql/lib/semmle/code/java/Maps.qll b/java/ql/lib/semmle/code/java/Maps.qll index 784db84fb98..f768ee3642b 100644 --- a/java/ql/lib/semmle/code/java/Maps.qll +++ b/java/ql/lib/semmle/code/java/Maps.qll @@ -53,7 +53,7 @@ class MapMutation extends MethodAccess { MapMutation() { this.getMethod() instanceof MapMutator } /** Holds if the result of this call is not immediately discarded. */ - predicate resultIsChecked() { not this.getParent() instanceof ExprStmt } + predicate resultIsChecked() { not this instanceof StmtExpr } } /** A method that queries the contents of the map it belongs to without mutating it. */ diff --git a/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql b/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql index 39d6e7fe16b..1c2905c1d61 100644 --- a/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql +++ b/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql @@ -18,7 +18,7 @@ import Chaining predicate checkedMethodCall(MethodAccess ma) { relevantMethodCall(ma, _) and - not ma.getParent() instanceof ExprStmt + not ma instanceof StmtExpr } /** diff --git a/java/ql/src/Violations of Best Practice/Exception Handling/IgnoreExceptionalReturn.ql b/java/ql/src/Violations of Best Practice/Exception Handling/IgnoreExceptionalReturn.ql index cbdaddf3b45..ed712eb2504 100644 --- a/java/ql/src/Violations of Best Practice/Exception Handling/IgnoreExceptionalReturn.ql +++ b/java/ql/src/Violations of Best Practice/Exception Handling/IgnoreExceptionalReturn.ql @@ -45,7 +45,7 @@ predicate unboundedQueue(RefType t) { from MethodAccess ma, SpecialMethod m where - ma.getParent() instanceof ExprStmt and + ma instanceof StmtExpr and m = ma.getMethod() and ( m.isMethod("java.util", "Queue", "offer", 1) and not unboundedQueue(m.getDeclaringType()) diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql b/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql index 55d51a19a8c..38e2cb79998 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql @@ -21,7 +21,7 @@ private class HostnameVerificationCall extends MethodAccess { } /** Holds if the result of the call is not used. */ - predicate isIgnored() { this = any(ExprStmt es).getExpr() } + predicate isIgnored() { this instanceof StmtExpr } } from HostnameVerificationCall verification diff --git a/java/ql/test/library-tests/StmtExpr/StmtExpr.expected b/java/ql/test/library-tests/StmtExpr/StmtExpr.expected new file mode 100644 index 00000000000..ecb5e338238 --- /dev/null +++ b/java/ql/test/library-tests/StmtExpr/StmtExpr.expected @@ -0,0 +1,14 @@ +| StmtExpr.java:7:9:7:18 | toString(...) | +| StmtExpr.java:13:9:13:13 | ...=... | +| StmtExpr.java:14:9:14:11 | ...++ | +| StmtExpr.java:15:9:15:11 | ++... | +| StmtExpr.java:16:9:16:11 | ...-- | +| StmtExpr.java:17:9:17:11 | --... | +| StmtExpr.java:19:9:19:20 | new Object(...) | +| StmtExpr.java:22:9:22:28 | clone(...) | +| StmtExpr.java:25:14:25:39 | println(...) | +| StmtExpr.java:30:17:30:44 | println(...) | +| StmtExpr.java:45:24:45:33 | toString(...) | +| StmtExpr.java:58:28:58:37 | toString(...) | +| StmtExpr.java:60:13:60:22 | toString(...) | +| StmtExpr.java:66:23:66:36 | toString(...) | diff --git a/java/ql/test/library-tests/StmtExpr/StmtExpr.java b/java/ql/test/library-tests/StmtExpr/StmtExpr.java new file mode 100644 index 00000000000..c35e24ea122 --- /dev/null +++ b/java/ql/test/library-tests/StmtExpr/StmtExpr.java @@ -0,0 +1,68 @@ +package StmtExpr; + +import java.util.function.Supplier; + +class StmtExpr { + void test() { + toString(); + + // LocalVariableDeclarationStatement with init is not a StatementExpression + String s = toString(); + + int i; + i = 0; + i++; + ++i; + i--; + --i; + + new Object(); + // ArrayCreationExpression cannot be a StatementExpression, but a method access + // on it can be + new int[] {}.clone(); + + // for statement init can be StatementExpression + for (System.out.println("init");;) { + break; + } + + // for statement update is StatementExpression + for (;; System.out.println("update")) { + break; + } + + // variable declaration and condition are not StatementExpressions + for (int i1 = 0; i1 < 10;) { } + for (int i1, i2 = 0; i2 < 10;) { } + for (;;) { + break; + } + + // Not a StatementExpression + for (int i2 : new int[] {1}) { } + + switch(1) { + default -> toString(); // StatementExpression + } + // SwitchExpression has no StatementExpression + String s2 = switch(1) { + default -> toString(); + }; + + // Lambda with non-void return type has no StatementExpression + Supplier supplier1 = () -> toString(); + Supplier supplier2 = () -> { + return toString(); + }; + // Lambda with void return type has StatementExpression + Runnable r = () -> toString(); + Runnable r2 = () -> { + toString(); + }; + + // Method reference with non-void return type has no StatementExpression + Supplier supplier3 = StmtExpr::new; + // Method reference with void return type has StatementExpression in implicit method body + Runnable r3 = this::toString; + } +} diff --git a/java/ql/test/library-tests/StmtExpr/StmtExpr.ql b/java/ql/test/library-tests/StmtExpr/StmtExpr.ql new file mode 100644 index 00000000000..c624e738d71 --- /dev/null +++ b/java/ql/test/library-tests/StmtExpr/StmtExpr.ql @@ -0,0 +1,4 @@ +import java + +from StmtExpr e +select e diff --git a/java/ql/test/library-tests/StmtExpr/options b/java/ql/test/library-tests/StmtExpr/options new file mode 100644 index 00000000000..03edcc8fcc0 --- /dev/null +++ b/java/ql/test/library-tests/StmtExpr/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -source 14 -target 14 \ No newline at end of file From 774c811e972f38a363948ed7f663abbb22804a91 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 25 Mar 2022 12:58:19 +0100 Subject: [PATCH 0079/1618] python: move CSRF concepts inside `HTTP::Server` --- python/ql/lib/semmle/python/Concepts.qll | 140 +++++++++--------- .../lib/semmle/python/frameworks/Django.qll | 4 +- .../CWE-352/CSRFProtectionDisabled.ql | 4 +- .../test/experimental/meta/ConceptsTest.qll | 4 +- 4 files changed, 76 insertions(+), 76 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index 01aa16d2094..fe3cad338bb 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -105,76 +105,6 @@ module FileSystemWriteAccess { } } -/** - * A data-flow node that enables or disables Cross-site request forgery protection - * in a global manner. - * - * Extend this class to refine existing API models. If you want to model new APIs, - * extend `CsrfProtectionSetting::Range` instead. - */ -class CsrfProtectionSetting extends DataFlow::Node instanceof CsrfProtectionSetting::Range { - /** - * Gets the boolean value corresponding to if CSRF protection is enabled - * (`true`) or disabled (`false`) by this node. - */ - boolean getVerificationSetting() { result = super.getVerificationSetting() } -} - -/** Provides a class for modeling new CSRF protection setting APIs. */ -module CsrfProtectionSetting { - /** - * A data-flow node that enables or disables Cross-site request forgery protection - * in a global manner. - * - * Extend this class to model new APIs. If you want to refine existing API models, - * extend `CsrfProtectionSetting` instead. - */ - abstract class Range extends DataFlow::Node { - /** - * Gets the boolean value corresponding to if CSRF protection is enabled - * (`true`) or disabled (`false`) by this node. - */ - abstract boolean getVerificationSetting(); - } -} - -/** - * A data-flow node that enables or disables Cross-site request forgery protection - * for a specific part of an application. - * - * Extend this class to refine existing API models. If you want to model new APIs, - * extend `CsrfLocalProtectionSetting::Range` instead. - */ -class CsrfLocalProtectionSetting extends DataFlow::Node instanceof CsrfLocalProtectionSetting::Range { - /** - * Gets a request handler whose CSRF protection is changed. - */ - Function getRequestHandler() { result = super.getRequestHandler() } - - /** Holds if CSRF protection is enabled by this setting */ - predicate csrfEnabled() { super.csrfEnabled() } -} - -/** Provides a class for modeling new CSRF protection setting APIs. */ -module CsrfLocalProtectionSetting { - /** - * A data-flow node that enables or disables Cross-site request forgery protection - * for a specific part of an application. - * - * Extend this class to model new APIs. If you want to refine existing API models, - * extend `CsrfLocalProtectionSetting` instead. - */ - abstract class Range extends DataFlow::Node { - /** - * Gets a request handler whose CSRF protection is changed. - */ - abstract Function getRequestHandler(); - - /** Holds if CSRF protection is enabled by this setting */ - abstract predicate csrfEnabled(); - } -} - /** Provides classes for modeling path-related APIs. */ module Path { /** @@ -956,6 +886,76 @@ module HTTP { abstract DataFlow::Node getValueArg(); } } + + /** + * A data-flow node that enables or disables Cross-site request forgery protection + * in a global manner. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `CsrfProtectionSetting::Range` instead. + */ + class CsrfProtectionSetting extends DataFlow::Node instanceof CsrfProtectionSetting::Range { + /** + * Gets the boolean value corresponding to if CSRF protection is enabled + * (`true`) or disabled (`false`) by this node. + */ + boolean getVerificationSetting() { result = super.getVerificationSetting() } + } + + /** Provides a class for modeling new CSRF protection setting APIs. */ + module CsrfProtectionSetting { + /** + * A data-flow node that enables or disables Cross-site request forgery protection + * in a global manner. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `CsrfProtectionSetting` instead. + */ + abstract class Range extends DataFlow::Node { + /** + * Gets the boolean value corresponding to if CSRF protection is enabled + * (`true`) or disabled (`false`) by this node. + */ + abstract boolean getVerificationSetting(); + } + } + + /** + * A data-flow node that enables or disables Cross-site request forgery protection + * for a specific part of an application. + * + * Extend this class to refine existing API models. If you want to model new APIs, + * extend `CsrfLocalProtectionSetting::Range` instead. + */ + class CsrfLocalProtectionSetting extends DataFlow::Node instanceof CsrfLocalProtectionSetting::Range { + /** + * Gets a request handler whose CSRF protection is changed. + */ + Function getRequestHandler() { result = super.getRequestHandler() } + + /** Holds if CSRF protection is enabled by this setting */ + predicate csrfEnabled() { super.csrfEnabled() } + } + + /** Provides a class for modeling new CSRF protection setting APIs. */ + module CsrfLocalProtectionSetting { + /** + * A data-flow node that enables or disables Cross-site request forgery protection + * for a specific part of an application. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `CsrfLocalProtectionSetting` instead. + */ + abstract class Range extends DataFlow::Node { + /** + * Gets a request handler whose CSRF protection is changed. + */ + abstract Function getRequestHandler(); + + /** Holds if CSRF protection is enabled by this setting */ + abstract predicate csrfEnabled(); + } + } } /** Provides classes for modeling HTTP clients. */ diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index c2852187b48..f8b4272a741 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2320,7 +2320,7 @@ module PrivateDjango { /** * A custom middleware stack */ - private class DjangoSettingsMiddlewareStack extends CsrfProtectionSetting::Range { + private class DjangoSettingsMiddlewareStack extends HTTP::Server::CsrfProtectionSetting::Range { List list; DjangoSettingsMiddlewareStack() { @@ -2356,7 +2356,7 @@ module PrivateDjango { } } - private class DjangoCsrfDecorator extends CsrfLocalProtectionSetting::Range { + private class DjangoCsrfDecorator extends HTTP::Server::CsrfLocalProtectionSetting::Range { string decoratorName; Function function; diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql index e7202a361e5..44353c9b322 100644 --- a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql @@ -14,10 +14,10 @@ import python import semmle.python.Concepts -from CsrfProtectionSetting s +from HTTP::Server::CsrfProtectionSetting s where s.getVerificationSetting() = false and - not exists(CsrfLocalProtectionSetting p | p.csrfEnabled()) and + not exists(HTTP::Server::CsrfLocalProtectionSetting p | p.csrfEnabled()) and // rule out test code as this is a common place to turn off CSRF protection not s.getLocation().getFile().getAbsolutePath().matches("%test%") select s, "Potential CSRF vulnerability due to forgery protection being disabled or weakened." diff --git a/python/ql/test/experimental/meta/ConceptsTest.qll b/python/ql/test/experimental/meta/ConceptsTest.qll index 339087d50d6..b7fbea26264 100644 --- a/python/ql/test/experimental/meta/ConceptsTest.qll +++ b/python/ql/test/experimental/meta/ConceptsTest.qll @@ -511,7 +511,7 @@ class CsrfProtectionSettingTest extends InlineExpectationsTest { override predicate hasActualResult(Location location, string element, string tag, string value) { exists(location.getFile().getRelativePath()) and - exists(CsrfProtectionSetting setting | + exists(HTTP::Server::CsrfProtectionSetting setting | location = setting.getLocation() and element = setting.toString() and value = setting.getVerificationSetting().toString() and @@ -527,7 +527,7 @@ class CsrfLocalProtectionSettingTest extends InlineExpectationsTest { override predicate hasActualResult(Location location, string element, string tag, string value) { exists(location.getFile().getRelativePath()) and - exists(CsrfLocalProtectionSetting p | + exists(HTTP::Server::CsrfLocalProtectionSetting p | location = p.getLocation() and element = p.toString() and value = p.getRequestHandler().getName().toString() and From d39410aa2d54edc7f5f680a8d1f4e0f766b5d323 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Fri, 25 Mar 2022 13:03:00 +0100 Subject: [PATCH 0080/1618] python: backport review comment to Ruby --- .../src/queries/security/cwe-352/CSRFProtectionDisabled.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionDisabled.qhelp b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionDisabled.qhelp index 8b5ff38d5a3..7656a676d64 100644 --- a/ruby/ql/src/queries/security/cwe-352/CSRFProtectionDisabled.qhelp +++ b/ruby/ql/src/queries/security/cwe-352/CSRFProtectionDisabled.qhelp @@ -6,7 +6,7 @@

    Cross-site request forgery (CSRF) is a type of vulnerability in which an - attacker is able to force a user carry out an action that the user did + attacker is able to force a user to carry out an action that the user did not intend.

    From 3416f074e8365ea250e5b3abcb1dae4e8a10dc96 Mon Sep 17 00:00:00 2001 From: yoff Date: Tue, 29 Mar 2022 13:59:04 +0200 Subject: [PATCH 0081/1618] Update python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql Explain why `TestScope` is not used. Co-authored-by: Rasmus Wriedt Larsen --- python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql index 44353c9b322..24917411fb4 100644 --- a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql @@ -18,6 +18,8 @@ from HTTP::Server::CsrfProtectionSetting s where s.getVerificationSetting() = false and not exists(HTTP::Server::CsrfLocalProtectionSetting p | p.csrfEnabled()) and - // rule out test code as this is a common place to turn off CSRF protection + // rule out test code as this is a common place to turn off CSRF protection. + // We don't use normal `TestScope` to find test files, since we also want to match + // a settings file such as `.../integration-tests/settings.py` not s.getLocation().getFile().getAbsolutePath().matches("%test%") select s, "Potential CSRF vulnerability due to forgery protection being disabled or weakened." From 92033047a51018285b081cba1d234b704078d9e3 Mon Sep 17 00:00:00 2001 From: Porcupiney Hairs Date: Tue, 29 Mar 2022 23:32:33 +0530 Subject: [PATCH 0082/1618] Python : Add query to detect PAM authorization bypass Using only a call to `pam_authenticate` to check the validity of a login can lead to authorization bypass vulnerabilities. A `pam_authenticate` only verifies the credentials of a user. It does not check if a user has an appropriate authorization to actually login. This means a user with a expired login or a password can still access the system. This PR includes a qhelp describing the issue, a query which detects instances where a call to `pam_acc_mgmt` does not follow a call to `pam_authenticate` and it's corresponding tests. This PR has multiple detections. Some of the public one I can find are : * [CVE-2022-0860](https://nvd.nist.gov/vuln/detail/CVE-2022-0860) found in [cobbler/cobbler](https://www.github.com/cobbler/cobbler) * [fredhutch/motuz](https://www.huntr.dev/bounties/d46f91ca-b8ef-4b67-a79a-2420c4c6d52b/) --- .../Security/CWE-285/PamAuthorization.qhelp | 49 ++++++++++ .../Security/CWE-285/PamAuthorization.ql | 58 +++++++++++ .../Security/CWE-285/PamAuthorizationBad.py | 15 +++ .../Security/CWE-285/PamAuthorizationGood.py | 17 ++++ .../CWE-285/PamAuthorization.expected | 1 + .../Security/CWE-285/PamAuthorization.qlref | 1 + .../query-tests/Security/CWE-285/bad.py | 95 ++++++++++++++++++ .../query-tests/Security/CWE-285/good.py | 97 +++++++++++++++++++ 8 files changed, 333 insertions(+) create mode 100644 python/ql/src/experimental/Security/CWE-285/PamAuthorization.qhelp create mode 100644 python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql create mode 100644 python/ql/src/experimental/Security/CWE-285/PamAuthorizationBad.py create mode 100644 python/ql/src/experimental/Security/CWE-285/PamAuthorizationGood.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.qlref create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-285/bad.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-285/good.py diff --git a/python/ql/src/experimental/Security/CWE-285/PamAuthorization.qhelp b/python/ql/src/experimental/Security/CWE-285/PamAuthorization.qhelp new file mode 100644 index 00000000000..8e0f829f33e --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-285/PamAuthorization.qhelp @@ -0,0 +1,49 @@ + + + +

    + Using only a call to + pam_authenticate + to check the validity of a login can lead to authorization bypass vulnerabilities. +

    +

    + A + pam_authenticate + only verifies the credentials of a user. It does not check if a user has an appropriate authorization to actually login. This means a user with a expired login or a password can still access the system. +

    + +
    + + +

    + A call to + pam_authenticate + should be followed by a call to + pam_acct_mgmt + to check if a user is allowed to login. +

    +
    + + +

    + In the following example, the code only checks the credentials of a user. Hence, in this case, a user expired with expired creds can still login. This can be verified by creating a new user account, expiring it with + chage -E0 `username` + and then trying to log in. +

    + + +

    + This can be avoided by calling + pam_acct_mgmt + call to verify access as has been done in the snippet shown below. +

    + +
    + + +
  • + Man-Page: + pam_acct_mgmt +
  • +
    +
    \ No newline at end of file diff --git a/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql b/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql new file mode 100644 index 00000000000..e67745cceac --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql @@ -0,0 +1,58 @@ +/** + * @name Authorization bypass due to incorrect usage of PAM + * @description Using only the `pam_authenticate` call to check the validity of a login can lead to a authorization bypass. + * @kind problem + * @problem.severity warning + * @id py/pam-auth-bypass + * @tags security + * external/cwe/cwe-285 + */ + +import python +import semmle.python.ApiGraphs +import experimental.semmle.python.Concepts +import semmle.python.dataflow.new.TaintTracking + +private class LibPam extends API::Node { + LibPam() { + exists( + API::Node cdll, API::Node find_library, API::Node libpam, API::CallNode cdll_call, + API::CallNode find_lib_call, StrConst str + | + API::moduleImport("ctypes").getMember("CDLL") = cdll and + find_library = API::moduleImport("ctypes.util").getMember("find_library") and + cdll_call = cdll.getACall() and + find_lib_call = find_library.getACall() and + DataFlow::localFlow(DataFlow::exprNode(str), find_lib_call.getArg(0)) and + str.getText() = "pam" and + cdll_call.getArg(0) = find_lib_call and + libpam = cdll_call.getReturn() + | + libpam = this + ) + } + + override string toString() { result = "libpam" } +} + +class PamAuthCall extends API::Node { + PamAuthCall() { exists(LibPam pam | pam.getMember("pam_authenticate") = this) } + + override string toString() { result = "pam_authenticate" } +} + +class PamActMgt extends API::Node { + PamActMgt() { exists(LibPam pam | pam.getMember("pam_acct_mgmt") = this) } + + override string toString() { result = "pam_acct_mgmt" } +} + +from PamAuthCall p, API::CallNode u, Expr handle +where + u = p.getACall() and + handle = u.asExpr().(Call).getArg(0) and + not exists(PamActMgt pam | + DataFlow::localFlow(DataFlow::exprNode(handle), + DataFlow::exprNode(pam.getACall().asExpr().(Call).getArg(0))) + ) +select u, "This PAM authentication call may be lead to an authorization bypass." diff --git a/python/ql/src/experimental/Security/CWE-285/PamAuthorizationBad.py b/python/ql/src/experimental/Security/CWE-285/PamAuthorizationBad.py new file mode 100644 index 00000000000..3b06156f551 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-285/PamAuthorizationBad.py @@ -0,0 +1,15 @@ +def authenticate(self, username, password, service='login', encoding='utf-8', resetcreds=True): + libpam = CDLL(find_library("pam")) + pam_authenticate = libpam.pam_authenticate + pam_acct_mgmt = libpam.pam_acct_mgmt + pam_authenticate.restype = c_int + pam_authenticate.argtypes = [PamHandle, c_int] + pam_acct_mgmt.restype = c_int + pam_acct_mgmt.argtypes = [PamHandle, c_int] + + handle = PamHandle() + conv = PamConv(my_conv, 0) + retval = pam_start(service, username, byref(conv), byref(handle)) + + retval = pam_authenticate(handle, 0) + return retval == 0 \ No newline at end of file diff --git a/python/ql/src/experimental/Security/CWE-285/PamAuthorizationGood.py b/python/ql/src/experimental/Security/CWE-285/PamAuthorizationGood.py new file mode 100644 index 00000000000..0f047c6ac65 --- /dev/null +++ b/python/ql/src/experimental/Security/CWE-285/PamAuthorizationGood.py @@ -0,0 +1,17 @@ +def authenticate(self, username, password, service='login', encoding='utf-8', resetcreds=True): + libpam = CDLL(find_library("pam")) + pam_authenticate = libpam.pam_authenticate + pam_acct_mgmt = libpam.pam_acct_mgmt + pam_authenticate.restype = c_int + pam_authenticate.argtypes = [PamHandle, c_int] + pam_acct_mgmt.restype = c_int + pam_acct_mgmt.argtypes = [PamHandle, c_int] + + handle = PamHandle() + conv = PamConv(my_conv, 0) + retval = pam_start(service, username, byref(conv), byref(handle)) + + retval = pam_authenticate(handle, 0) + if retval == 0: + retval = pam_acct_mgmt(handle, 0) + return retval == 0 \ No newline at end of file diff --git a/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected b/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected new file mode 100644 index 00000000000..52c4c8ac669 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected @@ -0,0 +1 @@ +| bad.py:92:18:92:44 | ControlFlowNode for pam_authenticate() | This PAM authentication call may be lead to an authorization bypass. | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.qlref b/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.qlref new file mode 100644 index 00000000000..38fac298b1e --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.qlref @@ -0,0 +1 @@ +experimental/Security/CWE-285/PamAuthorization.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-285/bad.py b/python/ql/test/experimental/query-tests/Security/CWE-285/bad.py new file mode 100644 index 00000000000..84527d6f6fb --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-285/bad.py @@ -0,0 +1,95 @@ +from ctypes import CDLL, POINTER, Structure, CFUNCTYPE, cast, byref, sizeof +from ctypes import c_void_p, c_size_t, c_char_p, c_char, c_int +from ctypes import memmove +from ctypes.util import find_library + +class PamHandle(Structure): + _fields_ = [ ("handle", c_void_p) ] + + def __init__(self): + Structure.__init__(self) + self.handle = 0 + +class PamMessage(Structure): + """wrapper class for pam_message structure""" + _fields_ = [ ("msg_style", c_int), ("msg", c_char_p) ] + + def __repr__(self): + return "" % (self.msg_style, self.msg) + +class PamResponse(Structure): + """wrapper class for pam_response structure""" + _fields_ = [ ("resp", c_char_p), ("resp_retcode", c_int) ] + + def __repr__(self): + return "" % (self.resp_retcode, self.resp) + +conv_func = CFUNCTYPE(c_int, c_int, POINTER(POINTER(PamMessage)), POINTER(POINTER(PamResponse)), c_void_p) + +class PamConv(Structure): + """wrapper class for pam_conv structure""" + _fields_ = [ ("conv", conv_func), ("appdata_ptr", c_void_p) ] + +# Various constants +PAM_PROMPT_ECHO_OFF = 1 +PAM_PROMPT_ECHO_ON = 2 +PAM_ERROR_MSG = 3 +PAM_TEXT_INFO = 4 +PAM_REINITIALIZE_CRED = 8 + +libc = CDLL(find_library("c")) +libpam = CDLL(find_library("pam")) + +calloc = libc.calloc +calloc.restype = c_void_p +calloc.argtypes = [c_size_t, c_size_t] + +# bug #6 (@NIPE-SYSTEMS), some libpam versions don't include this function +if hasattr(libpam, 'pam_end'): + pam_end = libpam.pam_end + pam_end.restype = c_int + pam_end.argtypes = [PamHandle, c_int] + +pam_start = libpam.pam_start +pam_start.restype = c_int +pam_start.argtypes = [c_char_p, c_char_p, POINTER(PamConv), POINTER(PamHandle)] + +pam_setcred = libpam.pam_setcred +pam_setcred.restype = c_int +pam_setcred.argtypes = [PamHandle, c_int] + +pam_strerror = libpam.pam_strerror +pam_strerror.restype = c_char_p +pam_strerror.argtypes = [PamHandle, c_int] + +pam_authenticate = libpam.pam_authenticate +pam_authenticate.restype = c_int +pam_authenticate.argtypes = [PamHandle, c_int] + +pam_acct_mgmt = libpam.pam_acct_mgmt +pam_acct_mgmt.restype = c_int +pam_acct_mgmt.argtypes = [PamHandle, c_int] + +class pam(): + code = 0 + reason = None + + def __init__(self): + pass + + def authenticate(self, username, password, service='login', encoding='utf-8', resetcreds=True): + @conv_func + def my_conv(n_messages, messages, p_response, app_data): + return 0 + + + cpassword = c_char_p(password) + + handle = PamHandle() + conv = PamConv(my_conv, 0) + retval = pam_start(service, username, byref(conv), byref(handle)) + + retval = pam_authenticate(handle, 0) + auth_success = retval == 0 + + return auth_success \ No newline at end of file diff --git a/python/ql/test/experimental/query-tests/Security/CWE-285/good.py b/python/ql/test/experimental/query-tests/Security/CWE-285/good.py new file mode 100644 index 00000000000..e9996c770ed --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-285/good.py @@ -0,0 +1,97 @@ +from ctypes import CDLL, POINTER, Structure, CFUNCTYPE, cast, byref, sizeof +from ctypes import c_void_p, c_size_t, c_char_p, c_char, c_int +from ctypes import memmove +from ctypes.util import find_library + +class PamHandle(Structure): + _fields_ = [ ("handle", c_void_p) ] + + def __init__(self): + Structure.__init__(self) + self.handle = 0 + +class PamMessage(Structure): + """wrapper class for pam_message structure""" + _fields_ = [ ("msg_style", c_int), ("msg", c_char_p) ] + + def __repr__(self): + return "" % (self.msg_style, self.msg) + +class PamResponse(Structure): + """wrapper class for pam_response structure""" + _fields_ = [ ("resp", c_char_p), ("resp_retcode", c_int) ] + + def __repr__(self): + return "" % (self.resp_retcode, self.resp) + +conv_func = CFUNCTYPE(c_int, c_int, POINTER(POINTER(PamMessage)), POINTER(POINTER(PamResponse)), c_void_p) + +class PamConv(Structure): + """wrapper class for pam_conv structure""" + _fields_ = [ ("conv", conv_func), ("appdata_ptr", c_void_p) ] + +# Various constants +PAM_PROMPT_ECHO_OFF = 1 +PAM_PROMPT_ECHO_ON = 2 +PAM_ERROR_MSG = 3 +PAM_TEXT_INFO = 4 +PAM_REINITIALIZE_CRED = 8 + +libc = CDLL(find_library("c")) +libpam = CDLL(find_library("pam")) + +calloc = libc.calloc +calloc.restype = c_void_p +calloc.argtypes = [c_size_t, c_size_t] + +# bug #6 (@NIPE-SYSTEMS), some libpam versions don't include this function +if hasattr(libpam, 'pam_end'): + pam_end = libpam.pam_end + pam_end.restype = c_int + pam_end.argtypes = [PamHandle, c_int] + +pam_start = libpam.pam_start +pam_start.restype = c_int +pam_start.argtypes = [c_char_p, c_char_p, POINTER(PamConv), POINTER(PamHandle)] + +pam_setcred = libpam.pam_setcred +pam_setcred.restype = c_int +pam_setcred.argtypes = [PamHandle, c_int] + +pam_strerror = libpam.pam_strerror +pam_strerror.restype = c_char_p +pam_strerror.argtypes = [PamHandle, c_int] + +pam_authenticate = libpam.pam_authenticate +pam_authenticate.restype = c_int +pam_authenticate.argtypes = [PamHandle, c_int] + +pam_acct_mgmt = libpam.pam_acct_mgmt +pam_acct_mgmt.restype = c_int +pam_acct_mgmt.argtypes = [PamHandle, c_int] + +class pam(): + code = 0 + reason = None + + def __init__(self): + pass + + def authenticate(self, username, password, service='login', encoding='utf-8', resetcreds=True): + @conv_func + def my_conv(n_messages, messages, p_response, app_data): + return 0 + + + cpassword = c_char_p(password) + + handle = PamHandle() + conv = PamConv(my_conv, 0) + retval = pam_start(service, username, byref(conv), byref(handle)) + + retval = pam_authenticate(handle, 0) + if retval == 0: + retval = pam_acct_mgmt(handle, 0) + auth_success = retval == 0 + + return auth_success \ No newline at end of file From b95094235c9ae442862daad5e1c317583e243520 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Wed, 30 Mar 2022 10:51:38 +0300 Subject: [PATCH 0083/1618] Apply suggestions from code review Co-authored-by: Geoffrey White <40627776+geoffw0@users.noreply.github.com> --- .../CWE/CWE-476/DangerousUseOfExceptionBlocks.ql | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql index 8235249b527..08ce7302238 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql @@ -13,18 +13,21 @@ import cpp -/** Holds if the release can occur twice. in the current block of catch and above in the block of try or other block catch. */ +/** Holds if `vr` may be released in the `try` block associated with `cb`, or in a `catch` block prior to `cb`. */ pragma[inline] predicate doubleCallDelete(CatchAnyBlock cb, Variable vr) { // Search for exceptions after freeing memory. exists(Expr e1 | + // `e1` is a delete of `vr` ( e1 = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(DeleteArrayExpr) or e1 = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(DeleteExpr) ) and e1.getEnclosingFunction() = cb.getEnclosingFunction() and ( + // `e1` occurs in the `try` block associated with `cb` e1.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + // `e2` is a `throw` (or a function call that may throw) that occurs in the `try` block after `e1` exists(Expr e2, ThrowExpr th | ( e2 = th or @@ -33,6 +36,7 @@ predicate doubleCallDelete(CatchAnyBlock cb, Variable vr) { e2.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and e1.getASuccessor+() = e2 ) and + // there is no assignment `vr = 0` in the `try` block after `e1` not exists(AssignExpr ae | ae.getLValue().(VariableAccess).getTarget() = vr and ae.getRValue().getValue() = "0" and @@ -44,12 +48,14 @@ predicate doubleCallDelete(CatchAnyBlock cb, Variable vr) { exists(CatchBlock cbt, Expr e2, ThrowExpr th | e1.getEnclosingStmt().getParentStmt*() = cbt and exists(cbt.getParameter()) and + // `e2` is a `throw` (or a function call that may throw) that occurs in the `catch` block after `e1` ( e2 = th or e2 = th.getEnclosingFunction().getACallToThisFunction() ) and e2.getEnclosingStmt().getParentStmt*() = cbt and e1.getASuccessor+() = e2 and + // there is no assignment `vr = 0` in the `catch` block after `e1` not exists(AssignExpr ae | ae.getLValue().(VariableAccess).getTarget() = vr and ae.getRValue().getValue() = "0" and @@ -71,6 +77,7 @@ predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { // Search exceptions before allocating memory. exists(Expr e0, Expr e1 | ( + // `e0` is a `new` expression (or equivalent function call) assigned to `vro` exists(AssignExpr ase | ase = vro.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and ( @@ -90,6 +97,7 @@ predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { vro = ase.getLValue().getAPredecessor().(VariableAccess).getTarget() ) ) and + // `e1` is a `new` expression (or equivalent function call) assigned to `vr` exists(AssignExpr ase | ase = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and ( @@ -101,6 +109,7 @@ predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { e0.getASuccessor*() = e1 and e0.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and e1.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + // `e2` is a `throw` (or a function call that may throw) that occurs in the `try` block before `e0` exists(Expr e2, ThrowExpr th | ( e2 = th or @@ -159,7 +168,7 @@ where ) and doubleCallDelete(cb, vr) and msg = - "perhaps a situation of uncertainty due to the repeated call of the delete function for the variable " + "This allocation may have been released in the try block or a previous catch block." + vr.getName() ) select cb, msg From 65907c97620e2824ffbd008db54a98d9ee1a1060 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 24 Mar 2022 14:13:12 +0100 Subject: [PATCH 0084/1618] Python: Copy Xxe/XmlBomb queries from JS After internal discussion, these will replace the `XmlEntityInjection` query, so we can have separate severities on DoS and the other (more serious) attacks. Note: These clearly don't work, since they are verbatim copies of the JS code, but I split it into multiple commits to clearly highlight what changes were made. --- .../Security/NEW/CWE-611/Xxe.qhelp | 57 ++++++++++++++++++ .../experimental/Security/NEW/CWE-611/Xxe.ql | 23 +++++++ .../Security/NEW/CWE-611/examples/Xxe.js | 7 +++ .../Security/NEW/CWE-611/examples/XxeGood.js | 7 +++ .../Security/NEW/CWE-776/XmlBomb.qhelp | 60 +++++++++++++++++++ .../Security/NEW/CWE-776/XmlBomb.ql | 23 +++++++ .../Security/NEW/CWE-776/examples/XmlBomb.js | 10 ++++ .../NEW/CWE-776/examples/XmlBombGood.js | 10 ++++ .../dataflow/XmlBombCustomizations.qll | 49 +++++++++++++++ .../python/security/dataflow/XmlBombQuery.qll | 27 +++++++++ .../security/dataflow/XxeCustomizations.qll | 52 ++++++++++++++++ .../python/security/dataflow/XxeQuery.qll | 27 +++++++++ 12 files changed, 352 insertions(+) create mode 100644 python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp create mode 100644 python/ql/src/experimental/Security/NEW/CWE-611/Xxe.ql create mode 100644 python/ql/src/experimental/Security/NEW/CWE-611/examples/Xxe.js create mode 100644 python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.js create mode 100644 python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.qhelp create mode 100644 python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.ql create mode 100644 python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBomb.js create mode 100644 python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.js create mode 100644 python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll create mode 100644 python/ql/src/experimental/semmle/python/security/dataflow/XmlBombQuery.qll create mode 100644 python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll create mode 100644 python/ql/src/experimental/semmle/python/security/dataflow/XxeQuery.qll diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp b/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp new file mode 100644 index 00000000000..1e859eb121f --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp @@ -0,0 +1,57 @@ + + + + +

    +Parsing untrusted XML files with a weakly configured XML parser may lead to an +XML External Entity (XXE) attack. This type of attack uses external entity references +to access arbitrary files on a system, carry out denial-of-service (DoS) attacks, or server-side +request forgery. Even when the result of parsing is not returned to the user, DoS attacks are still possible +and out-of-band data retrieval techniques may allow attackers to steal sensitive data. +

    +
    + + +

    +The easiest way to prevent XXE attacks is to disable external entity handling when +parsing untrusted data. How this is done depends on the library being used. Note that some +libraries, such as recent versions of libxml, disable entity expansion by default, +so unless you have explicitly enabled entity expansion, no further action needs to be taken. +

    +
    + + +

    +The following example uses the libxml XML parser to parse a string xmlSrc. +If that string is from an untrusted source, this code may be vulnerable to an XXE attack, since +the parser is invoked with the noent option set to true: +

    + + +

    +To guard against XXE attacks, the noent option should be omitted or set to +false. This means that no entity expansion is undertaken at all, not even for standard +internal entities such as &amp; or &gt;. If desired, these +entities can be expanded in a separate step using utility functions provided by libraries such +as underscore, +lodash or +he. +

    + +
    + + +
  • +OWASP: +XML External Entity (XXE) Processing. +
  • +
  • +Timothy Morgen: +XML Schema, DTD, and Entity Attacks. +
  • +
  • +Timur Yunusov, Alexey Osipov: +XML Out-Of-Band Data Retrieval. +
  • +
    +
    diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.ql b/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.ql new file mode 100644 index 00000000000..01e518b6df7 --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.ql @@ -0,0 +1,23 @@ +/** + * @name XML external entity expansion + * @description Parsing user input as an XML document with external + * entity expansion is vulnerable to XXE attacks. + * @kind path-problem + * @problem.severity error + * @security-severity 9.1 + * @precision high + * @id js/xxe + * @tags security + * external/cwe/cwe-611 + * external/cwe/cwe-827 + */ + +import javascript +import semmle.javascript.security.dataflow.XxeQuery +import DataFlow::PathGraph + +from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink +where cfg.hasFlowPath(source, sink) +select sink.getNode(), source, sink, + "A $@ is parsed as XML without guarding against external entity expansion.", source.getNode(), + "user-provided value" diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/examples/Xxe.js b/python/ql/src/experimental/Security/NEW/CWE-611/examples/Xxe.js new file mode 100644 index 00000000000..99fa02cc42f --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-611/examples/Xxe.js @@ -0,0 +1,7 @@ +const app = require("express")(), + libxml = require("libxmljs"); + +app.post("upload", (req, res) => { + let xmlSrc = req.body, + doc = libxml.parseXml(xmlSrc, { noent: true }); +}); diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.js b/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.js new file mode 100644 index 00000000000..8317dcac98f --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.js @@ -0,0 +1,7 @@ +const app = require("express")(), + libxml = require("libxmljs"); + +app.post("upload", (req, res) => { + let xmlSrc = req.body, + doc = libxml.parseXml(xmlSrc); +}); diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.qhelp b/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.qhelp new file mode 100644 index 00000000000..c0714b3f96f --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.qhelp @@ -0,0 +1,60 @@ + + + + +

    +Parsing untrusted XML files with a weakly configured XML parser may be vulnerable to +denial-of-service (DoS) attacks exploiting uncontrolled internal entity expansion. +

    +

    +In XML, so-called internal entities are a mechanism for introducing an abbreviation +for a piece of text or part of a document. When a parser that has been configured +to expand entities encounters a reference to an internal entity, it replaces the entity +by the data it represents. The replacement text may itself contain other entity references, +which are expanded recursively. This means that entity expansion can increase document size +dramatically. +

    +

    +If untrusted XML is parsed with entity expansion enabled, a malicious attacker could +submit a document that contains very deeply nested entity definitions, causing the parser +to take a very long time or use large amounts of memory. This is sometimes called an +XML bomb attack. +

    +
    + + +

    +The safest way to prevent XML bomb attacks is to disable entity expansion when parsing untrusted +data. How this is done depends on the library being used. Note that some libraries, such as +recent versions of libxmljs (though not its SAX parser API), disable entity expansion +by default, so unless you have explicitly enabled entity expansion, no further action is needed. +

    +
    + + +

    +The following example uses the XML parser provided by the node-expat package to +parse a string xmlSrc. If that string is from an untrusted source, this code may be +vulnerable to a DoS attack, since node-expat expands internal entities by default: +

    + + +

    +At the time of writing, node-expat does not provide a way of controlling entity +expansion, but the example could be rewritten to use the sax package instead, +which only expands standard entities such as &amp;: +

    + +
    + + +
  • +Wikipedia: +Billion Laughs. +
  • +
  • +Bryan Sullivan: +Security Briefs - XML Denial of Service Attacks and Defenses. +
  • +
    +
    diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.ql b/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.ql new file mode 100644 index 00000000000..c340eee68cc --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.ql @@ -0,0 +1,23 @@ +/** + * @name XML internal entity expansion + * @description Parsing user input as an XML document with arbitrary internal + * entity expansion is vulnerable to denial-of-service attacks. + * @kind path-problem + * @problem.severity warning + * @security-severity 7.5 + * @precision high + * @id js/xml-bomb + * @tags security + * external/cwe/cwe-776 + * external/cwe/cwe-400 + */ + +import javascript +import semmle.javascript.security.dataflow.XmlBombQuery +import DataFlow::PathGraph + +from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink +where cfg.hasFlowPath(source, sink) +select sink.getNode(), source, sink, + "A $@ is parsed as XML without guarding against uncontrolled entity expansion.", source.getNode(), + "user-provided value" diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBomb.js b/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBomb.js new file mode 100644 index 00000000000..f72902a5304 --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBomb.js @@ -0,0 +1,10 @@ +const app = require("express")(), + expat = require("node-expat"); + +app.post("upload", (req, res) => { + let xmlSrc = req.body, + parser = new expat.Parser(); + parser.on("startElement", handleStart); + parser.on("text", handleText); + parser.write(xmlSrc); +}); diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.js b/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.js new file mode 100644 index 00000000000..a8c5bc97e63 --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.js @@ -0,0 +1,10 @@ +const app = require("express")(), + sax = require("sax"); + +app.post("upload", (req, res) => { + let xmlSrc = req.body, + parser = sax.parser(true); + parser.onopentag = handleStart; + parser.ontext = handleText; + parser.write(xmlSrc); +}); diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll new file mode 100644 index 00000000000..1d159b057ad --- /dev/null +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll @@ -0,0 +1,49 @@ +/** + * Provides default sources, sinks and sanitizers for reasoning about + * XML-bomb vulnerabilities, as well as extension points for adding + * your own. + */ + +import javascript +import semmle.javascript.security.dataflow.DOM + +module XmlBomb { + /** + * A data flow source for XML-bomb vulnerabilities. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for XML-bomb vulnerabilities. + */ + abstract class Sink extends DataFlow::Node { } + + /** + * A sanitizer for XML-bomb vulnerabilities. + */ + abstract class Sanitizer extends DataFlow::Node { } + + /** A source of remote user input, considered as a flow source for XML bomb vulnerabilities. */ + class RemoteFlowSourceAsSource extends Source { + RemoteFlowSourceAsSource() { this instanceof RemoteFlowSource } + } + + /** + * An access to `document.location`, considered as a flow source for XML bomb vulnerabilities. + */ + class LocationAsSource extends Source, DataFlow::ValueNode { + LocationAsSource() { isLocation(astNode) } + } + + /** + * A call to an XML parser that performs internal entity expansion, viewed + * as a data flow sink for XML-bomb vulnerabilities. + */ + class XmlParsingWithEntityResolution extends Sink, DataFlow::ValueNode { + XmlParsingWithEntityResolution() { + exists(XML::ParserInvocation parse | astNode = parse.getSourceArgument() | + parse.resolvesEntities(XML::InternalEntity()) + ) + } + } +} diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombQuery.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombQuery.qll new file mode 100644 index 00000000000..951b927f86e --- /dev/null +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombQuery.qll @@ -0,0 +1,27 @@ +/** + * Provides a taint tracking configuration for reasoning about + * XML-bomb vulnerabilities. + * + * Note, for performance reasons: only import this file if + * `XmlBomb::Configuration` is needed, otherwise + * `XmlBombCustomizations` should be imported instead. + */ + +import javascript +import XmlBombCustomizations::XmlBomb + +/** + * A taint-tracking configuration for reasoning about XML-bomb vulnerabilities. + */ +class Configuration extends TaintTracking::Configuration { + Configuration() { this = "XmlBomb" } + + override predicate isSource(DataFlow::Node source) { source instanceof Source } + + override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + override predicate isSanitizer(DataFlow::Node node) { + super.isSanitizer(node) or + node instanceof Sanitizer + } +} diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll new file mode 100644 index 00000000000..4e7bb5e730c --- /dev/null +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll @@ -0,0 +1,52 @@ +/** + * Provides default sources, sinks and sanitizers for reasoning about + * XML External Entity (XXE) vulnerabilities, as well as extension + * points for adding your own. + */ + +import javascript +import semmle.javascript.security.dataflow.DOM + +module Xxe { + /** + * A data flow source for XXE vulnerabilities. + */ + abstract class Source extends DataFlow::Node { } + + /** + * A data flow sink for XXE vulnerabilities. + */ + abstract class Sink extends DataFlow::Node { } + + /** + * A sanitizer for XXE vulnerabilities. + */ + abstract class Sanitizer extends DataFlow::Node { } + + /** A source of remote user input, considered as a flow source for XXE vulnerabilities. */ + class RemoteFlowSourceAsSource extends Source { + RemoteFlowSourceAsSource() { this instanceof RemoteFlowSource } + } + + /** + * An access to `document.location`, considered as a flow source for XXE vulnerabilities. + */ + class LocationAsSource extends Source, DataFlow::ValueNode { + LocationAsSource() { isLocation(astNode) } + } + + /** + * A call to an XML parser that performs external entity expansion, viewed + * as a data flow sink for XXE vulnerabilities. + */ + class XmlParsingWithExternalEntityResolution extends Sink, DataFlow::ValueNode { + XmlParsingWithExternalEntityResolution() { + exists(XML::ParserInvocation parse | astNode = parse.getSourceArgument() | + parse.resolvesEntities(XML::ExternalEntity(_)) + or + parse.resolvesEntities(XML::ParameterEntity(true)) and + parse.resolvesEntities(XML::InternalEntity()) + ) + } + } +} diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeQuery.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XxeQuery.qll new file mode 100644 index 00000000000..82d3fb4f6cc --- /dev/null +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XxeQuery.qll @@ -0,0 +1,27 @@ +/** + * Provides a taint tracking configuration for reasoning about XML + * External Entity (XXE) vulnerabilities. + * + * Note, for performance reasons: only import this file if + * `Xxe::Configuration` is needed, otherwise `XxeCustomizations` + * should be imported instead. + */ + +import javascript +import XxeCustomizations::Xxe + +/** + * A taint-tracking configuration for reasoning about XXE vulnerabilities. + */ +class Configuration extends TaintTracking::Configuration { + Configuration() { this = "Xxe" } + + override predicate isSource(DataFlow::Node source) { source instanceof Source } + + override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } + + override predicate isSanitizer(DataFlow::Node node) { + super.isSanitizer(node) or + node instanceof Sanitizer + } +} From e45f9d69ccb44a2109518f3c8334e21f5c193a43 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 24 Mar 2022 14:15:54 +0100 Subject: [PATCH 0085/1618] Python: Adjust Xxe/XmlBomb for Python I changed a few QLdocs so they fit the style we have used in Python... although I surely do regret having introduced a new style for how these QLDocs look :D --- .../experimental/Security/NEW/CWE-611/Xxe.ql | 6 ++-- .../Security/NEW/CWE-776/XmlBomb.ql | 6 ++-- .../dataflow/XmlBombCustomizations.qll | 31 +++++++++-------- .../python/security/dataflow/XmlBombQuery.qll | 11 +++--- .../security/dataflow/XxeCustomizations.qll | 34 +++++++++---------- .../python/security/dataflow/XxeQuery.qll | 13 +++---- 6 files changed, 51 insertions(+), 50 deletions(-) diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.ql b/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.ql index 01e518b6df7..f706ea6e909 100644 --- a/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.ql +++ b/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.ql @@ -6,14 +6,14 @@ * @problem.severity error * @security-severity 9.1 * @precision high - * @id js/xxe + * @id py/xxe * @tags security * external/cwe/cwe-611 * external/cwe/cwe-827 */ -import javascript -import semmle.javascript.security.dataflow.XxeQuery +import python +import experimental.semmle.python.security.dataflow.XxeQuery import DataFlow::PathGraph from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.ql b/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.ql index c340eee68cc..2a1ea5916c4 100644 --- a/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.ql +++ b/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.ql @@ -6,14 +6,14 @@ * @problem.severity warning * @security-severity 7.5 * @precision high - * @id js/xml-bomb + * @id py/xml-bomb * @tags security * external/cwe/cwe-776 * external/cwe/cwe-400 */ -import javascript -import semmle.javascript.security.dataflow.XmlBombQuery +import python +import experimental.semmle.python.security.dataflow.XmlBombQuery import DataFlow::PathGraph from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll index 1d159b057ad..66a16a4494a 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll @@ -1,12 +1,18 @@ /** - * Provides default sources, sinks and sanitizers for reasoning about - * XML-bomb vulnerabilities, as well as extension points for adding - * your own. + * Provides default sources, sinks and sanitizers for detecting + * "XML bomb" + * vulnerabilities, as well as extension points for adding your own. */ -import javascript -import semmle.javascript.security.dataflow.DOM +private import python +private import semmle.python.dataflow.new.DataFlow +private import experimental.semmle.python.Concepts +private import semmle.python.dataflow.new.RemoteFlowSources +/** + * Provides default sources, sinks and sanitizers for detecting "XML bomb" + * vulnerabilities, as well as extension points for adding your own. + */ module XmlBomb { /** * A data flow source for XML-bomb vulnerabilities. @@ -28,21 +34,16 @@ module XmlBomb { RemoteFlowSourceAsSource() { this instanceof RemoteFlowSource } } - /** - * An access to `document.location`, considered as a flow source for XML bomb vulnerabilities. - */ - class LocationAsSource extends Source, DataFlow::ValueNode { - LocationAsSource() { isLocation(astNode) } - } - /** * A call to an XML parser that performs internal entity expansion, viewed * as a data flow sink for XML-bomb vulnerabilities. */ - class XmlParsingWithEntityResolution extends Sink, DataFlow::ValueNode { + class XmlParsingWithEntityResolution extends Sink { XmlParsingWithEntityResolution() { - exists(XML::ParserInvocation parse | astNode = parse.getSourceArgument() | - parse.resolvesEntities(XML::InternalEntity()) + exists(ExperimentalXML::XMLParsing parsing, ExperimentalXML::XMLVulnerabilityKind kind | + (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and + parsing.vulnerableTo(kind) and + this = parsing.getAnInput() ) } } diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombQuery.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombQuery.qll index 951b927f86e..d0c0b85d84f 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombQuery.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombQuery.qll @@ -1,17 +1,18 @@ /** - * Provides a taint tracking configuration for reasoning about - * XML-bomb vulnerabilities. + * Provides a taint-tracking configuration for detecting "XML bomb" vulnerabilities. * * Note, for performance reasons: only import this file if - * `XmlBomb::Configuration` is needed, otherwise + * `Configuration` is needed, otherwise * `XmlBombCustomizations` should be imported instead. */ -import javascript +import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking import XmlBombCustomizations::XmlBomb /** - * A taint-tracking configuration for reasoning about XML-bomb vulnerabilities. + * A taint-tracking configuration for detecting "XML bomb" vulnerabilities. */ class Configuration extends TaintTracking::Configuration { Configuration() { this = "XmlBomb" } diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll index 4e7bb5e730c..b2992dd335f 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll @@ -1,12 +1,18 @@ /** - * Provides default sources, sinks and sanitizers for reasoning about - * XML External Entity (XXE) vulnerabilities, as well as extension - * points for adding your own. + * Provides default sources, sinks and sanitizers for detecting + * "XML External Entity (XXE)" + * vulnerabilities, as well as extension points for adding your own. */ -import javascript -import semmle.javascript.security.dataflow.DOM +private import python +private import semmle.python.dataflow.new.DataFlow +private import experimental.semmle.python.Concepts +private import semmle.python.dataflow.new.RemoteFlowSources +/** + * Provides default sources, sinks and sanitizers for detecting "XML External Entity (XXE)" + * vulnerabilities, as well as extension points for adding your own. + */ module Xxe { /** * A data flow source for XXE vulnerabilities. @@ -28,24 +34,16 @@ module Xxe { RemoteFlowSourceAsSource() { this instanceof RemoteFlowSource } } - /** - * An access to `document.location`, considered as a flow source for XXE vulnerabilities. - */ - class LocationAsSource extends Source, DataFlow::ValueNode { - LocationAsSource() { isLocation(astNode) } - } - /** * A call to an XML parser that performs external entity expansion, viewed * as a data flow sink for XXE vulnerabilities. */ - class XmlParsingWithExternalEntityResolution extends Sink, DataFlow::ValueNode { + class XmlParsingWithExternalEntityResolution extends Sink { XmlParsingWithExternalEntityResolution() { - exists(XML::ParserInvocation parse | astNode = parse.getSourceArgument() | - parse.resolvesEntities(XML::ExternalEntity(_)) - or - parse.resolvesEntities(XML::ParameterEntity(true)) and - parse.resolvesEntities(XML::InternalEntity()) + exists(ExperimentalXML::XMLParsing parsing, ExperimentalXML::XMLVulnerabilityKind kind | + kind.isXxe() and + parsing.vulnerableTo(kind) and + this = parsing.getAnInput() ) } } diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeQuery.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XxeQuery.qll index 82d3fb4f6cc..dd2409f2a3c 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XxeQuery.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XxeQuery.qll @@ -1,17 +1,18 @@ /** - * Provides a taint tracking configuration for reasoning about XML - * External Entity (XXE) vulnerabilities. + * Provides a taint-tracking configuration for detecting "XML External Entity (XXE)" vulnerabilities. * * Note, for performance reasons: only import this file if - * `Xxe::Configuration` is needed, otherwise `XxeCustomizations` - * should be imported instead. + * `Configuration` is needed, otherwise + * `XxeCustomizations` should be imported instead. */ -import javascript +import python +import semmle.python.dataflow.new.DataFlow +import semmle.python.dataflow.new.TaintTracking import XxeCustomizations::Xxe /** - * A taint-tracking configuration for reasoning about XXE vulnerabilities. + * A taint-tracking configuration for detecting "XML External Entity (XXE)" vulnerabilities. */ class Configuration extends TaintTracking::Configuration { Configuration() { this = "Xxe" } From 91795b857756a4912e6a280e4e53f65f4fbaf76a Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 24 Mar 2022 14:16:38 +0100 Subject: [PATCH 0086/1618] Python: Add simple test of Xxe/XmlBomb Note that most of the testing happens in the framework specific tests, with an inline-expectation test --- .../Security/CWE-611-Xxe/Xxe.expected | 20 +++++++++++++ .../Security/CWE-611-Xxe/Xxe.qlref | 1 + .../query-tests/Security/CWE-611-Xxe/test.py | 30 +++++++++++++++++++ .../Security/CWE-776-XmlBomb/XmlBomb.expected | 12 ++++++++ .../Security/CWE-776-XmlBomb/XmlBomb.qlref | 1 + .../Security/CWE-776-XmlBomb/test.py | 30 +++++++++++++++++++ 6 files changed, 94 insertions(+) create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.expected create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.qlref create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/test.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/test.py diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.expected b/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.expected new file mode 100644 index 00000000000..004369d79cf --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.expected @@ -0,0 +1,20 @@ +edges +| test.py:8:19:8:25 | ControlFlowNode for request | test.py:8:19:8:30 | ControlFlowNode for Attribute | +| test.py:8:19:8:30 | ControlFlowNode for Attribute | test.py:8:19:8:45 | ControlFlowNode for Subscript | +| test.py:8:19:8:45 | ControlFlowNode for Subscript | test.py:9:34:9:44 | ControlFlowNode for xml_content | +| test.py:19:19:19:25 | ControlFlowNode for request | test.py:19:19:19:30 | ControlFlowNode for Attribute | +| test.py:19:19:19:30 | ControlFlowNode for Attribute | test.py:19:19:19:45 | ControlFlowNode for Subscript | +| test.py:19:19:19:45 | ControlFlowNode for Subscript | test.py:30:34:30:44 | ControlFlowNode for xml_content | +nodes +| test.py:8:19:8:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test.py:8:19:8:30 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:8:19:8:45 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| test.py:9:34:9:44 | ControlFlowNode for xml_content | semmle.label | ControlFlowNode for xml_content | +| test.py:19:19:19:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test.py:19:19:19:30 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:19:19:19:45 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| test.py:30:34:30:44 | ControlFlowNode for xml_content | semmle.label | ControlFlowNode for xml_content | +subpaths +#select +| test.py:9:34:9:44 | ControlFlowNode for xml_content | test.py:8:19:8:25 | ControlFlowNode for request | test.py:9:34:9:44 | ControlFlowNode for xml_content | A $@ is parsed as XML without guarding against external entity expansion. | test.py:8:19:8:25 | ControlFlowNode for request | user-provided value | +| test.py:30:34:30:44 | ControlFlowNode for xml_content | test.py:19:19:19:25 | ControlFlowNode for request | test.py:30:34:30:44 | ControlFlowNode for xml_content | A $@ is parsed as XML without guarding against external entity expansion. | test.py:19:19:19:25 | ControlFlowNode for request | user-provided value | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.qlref b/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.qlref new file mode 100644 index 00000000000..f8a07d7d2ee --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.qlref @@ -0,0 +1 @@ +experimental/Security/NEW/CWE-611/Xxe.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/test.py b/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/test.py new file mode 100644 index 00000000000..d9181c4cf34 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/test.py @@ -0,0 +1,30 @@ +from flask import Flask, request +import lxml.etree + +app = Flask(__name__) + +@app.route("/vuln-handler") +def vuln_handler(): + xml_content = request.args['xml_content'] + return lxml.etree.fromstring(xml_content).text + +@app.route("/safe-handler") +def safe_handler(): + xml_content = request.args['xml_content'] + parser = lxml.etree.XMLParser(resolve_entities=False) + return lxml.etree.fromstring(xml_content, parser=parser).text + +@app.route("/super-vuln-handler") +def super_vuln_handler(): + xml_content = request.args['xml_content'] + parser = lxml.etree.XMLParser( + # allows XXE + resolve_entities=True, + # allows remote XXE + no_network=False, + # together with `no_network=False`, allows DTD-retrival + load_dtd=True, + # allows DoS attacks + huge_tree=True, + ) + return lxml.etree.fromstring(xml_content, parser=parser).text diff --git a/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected b/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected new file mode 100644 index 00000000000..15c439d0761 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected @@ -0,0 +1,12 @@ +edges +| test.py:19:19:19:25 | ControlFlowNode for request | test.py:19:19:19:30 | ControlFlowNode for Attribute | +| test.py:19:19:19:30 | ControlFlowNode for Attribute | test.py:19:19:19:45 | ControlFlowNode for Subscript | +| test.py:19:19:19:45 | ControlFlowNode for Subscript | test.py:30:34:30:44 | ControlFlowNode for xml_content | +nodes +| test.py:19:19:19:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| test.py:19:19:19:30 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| test.py:19:19:19:45 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| test.py:30:34:30:44 | ControlFlowNode for xml_content | semmle.label | ControlFlowNode for xml_content | +subpaths +#select +| test.py:30:34:30:44 | ControlFlowNode for xml_content | test.py:19:19:19:25 | ControlFlowNode for request | test.py:30:34:30:44 | ControlFlowNode for xml_content | A $@ is parsed as XML without guarding against uncontrolled entity expansion. | test.py:19:19:19:25 | ControlFlowNode for request | user-provided value | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref b/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref new file mode 100644 index 00000000000..5eadbb1f26f --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref @@ -0,0 +1 @@ +experimental/Security/NEW/CWE-776/XmlBomb.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/test.py b/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/test.py new file mode 100644 index 00000000000..d9181c4cf34 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/test.py @@ -0,0 +1,30 @@ +from flask import Flask, request +import lxml.etree + +app = Flask(__name__) + +@app.route("/vuln-handler") +def vuln_handler(): + xml_content = request.args['xml_content'] + return lxml.etree.fromstring(xml_content).text + +@app.route("/safe-handler") +def safe_handler(): + xml_content = request.args['xml_content'] + parser = lxml.etree.XMLParser(resolve_entities=False) + return lxml.etree.fromstring(xml_content, parser=parser).text + +@app.route("/super-vuln-handler") +def super_vuln_handler(): + xml_content = request.args['xml_content'] + parser = lxml.etree.XMLParser( + # allows XXE + resolve_entities=True, + # allows remote XXE + no_network=False, + # together with `no_network=False`, allows DTD-retrival + load_dtd=True, + # allows DoS attacks + huge_tree=True, + ) + return lxml.etree.fromstring(xml_content, parser=parser).text From a1d88e39a77f4c16ca0e292ca5e6311828745b2e Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 24 Mar 2022 15:36:20 +0100 Subject: [PATCH 0087/1618] Python: Adjust XXE PoC for newer lxml versions Which doesn't raise that syntax error (at least not on my laptop) --- .../experimental/library-tests/frameworks/XML/poc/PoC.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py b/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py index adcace1aa0a..77d6c032683 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py @@ -361,11 +361,7 @@ class TestLxml: hit_xxe = False parser = lxml.etree.XMLParser() - try: - root = lxml.etree.fromstring(remote_xxe, parser=parser) - assert False - except lxml.etree.XMLSyntaxError as e: - assert "Failure to process entity remote_xxe" in str(e) + root = lxml.etree.fromstring(remote_xxe, parser=parser) assert hit_xxe == False @staticmethod From 57b97804283545dbe986c019660ae5171ba8e7ed Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 24 Mar 2022 15:37:14 +0100 Subject: [PATCH 0088/1618] Python: XXE: Add example of exfiltrating data through dtd-retrival --- .../library-tests/frameworks/XML/poc/PoC.py | 32 ++++++++++++++++++- .../library-tests/frameworks/XML/poc/flag | 2 +- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py b/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py index 77d6c032683..b4cb2faf304 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py @@ -70,6 +70,10 @@ dtd_retrieval = f""" bar """ +exfiltrate_through_dtd_retrieval = f""" + %xxe; ]> +""" + # ============================================================================== # other setup @@ -95,6 +99,22 @@ def test_xxe(): hit_xxe = True return "ok" +@app.route("/exfiltrate-through.dtd") +def exfiltrate_through_dtd(): + return f""" +"> +%eval; +%exfiltrate; + """ + +exfiltrated_data = None +@app.route("/exfiltrate-data") +def exfiltrate_data(): + from flask import request + global exfiltrated_data + exfiltrated_data = request.args["data"] + return "ok" + def run_app(): app.run(host=HOST, port=PORT) @@ -346,7 +366,7 @@ class TestLxml: parser = lxml.etree.XMLParser() root = lxml.etree.fromstring(local_xxe, parser=parser) assert root.tag == "test" - assert root.text == "SECRET_FLAG\n", root.text + assert root.text == "SECRET_FLAG", root.text @staticmethod def test_local_xxe_disabled(): @@ -412,6 +432,16 @@ class TestLxml: pass assert hit_dtd == False + @staticmethod + def test_exfiltrate_through_dtd(): + # note that this only works when the data to exfiltrate does not contain a newline :| + global exfiltrated_data + exfiltrated_data = None + parser = lxml.etree.XMLParser(load_dtd=True, no_network=False) + with pytest.raises(lxml.etree.XMLSyntaxError): + lxml.etree.fromstring(exfiltrate_through_dtd_retrieval, parser=parser) + + assert exfiltrated_data == "SECRET_FLAG" # ============================================================================== diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/poc/flag b/python/ql/test/experimental/library-tests/frameworks/XML/poc/flag index 45c9436ee9f..b8bd6838774 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/poc/flag +++ b/python/ql/test/experimental/library-tests/frameworks/XML/poc/flag @@ -1 +1 @@ -SECRET_FLAG +SECRET_FLAG \ No newline at end of file From 769f5691d08dd8288e4eb6432e163b0a53c8ac21 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 29 Mar 2022 17:18:06 +0200 Subject: [PATCH 0089/1618] Python: Add taint for `StringIO` and `BytesIO` --- .../2022-03-29-add-taint-for-StringIO.md | 4 ++ .../lib/semmle/python/frameworks/Stdlib.qll | 58 +++++++++++++++++++ .../frameworks/stdlib/io_test.py | 47 +++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 python/ql/lib/change-notes/2022-03-29-add-taint-for-StringIO.md create mode 100644 python/ql/test/library-tests/frameworks/stdlib/io_test.py diff --git a/python/ql/lib/change-notes/2022-03-29-add-taint-for-StringIO.md b/python/ql/lib/change-notes/2022-03-29-add-taint-for-StringIO.md new file mode 100644 index 00000000000..7857e6f9ca6 --- /dev/null +++ b/python/ql/lib/change-notes/2022-03-29-add-taint-for-StringIO.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added taint propagation for `io.StringIO` and `io.BytesIO`. This addition was originally [submitted as part of an experimental query by @jorgectf](https://github.com/github/codeql/pull/6112). diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 22dce5427ae..234a8802f0f 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3116,6 +3116,64 @@ private module StdlibPrivate { result in [this.getArg(0), this.getArgByName("path")] } } + + // --------------------------------------------------------------------------- + // io + // --------------------------------------------------------------------------- + /** + * Provides models for the `io.StringIO`/`io.BytesIO` classes + * + * See https://docs.python.org/3.10/library/io.html#io.StringIO. + */ + module StringIO { + /** Gets a reference to the `io.StringIO` class. */ + private API::Node classRef() { + result = API::moduleImport("io").getMember(["StringIO", "BytesIO"]) + } + + /** + * A source of instances of `io.StringIO`/`io.BytesIO`, extend this class to model new instances. + * + * This can include instantiations of the class, return values from function + * calls, or a special parameter that will be set when functions are called by an external + * library. + * + * Use the predicate `StringIO::instance()` to get references to instances of `io.StringIO`. + */ + abstract class InstanceSource extends Stdlib::FileLikeObject::InstanceSource { } + + /** A direct instantiation of `io.StringIO`/`io.BytesIO`. */ + private class ClassInstantiation extends InstanceSource, DataFlow::CallCfgNode { + ClassInstantiation() { this = classRef().getACall() } + + DataFlow::Node getInitialValue() { + result = this.getArg(0) + or + // `initial_value` for StringIO, `initial_bytes` for BytesIO + result = this.getArgByName(["initial_value", "initial_bytes"]) + } + } + + /** Gets a reference to an instance of `io.StringIO`/`io.BytesIO`. */ + private DataFlow::TypeTrackingNode instance(DataFlow::TypeTracker t) { + t.start() and + result instanceof InstanceSource + or + exists(DataFlow::TypeTracker t2 | result = instance(t2).track(t2, t)) + } + + /** Gets a reference to an instance of `io.StringIO`/`io.BytesIO`. */ + DataFlow::Node instance() { instance(DataFlow::TypeTracker::end()).flowsTo(result) } + + /** + * Extra taint propagation for `io.StringIO`/`io.BytesIO`. + */ + private class AdditionalTaintStep extends TaintTracking::AdditionalTaintStep { + override predicate step(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + nodeTo.(ClassInstantiation).getInitialValue() = nodeFrom + } + } + } } // --------------------------------------------------------------------------- diff --git a/python/ql/test/library-tests/frameworks/stdlib/io_test.py b/python/ql/test/library-tests/frameworks/stdlib/io_test.py new file mode 100644 index 00000000000..98d60445e1c --- /dev/null +++ b/python/ql/test/library-tests/frameworks/stdlib/io_test.py @@ -0,0 +1,47 @@ +from io import StringIO, BytesIO + +TAINTED_STRING = "TS" +TAINTED_BYTES = b"TB" + +def ensure_tainted(*args): + print("ensure_tainted") + for arg in args: + print("", repr(arg)) + + +def test_stringio(): + ts = TAINTED_STRING + + x = StringIO() + x.write(ts) + x.seek(0) + + ensure_tainted( + StringIO(ts), # $ tainted + StringIO(initial_value=ts), # $ tainted + x, # $ tainted + + x.read(), # $ tainted + StringIO(ts).read(), # $ tainted + ) + + +def test_bytesio(): + tb = TAINTED_BYTES + + x = BytesIO() + x.write(tb) + x.seek(0) + + ensure_tainted( + BytesIO(tb), # $ tainted + BytesIO(initial_bytes=tb), # $ tainted + x, # $ tainted + + x.read(), # $ tainted + BytesIO(tb).read(), # $ tainted + ) + + +test_stringio() +test_bytesio() From c3653378671f7e8c39c20993f16f64224945bf97 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 29 Mar 2022 11:20:38 +0200 Subject: [PATCH 0090/1618] Python: Delete `XmlEntityInjection.ql` Kept the test of SimpleXmlRpcServer, and kept the qhelp so it can be used to write the new qhelp files --- .../src/experimental/Security/CWE-611/XXE.xml | 4 - .../Security/CWE-611/XmlEntityInjection.py | 25 ------ .../Security/CWE-611/XmlEntityInjection.ql | 31 ------- .../{CWE-611 => NEW}/XmlEntityInjection.qhelp | 0 .../security/dataflow/XmlEntityInjection.qll | 28 ------ .../XmlEntityInjectionCustomizations.qll | 86 ------------------- .../SimpleXmlRpcServer.expected | 0 .../SimpleXmlRpcServer.qlref | 0 .../xmlrpc_server.py | 0 .../CWE-611/XmlEntityInjection.expected | 27 ------ .../Security/CWE-611/XmlEntityInjection.qlref | 1 - .../query-tests/Security/CWE-611/test.py | 30 ------- 12 files changed, 232 deletions(-) delete mode 100644 python/ql/src/experimental/Security/CWE-611/XXE.xml delete mode 100644 python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.py delete mode 100644 python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.ql rename python/ql/src/experimental/Security/{CWE-611 => NEW}/XmlEntityInjection.qhelp (100%) delete mode 100644 python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjection.qll delete mode 100644 python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjectionCustomizations.qll rename python/ql/test/experimental/query-tests/Security/{CWE-611 => CWE-611-SimpleXmlRpcServer}/SimpleXmlRpcServer.expected (100%) rename python/ql/test/experimental/query-tests/Security/{CWE-611 => CWE-611-SimpleXmlRpcServer}/SimpleXmlRpcServer.qlref (100%) rename python/ql/test/experimental/query-tests/Security/{CWE-611 => CWE-611-SimpleXmlRpcServer}/xmlrpc_server.py (100%) delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.expected delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.qlref delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-611/test.py diff --git a/python/ql/src/experimental/Security/CWE-611/XXE.xml b/python/ql/src/experimental/Security/CWE-611/XXE.xml deleted file mode 100644 index ddd196f2f13..00000000000 --- a/python/ql/src/experimental/Security/CWE-611/XXE.xml +++ /dev/null @@ -1,4 +0,0 @@ - -]> -&xxe; \ No newline at end of file diff --git a/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.py b/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.py deleted file mode 100644 index 0e9eec933d7..00000000000 --- a/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.py +++ /dev/null @@ -1,25 +0,0 @@ -from flask import request, Flask -import lxml.etree -import xml.etree.ElementTree - -app = Flask(__name__) - -# BAD -@app.route("/bad") -def bad(): - xml_content = request.args['xml_content'] - - parser = lxml.etree.XMLParser() - parsed_xml = xml.etree.ElementTree.fromstring(xml_content, parser=parser) - - return parsed_xml.text - -# GOOD -@app.route("/good") -def good(): - xml_content = request.args['xml_content'] - - parser = lxml.etree.XMLParser(resolve_entities=False) - parsed_xml = xml.etree.ElementTree.fromstring(xml_content, parser=parser) - - return parsed_xml.text \ No newline at end of file diff --git a/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.ql b/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.ql deleted file mode 100644 index 922ca346b17..00000000000 --- a/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.ql +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @name XML Entity injection - * @description User input should not be parsed allowing the injection of entities. - * @kind path-problem - * @problem.severity error - * @id py/xml-entity-injection - * @tags security - * external/cwe/cwe-611 - * external/cwe/cwe-776 - * external/cwe/cwe-827 - */ - -// determine precision above -import python -import experimental.semmle.python.security.dataflow.XmlEntityInjection -import DataFlow::PathGraph - -from - XmlEntityInjection::XmlEntityInjectionConfiguration config, DataFlow::PathNode source, - DataFlow::PathNode sink, string kinds -where - config.hasFlowPath(source, sink) and - kinds = - strictconcat(string kind | - kind = sink.getNode().(XmlEntityInjection::Sink).getVulnerableKind() - | - kind, ", " - ) -select sink.getNode(), source, sink, - "$@ XML input is constructed from a $@ and is vulnerable to: " + kinds + ".", sink.getNode(), - "This", source.getNode(), "user-provided value" diff --git a/python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.qhelp b/python/ql/src/experimental/Security/NEW/XmlEntityInjection.qhelp similarity index 100% rename from python/ql/src/experimental/Security/CWE-611/XmlEntityInjection.qhelp rename to python/ql/src/experimental/Security/NEW/XmlEntityInjection.qhelp diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjection.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjection.qll deleted file mode 100644 index 35220e153d1..00000000000 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjection.qll +++ /dev/null @@ -1,28 +0,0 @@ -import python -import experimental.semmle.python.Concepts -import semmle.python.dataflow.new.DataFlow -import semmle.python.dataflow.new.TaintTracking -import semmle.python.dataflow.new.RemoteFlowSources -import semmle.python.dataflow.new.BarrierGuards - -module XmlEntityInjection { - import XmlEntityInjectionCustomizations::XmlEntityInjection - - class XmlEntityInjectionConfiguration extends TaintTracking::Configuration { - XmlEntityInjectionConfiguration() { this = "XmlEntityInjectionConfiguration" } - - override predicate isSource(DataFlow::Node source) { - source instanceof RemoteFlowSourceAsSource - } - - override predicate isSink(DataFlow::Node sink) { sink instanceof Sink } - - override predicate isSanitizerGuard(DataFlow::BarrierGuard guard) { - guard instanceof SanitizerGuard - } - - override predicate isAdditionalTaintStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - any(AdditionalTaintStep s).step(nodeFrom, nodeTo) - } - } -} diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjectionCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjectionCustomizations.qll deleted file mode 100644 index e420c738a97..00000000000 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlEntityInjectionCustomizations.qll +++ /dev/null @@ -1,86 +0,0 @@ -/** - * Provides default sources, sinks and sanitizers for detecting - * "ldap injection" - * vulnerabilities, as well as extension points for adding your own. - */ - -private import python -private import semmle.python.dataflow.new.DataFlow -private import experimental.semmle.python.Concepts -private import semmle.python.dataflow.new.RemoteFlowSources -private import semmle.python.dataflow.new.BarrierGuards -private import semmle.python.ApiGraphs - -/** - * Provides default sources, sinks and sanitizers for detecting "xml injection" - * vulnerabilities, as well as extension points for adding your own. - */ -module XmlEntityInjection { - /** - * A data flow source for "xml injection" vulnerabilities. - */ - abstract class Source extends DataFlow::Node { } - - /** - * A data flow sink for "xml injection" vulnerabilities. - */ - abstract class Sink extends DataFlow::Node { - /** Gets the kind of XML injection that this sink is vulnerable to. */ - abstract string getVulnerableKind(); - } - - /** - * A sanitizer guard for "xml injection" vulnerabilities. - */ - abstract class SanitizerGuard extends DataFlow::BarrierGuard { } - - /** - * A unit class for adding additional taint steps. - * - * Extend this class to add additional taint steps that should apply to `XmlEntityInjection` - * taint configuration. - */ - class AdditionalTaintStep extends Unit { - /** - * Holds if the step from `nodeFrom` to `nodeTo` should be considered a taint - * step for `XmlEntityInjection` configuration. - */ - abstract predicate step(DataFlow::Node nodeFrom, DataFlow::Node nodeTo); - } - - /** - * An input to a direct XML parsing function, considered as a flow sink. - * - * See `XML::XMLParsing`. - */ - class XMLParsingInputAsSink extends Sink { - ExperimentalXML::XMLParsing xmlParsing; - - XMLParsingInputAsSink() { this = xmlParsing.getAnInput() } - - override string getVulnerableKind() { xmlParsing.vulnerableTo(result) } - } - - /** - * A source of remote user input, considered as a flow source. - */ - class RemoteFlowSourceAsSource extends Source, RemoteFlowSource { } - - /** - * A comparison with a constant string, considered as a sanitizer-guard. - */ - class StringConstCompareAsSanitizerGuard extends SanitizerGuard, StringConstCompare { } - - /** - * A taint step for `io`'s `StringIO` and `BytesIO` methods. - */ - class IoAdditionalTaintStep extends AdditionalTaintStep { - override predicate step(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - exists(DataFlow::CallCfgNode ioCalls | - ioCalls = API::moduleImport("io").getMember(["StringIO", "BytesIO"]).getACall() and - nodeFrom = ioCalls.getArg(0) and - nodeTo = ioCalls - ) - } - } -} diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611/SimpleXmlRpcServer.expected b/python/ql/test/experimental/query-tests/Security/CWE-611-SimpleXmlRpcServer/SimpleXmlRpcServer.expected similarity index 100% rename from python/ql/test/experimental/query-tests/Security/CWE-611/SimpleXmlRpcServer.expected rename to python/ql/test/experimental/query-tests/Security/CWE-611-SimpleXmlRpcServer/SimpleXmlRpcServer.expected diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611/SimpleXmlRpcServer.qlref b/python/ql/test/experimental/query-tests/Security/CWE-611-SimpleXmlRpcServer/SimpleXmlRpcServer.qlref similarity index 100% rename from python/ql/test/experimental/query-tests/Security/CWE-611/SimpleXmlRpcServer.qlref rename to python/ql/test/experimental/query-tests/Security/CWE-611-SimpleXmlRpcServer/SimpleXmlRpcServer.qlref diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611/xmlrpc_server.py b/python/ql/test/experimental/query-tests/Security/CWE-611-SimpleXmlRpcServer/xmlrpc_server.py similarity index 100% rename from python/ql/test/experimental/query-tests/Security/CWE-611/xmlrpc_server.py rename to python/ql/test/experimental/query-tests/Security/CWE-611-SimpleXmlRpcServer/xmlrpc_server.py diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.expected deleted file mode 100644 index 25594b4ddaa..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.expected +++ /dev/null @@ -1,27 +0,0 @@ -edges -| test.py:8:19:8:25 | ControlFlowNode for request | test.py:8:19:8:30 | ControlFlowNode for Attribute | -| test.py:8:19:8:30 | ControlFlowNode for Attribute | test.py:8:19:8:45 | ControlFlowNode for Subscript | -| test.py:8:19:8:45 | ControlFlowNode for Subscript | test.py:9:34:9:44 | ControlFlowNode for xml_content | -| test.py:13:19:13:25 | ControlFlowNode for request | test.py:13:19:13:30 | ControlFlowNode for Attribute | -| test.py:13:19:13:30 | ControlFlowNode for Attribute | test.py:13:19:13:45 | ControlFlowNode for Subscript | -| test.py:13:19:13:45 | ControlFlowNode for Subscript | test.py:15:34:15:44 | ControlFlowNode for xml_content | -| test.py:19:19:19:25 | ControlFlowNode for request | test.py:19:19:19:30 | ControlFlowNode for Attribute | -| test.py:19:19:19:30 | ControlFlowNode for Attribute | test.py:19:19:19:45 | ControlFlowNode for Subscript | -| test.py:19:19:19:45 | ControlFlowNode for Subscript | test.py:30:34:30:44 | ControlFlowNode for xml_content | -nodes -| test.py:8:19:8:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test.py:8:19:8:30 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| test.py:8:19:8:45 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | -| test.py:9:34:9:44 | ControlFlowNode for xml_content | semmle.label | ControlFlowNode for xml_content | -| test.py:13:19:13:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test.py:13:19:13:30 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| test.py:13:19:13:45 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | -| test.py:15:34:15:44 | ControlFlowNode for xml_content | semmle.label | ControlFlowNode for xml_content | -| test.py:19:19:19:25 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| test.py:19:19:19:30 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| test.py:19:19:19:45 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | -| test.py:30:34:30:44 | ControlFlowNode for xml_content | semmle.label | ControlFlowNode for xml_content | -subpaths -#select -| test.py:9:34:9:44 | ControlFlowNode for xml_content | test.py:8:19:8:25 | ControlFlowNode for request | test.py:9:34:9:44 | ControlFlowNode for xml_content | $@ XML input is constructed from a $@ and is vulnerable to: XXE. | test.py:9:34:9:44 | ControlFlowNode for xml_content | This | test.py:8:19:8:25 | ControlFlowNode for request | user-provided value | -| test.py:30:34:30:44 | ControlFlowNode for xml_content | test.py:19:19:19:25 | ControlFlowNode for request | test.py:30:34:30:44 | ControlFlowNode for xml_content | $@ XML input is constructed from a $@ and is vulnerable to: Billion Laughs, DTD retrieval, Quadratic Blowup, XXE. | test.py:30:34:30:44 | ControlFlowNode for xml_content | This | test.py:19:19:19:25 | ControlFlowNode for request | user-provided value | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.qlref b/python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.qlref deleted file mode 100644 index 36a7c8845fb..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-611/XmlEntityInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE-611/XmlEntityInjection.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611/test.py b/python/ql/test/experimental/query-tests/Security/CWE-611/test.py deleted file mode 100644 index d9181c4cf34..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-611/test.py +++ /dev/null @@ -1,30 +0,0 @@ -from flask import Flask, request -import lxml.etree - -app = Flask(__name__) - -@app.route("/vuln-handler") -def vuln_handler(): - xml_content = request.args['xml_content'] - return lxml.etree.fromstring(xml_content).text - -@app.route("/safe-handler") -def safe_handler(): - xml_content = request.args['xml_content'] - parser = lxml.etree.XMLParser(resolve_entities=False) - return lxml.etree.fromstring(xml_content, parser=parser).text - -@app.route("/super-vuln-handler") -def super_vuln_handler(): - xml_content = request.args['xml_content'] - parser = lxml.etree.XMLParser( - # allows XXE - resolve_entities=True, - # allows remote XXE - no_network=False, - # together with `no_network=False`, allows DTD-retrival - load_dtd=True, - # allows DoS attacks - huge_tree=True, - ) - return lxml.etree.fromstring(xml_content, parser=parser).text From b00766b054d1b58a06dce48bd631a5b0eaacb7b7 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 29 Mar 2022 13:51:00 +0200 Subject: [PATCH 0091/1618] Python: Adjust XXE qhelp and remove the old copy, we don't need it anymore :) --- .../Security/NEW/CWE-611/Xxe.qhelp | 39 ++++++++++----- .../Security/NEW/CWE-611/examples/Xxe.js | 7 --- .../Security/NEW/CWE-611/examples/XxeBad.py | 10 ++++ .../Security/NEW/CWE-611/examples/XxeGood.js | 7 --- .../Security/NEW/CWE-611/examples/XxeGood.py | 11 +++++ .../Security/NEW/XmlEntityInjection.qhelp | 48 ------------------- .../library-tests/frameworks/XML/poc/PoC.py | 11 +++++ 7 files changed, 58 insertions(+), 75 deletions(-) delete mode 100644 python/ql/src/experimental/Security/NEW/CWE-611/examples/Xxe.js create mode 100644 python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeBad.py delete mode 100644 python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.js create mode 100644 python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.py delete mode 100644 python/ql/src/experimental/Security/NEW/XmlEntityInjection.qhelp diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp b/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp index 1e859eb121f..7254e292309 100644 --- a/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp +++ b/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp @@ -15,29 +15,34 @@ and out-of-band data retrieval techniques may allow attackers to steal sensitive

    The easiest way to prevent XXE attacks is to disable external entity handling when parsing untrusted data. How this is done depends on the library being used. Note that some -libraries, such as recent versions of libxml, disable entity expansion by default, +libraries, such as recent versions of the XML libraries in the standard library of Python 3, +disable entity expansion by default, so unless you have explicitly enabled entity expansion, no further action needs to be taken.

    + +

    +We recommend using the defusedxml +PyPI package, which has been created to prevent XML attacks (both XXE and XML bombs). +

    -The following example uses the libxml XML parser to parse a string xmlSrc. -If that string is from an untrusted source, this code may be vulnerable to an XXE attack, since -the parser is invoked with the noent option set to true: +The following example uses the lxml XML parser to parse a string +xml_src. That string is from an untrusted source, so this code is +vulnerable to an XXE attack, since the +default parser from lxml.etree allows local external entities to be resolved.

    - +

    -To guard against XXE attacks, the noent option should be omitted or set to -false. This means that no entity expansion is undertaken at all, not even for standard -internal entities such as &amp; or &gt;. If desired, these -entities can be expanded in a separate step using utility functions provided by libraries such -as underscore, -lodash or -he. +To guard against XXE attacks with the lxml library, you should create a +parser with resolve_entities set to false. This means that no +entity expansion is undertaken, althuogh standard predefined entities such as +&gt;, for writing > inside the text of an XML element, +are still allowed.

    - +
    @@ -53,5 +58,13 @@ Timothy Morgen: Timur Yunusov, Alexey Osipov: XML Out-Of-Band Data Retrieval. +
  • +Python 3 standard library: +XML Vulnerabilities. +
  • +
  • +Python 2 standard library: +XML Vulnerabilities. +
  • diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/examples/Xxe.js b/python/ql/src/experimental/Security/NEW/CWE-611/examples/Xxe.js deleted file mode 100644 index 99fa02cc42f..00000000000 --- a/python/ql/src/experimental/Security/NEW/CWE-611/examples/Xxe.js +++ /dev/null @@ -1,7 +0,0 @@ -const app = require("express")(), - libxml = require("libxmljs"); - -app.post("upload", (req, res) => { - let xmlSrc = req.body, - doc = libxml.parseXml(xmlSrc, { noent: true }); -}); diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeBad.py b/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeBad.py new file mode 100644 index 00000000000..4b2121ab4a6 --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeBad.py @@ -0,0 +1,10 @@ +from flask import Flask, request +import lxml.etree + +app = Flask(__name__) + +@app.post("/upload") +def upload(): + xml_src = request.get_data() + doc = lxml.etree.fromstring(xml_src) + return lxml.etree.tostring(doc) diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.js b/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.js deleted file mode 100644 index 8317dcac98f..00000000000 --- a/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.js +++ /dev/null @@ -1,7 +0,0 @@ -const app = require("express")(), - libxml = require("libxmljs"); - -app.post("upload", (req, res) => { - let xmlSrc = req.body, - doc = libxml.parseXml(xmlSrc); -}); diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.py b/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.py new file mode 100644 index 00000000000..20844032fa3 --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.py @@ -0,0 +1,11 @@ +from flask import Flask, request +import lxml.etree + +app = Flask(__name__) + +@app.post("/upload") +def upload(): + xml_src = request.get_data() + parser = lxml.etree.XMLParser(resolve_entities=False) + doc = lxml.etree.fromstring(xml_src, parser=parser) + return lxml.etree.tostring(doc) diff --git a/python/ql/src/experimental/Security/NEW/XmlEntityInjection.qhelp b/python/ql/src/experimental/Security/NEW/XmlEntityInjection.qhelp deleted file mode 100644 index 6da1bf1d306..00000000000 --- a/python/ql/src/experimental/Security/NEW/XmlEntityInjection.qhelp +++ /dev/null @@ -1,48 +0,0 @@ - - - - -

    -Parsing untrusted XML files with a weakly configured XML parser may lead to attacks such as XML External Entity (XXE), -Billion Laughs, Quadratic Blowup and DTD retrieval. -This type of attack uses external entity references to access arbitrary files on a system, carry out denial of -service, or server side request forgery. Even when the result of parsing is not returned to the user, out-of-band -data retrieval techniques may allow attackers to steal sensitive data. Denial of services can also be carried out -in this situation. -

    -
    - - -

    -Use defusedxml, a Python package aimed -to prevent any potentially malicious operation. -

    -
    - - -

    -The following example calls xml.etree.ElementTree.fromstring using a parser (lxml.etree.XMLParser) -that is not safely configured on untrusted data, and is therefore inherently unsafe. -

    - -

    -Providing an input (xml_content) like the following XML content against /bad, the request response would contain the contents of -/etc/passwd. -

    - -
    - - -
  • Python 3 XML Vulnerabilities.
  • -
  • Python 2 XML Vulnerabilities.
  • -
  • Python XML Parsing.
  • -
  • OWASP vulnerability description: XML External Entity (XXE) Processing.
  • -
  • OWASP guidance on parsing xml files: XXE Prevention Cheat Sheet.
  • -
  • Paper by Timothy Morgen: XML Schema, DTD, and Entity Attacks
  • -
  • Out-of-band data retrieval: Timur Yunusov & Alexey Osipov, Black hat EU 2013: XML Out-Of-Band Data Retrieval.
  • -
  • Denial of service attack (Billion laughs): Billion Laughs.
  • -
    - -
    diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py b/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py index b4cb2faf304..a4de65084ae 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py @@ -74,6 +74,10 @@ exfiltrate_through_dtd_retrieval = f""" %xxe; ]> """ +predefined_entity_xml = """ +< +""" + # ============================================================================== # other setup @@ -443,6 +447,13 @@ class TestLxml: assert exfiltrated_data == "SECRET_FLAG" + @staticmethod + def test_predefined_entity(): + parser = lxml.etree.XMLParser(resolve_entities=False) + root = lxml.etree.fromstring(predefined_entity_xml, parser=parser) + assert root.tag == "test" + assert root.text == "<" + # ============================================================================== import xmltodict From 56b9c891d85636c543bf9529dd7b191908248be7 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 29 Mar 2022 15:30:04 +0200 Subject: [PATCH 0092/1618] Python: Adjust `XmlBomb.qhelp` from JS --- .../Security/NEW/CWE-776/XmlBomb.qhelp | 36 +++++++++++++------ .../Security/NEW/CWE-776/examples/XmlBomb.js | 10 ------ .../NEW/CWE-776/examples/XmlBombBad.py | 10 ++++++ .../NEW/CWE-776/examples/XmlBombGood.js | 10 ------ .../NEW/CWE-776/examples/XmlBombGood.py | 10 ++++++ 5 files changed, 45 insertions(+), 31 deletions(-) delete mode 100644 python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBomb.js create mode 100644 python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombBad.py delete mode 100644 python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.js create mode 100644 python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.py diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.qhelp b/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.qhelp index c0714b3f96f..f20dd526fdd 100644 --- a/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.qhelp +++ b/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.qhelp @@ -25,26 +25,32 @@ to take a very long time or use large amounts of memory. This is sometimes calle

    The safest way to prevent XML bomb attacks is to disable entity expansion when parsing untrusted -data. How this is done depends on the library being used. Note that some libraries, such as -recent versions of libxmljs (though not its SAX parser API), disable entity expansion -by default, so unless you have explicitly enabled entity expansion, no further action is needed. +data. Whether this can be done depends on the library being used. Note that some libraries, such as +lxml, have measures enabled by default to prevent such DoS XML attacks, so +unless you have explicitly set huge_tree to True, no further action is needed. +

    + +

    +We recommend using the defusedxml +PyPI package, which has been created to prevent XML attacks (both XXE and XML bombs).

    -The following example uses the XML parser provided by the node-expat package to -parse a string xmlSrc. If that string is from an untrusted source, this code may be -vulnerable to a DoS attack, since node-expat expands internal entities by default: +The following example uses the xml.etree XML parser provided by the Python standard library to +parse a string xml_src. That string is from an untrusted source, so this code is be +vulnerable to a DoS attack, since the xml.etree XML parser expands internal entities by default:

    - +

    -At the time of writing, node-expat does not provide a way of controlling entity -expansion, but the example could be rewritten to use the sax package instead, -which only expands standard entities such as &amp;: +It is not possible to guard against internal entity expansion with +xml.etree, so to guard against these attacks, the following example uses +the defusedxml +PyPI package instead, which is not exposed to such internal entity expansion attacks.

    - +
    @@ -56,5 +62,13 @@ Wikipedia: Bryan Sullivan: Security Briefs - XML Denial of Service Attacks and Defenses. +
  • +Python 3 standard library: +XML Vulnerabilities. +
  • +
  • +Python 2 standard library: +XML Vulnerabilities. +
  • diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBomb.js b/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBomb.js deleted file mode 100644 index f72902a5304..00000000000 --- a/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBomb.js +++ /dev/null @@ -1,10 +0,0 @@ -const app = require("express")(), - expat = require("node-expat"); - -app.post("upload", (req, res) => { - let xmlSrc = req.body, - parser = new expat.Parser(); - parser.on("startElement", handleStart); - parser.on("text", handleText); - parser.write(xmlSrc); -}); diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombBad.py b/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombBad.py new file mode 100644 index 00000000000..d52054d9492 --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombBad.py @@ -0,0 +1,10 @@ +from flask import Flask, request +import xml.etree.ElementTree as ET + +app = Flask(__name__) + +@app.post("/upload") +def upload(): + xml_src = request.get_data() + doc = ET.fromstring(xml_src) + return ET.tostring(doc) diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.js b/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.js deleted file mode 100644 index a8c5bc97e63..00000000000 --- a/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.js +++ /dev/null @@ -1,10 +0,0 @@ -const app = require("express")(), - sax = require("sax"); - -app.post("upload", (req, res) => { - let xmlSrc = req.body, - parser = sax.parser(true); - parser.onopentag = handleStart; - parser.ontext = handleText; - parser.write(xmlSrc); -}); diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.py b/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.py new file mode 100644 index 00000000000..5e4261e35da --- /dev/null +++ b/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.py @@ -0,0 +1,10 @@ +from flask import Flask, request +import defusedxml.ElementTree as ET + +app = Flask(__name__) + +@app.post("/upload") +def upload(): + xml_src = request.get_data() + doc = ET.fromstring(xml_src) + return ET.tostring(doc) From 9caf4be21be7370a0317ae44205dfb35a5169073 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 29 Mar 2022 15:33:57 +0200 Subject: [PATCH 0093/1618] Python: Add PortSwigger link to `Xxe.qhelp` I found this resource quite good myself at least :) --- python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp b/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp index 7254e292309..19bbc955fd6 100644 --- a/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp +++ b/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp @@ -66,5 +66,9 @@ Python 3 standard library: Python 2 standard library: XML Vulnerabilities. +
  • +PortSwigger: +XML external entity (XXE) injection. +
  • From e005a5c0ab7409ebb6fb0002cdc7ab11a1b54bd1 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 29 Mar 2022 15:50:24 +0200 Subject: [PATCH 0094/1618] Python: Promote `XMLParsing` concept --- python/ql/lib/semmle/python/Concepts.qll | 62 +++++++++++++++++ .../experimental/semmle/python/Concepts.qll | 68 ------------------- .../semmle/python/frameworks/Xml.qll | 4 +- .../dataflow/XmlBombCustomizations.qll | 5 +- .../security/dataflow/XxeCustomizations.qll | 5 +- .../XML/ExperimentalXmlConceptsTests.ql | 2 +- 6 files changed, 70 insertions(+), 76 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index a768f29795c..3d83ec100a5 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -550,6 +550,68 @@ module XML { abstract string getName(); } } + + /** + * A kind of XML vulnerability. + * + * See overview of kinds at https://pypi.org/project/defusedxml/#python-xml-libraries + */ + class XMLVulnerabilityKind extends string { + XMLVulnerabilityKind() { + this in ["Billion Laughs", "Quadratic Blowup", "XXE", "DTD retrieval"] + } + + /** Holds for Billion Laughs vulnerability kind. */ + predicate isBillionLaughs() { this = "Billion Laughs" } + + /** Holds for Quadratic Blowup vulnerability kind. */ + predicate isQuadraticBlowup() { this = "Quadratic Blowup" } + + /** Holds for XXE vulnerability kind. */ + predicate isXxe() { this = "XXE" } + + /** Holds for DTD retrieval vulnerability kind. */ + predicate isDtdRetrieval() { this = "DTD retrieval" } + } + + /** + * A data-flow node that parses XML. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `XMLParsing` instead. + */ + class XMLParsing extends DataFlow::Node instanceof XMLParsing::Range { + /** + * Gets the argument containing the content to parse. + */ + DataFlow::Node getAnInput() { result = super.getAnInput() } + + /** + * Holds if this XML parsing is vulnerable to `kind`. + */ + predicate vulnerableTo(XMLVulnerabilityKind kind) { super.vulnerableTo(kind) } + } + + /** Provides classes for modeling XML parsing APIs. */ + module XMLParsing { + /** + * A data-flow node that parses XML. + * + * Extend this class to model new APIs. If you want to refine existing API models, + * extend `XMLParsing` instead. + */ + abstract class Range extends DataFlow::Node { + /** + * Gets the argument containing the content to parse. + */ + abstract DataFlow::Node getAnInput(); + + /** + * Holds if this XML parsing is vulnerable to `kind`. + */ + abstract predicate vulnerableTo(XMLVulnerabilityKind kind); + } + } } /** Provides classes for modeling LDAP-related APIs. */ diff --git a/python/ql/src/experimental/semmle/python/Concepts.qll b/python/ql/src/experimental/semmle/python/Concepts.qll index 6fdba4d3627..09b44d95e89 100644 --- a/python/ql/src/experimental/semmle/python/Concepts.qll +++ b/python/ql/src/experimental/semmle/python/Concepts.qll @@ -14,74 +14,6 @@ private import semmle.python.dataflow.new.RemoteFlowSources private import semmle.python.dataflow.new.TaintTracking private import experimental.semmle.python.Frameworks -/** - * Since there is both XML module in normal and experimental Concepts, - * we have to rename the experimental module as this. - */ -module ExperimentalXML { - /** - * A kind of XML vulnerability. - * - * See https://pypi.org/project/defusedxml/#python-xml-libraries - */ - class XMLVulnerabilityKind extends string { - XMLVulnerabilityKind() { - this in ["Billion Laughs", "Quadratic Blowup", "XXE", "DTD retrieval"] - } - - /** Holds for Billion Laughs vulnerability kind. */ - predicate isBillionLaughs() { this = "Billion Laughs" } - - /** Holds for Quadratic Blowup vulnerability kind. */ - predicate isQuadraticBlowup() { this = "Quadratic Blowup" } - - /** Holds for XXE vulnerability kind. */ - predicate isXxe() { this = "XXE" } - - /** Holds for DTD retrieval vulnerability kind. */ - predicate isDtdRetrieval() { this = "DTD retrieval" } - } - - /** - * A data-flow node that parses XML. - * - * Extend this class to model new APIs. If you want to refine existing API models, - * extend `XMLParsing` instead. - */ - class XMLParsing extends DataFlow::Node instanceof XMLParsing::Range { - /** - * Gets the argument containing the content to parse. - */ - DataFlow::Node getAnInput() { result = super.getAnInput() } - - /** - * Holds if this XML parsing is vulnerable to `kind`. - */ - predicate vulnerableTo(XMLVulnerabilityKind kind) { super.vulnerableTo(kind) } - } - - /** Provides classes for modeling XML parsing APIs. */ - module XMLParsing { - /** - * A data-flow node that parses XML. - * - * Extend this class to model new APIs. If you want to refine existing API models, - * extend `XMLParsing` instead. - */ - abstract class Range extends DataFlow::Node { - /** - * Gets the argument containing the content to parse. - */ - abstract DataFlow::Node getAnInput(); - - /** - * Holds if this XML parsing is vulnerable to `kind`. - */ - abstract predicate vulnerableTo(XMLVulnerabilityKind kind); - } - } -} - /** Provides classes for modeling LDAP query execution-related APIs. */ module LdapQuery { /** diff --git a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll index a2f36f66f2e..87aa236804d 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll @@ -5,11 +5,9 @@ private import python private import semmle.python.dataflow.new.DataFlow -private import experimental.semmle.python.Concepts +private import semmle.python.Concepts private import semmle.python.ApiGraphs -module XML = ExperimentalXML; - private module XmlEtree { /** * Provides models for `xml.etree` parsers diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll index 66a16a4494a..a4cbfe61821 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll @@ -6,7 +6,8 @@ private import python private import semmle.python.dataflow.new.DataFlow -private import experimental.semmle.python.Concepts +private import semmle.python.Concepts +import experimental.semmle.python.frameworks.Xml // needed until modeling have been promoted private import semmle.python.dataflow.new.RemoteFlowSources /** @@ -40,7 +41,7 @@ module XmlBomb { */ class XmlParsingWithEntityResolution extends Sink { XmlParsingWithEntityResolution() { - exists(ExperimentalXML::XMLParsing parsing, ExperimentalXML::XMLVulnerabilityKind kind | + exists(XML::XMLParsing parsing, XML::XMLVulnerabilityKind kind | (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and parsing.vulnerableTo(kind) and this = parsing.getAnInput() diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll index b2992dd335f..c118e1b2ff9 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll @@ -6,7 +6,8 @@ private import python private import semmle.python.dataflow.new.DataFlow -private import experimental.semmle.python.Concepts +private import semmle.python.Concepts +import experimental.semmle.python.frameworks.Xml // needed until modeling have been promoted private import semmle.python.dataflow.new.RemoteFlowSources /** @@ -40,7 +41,7 @@ module Xxe { */ class XmlParsingWithExternalEntityResolution extends Sink { XmlParsingWithExternalEntityResolution() { - exists(ExperimentalXML::XMLParsing parsing, ExperimentalXML::XMLVulnerabilityKind kind | + exists(XML::XMLParsing parsing, XML::XMLVulnerabilityKind kind | kind.isXxe() and parsing.vulnerableTo(kind) and this = parsing.getAnInput() diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql b/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql index 81bc391d0e5..679dbc3456c 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql +++ b/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql @@ -1,5 +1,5 @@ import python -import experimental.semmle.python.Concepts +import semmle.python.Concepts import experimental.semmle.python.frameworks.Xml import semmle.python.dataflow.new.DataFlow import TestUtilities.InlineExpectationsTest From e45288e812a0cd0f87cb909768b60847ec5aa997 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 29 Mar 2022 15:51:27 +0200 Subject: [PATCH 0095/1618] Python: => `XMLParsingVulnerabilityKind` Since there are other XML vulnerabilities that are not about parsing, this is more correct. --- python/ql/lib/semmle/python/Concepts.qll | 8 +++---- .../Security/CWE-611/SimpleXmlRpcServer.ql | 2 +- .../semmle/python/frameworks/Xml.qll | 24 +++++++++---------- .../dataflow/XmlBombCustomizations.qll | 2 +- .../security/dataflow/XxeCustomizations.qll | 2 +- .../XML/ExperimentalXmlConceptsTests.ql | 2 +- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index 3d83ec100a5..c430594d05b 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -556,8 +556,8 @@ module XML { * * See overview of kinds at https://pypi.org/project/defusedxml/#python-xml-libraries */ - class XMLVulnerabilityKind extends string { - XMLVulnerabilityKind() { + class XMLParsingVulnerabilityKind extends string { + XMLParsingVulnerabilityKind() { this in ["Billion Laughs", "Quadratic Blowup", "XXE", "DTD retrieval"] } @@ -589,7 +589,7 @@ module XML { /** * Holds if this XML parsing is vulnerable to `kind`. */ - predicate vulnerableTo(XMLVulnerabilityKind kind) { super.vulnerableTo(kind) } + predicate vulnerableTo(XMLParsingVulnerabilityKind kind) { super.vulnerableTo(kind) } } /** Provides classes for modeling XML parsing APIs. */ @@ -609,7 +609,7 @@ module XML { /** * Holds if this XML parsing is vulnerable to `kind`. */ - abstract predicate vulnerableTo(XMLVulnerabilityKind kind); + abstract predicate vulnerableTo(XMLParsingVulnerabilityKind kind); } } } diff --git a/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql b/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql index cda0633690c..3d2a736ed49 100644 --- a/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql +++ b/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql @@ -17,7 +17,7 @@ from DataFlow::CallCfgNode call, string kinds where call = API::moduleImport("xmlrpc").getMember("server").getMember("SimpleXMLRPCServer").getACall() and kinds = - strictconcat(ExperimentalXML::XMLVulnerabilityKind kind | + strictconcat(ExperimentalXML::XMLParsingVulnerabilityKind kind | kind.isBillionLaughs() or kind.isQuadraticBlowup() | kind, ", " diff --git a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll index 87aa236804d..4987e24bce4 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll @@ -66,7 +66,7 @@ private module XmlEtree { override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } - override predicate vulnerableTo(XML::XMLVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { kind.isBillionLaughs() or kind.isQuadraticBlowup() } } @@ -103,7 +103,7 @@ private module XmlEtree { ] } - override predicate vulnerableTo(XML::XMLVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { // note: it does not matter what `xml.etree` parser you are using, you cannot // change the security features anyway :| kind.isBillionLaughs() or kind.isQuadraticBlowup() @@ -218,7 +218,7 @@ private module SaxBasedParsing { override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("source")] } - override predicate vulnerableTo(XML::XMLVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { // always vuln to these (kind.isBillionLaughs() or kind.isQuadraticBlowup()) or @@ -251,7 +251,7 @@ private module SaxBasedParsing { ] } - override predicate vulnerableTo(XML::XMLVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { // always vuln to these (kind.isBillionLaughs() or kind.isQuadraticBlowup()) or @@ -290,7 +290,7 @@ private module SaxBasedParsing { DataFlow::Node getParserArg() { result in [this.getArg(1), this.getArgByName("parser")] } - override predicate vulnerableTo(XML::XMLVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { this.getParserArg() = saxParserWithFeatureExternalGesTurnedOn() and (kind.isXxe() or kind.isDtdRetrieval()) or @@ -317,7 +317,7 @@ private module Lxml { */ abstract class InstanceSource extends DataFlow::LocalSourceNode { /** Holds if this instance is vulnerable to `kind`. */ - abstract predicate vulnerableTo(XML::XMLVulnerabilityKind kind); + abstract predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind); } /** @@ -331,7 +331,7 @@ private module Lxml { } // NOTE: it's not possible to change settings of a parser after constructing it - override predicate vulnerableTo(XML::XMLVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { kind.isXxe() and ( // resolve_entities has default True @@ -361,7 +361,7 @@ private module Lxml { API::moduleImport("lxml").getMember("etree").getMember("get_default_parser").getACall() } - override predicate vulnerableTo(XML::XMLVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { // as highlighted by // https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.XMLParser // by default XXE is allow. so as long as the default parser has not been @@ -385,7 +385,7 @@ private module Lxml { } /** Gets a reference to an `lxml.etree` parser instance, that is vulnerable to `kind`. */ - DataFlow::Node instanceVulnerableTo(XML::XMLVulnerabilityKind kind) { + DataFlow::Node instanceVulnerableTo(XML::XMLParsingVulnerabilityKind kind) { exists(InstanceSource origin | result = instance(origin) and origin.vulnerableTo(kind)) } @@ -397,7 +397,7 @@ private module Lxml { override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } - override predicate vulnerableTo(XML::XMLVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { this.calls(instanceVulnerableTo(kind), "feed") } } @@ -436,7 +436,7 @@ private module Lxml { DataFlow::Node getParserArg() { result in [this.getArg(1), this.getArgByName("parser")] } - override predicate vulnerableTo(XML::XMLVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { this.getParserArg() = XMLParser::instanceVulnerableTo(kind) or kind.isXxe() and @@ -456,7 +456,7 @@ private module Xmltodict { result in [this.getArg(0), this.getArgByName("xml_input")] } - override predicate vulnerableTo(XML::XMLVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and this.getArgByName("disable_entities").getALocalSource().asExpr() = any(False f) } diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll index a4cbfe61821..c5e69c1e0e3 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll @@ -41,7 +41,7 @@ module XmlBomb { */ class XmlParsingWithEntityResolution extends Sink { XmlParsingWithEntityResolution() { - exists(XML::XMLParsing parsing, XML::XMLVulnerabilityKind kind | + exists(XML::XMLParsing parsing, XML::XMLParsingVulnerabilityKind kind | (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and parsing.vulnerableTo(kind) and this = parsing.getAnInput() diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll index c118e1b2ff9..27d011625a6 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll @@ -41,7 +41,7 @@ module Xxe { */ class XmlParsingWithExternalEntityResolution extends Sink { XmlParsingWithExternalEntityResolution() { - exists(XML::XMLParsing parsing, XML::XMLVulnerabilityKind kind | + exists(XML::XMLParsing parsing, XML::XMLParsingVulnerabilityKind kind | kind.isXxe() and parsing.vulnerableTo(kind) and this = parsing.getAnInput() diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql b/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql index 679dbc3456c..98237b447ea 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql +++ b/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql @@ -21,7 +21,7 @@ class XmlParsingTest extends InlineExpectationsTest { tag = "input" ) or - exists(XML::XMLVulnerabilityKind kind | + exists(XML::XMLParsingVulnerabilityKind kind | parsing.vulnerableTo(kind) and location = parsing.getLocation() and element = parsing.toString() and From 35ccba2ec10b2610969ac790d8ca8fa76a282ad9 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 29 Mar 2022 15:57:00 +0200 Subject: [PATCH 0096/1618] Python: Promote `XMLParsing` concept test --- ...tsTests.expected => ConceptsTest.expected} | 0 .../frameworks/XML/ConceptsTest.ql | 3 ++ .../XML/ExperimentalXmlConceptsTests.ql | 33 --------------- .../frameworks/XML/lxml_etree.py | 40 +++++++++---------- .../library-tests/frameworks/XML/xml_dom.py | 24 +++++------ .../library-tests/frameworks/XML/xml_etree.py | 34 ++++++++-------- .../library-tests/frameworks/XML/xml_sax.py | 26 ++++++------ .../library-tests/frameworks/XML/xmltodict.py | 6 +-- .../test/experimental/meta/ConceptsTest.qll | 27 +++++++++++++ 9 files changed, 95 insertions(+), 98 deletions(-) rename python/ql/test/experimental/library-tests/frameworks/XML/{ExperimentalXmlConceptsTests.expected => ConceptsTest.expected} (100%) create mode 100644 python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.ql delete mode 100644 python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.expected b/python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.expected similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.expected rename to python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.expected diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.ql b/python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.ql new file mode 100644 index 00000000000..95728bd6dc8 --- /dev/null +++ b/python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.ql @@ -0,0 +1,3 @@ +import python +import experimental.meta.ConceptsTest +import experimental.semmle.python.frameworks.Xml // needed until modeling have been promoted diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql b/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql deleted file mode 100644 index 98237b447ea..00000000000 --- a/python/ql/test/experimental/library-tests/frameworks/XML/ExperimentalXmlConceptsTests.ql +++ /dev/null @@ -1,33 +0,0 @@ -import python -import semmle.python.Concepts -import experimental.semmle.python.frameworks.Xml -import semmle.python.dataflow.new.DataFlow -import TestUtilities.InlineExpectationsTest -private import semmle.python.dataflow.new.internal.PrintNode - -class XmlParsingTest extends InlineExpectationsTest { - XmlParsingTest() { this = "XmlParsingTest" } - - override string getARelevantTag() { result in ["input", "vuln"] } - - override predicate hasActualResult(Location location, string element, string tag, string value) { - exists(location.getFile().getRelativePath()) and - exists(XML::XMLParsing parsing | - exists(DataFlow::Node input | - input = parsing.getAnInput() and - location = input.getLocation() and - element = input.toString() and - value = prettyNodeForInlineTest(input) and - tag = "input" - ) - or - exists(XML::XMLParsingVulnerabilityKind kind | - parsing.vulnerableTo(kind) and - location = parsing.getLocation() and - element = parsing.toString() and - value = "'" + kind + "'" and - tag = "vuln" - ) - ) - } -} diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/lxml_etree.py b/python/ql/test/experimental/library-tests/frameworks/XML/lxml_etree.py index 22930a58af3..ee8f3fc69c1 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/lxml_etree.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/lxml_etree.py @@ -4,51 +4,51 @@ import lxml.etree x = "some xml" # different parsing methods -lxml.etree.fromstring(x) # $ input=x vuln='XXE' -lxml.etree.fromstring(text=x) # $ input=x vuln='XXE' +lxml.etree.fromstring(x) # $ xmlInput=x xmlVuln='XXE' +lxml.etree.fromstring(text=x) # $ xmlInput=x xmlVuln='XXE' -lxml.etree.fromstringlist([x]) # $ input=List vuln='XXE' -lxml.etree.fromstringlist(strings=[x]) # $ input=List vuln='XXE' +lxml.etree.fromstringlist([x]) # $ xmlInput=List xmlVuln='XXE' +lxml.etree.fromstringlist(strings=[x]) # $ xmlInput=List xmlVuln='XXE' -lxml.etree.XML(x) # $ input=x vuln='XXE' -lxml.etree.XML(text=x) # $ input=x vuln='XXE' +lxml.etree.XML(x) # $ xmlInput=x xmlVuln='XXE' +lxml.etree.XML(text=x) # $ xmlInput=x xmlVuln='XXE' -lxml.etree.parse(StringIO(x)) # $ input=StringIO(..) vuln='XXE' -lxml.etree.parse(source=StringIO(x)) # $ input=StringIO(..) vuln='XXE' +lxml.etree.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='XXE' +lxml.etree.parse(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='XXE' -lxml.etree.parseid(StringIO(x)) # $ input=StringIO(..) vuln='XXE' -lxml.etree.parseid(source=StringIO(x)) # $ input=StringIO(..) vuln='XXE' +lxml.etree.parseid(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='XXE' +lxml.etree.parseid(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='XXE' # With default parsers (nothing changed) parser = lxml.etree.XMLParser() -lxml.etree.fromstring(x, parser=parser) # $ input=x vuln='XXE' +lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='XXE' parser = lxml.etree.get_default_parser() -lxml.etree.fromstring(x, parser=parser) # $ input=x vuln='XXE' +lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='XXE' # manual use of feed method parser = lxml.etree.XMLParser() -parser.feed(x) # $ input=x vuln='XXE' -parser.feed(data=x) # $ input=x vuln='XXE' +parser.feed(x) # $ xmlInput=x xmlVuln='XXE' +parser.feed(data=x) # $ xmlInput=x xmlVuln='XXE' parser.close() # XXE-safe parser = lxml.etree.XMLParser(resolve_entities=False) -lxml.etree.fromstring(x, parser) # $ input=x -lxml.etree.fromstring(x, parser=parser) # $ input=x +lxml.etree.fromstring(x, parser) # $ xmlInput=x +lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x # XXE-vuln parser = lxml.etree.XMLParser(resolve_entities=True) -lxml.etree.fromstring(x, parser=parser) # $ input=x vuln='XXE' +lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='XXE' # Billion laughs vuln (also XXE) parser = lxml.etree.XMLParser(huge_tree=True) -lxml.etree.fromstring(x, parser=parser) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' vuln='XXE' +lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' xmlVuln='XXE' # Safe for both Billion laughs and XXE parser = lxml.etree.XMLParser(resolve_entities=False, huge_tree=True) -lxml.etree.fromstring(x, parser=parser) # $ input=x +lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x # DTD retrival vuln (also XXE) parser = lxml.etree.XMLParser(load_dtd=True, no_network=False) -lxml.etree.fromstring(x, parser=parser) # $ input=x vuln='DTD retrieval' vuln='XXE' +lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='DTD retrieval' xmlVuln='XXE' diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xml_dom.py b/python/ql/test/experimental/library-tests/frameworks/XML/xml_dom.py index 7dce29fc7b9..b86770b8d6c 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/xml_dom.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/xml_dom.py @@ -6,26 +6,26 @@ import xml.sax x = "some xml" # minidom -xml.dom.minidom.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.dom.minidom.parse(file=StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.dom.minidom.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.dom.minidom.parse(file=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.dom.minidom.parseString(x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.dom.minidom.parseString(string=x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.dom.minidom.parseString(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.dom.minidom.parseString(string=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' # pulldom -xml.dom.pulldom.parse(StringIO(x))['START_DOCUMENT'][1] # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.dom.pulldom.parse(stream_or_string=StringIO(x))['START_DOCUMENT'][1] # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.dom.pulldom.parse(StringIO(x))['START_DOCUMENT'][1] # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.dom.pulldom.parse(stream_or_string=StringIO(x))['START_DOCUMENT'][1] # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.dom.pulldom.parseString(x)['START_DOCUMENT'][1] # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.dom.pulldom.parseString(string=x)['START_DOCUMENT'][1] # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.dom.pulldom.parseString(x)['START_DOCUMENT'][1] # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.dom.pulldom.parseString(string=x)['START_DOCUMENT'][1] # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' # These are based on SAX parses, and you can specify your own, so you can expose yourself to XXE (yay/) parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) -xml.dom.minidom.parse(StringIO(x), parser) # $ input=StringIO(..) vuln='Billion Laughs' vuln='DTD retrieval' vuln='Quadratic Blowup' vuln='XXE' -xml.dom.minidom.parse(StringIO(x), parser=parser) # $ input=StringIO(..) vuln='Billion Laughs' vuln='DTD retrieval' vuln='Quadratic Blowup' vuln='XXE' +xml.dom.minidom.parse(StringIO(x), parser) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' +xml.dom.minidom.parse(StringIO(x), parser=parser) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' -xml.dom.pulldom.parse(StringIO(x), parser) # $ input=StringIO(..) vuln='Billion Laughs' vuln='DTD retrieval' vuln='Quadratic Blowup' vuln='XXE' -xml.dom.pulldom.parse(StringIO(x), parser=parser) # $ input=StringIO(..) vuln='Billion Laughs' vuln='DTD retrieval' vuln='Quadratic Blowup' vuln='XXE' +xml.dom.pulldom.parse(StringIO(x), parser) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' +xml.dom.pulldom.parse(StringIO(x), parser=parser) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xml_etree.py b/python/ql/test/experimental/library-tests/frameworks/XML/xml_etree.py index df126e458e2..c5d141a3715 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/xml_etree.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/xml_etree.py @@ -4,39 +4,39 @@ import xml.etree.ElementTree x = "some xml" # Parsing in different ways -xml.etree.ElementTree.fromstring(x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.etree.ElementTree.fromstring(text=x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.etree.ElementTree.fromstring(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.fromstring(text=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.etree.ElementTree.fromstringlist([x]) # $ input=List vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.etree.ElementTree.fromstringlist(sequence=[x]) # $ input=List vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.etree.ElementTree.fromstringlist([x]) # $ xmlInput=List xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.fromstringlist(sequence=[x]) # $ xmlInput=List xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.etree.ElementTree.XML(x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.etree.ElementTree.XML(text=x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.etree.ElementTree.XML(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.XML(text=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.etree.ElementTree.XMLID(x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.etree.ElementTree.XMLID(text=x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.etree.ElementTree.XMLID(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.XMLID(text=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.etree.ElementTree.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.etree.ElementTree.parse(source=StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.etree.ElementTree.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.parse(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.etree.ElementTree.iterparse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.etree.ElementTree.iterparse(source=StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.etree.ElementTree.iterparse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.iterparse(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' # With parsers (no options available to disable/enable security features) parser = xml.etree.ElementTree.XMLParser() -xml.etree.ElementTree.fromstring(x, parser=parser) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.etree.ElementTree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' # manual use of feed method parser = xml.etree.ElementTree.XMLParser() -parser.feed(x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' -parser.feed(data=x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' +parser.feed(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.feed(data=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' parser.close() # manual use of feed method on XMLPullParser parser = xml.etree.ElementTree.XMLPullParser() -parser.feed(x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' -parser.feed(data=x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' +parser.feed(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.feed(data=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' parser.close() # note: it's technically possible to use the thing wrapper func `fromstring` with an diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xml_sax.py b/python/ql/test/experimental/library-tests/frameworks/XML/xml_sax.py index 158e62ffae6..c0e5923c5c0 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/xml_sax.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/xml_sax.py @@ -10,41 +10,41 @@ class MainHandler(xml.sax.ContentHandler): def characters(self, data): self._result.append(data) -xml.sax.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.sax.parse(source=StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.sax.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.sax.parse(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.sax.parseString(x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' -xml.sax.parseString(string=x) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' +xml.sax.parseString(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.sax.parseString(string=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' parser = xml.sax.make_parser() -parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' -parser.parse(source=StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' +parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.parse(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' # You can make it vuln to both XXE and DTD retrieval by setting this flag # see https://docs.python.org/3/library/xml.sax.handler.html#xml.sax.handler.feature_external_ges parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) -parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='DTD retrieval' vuln='Quadratic Blowup' vuln='XXE' +parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, False) -parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' +parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' # Forward Type Tracking test def func(cond): parser = xml.sax.make_parser() if cond: parser.setFeature(xml.sax.handler.feature_external_ges, True) - parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='DTD retrieval' vuln='Quadratic Blowup' vuln='XXE' + parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' else: - parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' + parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' # make it vuln, then making it safe # a bit of an edge-case, but is nice to be able to handle. parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) parser.setFeature(xml.sax.handler.feature_external_ges, False) -parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='Quadratic Blowup' +parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' def check_conditional_assignment(cond): parser = xml.sax.make_parser() @@ -52,7 +52,7 @@ def check_conditional_assignment(cond): parser.setFeature(xml.sax.handler.feature_external_ges, True) else: parser.setFeature(xml.sax.handler.feature_external_ges, False) - parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='DTD retrieval' vuln='Quadratic Blowup' vuln='XXE' + parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' def check_conditional_assignment2(cond): parser = xml.sax.make_parser() @@ -61,4 +61,4 @@ def check_conditional_assignment2(cond): else: flag_value = False parser.setFeature(xml.sax.handler.feature_external_ges, flag_value) - parser.parse(StringIO(x)) # $ input=StringIO(..) vuln='Billion Laughs' vuln='DTD retrieval' vuln='Quadratic Blowup' vuln='XXE' + parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xmltodict.py b/python/ql/test/experimental/library-tests/frameworks/XML/xmltodict.py index 473e51c9fe6..27d04862f83 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/xmltodict.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/xmltodict.py @@ -2,7 +2,7 @@ import xmltodict x = "some xml" -xmltodict.parse(x) # $ input=x -xmltodict.parse(xml_input=x) # $ input=x +xmltodict.parse(x) # $ xmlInput=x +xmltodict.parse(xml_input=x) # $ xmlInput=x -xmltodict.parse(x, disable_entities=False) # $ input=x vuln='Billion Laughs' vuln='Quadratic Blowup' +xmltodict.parse(x, disable_entities=False) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' diff --git a/python/ql/test/experimental/meta/ConceptsTest.qll b/python/ql/test/experimental/meta/ConceptsTest.qll index 8f9435f633f..e9f71356963 100644 --- a/python/ql/test/experimental/meta/ConceptsTest.qll +++ b/python/ql/test/experimental/meta/ConceptsTest.qll @@ -539,3 +539,30 @@ class HttpClientRequestTest extends InlineExpectationsTest { ) } } + +class XmlParsingTest extends InlineExpectationsTest { + XmlParsingTest() { this = "XmlParsingTest" } + + override string getARelevantTag() { result in ["xmlInput", "xmlVuln"] } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + exists(location.getFile().getRelativePath()) and + exists(XML::XMLParsing parsing | + exists(DataFlow::Node input | + input = parsing.getAnInput() and + location = input.getLocation() and + element = input.toString() and + value = prettyNodeForInlineTest(input) and + tag = "xmlInput" + ) + or + exists(XML::XMLParsingVulnerabilityKind kind | + parsing.vulnerableTo(kind) and + location = parsing.getLocation() and + element = parsing.toString() and + value = "'" + kind + "'" and + tag = "xmlVuln" + ) + ) + } +} From 1ea4bcc59f4ccbfe02e454ae3223a8fa34ac33e3 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 29 Mar 2022 16:48:30 +0200 Subject: [PATCH 0097/1618] Python: Make `XMLParsing` a `Decoding` subclass --- python/ql/lib/semmle/python/Concepts.qll | 16 ++---- .../semmle/python/frameworks/Xml.qll | 52 +++++++++++++++++++ .../frameworks/XML/lxml_etree.py | 42 +++++++-------- .../library-tests/frameworks/XML/xml_dom.py | 24 ++++----- .../library-tests/frameworks/XML/xml_etree.py | 38 +++++++------- .../library-tests/frameworks/XML/xml_sax.py | 26 +++++----- .../library-tests/frameworks/XML/xmltodict.py | 6 +-- .../test/experimental/meta/ConceptsTest.qll | 8 --- 8 files changed, 124 insertions(+), 88 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index c430594d05b..b553c8d927d 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -580,12 +580,7 @@ module XML { * Extend this class to model new APIs. If you want to refine existing API models, * extend `XMLParsing` instead. */ - class XMLParsing extends DataFlow::Node instanceof XMLParsing::Range { - /** - * Gets the argument containing the content to parse. - */ - DataFlow::Node getAnInput() { result = super.getAnInput() } - + class XMLParsing extends Decoding instanceof XMLParsing::Range { /** * Holds if this XML parsing is vulnerable to `kind`. */ @@ -600,16 +595,13 @@ module XML { * Extend this class to model new APIs. If you want to refine existing API models, * extend `XMLParsing` instead. */ - abstract class Range extends DataFlow::Node { - /** - * Gets the argument containing the content to parse. - */ - abstract DataFlow::Node getAnInput(); - + abstract class Range extends Decoding::Range { /** * Holds if this XML parsing is vulnerable to `kind`. */ abstract predicate vulnerableTo(XMLParsingVulnerabilityKind kind); + + override string getFormat() { result = "XML" } } } } diff --git a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll index 4987e24bce4..c072295c461 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll @@ -69,6 +69,15 @@ private module XmlEtree { override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { kind.isBillionLaughs() or kind.isQuadraticBlowup() } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { + exists(DataFlow::Node objRef | + DataFlow::localFlow(this.getObject(), objRef) and + result.(DataFlow::MethodCallNode).calls(objRef, "close") + ) + } } } @@ -108,6 +117,10 @@ private module XmlEtree { // change the security features anyway :| kind.isBillionLaughs() or kind.isQuadraticBlowup() } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { result = this } } } @@ -226,6 +239,15 @@ private module SaxBasedParsing { this.getObject() = saxParserWithFeatureExternalGesTurnedOn() and (kind.isXxe() or kind.isDtdRetrieval()) } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { + // note: the output of parsing with SAX is that the content handler gets the + // data... but we don't currently model this (it's not trivial to do, and won't + // really give us any value, at least not as of right now). + none() + } } /** @@ -259,6 +281,15 @@ private module SaxBasedParsing { this.getObject() = saxParserWithFeatureExternalGesTurnedOn() and (kind.isXxe() or kind.isDtdRetrieval()) } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { + // note: the output of parsing with SAX is that the content handler gets the + // data... but we don't currently model this (it's not trivial to do, and won't + // really give us any value, at least not as of right now). + none() + } } /** @@ -296,6 +327,10 @@ private module SaxBasedParsing { or (kind.isBillionLaughs() or kind.isQuadraticBlowup()) } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { result = this } } } @@ -400,6 +435,15 @@ private module Lxml { override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { this.calls(instanceVulnerableTo(kind), "feed") } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { + exists(DataFlow::Node objRef | + DataFlow::localFlow(this.getObject(), objRef) and + result.(DataFlow::MethodCallNode).calls(objRef, "close") + ) + } } } @@ -442,6 +486,10 @@ private module Lxml { kind.isXxe() and not exists(this.getParserArg()) } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { result = this } } } @@ -460,5 +508,9 @@ private module Xmltodict { (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and this.getArgByName("disable_entities").getALocalSource().asExpr() = any(False f) } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { result = this } } } diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/lxml_etree.py b/python/ql/test/experimental/library-tests/frameworks/XML/lxml_etree.py index ee8f3fc69c1..f1dbd5390ad 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/lxml_etree.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/lxml_etree.py @@ -4,51 +4,51 @@ import lxml.etree x = "some xml" # different parsing methods -lxml.etree.fromstring(x) # $ xmlInput=x xmlVuln='XXE' -lxml.etree.fromstring(text=x) # $ xmlInput=x xmlVuln='XXE' +lxml.etree.fromstring(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.fromstring(..) +lxml.etree.fromstring(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.fromstring(..) -lxml.etree.fromstringlist([x]) # $ xmlInput=List xmlVuln='XXE' -lxml.etree.fromstringlist(strings=[x]) # $ xmlInput=List xmlVuln='XXE' +lxml.etree.fromstringlist([x]) # $ decodeFormat=XML decodeInput=List xmlVuln='XXE' decodeOutput=lxml.etree.fromstringlist(..) +lxml.etree.fromstringlist(strings=[x]) # $ decodeFormat=XML decodeInput=List xmlVuln='XXE' decodeOutput=lxml.etree.fromstringlist(..) -lxml.etree.XML(x) # $ xmlInput=x xmlVuln='XXE' -lxml.etree.XML(text=x) # $ xmlInput=x xmlVuln='XXE' +lxml.etree.XML(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.XML(..) +lxml.etree.XML(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.XML(..) -lxml.etree.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='XXE' -lxml.etree.parse(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='XXE' +lxml.etree.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) +lxml.etree.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) -lxml.etree.parseid(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='XXE' -lxml.etree.parseid(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='XXE' +lxml.etree.parseid(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XXE' decodeOutput=lxml.etree.parseid(..) +lxml.etree.parseid(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XXE' decodeOutput=lxml.etree.parseid(..) # With default parsers (nothing changed) parser = lxml.etree.XMLParser() -lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='XXE' +lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.fromstring(..) parser = lxml.etree.get_default_parser() -lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='XXE' +lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.fromstring(..) # manual use of feed method parser = lxml.etree.XMLParser() -parser.feed(x) # $ xmlInput=x xmlVuln='XXE' -parser.feed(data=x) # $ xmlInput=x xmlVuln='XXE' -parser.close() +parser.feed(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' +parser.feed(data=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' +parser.close() # $ decodeOutput=parser.close() # XXE-safe parser = lxml.etree.XMLParser(resolve_entities=False) -lxml.etree.fromstring(x, parser) # $ xmlInput=x -lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x +lxml.etree.fromstring(x, parser) # $ decodeFormat=XML decodeInput=x decodeOutput=lxml.etree.fromstring(..) +lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x decodeOutput=lxml.etree.fromstring(..) # XXE-vuln parser = lxml.etree.XMLParser(resolve_entities=True) -lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='XXE' +lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.fromstring(..) # Billion laughs vuln (also XXE) parser = lxml.etree.XMLParser(huge_tree=True) -lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' xmlVuln='XXE' +lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=lxml.etree.fromstring(..) # Safe for both Billion laughs and XXE parser = lxml.etree.XMLParser(resolve_entities=False, huge_tree=True) -lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x +lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x decodeOutput=lxml.etree.fromstring(..) # DTD retrival vuln (also XXE) parser = lxml.etree.XMLParser(load_dtd=True, no_network=False) -lxml.etree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='DTD retrieval' xmlVuln='XXE' +lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVuln='DTD retrieval' xmlVuln='XXE' decodeOutput=lxml.etree.fromstring(..) diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xml_dom.py b/python/ql/test/experimental/library-tests/frameworks/XML/xml_dom.py index b86770b8d6c..c6152c75807 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/xml_dom.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/xml_dom.py @@ -6,26 +6,26 @@ import xml.sax x = "some xml" # minidom -xml.dom.minidom.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.dom.minidom.parse(file=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.dom.minidom.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parse(..) +xml.dom.minidom.parse(file=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parse(..) -xml.dom.minidom.parseString(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.dom.minidom.parseString(string=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.dom.minidom.parseString(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parseString(..) +xml.dom.minidom.parseString(string=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parseString(..) # pulldom -xml.dom.pulldom.parse(StringIO(x))['START_DOCUMENT'][1] # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.dom.pulldom.parse(stream_or_string=StringIO(x))['START_DOCUMENT'][1] # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.dom.pulldom.parse(StringIO(x))['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parse(..) +xml.dom.pulldom.parse(stream_or_string=StringIO(x))['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parse(..) -xml.dom.pulldom.parseString(x)['START_DOCUMENT'][1] # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.dom.pulldom.parseString(string=x)['START_DOCUMENT'][1] # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.dom.pulldom.parseString(x)['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parseString(..) +xml.dom.pulldom.parseString(string=x)['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parseString(..) # These are based on SAX parses, and you can specify your own, so you can expose yourself to XXE (yay/) parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) -xml.dom.minidom.parse(StringIO(x), parser) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' -xml.dom.minidom.parse(StringIO(x), parser=parser) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' +xml.dom.minidom.parse(StringIO(x), parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.minidom.parse(..) +xml.dom.minidom.parse(StringIO(x), parser=parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.minidom.parse(..) -xml.dom.pulldom.parse(StringIO(x), parser) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' -xml.dom.pulldom.parse(StringIO(x), parser=parser) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' +xml.dom.pulldom.parse(StringIO(x), parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.pulldom.parse(..) +xml.dom.pulldom.parse(StringIO(x), parser=parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.pulldom.parse(..) diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xml_etree.py b/python/ql/test/experimental/library-tests/frameworks/XML/xml_etree.py index c5d141a3715..0ed750ba8c7 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/xml_etree.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/xml_etree.py @@ -4,40 +4,40 @@ import xml.etree.ElementTree x = "some xml" # Parsing in different ways -xml.etree.ElementTree.fromstring(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.etree.ElementTree.fromstring(text=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.fromstring(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.fromstring(..) +xml.etree.ElementTree.fromstring(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.fromstring(..) -xml.etree.ElementTree.fromstringlist([x]) # $ xmlInput=List xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.etree.ElementTree.fromstringlist(sequence=[x]) # $ xmlInput=List xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.fromstringlist([x]) # $ decodeFormat=XML decodeInput=List xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.fromstringlist(..) +xml.etree.ElementTree.fromstringlist(sequence=[x]) # $ decodeFormat=XML decodeInput=List xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.fromstringlist(..) -xml.etree.ElementTree.XML(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.etree.ElementTree.XML(text=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.XML(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.XML(..) +xml.etree.ElementTree.XML(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.XML(..) -xml.etree.ElementTree.XMLID(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.etree.ElementTree.XMLID(text=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.XMLID(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.XMLID(..) +xml.etree.ElementTree.XMLID(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.XMLID(..) -xml.etree.ElementTree.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.etree.ElementTree.parse(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.parse(..) +xml.etree.ElementTree.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.parse(..) -xml.etree.ElementTree.iterparse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.etree.ElementTree.iterparse(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.iterparse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.iterparse(..) +xml.etree.ElementTree.iterparse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.iterparse(..) # With parsers (no options available to disable/enable security features) parser = xml.etree.ElementTree.XMLParser() -xml.etree.ElementTree.fromstring(x, parser=parser) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.etree.ElementTree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.fromstring(..) # manual use of feed method parser = xml.etree.ElementTree.XMLParser() -parser.feed(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -parser.feed(data=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -parser.close() +parser.feed(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.feed(data=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.close() # $ decodeOutput=parser.close() # manual use of feed method on XMLPullParser parser = xml.etree.ElementTree.XMLPullParser() -parser.feed(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -parser.feed(data=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -parser.close() +parser.feed(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.feed(data=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.close() # $ decodeOutput=parser.close() # note: it's technically possible to use the thing wrapper func `fromstring` with an # `lxml` parser, and thereby change what vulnerabilities you are exposed to.. but it diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xml_sax.py b/python/ql/test/experimental/library-tests/frameworks/XML/xml_sax.py index c0e5923c5c0..8dbe9d4ae99 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/xml_sax.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/xml_sax.py @@ -10,41 +10,41 @@ class MainHandler(xml.sax.ContentHandler): def characters(self, data): self._result.append(data) -xml.sax.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.sax.parse(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.sax.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.sax.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.sax.parseString(x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.sax.parseString(string=x) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.sax.parseString(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.sax.parseString(string=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' parser = xml.sax.make_parser() -parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -parser.parse(source=StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' # You can make it vuln to both XXE and DTD retrieval by setting this flag # see https://docs.python.org/3/library/xml.sax.handler.html#xml.sax.handler.feature_external_ges parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) -parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, False) -parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' # Forward Type Tracking test def func(cond): parser = xml.sax.make_parser() if cond: parser.setFeature(xml.sax.handler.feature_external_ges, True) - parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' else: - parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' # make it vuln, then making it safe # a bit of an edge-case, but is nice to be able to handle. parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) parser.setFeature(xml.sax.handler.feature_external_ges, False) -parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' def check_conditional_assignment(cond): parser = xml.sax.make_parser() @@ -52,7 +52,7 @@ def check_conditional_assignment(cond): parser.setFeature(xml.sax.handler.feature_external_ges, True) else: parser.setFeature(xml.sax.handler.feature_external_ges, False) - parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' def check_conditional_assignment2(cond): parser = xml.sax.make_parser() @@ -61,4 +61,4 @@ def check_conditional_assignment2(cond): else: flag_value = False parser.setFeature(xml.sax.handler.feature_external_ges, flag_value) - parser.parse(StringIO(x)) # $ xmlInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xmltodict.py b/python/ql/test/experimental/library-tests/frameworks/XML/xmltodict.py index 27d04862f83..01dc2f3c484 100644 --- a/python/ql/test/experimental/library-tests/frameworks/XML/xmltodict.py +++ b/python/ql/test/experimental/library-tests/frameworks/XML/xmltodict.py @@ -2,7 +2,7 @@ import xmltodict x = "some xml" -xmltodict.parse(x) # $ xmlInput=x -xmltodict.parse(xml_input=x) # $ xmlInput=x +xmltodict.parse(x) # $ decodeFormat=XML decodeInput=x decodeOutput=xmltodict.parse(..) +xmltodict.parse(xml_input=x) # $ decodeFormat=XML decodeInput=x decodeOutput=xmltodict.parse(..) -xmltodict.parse(x, disable_entities=False) # $ xmlInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xmltodict.parse(x, disable_entities=False) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xmltodict.parse(..) diff --git a/python/ql/test/experimental/meta/ConceptsTest.qll b/python/ql/test/experimental/meta/ConceptsTest.qll index e9f71356963..24cbbab2d44 100644 --- a/python/ql/test/experimental/meta/ConceptsTest.qll +++ b/python/ql/test/experimental/meta/ConceptsTest.qll @@ -548,14 +548,6 @@ class XmlParsingTest extends InlineExpectationsTest { override predicate hasActualResult(Location location, string element, string tag, string value) { exists(location.getFile().getRelativePath()) and exists(XML::XMLParsing parsing | - exists(DataFlow::Node input | - input = parsing.getAnInput() and - location = input.getLocation() and - element = input.toString() and - value = prettyNodeForInlineTest(input) and - tag = "xmlInput" - ) - or exists(XML::XMLParsingVulnerabilityKind kind | parsing.vulnerableTo(kind) and location = parsing.getLocation() and From c4473c5f6506e6dcb8e6736f7d3ddd0acea022d4 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 10:08:02 +0200 Subject: [PATCH 0098/1618] Python: Rename lxml XPath tests --- .../ql/test/library-tests/frameworks/lxml/{test.py => xpath.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename python/ql/test/library-tests/frameworks/lxml/{test.py => xpath.py} (100%) diff --git a/python/ql/test/library-tests/frameworks/lxml/test.py b/python/ql/test/library-tests/frameworks/lxml/xpath.py similarity index 100% rename from python/ql/test/library-tests/frameworks/lxml/test.py rename to python/ql/test/library-tests/frameworks/lxml/xpath.py From 3040adfd9bdc26a0c54ef04453a1c8b2420bb4c5 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 10:08:26 +0200 Subject: [PATCH 0099/1618] Python: Handle `XMLParser().close()` for XPath --- .../ql/lib/semmle/python/frameworks/Lxml.qll | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index 9259668a5c8..ab29f33e7cf 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -57,13 +57,25 @@ private module Lxml { */ class XPathCall extends XML::XPathExecution::Range, DataFlow::CallCfgNode { XPathCall() { - this = - API::moduleImport("lxml") - .getMember("etree") - .getMember(["parse", "fromstring", "fromstringlist", "HTML", "XML"]) - .getReturn() - .getMember("xpath") - .getACall() + exists(API::Node parseResult | + parseResult = + API::moduleImport("lxml") + .getMember("etree") + .getMember(["parse", "fromstring", "fromstringlist", "HTML", "XML"]) + .getReturn() + or + // TODO: lxml.etree.parseid()[0] will contain the root element from parsing + // but we don't really have a way to model that nicely. + parseResult = + API::moduleImport("lxml") + .getMember("etree") + .getMember("XMLParser") + .getReturn() + .getMember("close") + .getReturn() + | + this = parseResult.getMember("xpath").getACall() + ) } override DataFlow::Node getXPath() { result in [this.getArg(0), this.getArgByName("_path")] } From 80b5cde3a2d3123029630450e41475f89253938c Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 10:19:08 +0200 Subject: [PATCH 0100/1618] Python: Promote lxml parsing modeling --- .../ql/lib/semmle/python/frameworks/Lxml.qll | 163 ++++++++++++++++++ .../semmle/python/frameworks/Xml.qll | 159 ----------------- .../frameworks/lxml/parsing.py} | 0 .../library-tests/frameworks/lxml/xpath.py | 8 +- 4 files changed, 167 insertions(+), 163 deletions(-) rename python/ql/test/{experimental/library-tests/frameworks/XML/lxml_etree.py => library-tests/frameworks/lxml/parsing.py} (100%) diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index ab29f33e7cf..de89345a7d6 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -19,6 +19,9 @@ private import semmle.python.ApiGraphs * - https://lxml.de/tutorial.html */ private module Lxml { + // --------------------------------------------------------------------------- + // XPath + // --------------------------------------------------------------------------- /** * A class constructor compiling an XPath expression. * @@ -97,4 +100,164 @@ private module Lxml { override string getName() { result = "lxml.etree" } } + + // --------------------------------------------------------------------------- + // Parsing + // --------------------------------------------------------------------------- + /** + * Provides models for `lxml.etree` parsers. + * + * See https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.XMLParser + */ + module XMLParser { + /** + * A source of instances of `lxml.etree` parsers, extend this class to model new instances. + * + * This can include instantiations of the class, return values from function + * calls, or a special parameter that will be set when functions are called by an external + * library. + * + * Use the predicate `XMLParser::instance()` to get references to instances of `lxml.etree` parsers. + */ + abstract class InstanceSource extends DataFlow::LocalSourceNode { + /** Holds if this instance is vulnerable to `kind`. */ + abstract predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind); + } + + /** + * A call to `lxml.etree.XMLParser`. + * + * See https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.XMLParser + */ + private class LXMLParser extends InstanceSource, DataFlow::CallCfgNode { + LXMLParser() { + this = API::moduleImport("lxml").getMember("etree").getMember("XMLParser").getACall() + } + + // NOTE: it's not possible to change settings of a parser after constructing it + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + kind.isXxe() and + ( + // resolve_entities has default True + not exists(this.getArgByName("resolve_entities")) + or + this.getArgByName("resolve_entities").getALocalSource().asExpr() = any(True t) + ) + or + (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and + this.getArgByName("huge_tree").getALocalSource().asExpr() = any(True t) and + not this.getArgByName("resolve_entities").getALocalSource().asExpr() = any(False t) + or + kind.isDtdRetrieval() and + this.getArgByName("load_dtd").getALocalSource().asExpr() = any(True t) and + this.getArgByName("no_network").getALocalSource().asExpr() = any(False t) + } + } + + /** + * A call to `lxml.etree.get_default_parser`. + * + * See https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.get_default_parser + */ + private class LXMLDefaultParser extends InstanceSource, DataFlow::CallCfgNode { + LXMLDefaultParser() { + this = + API::moduleImport("lxml").getMember("etree").getMember("get_default_parser").getACall() + } + + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + // as highlighted by + // https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.XMLParser + // by default XXE is allow. so as long as the default parser has not been + // overridden, the result is also vuln to XXE. + kind.isXxe() + // TODO: take into account that you can override the default parser with `lxml.etree.set_default_parser`. + } + } + + /** Gets a reference to an `lxml.etree` parsers instance, with origin in `origin` */ + private DataFlow::TypeTrackingNode instance(DataFlow::TypeTracker t, InstanceSource origin) { + t.start() and + result = origin + or + exists(DataFlow::TypeTracker t2 | result = instance(t2, origin).track(t2, t)) + } + + /** Gets a reference to an `lxml.etree` parsers instance, with origin in `origin` */ + DataFlow::Node instance(InstanceSource origin) { + instance(DataFlow::TypeTracker::end(), origin).flowsTo(result) + } + + /** Gets a reference to an `lxml.etree` parser instance, that is vulnerable to `kind`. */ + DataFlow::Node instanceVulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + exists(InstanceSource origin | result = instance(origin) and origin.vulnerableTo(kind)) + } + + /** + * A call to the `feed` method of an `lxml` parser. + */ + private class LXMLParserFeedCall extends DataFlow::MethodCallNode, XML::XMLParsing::Range { + LXMLParserFeedCall() { this.calls(instance(_), "feed") } + + override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } + + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + this.calls(instanceVulnerableTo(kind), "feed") + } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { + exists(DataFlow::Node objRef | + DataFlow::localFlow(this.getObject(), objRef) and + result.(DataFlow::MethodCallNode).calls(objRef, "close") + ) + } + } + } + + /** + * A call to either of: + * - `lxml.etree.fromstring` + * - `lxml.etree.fromstringlist` + * - `lxml.etree.XML` + * - `lxml.etree.parse` + * - `lxml.etree.parseid` + * + * See https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.fromstring + */ + private class LXMLParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { + LXMLParsing() { + this = + API::moduleImport("lxml") + .getMember("etree") + .getMember(["fromstring", "fromstringlist", "XML", "parse", "parseid"]) + .getACall() + } + + override DataFlow::Node getAnInput() { + result in [ + this.getArg(0), + // fromstring / XML + this.getArgByName("text"), + // fromstringlist + this.getArgByName("strings"), + // parse / parseid + this.getArgByName("source"), + ] + } + + DataFlow::Node getParserArg() { result in [this.getArg(1), this.getArgByName("parser")] } + + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + this.getParserArg() = XMLParser::instanceVulnerableTo(kind) + or + kind.isXxe() and + not exists(this.getParserArg()) + } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { result = this } + } } diff --git a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll index c072295c461..b31151eed1a 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll @@ -334,165 +334,6 @@ private module SaxBasedParsing { } } -private module Lxml { - /** - * Provides models for `lxml.etree` parsers. - * - * See https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.XMLParser - */ - module XMLParser { - /** - * A source of instances of `lxml.etree` parsers, extend this class to model new instances. - * - * This can include instantiations of the class, return values from function - * calls, or a special parameter that will be set when functions are called by an external - * library. - * - * Use the predicate `XMLParser::instance()` to get references to instances of `lxml.etree` parsers. - */ - abstract class InstanceSource extends DataFlow::LocalSourceNode { - /** Holds if this instance is vulnerable to `kind`. */ - abstract predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind); - } - - /** - * A call to `lxml.etree.XMLParser`. - * - * See https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.XMLParser - */ - private class LXMLParser extends InstanceSource, DataFlow::CallCfgNode { - LXMLParser() { - this = API::moduleImport("lxml").getMember("etree").getMember("XMLParser").getACall() - } - - // NOTE: it's not possible to change settings of a parser after constructing it - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { - kind.isXxe() and - ( - // resolve_entities has default True - not exists(this.getArgByName("resolve_entities")) - or - this.getArgByName("resolve_entities").getALocalSource().asExpr() = any(True t) - ) - or - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and - this.getArgByName("huge_tree").getALocalSource().asExpr() = any(True t) and - not this.getArgByName("resolve_entities").getALocalSource().asExpr() = any(False t) - or - kind.isDtdRetrieval() and - this.getArgByName("load_dtd").getALocalSource().asExpr() = any(True t) and - this.getArgByName("no_network").getALocalSource().asExpr() = any(False t) - } - } - - /** - * A call to `lxml.etree.get_default_parser`. - * - * See https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.get_default_parser - */ - private class LXMLDefaultParser extends InstanceSource, DataFlow::CallCfgNode { - LXMLDefaultParser() { - this = - API::moduleImport("lxml").getMember("etree").getMember("get_default_parser").getACall() - } - - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { - // as highlighted by - // https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.XMLParser - // by default XXE is allow. so as long as the default parser has not been - // overridden, the result is also vuln to XXE. - kind.isXxe() - // TODO: take into account that you can override the default parser with `lxml.etree.set_default_parser`. - } - } - - /** Gets a reference to an `lxml.etree` parsers instance, with origin in `origin` */ - private DataFlow::TypeTrackingNode instance(DataFlow::TypeTracker t, InstanceSource origin) { - t.start() and - result = origin - or - exists(DataFlow::TypeTracker t2 | result = instance(t2, origin).track(t2, t)) - } - - /** Gets a reference to an `lxml.etree` parsers instance, with origin in `origin` */ - DataFlow::Node instance(InstanceSource origin) { - instance(DataFlow::TypeTracker::end(), origin).flowsTo(result) - } - - /** Gets a reference to an `lxml.etree` parser instance, that is vulnerable to `kind`. */ - DataFlow::Node instanceVulnerableTo(XML::XMLParsingVulnerabilityKind kind) { - exists(InstanceSource origin | result = instance(origin) and origin.vulnerableTo(kind)) - } - - /** - * A call to the `feed` method of an `lxml` parser. - */ - private class LXMLParserFeedCall extends DataFlow::MethodCallNode, XML::XMLParsing::Range { - LXMLParserFeedCall() { this.calls(instance(_), "feed") } - - override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } - - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { - this.calls(instanceVulnerableTo(kind), "feed") - } - - override predicate mayExecuteInput() { none() } - - override DataFlow::Node getOutput() { - exists(DataFlow::Node objRef | - DataFlow::localFlow(this.getObject(), objRef) and - result.(DataFlow::MethodCallNode).calls(objRef, "close") - ) - } - } - } - - /** - * A call to either of: - * - `lxml.etree.fromstring` - * - `lxml.etree.fromstringlist` - * - `lxml.etree.XML` - * - `lxml.etree.parse` - * - `lxml.etree.parseid` - * - * See https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.fromstring - */ - private class LXMLParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { - LXMLParsing() { - this = - API::moduleImport("lxml") - .getMember("etree") - .getMember(["fromstring", "fromstringlist", "XML", "parse", "parseid"]) - .getACall() - } - - override DataFlow::Node getAnInput() { - result in [ - this.getArg(0), - // fromstring / XML - this.getArgByName("text"), - // fromstringlist - this.getArgByName("strings"), - // parse / parseid - this.getArgByName("source"), - ] - } - - DataFlow::Node getParserArg() { result in [this.getArg(1), this.getArgByName("parser")] } - - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { - this.getParserArg() = XMLParser::instanceVulnerableTo(kind) - or - kind.isXxe() and - not exists(this.getParserArg()) - } - - override predicate mayExecuteInput() { none() } - - override DataFlow::Node getOutput() { result = this } - } -} - private module Xmltodict { /** * A call to `xmltodict.parse`. diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/lxml_etree.py b/python/ql/test/library-tests/frameworks/lxml/parsing.py similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/XML/lxml_etree.py rename to python/ql/test/library-tests/frameworks/lxml/parsing.py diff --git a/python/ql/test/library-tests/frameworks/lxml/xpath.py b/python/ql/test/library-tests/frameworks/lxml/xpath.py index e8ce583503a..9cf3a0883bd 100644 --- a/python/ql/test/library-tests/frameworks/lxml/xpath.py +++ b/python/ql/test/library-tests/frameworks/lxml/xpath.py @@ -2,20 +2,20 @@ from lxml import etree from io import StringIO def test_parse(): - tree = etree.parse(StringIO('')) + tree = etree.parse(StringIO('')) # $ decodeFormat=XML decodeInput=StringIO(..) decodeOutput=etree.parse(..) xmlVuln='XXE' r = tree.xpath('/foo/bar') # $ getXPath='/foo/bar' def test_XPath_class(): - root = etree.XML("TEXT") + root = etree.XML("TEXT") # $ decodeFormat=XML decodeInput="TEXT" decodeOutput=etree.XML(..) xmlVuln='XXE' find_text = etree.XPath("path") # $ constructedXPath="path" text = find_text(root)[0] def test_ETXpath_class(): - root = etree.XML("TEXT") + root = etree.XML("TEXT") # $ decodeFormat=XML decodeInput="TEXT" decodeOutput=etree.XML(..) xmlVuln='XXE' find_text = etree.ETXPath("path") # $ constructedXPath="path" text = find_text(root)[0] def test_XPathEvaluator_class(): - root = etree.XML("TEXT") + root = etree.XML("TEXT") # $ decodeFormat=XML decodeInput="TEXT" decodeOutput=etree.XML(..) xmlVuln='XXE' search_root = etree.XPathEvaluator(root) text = search_root("path")[0] # $ getXPath="path" From 7f5f7679f8f9f14db7fac551bfb6071c08c41767 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 10:28:34 +0200 Subject: [PATCH 0101/1618] Python: Promote `xmltodict` modeling --- docs/codeql/support/reusables/frameworks.rst | 1 + python/ql/lib/semmle/python/Frameworks.qll | 1 + .../semmle/python/frameworks/Xmltodict.qll | 39 +++++++++++++++++++ .../semmle/python/frameworks/Xml.qll | 22 ----------- .../xmltodict/ConceptsTest.expected | 0 .../frameworks/xmltodict/ConceptsTest.ql | 2 + .../frameworks/xmltodict/test.py} | 0 7 files changed, 43 insertions(+), 22 deletions(-) create mode 100644 python/ql/lib/semmle/python/frameworks/Xmltodict.qll create mode 100644 python/ql/test/library-tests/frameworks/xmltodict/ConceptsTest.expected create mode 100644 python/ql/test/library-tests/frameworks/xmltodict/ConceptsTest.ql rename python/ql/test/{experimental/library-tests/frameworks/XML/xmltodict.py => library-tests/frameworks/xmltodict/test.py} (100%) diff --git a/docs/codeql/support/reusables/frameworks.rst b/docs/codeql/support/reusables/frameworks.rst index 93280c6732a..12bcd5af8e6 100644 --- a/docs/codeql/support/reusables/frameworks.rst +++ b/docs/codeql/support/reusables/frameworks.rst @@ -214,3 +214,4 @@ Python built-in support libtaxii, TAXII utility library libxml2, XML processing library lxml, XML processing library + xmltodict, XML processing library diff --git a/python/ql/lib/semmle/python/Frameworks.qll b/python/ql/lib/semmle/python/Frameworks.qll index b94b8aee5d9..4812628d262 100644 --- a/python/ql/lib/semmle/python/Frameworks.qll +++ b/python/ql/lib/semmle/python/Frameworks.qll @@ -52,3 +52,4 @@ private import semmle.python.frameworks.Ujson private import semmle.python.frameworks.Urllib3 private import semmle.python.frameworks.Yaml private import semmle.python.frameworks.Yarl +private import semmle.python.frameworks.Xmltodict diff --git a/python/ql/lib/semmle/python/frameworks/Xmltodict.qll b/python/ql/lib/semmle/python/frameworks/Xmltodict.qll new file mode 100644 index 00000000000..bb65607251f --- /dev/null +++ b/python/ql/lib/semmle/python/frameworks/Xmltodict.qll @@ -0,0 +1,39 @@ +/** + * Provides classes modeling security-relevant aspects of the `xmltodict` PyPI package. + * + * See + * - https://pypi.org/project/xmltodict/ + */ + +private import python +private import semmle.python.dataflow.new.DataFlow +private import semmle.python.Concepts +private import semmle.python.ApiGraphs + +/** + * Provides classes modeling security-relevant aspects of the `xmltodict` PyPI package + * + * See + * - https://pypi.org/project/xmltodict/ + */ +private module Xmltodict { + /** + * A call to `xmltodict.parse`. + */ + private class XMLtoDictParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { + XMLtoDictParsing() { this = API::moduleImport("xmltodict").getMember("parse").getACall() } + + override DataFlow::Node getAnInput() { + result in [this.getArg(0), this.getArgByName("xml_input")] + } + + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and + this.getArgByName("disable_entities").getALocalSource().asExpr() = any(False f) + } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { result = this } + } +} diff --git a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll index b31151eed1a..c98370ba85a 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll @@ -333,25 +333,3 @@ private module SaxBasedParsing { override DataFlow::Node getOutput() { result = this } } } - -private module Xmltodict { - /** - * A call to `xmltodict.parse`. - */ - private class XMLtoDictParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { - XMLtoDictParsing() { this = API::moduleImport("xmltodict").getMember("parse").getACall() } - - override DataFlow::Node getAnInput() { - result in [this.getArg(0), this.getArgByName("xml_input")] - } - - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and - this.getArgByName("disable_entities").getALocalSource().asExpr() = any(False f) - } - - override predicate mayExecuteInput() { none() } - - override DataFlow::Node getOutput() { result = this } - } -} diff --git a/python/ql/test/library-tests/frameworks/xmltodict/ConceptsTest.expected b/python/ql/test/library-tests/frameworks/xmltodict/ConceptsTest.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/ql/test/library-tests/frameworks/xmltodict/ConceptsTest.ql b/python/ql/test/library-tests/frameworks/xmltodict/ConceptsTest.ql new file mode 100644 index 00000000000..b557a0bccb6 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/xmltodict/ConceptsTest.ql @@ -0,0 +1,2 @@ +import python +import experimental.meta.ConceptsTest diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xmltodict.py b/python/ql/test/library-tests/frameworks/xmltodict/test.py similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/XML/xmltodict.py rename to python/ql/test/library-tests/frameworks/xmltodict/test.py From 64aa503cc3b6374744efbaa2d6f4c322d03a3faa Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 10:42:05 +0200 Subject: [PATCH 0102/1618] Python: Promote `xml.etree` modeling --- .../lib/semmle/python/frameworks/Stdlib.qll | 117 +++++++++++++++++ .../semmle/python/frameworks/Xml.qll | 118 +----------------- .../frameworks/stdlib/XPathExecution.py | 2 +- .../frameworks/stdlib}/xml_etree.py | 0 4 files changed, 119 insertions(+), 118 deletions(-) rename python/ql/test/{experimental/library-tests/frameworks/XML => library-tests/frameworks/stdlib}/xml_etree.py (100%) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 234a8802f0f..263cdfcd0b3 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3174,6 +3174,123 @@ private module StdlibPrivate { } } } + + // --------------------------------------------------------------------------- + // xml.etree + // --------------------------------------------------------------------------- + /** + * Provides models for `xml.etree` parsers + * + * See + * - https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.XMLParser + * - https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.XMLPullParser + */ + module XMLParser { + /** + * A source of instances of `xml.etree` parsers, extend this class to model new instances. + * + * This can include instantiations of the class, return values from function + * calls, or a special parameter that will be set when functions are called by an external + * library. + * + * Use the predicate `XMLParser::instance()` to get references to instances of `xml.etree` parsers. + */ + abstract class InstanceSource extends DataFlow::LocalSourceNode { } + + /** A direct instantiation of `xml.etree` parsers. */ + private class ClassInstantiation extends InstanceSource, DataFlow::CallCfgNode { + ClassInstantiation() { + this = + API::moduleImport("xml") + .getMember("etree") + .getMember("ElementTree") + .getMember("XMLParser") + .getACall() + or + this = + API::moduleImport("xml") + .getMember("etree") + .getMember("ElementTree") + .getMember("XMLPullParser") + .getACall() + } + } + + /** Gets a reference to an `xml.etree` parser instance. */ + private DataFlow::TypeTrackingNode instance(DataFlow::TypeTracker t) { + t.start() and + result instanceof InstanceSource + or + exists(DataFlow::TypeTracker t2 | result = instance(t2).track(t2, t)) + } + + /** Gets a reference to an `xml.etree` parser instance. */ + DataFlow::Node instance() { instance(DataFlow::TypeTracker::end()).flowsTo(result) } + + /** + * A call to the `feed` method of an `xml.etree` parser. + */ + private class XMLEtreeParserFeedCall extends DataFlow::MethodCallNode, XML::XMLParsing::Range { + XMLEtreeParserFeedCall() { this.calls(instance(), "feed") } + + override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } + + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + kind.isBillionLaughs() or kind.isQuadraticBlowup() + } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { + exists(DataFlow::Node objRef | + DataFlow::localFlow(this.getObject(), objRef) and + result.(DataFlow::MethodCallNode).calls(objRef, "close") + ) + } + } + } + + /** + * A call to either of: + * - `xml.etree.ElementTree.fromstring` + * - `xml.etree.ElementTree.fromstringlist` + * - `xml.etree.ElementTree.XML` + * - `xml.etree.ElementTree.XMLID` + * - `xml.etree.ElementTree.parse` + * - `xml.etree.ElementTree.iterparse` + */ + private class XMLEtreeParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { + XMLEtreeParsing() { + this = + API::moduleImport("xml") + .getMember("etree") + .getMember("ElementTree") + .getMember(["fromstring", "fromstringlist", "XML", "XMLID", "parse", "iterparse"]) + .getACall() + } + + override DataFlow::Node getAnInput() { + result in [ + this.getArg(0), + // fromstring / XML / XMLID + this.getArgByName("text"), + // fromstringlist + this.getArgByName("sequence"), + // parse / iterparse + this.getArgByName("source"), + ] + } + + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + // note: it does not matter what `xml.etree` parser you are using, you cannot + // change the security features anyway :| + kind.isBillionLaughs() or kind.isQuadraticBlowup() + } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { result = this } + } } // --------------------------------------------------------------------------- diff --git a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll index c98370ba85a..88def863824 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll @@ -8,129 +8,13 @@ private import semmle.python.dataflow.new.DataFlow private import semmle.python.Concepts private import semmle.python.ApiGraphs -private module XmlEtree { - /** - * Provides models for `xml.etree` parsers - * - * See - * - https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.XMLParser - * - https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.XMLPullParser - */ - module XMLParser { - /** - * A source of instances of `xml.etree` parsers, extend this class to model new instances. - * - * This can include instantiations of the class, return values from function - * calls, or a special parameter that will be set when functions are called by an external - * library. - * - * Use the predicate `XMLParser::instance()` to get references to instances of `xml.etree` parsers. - */ - abstract class InstanceSource extends DataFlow::LocalSourceNode { } - - /** A direct instantiation of `xml.etree` parsers. */ - private class ClassInstantiation extends InstanceSource, DataFlow::CallCfgNode { - ClassInstantiation() { - this = - API::moduleImport("xml") - .getMember("etree") - .getMember("ElementTree") - .getMember("XMLParser") - .getACall() - or - this = - API::moduleImport("xml") - .getMember("etree") - .getMember("ElementTree") - .getMember("XMLPullParser") - .getACall() - } - } - - /** Gets a reference to an `xml.etree` parser instance. */ - private DataFlow::TypeTrackingNode instance(DataFlow::TypeTracker t) { - t.start() and - result instanceof InstanceSource - or - exists(DataFlow::TypeTracker t2 | result = instance(t2).track(t2, t)) - } - - /** Gets a reference to an `xml.etree` parser instance. */ - DataFlow::Node instance() { instance(DataFlow::TypeTracker::end()).flowsTo(result) } - - /** - * A call to the `feed` method of an `xml.etree` parser. - */ - private class XMLEtreeParserFeedCall extends DataFlow::MethodCallNode, XML::XMLParsing::Range { - XMLEtreeParserFeedCall() { this.calls(instance(), "feed") } - - override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } - - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { - kind.isBillionLaughs() or kind.isQuadraticBlowup() - } - - override predicate mayExecuteInput() { none() } - - override DataFlow::Node getOutput() { - exists(DataFlow::Node objRef | - DataFlow::localFlow(this.getObject(), objRef) and - result.(DataFlow::MethodCallNode).calls(objRef, "close") - ) - } - } - } - - /** - * A call to either of: - * - `xml.etree.ElementTree.fromstring` - * - `xml.etree.ElementTree.fromstringlist` - * - `xml.etree.ElementTree.XML` - * - `xml.etree.ElementTree.XMLID` - * - `xml.etree.ElementTree.parse` - * - `xml.etree.ElementTree.iterparse` - */ - private class XMLEtreeParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { - XMLEtreeParsing() { - this = - API::moduleImport("xml") - .getMember("etree") - .getMember("ElementTree") - .getMember(["fromstring", "fromstringlist", "XML", "XMLID", "parse", "iterparse"]) - .getACall() - } - - override DataFlow::Node getAnInput() { - result in [ - this.getArg(0), - // fromstring / XML / XMLID - this.getArgByName("text"), - // fromstringlist - this.getArgByName("sequence"), - // parse / iterparse - this.getArgByName("source"), - ] - } - - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { - // note: it does not matter what `xml.etree` parser you are using, you cannot - // change the security features anyway :| - kind.isBillionLaughs() or kind.isQuadraticBlowup() - } - - override predicate mayExecuteInput() { none() } - - override DataFlow::Node getOutput() { result = this } - } -} - private module SaxBasedParsing { /** * A call to the `setFeature` method on a XML sax parser. * * See https://docs.python.org/3.10/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.setFeature */ - class SaxParserSetFeatureCall extends DataFlow::MethodCallNode { + private class SaxParserSetFeatureCall extends DataFlow::MethodCallNode { SaxParserSetFeatureCall() { this = API::moduleImport("xml") diff --git a/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py b/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py index 98bdaefac27..d39b0e04888 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py +++ b/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py @@ -2,7 +2,7 @@ match = "dc:title" ns = {'dc': 'http://purl.org/dc/elements/1.1/'} import xml.etree.ElementTree as ET -tree = ET.parse('country_data.xml') +tree = ET.parse('country_data.xml') # $ decodeFormat=XML decodeInput='country_data.xml' decodeOutput=ET.parse(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' root = tree.getroot() root.find(match, namespaces=ns) # $ getXPath=match diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xml_etree.py b/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/XML/xml_etree.py rename to python/ql/test/library-tests/frameworks/stdlib/xml_etree.py From a315aa84b2bdfad3cd3196336bbc1bc6fc658415 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 11:13:12 +0200 Subject: [PATCH 0103/1618] Python: Add some links in QLDocs --- python/ql/lib/semmle/python/frameworks/Lxml.qll | 7 ++++++- python/ql/lib/semmle/python/frameworks/Stdlib.qll | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index de89345a7d6..e1052efbf99 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -224,7 +224,12 @@ private module Lxml { * - `lxml.etree.parse` * - `lxml.etree.parseid` * - * See https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.fromstring + * See + * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.fromstring + * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.fromstringlist + * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.XML + * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parse + * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parseid */ private class LXMLParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { LXMLParsing() { diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 263cdfcd0b3..6c8de064852 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3258,6 +3258,14 @@ private module StdlibPrivate { * - `xml.etree.ElementTree.XMLID` * - `xml.etree.ElementTree.parse` * - `xml.etree.ElementTree.iterparse` + * + * See + * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.fromstring + * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.fromstringlist + * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.XML + * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.XMLID + * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.parse + * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.iterparse */ private class XMLEtreeParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { XMLEtreeParsing() { From 6774085e7af76b7faa952d2b23cbc9232a57273d Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 11:19:25 +0200 Subject: [PATCH 0104/1618] Python: Add note about parseid/XMLID --- python/ql/lib/semmle/python/frameworks/Lxml.qll | 9 ++++++++- python/ql/lib/semmle/python/frameworks/Stdlib.qll | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index e1052efbf99..e090b9dbf05 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -263,6 +263,13 @@ private module Lxml { override predicate mayExecuteInput() { none() } - override DataFlow::Node getOutput() { result = this } + override DataFlow::Node getOutput() { + // Note: for `parseid` the result of the call is a tuple with `(root, dict)`, so + // maybe we should not just say that the entire tuple is the decoding output... my + // gut feeling is that THIS instance doesn't matter too much, but that it would be + // nice to be able to do this in general. (this is a problem for both `lxml.etree` + // and `xml.etree`) + result = this + } } } diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 6c8de064852..77ec1b5f9da 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3297,7 +3297,14 @@ private module StdlibPrivate { override predicate mayExecuteInput() { none() } - override DataFlow::Node getOutput() { result = this } + override DataFlow::Node getOutput() { + // Note: for `XMLID` the result of the call is a tuple with `(root, dict)`, so + // maybe we should not just say that the entire tuple is the decoding output... my + // gut feeling is that THIS instance doesn't matter too much, but that it would be + // nice to be able to do this in general. (this is a problem for both `lxml.etree` + // and `xml.etree`) + result = this + } } } From 12cbdcde284e4e8fbce7a02ae0f65cedeee7e4eb Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 11:21:24 +0200 Subject: [PATCH 0105/1618] Python: Model `lxml.etree.XMLID` --- python/ql/lib/semmle/python/frameworks/Lxml.qll | 8 +++++--- python/ql/test/library-tests/frameworks/lxml/parsing.py | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index e090b9dbf05..60cc850fd34 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -221,6 +221,7 @@ private module Lxml { * - `lxml.etree.fromstring` * - `lxml.etree.fromstringlist` * - `lxml.etree.XML` + * - `lxml.etree.XMLID` * - `lxml.etree.parse` * - `lxml.etree.parseid` * @@ -228,6 +229,7 @@ private module Lxml { * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.fromstring * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.fromstringlist * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.XML + * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.XMLID * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parse * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parseid */ @@ -236,14 +238,14 @@ private module Lxml { this = API::moduleImport("lxml") .getMember("etree") - .getMember(["fromstring", "fromstringlist", "XML", "parse", "parseid"]) + .getMember(["fromstring", "fromstringlist", "XML", "XMLID", "parse", "parseid"]) .getACall() } override DataFlow::Node getAnInput() { result in [ this.getArg(0), - // fromstring / XML + // fromstring / XML / XMLID this.getArgByName("text"), // fromstringlist this.getArgByName("strings"), @@ -264,7 +266,7 @@ private module Lxml { override predicate mayExecuteInput() { none() } override DataFlow::Node getOutput() { - // Note: for `parseid` the result of the call is a tuple with `(root, dict)`, so + // Note: for `parseid`/XMLID the result of the call is a tuple with `(root, dict)`, so // maybe we should not just say that the entire tuple is the decoding output... my // gut feeling is that THIS instance doesn't matter too much, but that it would be // nice to be able to do this in general. (this is a problem for both `lxml.etree` diff --git a/python/ql/test/library-tests/frameworks/lxml/parsing.py b/python/ql/test/library-tests/frameworks/lxml/parsing.py index f1dbd5390ad..e69a68a6ad2 100644 --- a/python/ql/test/library-tests/frameworks/lxml/parsing.py +++ b/python/ql/test/library-tests/frameworks/lxml/parsing.py @@ -13,6 +13,9 @@ lxml.etree.fromstringlist(strings=[x]) # $ decodeFormat=XML decodeInput=List xml lxml.etree.XML(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.XML(..) lxml.etree.XML(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.XML(..) +lxml.etree.XMLID(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.XMLID(..) +lxml.etree.XMLID(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.XMLID(..) + lxml.etree.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) lxml.etree.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) From 386ff5361415f17c248285300de71ca735e92f7a Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 11:32:22 +0200 Subject: [PATCH 0106/1618] Python: Model `lxml.iterparse` --- .../ql/lib/semmle/python/frameworks/Lxml.qll | 30 +++++++++++++++++++ .../library-tests/frameworks/lxml/parsing.py | 18 ++++++++--- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index 60cc850fd34..821fc6bac80 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -274,4 +274,34 @@ private module Lxml { result = this } } + + /** + * A call to `lxml.etree.iterparse` + * + * See + * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.iterparse + */ + private class LXMLIterparseCall extends DataFlow::CallCfgNode, XML::XMLParsing::Range { + LXMLIterparseCall() { + this = API::moduleImport("lxml").getMember("etree").getMember("iterparse").getACall() + } + + override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("source")] } + + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + // note that there is no `resolve_entities` argument, so it's not possible to turn off XXE :O + kind.isXxe() + or + (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and + this.getArgByName("huge_tree").getALocalSource().asExpr() = any(True t) + or + kind.isDtdRetrieval() and + this.getArgByName("load_dtd").getALocalSource().asExpr() = any(True t) and + this.getArgByName("no_network").getALocalSource().asExpr() = any(False t) + } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { result = this } + } } diff --git a/python/ql/test/library-tests/frameworks/lxml/parsing.py b/python/ql/test/library-tests/frameworks/lxml/parsing.py index e69a68a6ad2..5abd626caf4 100644 --- a/python/ql/test/library-tests/frameworks/lxml/parsing.py +++ b/python/ql/test/library-tests/frameworks/lxml/parsing.py @@ -16,11 +16,15 @@ lxml.etree.XML(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOu lxml.etree.XMLID(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.XMLID(..) lxml.etree.XMLID(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.XMLID(..) -lxml.etree.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) -lxml.etree.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) +xml_file = 'xml_file' +lxml.etree.parse(xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) +lxml.etree.parse(source=xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) -lxml.etree.parseid(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XXE' decodeOutput=lxml.etree.parseid(..) -lxml.etree.parseid(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XXE' decodeOutput=lxml.etree.parseid(..) +lxml.etree.parseid(xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parseid(..) +lxml.etree.parseid(source=xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parseid(..) + +lxml.etree.iterparse(xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) +lxml.etree.iterparse(source=xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) # With default parsers (nothing changed) parser = lxml.etree.XMLParser() @@ -55,3 +59,9 @@ lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x decod # DTD retrival vuln (also XXE) parser = lxml.etree.XMLParser(load_dtd=True, no_network=False) lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVuln='DTD retrieval' xmlVuln='XXE' decodeOutput=lxml.etree.fromstring(..) + +# iterparse configurations ... this doesn't use a parser argument but takes MOST (!) of +# the normal XMLParser arguments. Specifically, it doesn't allow disabling XXE :O + +lxml.etree.iterparse(xml_file, huge_tree=True) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) +lxml.etree.iterparse(xml_file, load_dtd=True, no_network=False) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='DTD retrieval' xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) From 543454eff234ac2d403b932cb82b38309dea8002 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 11:47:29 +0200 Subject: [PATCH 0107/1618] Python: Model file access from XML parsing --- .../ql/lib/semmle/python/frameworks/Lxml.qll | 29 ++++++++++++++++++- .../lib/semmle/python/frameworks/Stdlib.qll | 29 +++++++++++++++++++ .../library-tests/frameworks/lxml/parsing.py | 16 +++++----- .../library-tests/frameworks/lxml/xpath.py | 2 +- .../frameworks/stdlib/XPathExecution.py | 2 +- .../frameworks/stdlib/xml_etree.py | 8 ++--- 6 files changed, 71 insertions(+), 15 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index 821fc6bac80..a3825a70db0 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -275,13 +275,38 @@ private module Lxml { } } + /** + * A call to `lxml.etree.ElementTree.parse` or `lxml.etree.ElementTree.parseid`, which + * takes either a filename or a file-like object as argument. To capture the filename + * for path-injection, we have this subclass. + * + * See + * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parse + * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parseid + */ + private class FileAccessFromLXMLParsing extends LXMLParsing, FileSystemAccess::Range { + FileAccessFromLXMLParsing() { + this = API::moduleImport("lxml").getMember("etree").getMember(["parse", "parseid"]).getACall() + // I considered whether we should try to reduce FPs from people passing file-like + // objects, which will not be a file system access (and couldn't cause a + // path-injection). + // + // I suppose that once we have proper flow-summary support for file-like objects, + // we can make the XXE/XML-bomb sinks allow an access-path, while the + // path-injection sink wouldn't, and then we will not end up with such FPs. + } + + override DataFlow::Node getAPathArgument() { result = this.getAnInput() } + } + /** * A call to `lxml.etree.iterparse` * * See * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.iterparse */ - private class LXMLIterparseCall extends DataFlow::CallCfgNode, XML::XMLParsing::Range { + private class LXMLIterparseCall extends DataFlow::CallCfgNode, XML::XMLParsing::Range, + FileSystemAccess::Range { LXMLIterparseCall() { this = API::moduleImport("lxml").getMember("etree").getMember("iterparse").getACall() } @@ -303,5 +328,7 @@ private module Lxml { override predicate mayExecuteInput() { none() } override DataFlow::Node getOutput() { result = this } + + override DataFlow::Node getAPathArgument() { result = this.getAnInput() } } } diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 77ec1b5f9da..3afbf71f495 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3306,6 +3306,35 @@ private module StdlibPrivate { result = this } } + + /** + * A call to `xml.etree.ElementTree.parse` or `xml.etree.ElementTree.iterparse`, which + * takes either a filename or a file-like object as argument. To capture the filename + * for path-injection, we have this subclass. + * + * See + * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.parse + * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.iterparse + */ + private class FileAccessFromXMLEtreeParsing extends XMLEtreeParsing, FileSystemAccess::Range { + FileAccessFromXMLEtreeParsing() { + this = + API::moduleImport("xml") + .getMember("etree") + .getMember("ElementTree") + .getMember(["parse", "iterparse"]) + .getACall() + // I considered whether we should try to reduce FPs from people passing file-like + // objects, which will not be a file system access (and couldn't cause a + // path-injection). + // + // I suppose that once we have proper flow-summary support for file-like objects, + // we can make the XXE/XML-bomb sinks allow an access-path, while the + // path-injection sink wouldn't, and then we will not end up with such FPs. + } + + override DataFlow::Node getAPathArgument() { result = this.getAnInput() } + } } // --------------------------------------------------------------------------- diff --git a/python/ql/test/library-tests/frameworks/lxml/parsing.py b/python/ql/test/library-tests/frameworks/lxml/parsing.py index 5abd626caf4..ca68c99a90e 100644 --- a/python/ql/test/library-tests/frameworks/lxml/parsing.py +++ b/python/ql/test/library-tests/frameworks/lxml/parsing.py @@ -17,14 +17,14 @@ lxml.etree.XMLID(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutpu lxml.etree.XMLID(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XXE' decodeOutput=lxml.etree.XMLID(..) xml_file = 'xml_file' -lxml.etree.parse(xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) -lxml.etree.parse(source=xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) +lxml.etree.parse(xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) getAPathArgument=xml_file +lxml.etree.parse(source=xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parse(..) getAPathArgument=xml_file -lxml.etree.parseid(xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parseid(..) -lxml.etree.parseid(source=xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parseid(..) +lxml.etree.parseid(xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parseid(..) getAPathArgument=xml_file +lxml.etree.parseid(source=xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.parseid(..) getAPathArgument=xml_file -lxml.etree.iterparse(xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) -lxml.etree.iterparse(source=xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) +lxml.etree.iterparse(xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) getAPathArgument=xml_file +lxml.etree.iterparse(source=xml_file) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) getAPathArgument=xml_file # With default parsers (nothing changed) parser = lxml.etree.XMLParser() @@ -63,5 +63,5 @@ lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVu # iterparse configurations ... this doesn't use a parser argument but takes MOST (!) of # the normal XMLParser arguments. Specifically, it doesn't allow disabling XXE :O -lxml.etree.iterparse(xml_file, huge_tree=True) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) -lxml.etree.iterparse(xml_file, load_dtd=True, no_network=False) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='DTD retrieval' xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) +lxml.etree.iterparse(xml_file, huge_tree=True) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) getAPathArgument=xml_file +lxml.etree.iterparse(xml_file, load_dtd=True, no_network=False) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='DTD retrieval' xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) getAPathArgument=xml_file diff --git a/python/ql/test/library-tests/frameworks/lxml/xpath.py b/python/ql/test/library-tests/frameworks/lxml/xpath.py index 9cf3a0883bd..f67c8dae17c 100644 --- a/python/ql/test/library-tests/frameworks/lxml/xpath.py +++ b/python/ql/test/library-tests/frameworks/lxml/xpath.py @@ -2,7 +2,7 @@ from lxml import etree from io import StringIO def test_parse(): - tree = etree.parse(StringIO('')) # $ decodeFormat=XML decodeInput=StringIO(..) decodeOutput=etree.parse(..) xmlVuln='XXE' + tree = etree.parse(StringIO('')) # $ decodeFormat=XML decodeInput=StringIO(..) decodeOutput=etree.parse(..) xmlVuln='XXE' getAPathArgument=StringIO(..) r = tree.xpath('/foo/bar') # $ getXPath='/foo/bar' def test_XPath_class(): diff --git a/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py b/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py index d39b0e04888..b501e2d4ccb 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py +++ b/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py @@ -2,7 +2,7 @@ match = "dc:title" ns = {'dc': 'http://purl.org/dc/elements/1.1/'} import xml.etree.ElementTree as ET -tree = ET.parse('country_data.xml') # $ decodeFormat=XML decodeInput='country_data.xml' decodeOutput=ET.parse(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +tree = ET.parse('country_data.xml') # $ decodeFormat=XML decodeInput='country_data.xml' decodeOutput=ET.parse(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument='country_data.xml' root = tree.getroot() root.find(match, namespaces=ns) # $ getXPath=match diff --git a/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py b/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py index 0ed750ba8c7..684aaaa4a9c 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py +++ b/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py @@ -16,11 +16,11 @@ xml.etree.ElementTree.XML(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Bi xml.etree.ElementTree.XMLID(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.XMLID(..) xml.etree.ElementTree.XMLID(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.XMLID(..) -xml.etree.ElementTree.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.parse(..) -xml.etree.ElementTree.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.parse(..) +xml.etree.ElementTree.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.parse(..) getAPathArgument=StringIO(..) +xml.etree.ElementTree.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.parse(..) getAPathArgument=StringIO(..) -xml.etree.ElementTree.iterparse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.iterparse(..) -xml.etree.ElementTree.iterparse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.iterparse(..) +xml.etree.ElementTree.iterparse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.iterparse(..) getAPathArgument=StringIO(..) +xml.etree.ElementTree.iterparse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.iterparse(..) getAPathArgument=StringIO(..) # With parsers (no options available to disable/enable security features) From db43d043c4cdd59c65424f20fdcdc0a7d79a632c Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 11:54:08 +0200 Subject: [PATCH 0108/1618] Python: Add test showing misalignment of xml.etree modeling --- .../test/library-tests/frameworks/stdlib/XPathExecution.py | 5 +++++ python/ql/test/library-tests/frameworks/stdlib/xml_etree.py | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py b/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py index b501e2d4ccb..37043d7049c 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py +++ b/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py @@ -15,3 +15,8 @@ tree.parse("index.xhtml") tree.find(match, namespaces=ns) # $ getXPath=match tree.findall(match, namespaces=ns) # $ getXPath=match tree.findtext(match, default=None, namespaces=ns) # $ getXPath=match + +parser = ET.XMLParser() +parser.feed("bar") # $ decodeFormat=XML decodeInput="bar" xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +tree = parser.close() # $ decodeOutput=parser.close() +tree.find(match, namespaces=ns) # $ MISSING: getXPath=match diff --git a/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py b/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py index 684aaaa4a9c..da04cedbdfc 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py +++ b/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py @@ -22,6 +22,10 @@ xml.etree.ElementTree.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput xml.etree.ElementTree.iterparse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.iterparse(..) getAPathArgument=StringIO(..) xml.etree.ElementTree.iterparse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.iterparse(..) getAPathArgument=StringIO(..) +tree = xml.etree.ElementTree.ElementTree() +tree.parse("file.xml") # $ MISSING: decodeFormat=XML decodeInput="file.xml" xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=tree.parse(..) getAPathArgument="file.xml" +tree.parse(source="file.xml") # $ MISSING: decodeFormat=XML decodeInput="file.xml" xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=tree.parse(..) getAPathArgument="file.xml" + # With parsers (no options available to disable/enable security features) parser = xml.etree.ElementTree.XMLParser() From fa651d2f604120449e2d6484cee23c3f49955772 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 31 Mar 2022 15:30:19 +0200 Subject: [PATCH 0109/1618] remove the override restriction from `ql/unused-field` --- ql/ql/src/queries/performance/UnusedField.ql | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/ql/ql/src/queries/performance/UnusedField.ql b/ql/ql/src/queries/performance/UnusedField.ql index bc7385a1523..c5348aa3d9d 100644 --- a/ql/ql/src/queries/performance/UnusedField.ql +++ b/ql/ql/src/queries/performance/UnusedField.ql @@ -31,13 +31,6 @@ where access.getEnclosingPredicate() = p ) ) and - (if clz = implClz then extraMsg = "." else extraMsg = " of any class between it and $@.") and - // The `implClz` does not override `field` with a more specific type. - not exists(FieldDecl override | - override = implClz.getDeclaration().getAField() and - override.getName() = field.getName() and - override.hasAnnotation("override") and - override.getVarDecl().getType() != field.getVarDecl().getType() - ) + (if clz = implClz then extraMsg = "." else extraMsg = " of any class between it and $@.") select clz, "The field $@ declared in $@ is not used in the characteristic predicate" + extraMsg, field, field.getName(), clz, clz.getName(), implClz, implClz.getName() From 06fdaacd824cf0b9ce22bcc9770e4476d6cd26b9 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 31 Mar 2022 15:30:56 +0200 Subject: [PATCH 0110/1618] just look at the field name in the "detect uses of the field in an inbetween class"-check --- ql/ql/src/queries/performance/UnusedField.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ql/ql/src/queries/performance/UnusedField.ql b/ql/ql/src/queries/performance/UnusedField.ql index c5348aa3d9d..5e58bb7f769 100644 --- a/ql/ql/src/queries/performance/UnusedField.ql +++ b/ql/ql/src/queries/performance/UnusedField.ql @@ -27,7 +27,7 @@ where c.getASuperType*() = clz and implClz.getASuperType*() = c and p = c.getDeclaration().getCharPred() and - exists(FieldAccess access | access.getDeclaration() = field | + exists(FieldAccess access | access.getName() = field.getName() | access.getEnclosingPredicate() = p ) ) and From 70b3eecdd506fcb2e17f3eb027e7b05073c257df Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 17:13:11 +0200 Subject: [PATCH 0111/1618] Python: Merge `xml.etree.ElementTree` models I forgot about the existing ones when I promoted it --- .../lib/semmle/python/frameworks/Stdlib.qll | 127 +++++++++--------- 1 file changed, 62 insertions(+), 65 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 3afbf71f495..85cf61cdbaf 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -2835,70 +2835,6 @@ private module StdlibPrivate { override string getKind() { result = Escaping::getRegexKind() } } - // --------------------------------------------------------------------------- - // xml.etree.ElementTree - // --------------------------------------------------------------------------- - /** - * An instance of `xml.etree.ElementTree.ElementTree`. - * - * See https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.ElementTree - */ - private API::Node elementTreeInstance() { - //parse to a tree - result = - API::moduleImport("xml") - .getMember("etree") - .getMember("ElementTree") - .getMember("parse") - .getReturn() - or - // construct a tree without parsing - result = - API::moduleImport("xml") - .getMember("etree") - .getMember("ElementTree") - .getMember("ElementTree") - .getReturn() - } - - /** - * An instance of `xml.etree.ElementTree.Element`. - * - * See https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element - */ - private API::Node elementInstance() { - // parse or go to the root of a tree - result = elementTreeInstance().getMember(["parse", "getroot"]).getReturn() - or - // parse directly to an element - result = - API::moduleImport("xml") - .getMember("etree") - .getMember("ElementTree") - .getMember(["fromstring", "fromstringlist", "XML"]) - .getReturn() - } - - /** - * A call to a find method on a tree or an element will execute an XPath expression. - */ - private class ElementTreeFindCall extends XML::XPathExecution::Range, DataFlow::CallCfgNode { - string methodName; - - ElementTreeFindCall() { - methodName in ["find", "findall", "findtext"] and - ( - this = elementTreeInstance().getMember(methodName).getACall() - or - this = elementInstance().getMember(methodName).getACall() - ) - } - - override DataFlow::Node getXPath() { result in [this.getArg(0), this.getArgByName("match")] } - - override string getName() { result = "xml.etree" } - } - // --------------------------------------------------------------------------- // urllib // --------------------------------------------------------------------------- @@ -3176,8 +3112,69 @@ private module StdlibPrivate { } // --------------------------------------------------------------------------- - // xml.etree + // xml.etree.ElementTree // --------------------------------------------------------------------------- + /** + * An instance of `xml.etree.ElementTree.ElementTree`. + * + * See https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.ElementTree + */ + private API::Node elementTreeInstance() { + //parse to a tree + result = + API::moduleImport("xml") + .getMember("etree") + .getMember("ElementTree") + .getMember("parse") + .getReturn() + or + // construct a tree without parsing + result = + API::moduleImport("xml") + .getMember("etree") + .getMember("ElementTree") + .getMember("ElementTree") + .getReturn() + } + + /** + * An instance of `xml.etree.ElementTree.Element`. + * + * See https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element + */ + private API::Node elementInstance() { + // parse or go to the root of a tree + result = elementTreeInstance().getMember(["parse", "getroot"]).getReturn() + or + // parse directly to an element + result = + API::moduleImport("xml") + .getMember("etree") + .getMember("ElementTree") + .getMember(["fromstring", "fromstringlist", "XML"]) + .getReturn() + } + + /** + * A call to a find method on a tree or an element will execute an XPath expression. + */ + private class ElementTreeFindCall extends XML::XPathExecution::Range, DataFlow::CallCfgNode { + string methodName; + + ElementTreeFindCall() { + methodName in ["find", "findall", "findtext"] and + ( + this = elementTreeInstance().getMember(methodName).getACall() + or + this = elementInstance().getMember(methodName).getACall() + ) + } + + override DataFlow::Node getXPath() { result in [this.getArg(0), this.getArgByName("match")] } + + override string getName() { result = "xml.etree" } + } + /** * Provides models for `xml.etree` parsers * From 05bb0ef97688627eacd4b6ed247b84a707385ed5 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 17:24:16 +0200 Subject: [PATCH 0112/1618] Python: Align `xml.etree.ElementTree` modeling I didn't find a good way to actually share the stuff, so we kinda just have 2 things that look very similar :| --- python/ql/lib/semmle/python/frameworks/Stdlib.qll | 14 ++++++++++++++ .../frameworks/stdlib/XPathExecution.py | 4 ++-- .../library-tests/frameworks/stdlib/xml_etree.py | 4 ++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 85cf61cdbaf..1118133d215 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3153,6 +3153,15 @@ private module StdlibPrivate { .getMember("ElementTree") .getMember(["fromstring", "fromstringlist", "XML"]) .getReturn() + or + result = + API::moduleImport("xml") + .getMember("etree") + .getMember("ElementTree") + .getMember("XMLParser") + .getReturn() + .getMember("close") + .getReturn() } /** @@ -3255,6 +3264,7 @@ private module StdlibPrivate { * - `xml.etree.ElementTree.XMLID` * - `xml.etree.ElementTree.parse` * - `xml.etree.ElementTree.iterparse` + * - `parse` method on an `xml.etree.ElementTree.ElementTree` instance * * See * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.fromstring @@ -3272,6 +3282,8 @@ private module StdlibPrivate { .getMember("ElementTree") .getMember(["fromstring", "fromstringlist", "XML", "XMLID", "parse", "iterparse"]) .getACall() + or + this = elementTreeInstance().getMember("parse").getACall() } override DataFlow::Node getAnInput() { @@ -3321,6 +3333,8 @@ private module StdlibPrivate { .getMember("ElementTree") .getMember(["parse", "iterparse"]) .getACall() + or + this = elementTreeInstance().getMember("parse").getACall() // I considered whether we should try to reduce FPs from people passing file-like // objects, which will not be a file system access (and couldn't cause a // path-injection). diff --git a/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py b/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py index 37043d7049c..5faff5ed868 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py +++ b/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py @@ -10,7 +10,7 @@ root.findall(match, namespaces=ns) # $ getXPath=match root.findtext(match, default=None, namespaces=ns) # $ getXPath=match tree = ET.ElementTree() -tree.parse("index.xhtml") +tree.parse("index.xhtml") # $ decodeFormat=XML decodeInput="index.xhtml" decodeOutput=tree.parse(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument="index.xhtml" tree.find(match, namespaces=ns) # $ getXPath=match tree.findall(match, namespaces=ns) # $ getXPath=match @@ -19,4 +19,4 @@ tree.findtext(match, default=None, namespaces=ns) # $ getXPath=match parser = ET.XMLParser() parser.feed("bar") # $ decodeFormat=XML decodeInput="bar" xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' tree = parser.close() # $ decodeOutput=parser.close() -tree.find(match, namespaces=ns) # $ MISSING: getXPath=match +tree.find(match, namespaces=ns) # $ getXPath=match diff --git a/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py b/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py index da04cedbdfc..00f3b964b18 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py +++ b/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py @@ -23,8 +23,8 @@ xml.etree.ElementTree.iterparse(StringIO(x)) # $ decodeFormat=XML decodeInput=St xml.etree.ElementTree.iterparse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.iterparse(..) getAPathArgument=StringIO(..) tree = xml.etree.ElementTree.ElementTree() -tree.parse("file.xml") # $ MISSING: decodeFormat=XML decodeInput="file.xml" xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=tree.parse(..) getAPathArgument="file.xml" -tree.parse(source="file.xml") # $ MISSING: decodeFormat=XML decodeInput="file.xml" xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=tree.parse(..) getAPathArgument="file.xml" +tree.parse("file.xml") # $ decodeFormat=XML decodeInput="file.xml" xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=tree.parse(..) getAPathArgument="file.xml" +tree.parse(source="file.xml") # $ decodeFormat=XML decodeInput="file.xml" xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=tree.parse(..) getAPathArgument="file.xml" # With parsers (no options available to disable/enable security features) From e11269715dc55e3509625489267601b736c324f1 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 17:44:00 +0200 Subject: [PATCH 0113/1618] Python: Promote `xml.sax` and `xml.dom.*` modeling --- .../lib/semmle/python/frameworks/Stdlib.qll | 214 ++++++++++++++++++ .../semmle/python/frameworks/Xml.qll | 210 ----------------- .../frameworks/stdlib}/xml_dom.py | 0 .../frameworks/stdlib}/xml_sax.py | 0 4 files changed, 214 insertions(+), 210 deletions(-) rename python/ql/test/{experimental/library-tests/frameworks/XML => library-tests/frameworks/stdlib}/xml_dom.py (100%) rename python/ql/test/{experimental/library-tests/frameworks/XML => library-tests/frameworks/stdlib}/xml_sax.py (100%) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 1118133d215..418f3475c1e 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3346,6 +3346,220 @@ private module StdlibPrivate { override DataFlow::Node getAPathArgument() { result = this.getAnInput() } } + + // --------------------------------------------------------------------------- + // xml.sax + // --------------------------------------------------------------------------- + /** + * A call to the `setFeature` method on a XML sax parser. + * + * See https://docs.python.org/3.10/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.setFeature + */ + private class SaxParserSetFeatureCall extends DataFlow::MethodCallNode { + SaxParserSetFeatureCall() { + this = + API::moduleImport("xml") + .getMember("sax") + .getMember("make_parser") + .getReturn() + .getMember("setFeature") + .getACall() + } + + // The keyword argument names does not match documentation. I checked (with Python + // 3.9.5) that the names used here actually works. + DataFlow::Node getFeatureArg() { result in [this.getArg(0), this.getArgByName("name")] } + + DataFlow::Node getStateArg() { result in [this.getArg(1), this.getArgByName("state")] } + } + + /** Gets a back-reference to the `setFeature` state argument `arg`. */ + private DataFlow::TypeTrackingNode saxParserSetFeatureStateArgBacktracker( + DataFlow::TypeBackTracker t, DataFlow::Node arg + ) { + t.start() and + arg = any(SaxParserSetFeatureCall c).getStateArg() and + result = arg.getALocalSource() + or + exists(DataFlow::TypeBackTracker t2 | + result = saxParserSetFeatureStateArgBacktracker(t2, arg).backtrack(t2, t) + ) + } + + /** Gets a back-reference to the `setFeature` state argument `arg`. */ + DataFlow::LocalSourceNode saxParserSetFeatureStateArgBacktracker(DataFlow::Node arg) { + result = saxParserSetFeatureStateArgBacktracker(DataFlow::TypeBackTracker::end(), arg) + } + + /** + * Gets a reference to a XML sax parser that has `feature_external_ges` turned on. + * + * See https://docs.python.org/3/library/xml.sax.handler.html#xml.sax.handler.feature_external_ges + */ + private DataFlow::Node saxParserWithFeatureExternalGesTurnedOn(DataFlow::TypeTracker t) { + t.start() and + exists(SaxParserSetFeatureCall call | + call.getFeatureArg() = + API::moduleImport("xml") + .getMember("sax") + .getMember("handler") + .getMember("feature_external_ges") + .getAUse() and + saxParserSetFeatureStateArgBacktracker(call.getStateArg()) + .asExpr() + .(BooleanLiteral) + .booleanValue() = true and + result = call.getObject() + ) + or + exists(DataFlow::TypeTracker t2 | + t = t2.smallstep(saxParserWithFeatureExternalGesTurnedOn(t2), result) + ) and + // take account of that we can set the feature to False, which makes the parser safe again + not exists(SaxParserSetFeatureCall call | + call.getObject() = result and + call.getFeatureArg() = + API::moduleImport("xml") + .getMember("sax") + .getMember("handler") + .getMember("feature_external_ges") + .getAUse() and + saxParserSetFeatureStateArgBacktracker(call.getStateArg()) + .asExpr() + .(BooleanLiteral) + .booleanValue() = false + ) + } + + /** + * Gets a reference to a XML sax parser that has `feature_external_ges` turned on. + * + * See https://docs.python.org/3/library/xml.sax.handler.html#xml.sax.handler.feature_external_ges + */ + DataFlow::Node saxParserWithFeatureExternalGesTurnedOn() { + result = saxParserWithFeatureExternalGesTurnedOn(DataFlow::TypeTracker::end()) + } + + /** + * A call to the `parse` method on a SAX XML parser. + */ + private class XMLSaxInstanceParsing extends DataFlow::MethodCallNode, XML::XMLParsing::Range { + XMLSaxInstanceParsing() { + this = + API::moduleImport("xml") + .getMember("sax") + .getMember("make_parser") + .getReturn() + .getMember("parse") + .getACall() + } + + override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("source")] } + + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + // always vuln to these + (kind.isBillionLaughs() or kind.isQuadraticBlowup()) + or + // can be vuln to other things if features has been turned on + this.getObject() = saxParserWithFeatureExternalGesTurnedOn() and + (kind.isXxe() or kind.isDtdRetrieval()) + } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { + // note: the output of parsing with SAX is that the content handler gets the + // data... but we don't currently model this (it's not trivial to do, and won't + // really give us any value, at least not as of right now). + none() + } + } + + /** + * A call to either `parse` or `parseString` from `xml.sax` module. + * + * See: + * - https://docs.python.org/3.10/library/xml.sax.html#xml.sax.parse + * - https://docs.python.org/3.10/library/xml.sax.html#xml.sax.parseString + */ + private class XMLSaxParsing extends DataFlow::MethodCallNode, XML::XMLParsing::Range { + XMLSaxParsing() { + this = + API::moduleImport("xml").getMember("sax").getMember(["parse", "parseString"]).getACall() + } + + override DataFlow::Node getAnInput() { + result in [ + this.getArg(0), + // parseString + this.getArgByName("string"), + // parse + this.getArgByName("source"), + ] + } + + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + // always vuln to these + (kind.isBillionLaughs() or kind.isQuadraticBlowup()) + or + // can be vuln to other things if features has been turned on + this.getObject() = saxParserWithFeatureExternalGesTurnedOn() and + (kind.isXxe() or kind.isDtdRetrieval()) + } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { + // note: the output of parsing with SAX is that the content handler gets the + // data... but we don't currently model this (it's not trivial to do, and won't + // really give us any value, at least not as of right now). + none() + } + } + + // --------------------------------------------------------------------------- + // xml.dom.* + // --------------------------------------------------------------------------- + /** + * A call to the `parse` or `parseString` methods from `xml.dom.minidom` or `xml.dom.pulldom`. + * + * Both of these modules are based on SAX parsers. + */ + private class XMLDomParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { + XMLDomParsing() { + this = + API::moduleImport("xml") + .getMember("dom") + .getMember(["minidom", "pulldom"]) + .getMember(["parse", "parseString"]) + .getACall() + } + + override DataFlow::Node getAnInput() { + result in [ + this.getArg(0), + // parseString + this.getArgByName("string"), + // minidom.parse + this.getArgByName("file"), + // pulldom.parse + this.getArgByName("stream_or_string"), + ] + } + + DataFlow::Node getParserArg() { result in [this.getArg(1), this.getArgByName("parser")] } + + override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + this.getParserArg() = saxParserWithFeatureExternalGesTurnedOn() and + (kind.isXxe() or kind.isDtdRetrieval()) + or + (kind.isBillionLaughs() or kind.isQuadraticBlowup()) + } + + override predicate mayExecuteInput() { none() } + + override DataFlow::Node getOutput() { result = this } + } } // --------------------------------------------------------------------------- diff --git a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll index 88def863824..344a19a0109 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll @@ -7,213 +7,3 @@ private import python private import semmle.python.dataflow.new.DataFlow private import semmle.python.Concepts private import semmle.python.ApiGraphs - -private module SaxBasedParsing { - /** - * A call to the `setFeature` method on a XML sax parser. - * - * See https://docs.python.org/3.10/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.setFeature - */ - private class SaxParserSetFeatureCall extends DataFlow::MethodCallNode { - SaxParserSetFeatureCall() { - this = - API::moduleImport("xml") - .getMember("sax") - .getMember("make_parser") - .getReturn() - .getMember("setFeature") - .getACall() - } - - // The keyword argument names does not match documentation. I checked (with Python - // 3.9.5) that the names used here actually works. - DataFlow::Node getFeatureArg() { result in [this.getArg(0), this.getArgByName("name")] } - - DataFlow::Node getStateArg() { result in [this.getArg(1), this.getArgByName("state")] } - } - - /** Gets a back-reference to the `setFeature` state argument `arg`. */ - private DataFlow::TypeTrackingNode saxParserSetFeatureStateArgBacktracker( - DataFlow::TypeBackTracker t, DataFlow::Node arg - ) { - t.start() and - arg = any(SaxParserSetFeatureCall c).getStateArg() and - result = arg.getALocalSource() - or - exists(DataFlow::TypeBackTracker t2 | - result = saxParserSetFeatureStateArgBacktracker(t2, arg).backtrack(t2, t) - ) - } - - /** Gets a back-reference to the `setFeature` state argument `arg`. */ - DataFlow::LocalSourceNode saxParserSetFeatureStateArgBacktracker(DataFlow::Node arg) { - result = saxParserSetFeatureStateArgBacktracker(DataFlow::TypeBackTracker::end(), arg) - } - - /** - * Gets a reference to a XML sax parser that has `feature_external_ges` turned on. - * - * See https://docs.python.org/3/library/xml.sax.handler.html#xml.sax.handler.feature_external_ges - */ - private DataFlow::Node saxParserWithFeatureExternalGesTurnedOn(DataFlow::TypeTracker t) { - t.start() and - exists(SaxParserSetFeatureCall call | - call.getFeatureArg() = - API::moduleImport("xml") - .getMember("sax") - .getMember("handler") - .getMember("feature_external_ges") - .getAUse() and - saxParserSetFeatureStateArgBacktracker(call.getStateArg()) - .asExpr() - .(BooleanLiteral) - .booleanValue() = true and - result = call.getObject() - ) - or - exists(DataFlow::TypeTracker t2 | - t = t2.smallstep(saxParserWithFeatureExternalGesTurnedOn(t2), result) - ) and - // take account of that we can set the feature to False, which makes the parser safe again - not exists(SaxParserSetFeatureCall call | - call.getObject() = result and - call.getFeatureArg() = - API::moduleImport("xml") - .getMember("sax") - .getMember("handler") - .getMember("feature_external_ges") - .getAUse() and - saxParserSetFeatureStateArgBacktracker(call.getStateArg()) - .asExpr() - .(BooleanLiteral) - .booleanValue() = false - ) - } - - /** - * Gets a reference to a XML sax parser that has `feature_external_ges` turned on. - * - * See https://docs.python.org/3/library/xml.sax.handler.html#xml.sax.handler.feature_external_ges - */ - DataFlow::Node saxParserWithFeatureExternalGesTurnedOn() { - result = saxParserWithFeatureExternalGesTurnedOn(DataFlow::TypeTracker::end()) - } - - /** - * A call to the `parse` method on a SAX XML parser. - */ - private class XMLSaxInstanceParsing extends DataFlow::MethodCallNode, XML::XMLParsing::Range { - XMLSaxInstanceParsing() { - this = - API::moduleImport("xml") - .getMember("sax") - .getMember("make_parser") - .getReturn() - .getMember("parse") - .getACall() - } - - override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("source")] } - - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { - // always vuln to these - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) - or - // can be vuln to other things if features has been turned on - this.getObject() = saxParserWithFeatureExternalGesTurnedOn() and - (kind.isXxe() or kind.isDtdRetrieval()) - } - - override predicate mayExecuteInput() { none() } - - override DataFlow::Node getOutput() { - // note: the output of parsing with SAX is that the content handler gets the - // data... but we don't currently model this (it's not trivial to do, and won't - // really give us any value, at least not as of right now). - none() - } - } - - /** - * A call to either `parse` or `parseString` from `xml.sax` module. - * - * See: - * - https://docs.python.org/3.10/library/xml.sax.html#xml.sax.parse - * - https://docs.python.org/3.10/library/xml.sax.html#xml.sax.parseString - */ - private class XMLSaxParsing extends DataFlow::MethodCallNode, XML::XMLParsing::Range { - XMLSaxParsing() { - this = - API::moduleImport("xml").getMember("sax").getMember(["parse", "parseString"]).getACall() - } - - override DataFlow::Node getAnInput() { - result in [ - this.getArg(0), - // parseString - this.getArgByName("string"), - // parse - this.getArgByName("source"), - ] - } - - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { - // always vuln to these - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) - or - // can be vuln to other things if features has been turned on - this.getObject() = saxParserWithFeatureExternalGesTurnedOn() and - (kind.isXxe() or kind.isDtdRetrieval()) - } - - override predicate mayExecuteInput() { none() } - - override DataFlow::Node getOutput() { - // note: the output of parsing with SAX is that the content handler gets the - // data... but we don't currently model this (it's not trivial to do, and won't - // really give us any value, at least not as of right now). - none() - } - } - - /** - * A call to the `parse` or `parseString` methods from `xml.dom.minidom` or `xml.dom.pulldom`. - * - * Both of these modules are based on SAX parsers. - */ - private class XMLDomParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { - XMLDomParsing() { - this = - API::moduleImport("xml") - .getMember("dom") - .getMember(["minidom", "pulldom"]) - .getMember(["parse", "parseString"]) - .getACall() - } - - override DataFlow::Node getAnInput() { - result in [ - this.getArg(0), - // parseString - this.getArgByName("string"), - // minidom.parse - this.getArgByName("file"), - // pulldom.parse - this.getArgByName("stream_or_string"), - ] - } - - DataFlow::Node getParserArg() { result in [this.getArg(1), this.getArgByName("parser")] } - - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { - this.getParserArg() = saxParserWithFeatureExternalGesTurnedOn() and - (kind.isXxe() or kind.isDtdRetrieval()) - or - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) - } - - override predicate mayExecuteInput() { none() } - - override DataFlow::Node getOutput() { result = this } - } -} diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xml_dom.py b/python/ql/test/library-tests/frameworks/stdlib/xml_dom.py similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/XML/xml_dom.py rename to python/ql/test/library-tests/frameworks/stdlib/xml_dom.py diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/xml_sax.py b/python/ql/test/library-tests/frameworks/stdlib/xml_sax.py similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/XML/xml_sax.py rename to python/ql/test/library-tests/frameworks/stdlib/xml_sax.py From 1d7cec60ae09489618b7e561845b5a361c274583 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 17:50:23 +0200 Subject: [PATCH 0114/1618] Python: `xml.sax.parse` is not a method call And it's not possible to provide a parser argument either --- python/ql/lib/semmle/python/frameworks/Stdlib.qll | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 418f3475c1e..5659c7c8e91 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3482,7 +3482,7 @@ private module StdlibPrivate { * - https://docs.python.org/3.10/library/xml.sax.html#xml.sax.parse * - https://docs.python.org/3.10/library/xml.sax.html#xml.sax.parseString */ - private class XMLSaxParsing extends DataFlow::MethodCallNode, XML::XMLParsing::Range { + private class XMLSaxParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { XMLSaxParsing() { this = API::moduleImport("xml").getMember("sax").getMember(["parse", "parseString"]).getACall() @@ -3501,10 +3501,6 @@ private module StdlibPrivate { override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { // always vuln to these (kind.isBillionLaughs() or kind.isQuadraticBlowup()) - or - // can be vuln to other things if features has been turned on - this.getObject() = saxParserWithFeatureExternalGesTurnedOn() and - (kind.isXxe() or kind.isDtdRetrieval()) } override predicate mayExecuteInput() { none() } From b4c0065aeb160839129d25cc3ee1818564670d21 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 18:03:35 +0200 Subject: [PATCH 0115/1618] Python: Extend FileSystemAccess for `xml.sax` and `xml.dom.*` parsing --- .../lib/semmle/python/frameworks/Stdlib.qll | 72 ++++++++++++++++++- .../frameworks/stdlib/xml_dom.py | 16 ++--- .../frameworks/stdlib/xml_sax.py | 22 +++--- 3 files changed, 90 insertions(+), 20 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 5659c7c8e91..38fe32a3b3c 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3442,8 +3442,11 @@ private module StdlibPrivate { /** * A call to the `parse` method on a SAX XML parser. + * + * See https://docs.python.org/3/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.parse */ - private class XMLSaxInstanceParsing extends DataFlow::MethodCallNode, XML::XMLParsing::Range { + private class XMLSaxInstanceParsing extends DataFlow::MethodCallNode, XML::XMLParsing::Range, + FileSystemAccess::Range { XMLSaxInstanceParsing() { this = API::moduleImport("xml") @@ -3473,6 +3476,17 @@ private module StdlibPrivate { // really give us any value, at least not as of right now). none() } + + override DataFlow::Node getAPathArgument() { + // I considered whether we should try to reduce FPs from people passing file-like + // objects, which will not be a file system access (and couldn't cause a + // path-injection). + // + // I suppose that once we have proper flow-summary support for file-like objects, + // we can make the XXE/XML-bomb sinks allow an access-path, while the + // path-injection sink wouldn't, and then we will not end up with such FPs. + result = this.getAnInput() + } } /** @@ -3513,6 +3527,29 @@ private module StdlibPrivate { } } + /** + * A call to `xml.sax.parse`, which takes either a filename or a file-like object as + * argument. To capture the filename for path-injection, we have this subclass. + * + * See + * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.parse + * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.iterparse + */ + private class FileAccessFromXMLSaxParsing extends XMLSaxParsing, FileSystemAccess::Range { + FileAccessFromXMLSaxParsing() { + this = API::moduleImport("xml").getMember("sax").getMember("parse").getACall() + // I considered whether we should try to reduce FPs from people passing file-like + // objects, which will not be a file system access (and couldn't cause a + // path-injection). + // + // I suppose that once we have proper flow-summary support for file-like objects, + // we can make the XXE/XML-bomb sinks allow an access-path, while the + // path-injection sink wouldn't, and then we will not end up with such FPs. + } + + override DataFlow::Node getAPathArgument() { result = this.getAnInput() } + } + // --------------------------------------------------------------------------- // xml.dom.* // --------------------------------------------------------------------------- @@ -3520,6 +3557,10 @@ private module StdlibPrivate { * A call to the `parse` or `parseString` methods from `xml.dom.minidom` or `xml.dom.pulldom`. * * Both of these modules are based on SAX parsers. + * + * See + * - https://docs.python.org/3/library/xml.dom.minidom.html#xml.dom.minidom.parse + * - https://docs.python.org/3/library/xml.dom.pulldom.html#xml.dom.pulldom.parse */ private class XMLDomParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { XMLDomParsing() { @@ -3556,6 +3597,35 @@ private module StdlibPrivate { override DataFlow::Node getOutput() { result = this } } + + /** + * A call to the `parse` or `parseString` methods from `xml.dom.minidom` or + * `xml.dom.pulldom`, which takes either a filename or a file-like object as argument. + * To capture the filename for path-injection, we have this subclass. + * + * See + * - https://docs.python.org/3/library/xml.dom.minidom.html#xml.dom.minidom.parse + * - https://docs.python.org/3/library/xml.dom.pulldom.html#xml.dom.pulldom.parse + */ + private class FileAccessFromXMLDomParsing extends XMLDomParsing, FileSystemAccess::Range { + FileAccessFromXMLDomParsing() { + this = + API::moduleImport("xml") + .getMember("dom") + .getMember(["minidom", "pulldom"]) + .getMember("parse") + .getACall() + // I considered whether we should try to reduce FPs from people passing file-like + // objects, which will not be a file system access (and couldn't cause a + // path-injection). + // + // I suppose that once we have proper flow-summary support for file-like objects, + // we can make the XXE/XML-bomb sinks allow an access-path, while the + // path-injection sink wouldn't, and then we will not end up with such FPs. + } + + override DataFlow::Node getAPathArgument() { result = this.getAnInput() } + } } // --------------------------------------------------------------------------- diff --git a/python/ql/test/library-tests/frameworks/stdlib/xml_dom.py b/python/ql/test/library-tests/frameworks/stdlib/xml_dom.py index c6152c75807..b3a1ab7f930 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/xml_dom.py +++ b/python/ql/test/library-tests/frameworks/stdlib/xml_dom.py @@ -6,16 +6,16 @@ import xml.sax x = "some xml" # minidom -xml.dom.minidom.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parse(..) -xml.dom.minidom.parse(file=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parse(..) +xml.dom.minidom.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) +xml.dom.minidom.parse(file=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) xml.dom.minidom.parseString(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parseString(..) xml.dom.minidom.parseString(string=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parseString(..) # pulldom -xml.dom.pulldom.parse(StringIO(x))['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parse(..) -xml.dom.pulldom.parse(stream_or_string=StringIO(x))['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parse(..) +xml.dom.pulldom.parse(StringIO(x))['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) +xml.dom.pulldom.parse(stream_or_string=StringIO(x))['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) xml.dom.pulldom.parseString(x)['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parseString(..) xml.dom.pulldom.parseString(string=x)['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parseString(..) @@ -24,8 +24,8 @@ xml.dom.pulldom.parseString(string=x)['START_DOCUMENT'][1] # $ decodeFormat=XML # These are based on SAX parses, and you can specify your own, so you can expose yourself to XXE (yay/) parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) -xml.dom.minidom.parse(StringIO(x), parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.minidom.parse(..) -xml.dom.minidom.parse(StringIO(x), parser=parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.minidom.parse(..) +xml.dom.minidom.parse(StringIO(x), parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) +xml.dom.minidom.parse(StringIO(x), parser=parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) -xml.dom.pulldom.parse(StringIO(x), parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.pulldom.parse(..) -xml.dom.pulldom.parse(StringIO(x), parser=parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.pulldom.parse(..) +xml.dom.pulldom.parse(StringIO(x), parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) +xml.dom.pulldom.parse(StringIO(x), parser=parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) diff --git a/python/ql/test/library-tests/frameworks/stdlib/xml_sax.py b/python/ql/test/library-tests/frameworks/stdlib/xml_sax.py index 8dbe9d4ae99..c08034907a4 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/xml_sax.py +++ b/python/ql/test/library-tests/frameworks/stdlib/xml_sax.py @@ -10,41 +10,41 @@ class MainHandler(xml.sax.ContentHandler): def characters(self, data): self._result.append(data) -xml.sax.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.sax.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.sax.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) +xml.sax.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) xml.sax.parseString(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' xml.sax.parseString(string=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' parser = xml.sax.make_parser() -parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -parser.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) +parser.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) # You can make it vuln to both XXE and DTD retrieval by setting this flag # see https://docs.python.org/3/library/xml.sax.handler.html#xml.sax.handler.feature_external_ges parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) -parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' getAPathArgument=StringIO(..) parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, False) -parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) # Forward Type Tracking test def func(cond): parser = xml.sax.make_parser() if cond: parser.setFeature(xml.sax.handler.feature_external_ges, True) - parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' getAPathArgument=StringIO(..) else: - parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) # make it vuln, then making it safe # a bit of an edge-case, but is nice to be able to handle. parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) parser.setFeature(xml.sax.handler.feature_external_ges, False) -parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) def check_conditional_assignment(cond): parser = xml.sax.make_parser() @@ -52,7 +52,7 @@ def check_conditional_assignment(cond): parser.setFeature(xml.sax.handler.feature_external_ges, True) else: parser.setFeature(xml.sax.handler.feature_external_ges, False) - parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' getAPathArgument=StringIO(..) def check_conditional_assignment2(cond): parser = xml.sax.make_parser() @@ -61,4 +61,4 @@ def check_conditional_assignment2(cond): else: flag_value = False parser.setFeature(xml.sax.handler.feature_external_ges, flag_value) - parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' getAPathArgument=StringIO(..) From 673220b231fdfcd225f4d29cbc76be67f156b21c Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 18:18:35 +0200 Subject: [PATCH 0116/1618] Python: Minor cleanup of `XmlParsingTest` --- .../ql/test/experimental/meta/ConceptsTest.qll | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/python/ql/test/experimental/meta/ConceptsTest.qll b/python/ql/test/experimental/meta/ConceptsTest.qll index 24cbbab2d44..cd90d716dd4 100644 --- a/python/ql/test/experimental/meta/ConceptsTest.qll +++ b/python/ql/test/experimental/meta/ConceptsTest.qll @@ -543,18 +543,16 @@ class HttpClientRequestTest extends InlineExpectationsTest { class XmlParsingTest extends InlineExpectationsTest { XmlParsingTest() { this = "XmlParsingTest" } - override string getARelevantTag() { result in ["xmlInput", "xmlVuln"] } + override string getARelevantTag() { result in ["xmlVuln"] } override predicate hasActualResult(Location location, string element, string tag, string value) { exists(location.getFile().getRelativePath()) and - exists(XML::XMLParsing parsing | - exists(XML::XMLParsingVulnerabilityKind kind | - parsing.vulnerableTo(kind) and - location = parsing.getLocation() and - element = parsing.toString() and - value = "'" + kind + "'" and - tag = "xmlVuln" - ) + exists(XML::XMLParsing parsing, XML::XMLParsingVulnerabilityKind kind | + parsing.vulnerableTo(kind) and + location = parsing.getLocation() and + element = parsing.toString() and + value = "'" + kind + "'" and + tag = "xmlVuln" ) } } From 5083023aa80238c58811aa7e56df6dddf4e6b33a Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 18:37:47 +0200 Subject: [PATCH 0117/1618] Python: Move XML parsing PoC Since the folder where it used to live is now empty otherwise :O --- python/PoCs/README.md | 1 + .../library-tests/frameworks/XML/poc => PoCs/XmlParsing}/PoC.py | 0 .../library-tests/frameworks/XML/poc => PoCs/XmlParsing}/flag | 0 python/ql/lib/semmle/python/Concepts.qll | 2 ++ .../library-tests/frameworks/XML/poc/this-dir-is-not-extracted | 1 - 5 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 python/PoCs/README.md rename python/{ql/test/experimental/library-tests/frameworks/XML/poc => PoCs/XmlParsing}/PoC.py (100%) rename python/{ql/test/experimental/library-tests/frameworks/XML/poc => PoCs/XmlParsing}/flag (100%) delete mode 100644 python/ql/test/experimental/library-tests/frameworks/XML/poc/this-dir-is-not-extracted diff --git a/python/PoCs/README.md b/python/PoCs/README.md new file mode 100644 index 00000000000..20eeb5dbd78 --- /dev/null +++ b/python/PoCs/README.md @@ -0,0 +1 @@ +A place to collect proof of concept for how certain vulnerabilities work. diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py b/python/PoCs/XmlParsing/PoC.py similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/XML/poc/PoC.py rename to python/PoCs/XmlParsing/PoC.py diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/poc/flag b/python/PoCs/XmlParsing/flag similarity index 100% rename from python/ql/test/experimental/library-tests/frameworks/XML/poc/flag rename to python/PoCs/XmlParsing/flag diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index b553c8d927d..b1727e4829d 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -555,6 +555,8 @@ module XML { * A kind of XML vulnerability. * * See overview of kinds at https://pypi.org/project/defusedxml/#python-xml-libraries + * + * See PoC at `python/PoCs/XmlParsing/PoC.py` for some tests of vulnerable XML parsing. */ class XMLParsingVulnerabilityKind extends string { XMLParsingVulnerabilityKind() { diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/poc/this-dir-is-not-extracted b/python/ql/test/experimental/library-tests/frameworks/XML/poc/this-dir-is-not-extracted deleted file mode 100644 index b1925ade1d3..00000000000 --- a/python/ql/test/experimental/library-tests/frameworks/XML/poc/this-dir-is-not-extracted +++ /dev/null @@ -1 +0,0 @@ -just FYI From b8d3c5e96fbfc0b5770591d699b94695f3d15a26 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 18:40:26 +0200 Subject: [PATCH 0118/1618] Python: Remove last bits of experimental XML modeling --- python/ql/src/experimental/semmle/python/Frameworks.qll | 1 - .../ql/src/experimental/semmle/python/frameworks/Xml.qll | 9 --------- .../python/security/dataflow/XmlBombCustomizations.qll | 1 - .../python/security/dataflow/XxeCustomizations.qll | 1 - .../library-tests/frameworks/XML/ConceptsTest.expected | 0 .../library-tests/frameworks/XML/ConceptsTest.ql | 3 --- 6 files changed, 15 deletions(-) delete mode 100644 python/ql/src/experimental/semmle/python/frameworks/Xml.qll delete mode 100644 python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.expected delete mode 100644 python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.ql diff --git a/python/ql/src/experimental/semmle/python/Frameworks.qll b/python/ql/src/experimental/semmle/python/Frameworks.qll index edbed61c41c..81b2c1bee23 100644 --- a/python/ql/src/experimental/semmle/python/Frameworks.qll +++ b/python/ql/src/experimental/semmle/python/Frameworks.qll @@ -3,7 +3,6 @@ */ private import experimental.semmle.python.frameworks.Stdlib -private import experimental.semmle.python.frameworks.Xml private import experimental.semmle.python.frameworks.Flask private import experimental.semmle.python.frameworks.Django private import experimental.semmle.python.frameworks.Werkzeug diff --git a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll b/python/ql/src/experimental/semmle/python/frameworks/Xml.qll deleted file mode 100644 index 344a19a0109..00000000000 --- a/python/ql/src/experimental/semmle/python/frameworks/Xml.qll +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Provides class and predicates to track external data that - * may represent malicious XML objects. - */ - -private import python -private import semmle.python.dataflow.new.DataFlow -private import semmle.python.Concepts -private import semmle.python.ApiGraphs diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll index c5e69c1e0e3..d6f2e0791f9 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll @@ -7,7 +7,6 @@ private import python private import semmle.python.dataflow.new.DataFlow private import semmle.python.Concepts -import experimental.semmle.python.frameworks.Xml // needed until modeling have been promoted private import semmle.python.dataflow.new.RemoteFlowSources /** diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll index 27d011625a6..a4473285b8d 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll @@ -7,7 +7,6 @@ private import python private import semmle.python.dataflow.new.DataFlow private import semmle.python.Concepts -import experimental.semmle.python.frameworks.Xml // needed until modeling have been promoted private import semmle.python.dataflow.new.RemoteFlowSources /** diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.expected b/python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.ql b/python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.ql deleted file mode 100644 index 95728bd6dc8..00000000000 --- a/python/ql/test/experimental/library-tests/frameworks/XML/ConceptsTest.ql +++ /dev/null @@ -1,3 +0,0 @@ -import python -import experimental.meta.ConceptsTest -import experimental.semmle.python.frameworks.Xml // needed until modeling have been promoted From 4abab2206618b950509b45ed516b8a9c11f7732d Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 18:47:50 +0200 Subject: [PATCH 0119/1618] Python: Promote XXE and XML-bomb queries Need to write a change-note as well, but will do that tomorrow --- .../{experimental/Security/NEW => Security}/CWE-611/Xxe.qhelp | 0 .../src/{experimental/Security/NEW => Security}/CWE-611/Xxe.ql | 0 .../Security/NEW => Security}/CWE-611/examples/XxeBad.py | 0 .../Security/NEW => Security}/CWE-611/examples/XxeGood.py | 0 .../Security/NEW => Security}/CWE-776/XmlBomb.qhelp | 0 .../{experimental/Security/NEW => Security}/CWE-776/XmlBomb.ql | 0 .../Security/NEW => Security}/CWE-776/examples/XmlBombBad.py | 0 .../Security/NEW => Security}/CWE-776/examples/XmlBombGood.py | 0 .../test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.qlref | 1 - .../query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref | 1 - .../query-tests/Security/CWE-611-Xxe/Xxe.expected | 0 python/ql/test/query-tests/Security/CWE-611-Xxe/Xxe.qlref | 1 + .../{experimental => }/query-tests/Security/CWE-611-Xxe/test.py | 0 .../query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected | 0 .../ql/test/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref | 1 + .../query-tests/Security/CWE-776-XmlBomb/test.py | 0 16 files changed, 2 insertions(+), 2 deletions(-) rename python/ql/src/{experimental/Security/NEW => Security}/CWE-611/Xxe.qhelp (100%) rename python/ql/src/{experimental/Security/NEW => Security}/CWE-611/Xxe.ql (100%) rename python/ql/src/{experimental/Security/NEW => Security}/CWE-611/examples/XxeBad.py (100%) rename python/ql/src/{experimental/Security/NEW => Security}/CWE-611/examples/XxeGood.py (100%) rename python/ql/src/{experimental/Security/NEW => Security}/CWE-776/XmlBomb.qhelp (100%) rename python/ql/src/{experimental/Security/NEW => Security}/CWE-776/XmlBomb.ql (100%) rename python/ql/src/{experimental/Security/NEW => Security}/CWE-776/examples/XmlBombBad.py (100%) rename python/ql/src/{experimental/Security/NEW => Security}/CWE-776/examples/XmlBombGood.py (100%) delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.qlref delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref rename python/ql/test/{experimental => }/query-tests/Security/CWE-611-Xxe/Xxe.expected (100%) create mode 100644 python/ql/test/query-tests/Security/CWE-611-Xxe/Xxe.qlref rename python/ql/test/{experimental => }/query-tests/Security/CWE-611-Xxe/test.py (100%) rename python/ql/test/{experimental => }/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected (100%) create mode 100644 python/ql/test/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref rename python/ql/test/{experimental => }/query-tests/Security/CWE-776-XmlBomb/test.py (100%) diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp b/python/ql/src/Security/CWE-611/Xxe.qhelp similarity index 100% rename from python/ql/src/experimental/Security/NEW/CWE-611/Xxe.qhelp rename to python/ql/src/Security/CWE-611/Xxe.qhelp diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/Xxe.ql b/python/ql/src/Security/CWE-611/Xxe.ql similarity index 100% rename from python/ql/src/experimental/Security/NEW/CWE-611/Xxe.ql rename to python/ql/src/Security/CWE-611/Xxe.ql diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeBad.py b/python/ql/src/Security/CWE-611/examples/XxeBad.py similarity index 100% rename from python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeBad.py rename to python/ql/src/Security/CWE-611/examples/XxeBad.py diff --git a/python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.py b/python/ql/src/Security/CWE-611/examples/XxeGood.py similarity index 100% rename from python/ql/src/experimental/Security/NEW/CWE-611/examples/XxeGood.py rename to python/ql/src/Security/CWE-611/examples/XxeGood.py diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.qhelp b/python/ql/src/Security/CWE-776/XmlBomb.qhelp similarity index 100% rename from python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.qhelp rename to python/ql/src/Security/CWE-776/XmlBomb.qhelp diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.ql b/python/ql/src/Security/CWE-776/XmlBomb.ql similarity index 100% rename from python/ql/src/experimental/Security/NEW/CWE-776/XmlBomb.ql rename to python/ql/src/Security/CWE-776/XmlBomb.ql diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombBad.py b/python/ql/src/Security/CWE-776/examples/XmlBombBad.py similarity index 100% rename from python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombBad.py rename to python/ql/src/Security/CWE-776/examples/XmlBombBad.py diff --git a/python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.py b/python/ql/src/Security/CWE-776/examples/XmlBombGood.py similarity index 100% rename from python/ql/src/experimental/Security/NEW/CWE-776/examples/XmlBombGood.py rename to python/ql/src/Security/CWE-776/examples/XmlBombGood.py diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.qlref b/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.qlref deleted file mode 100644 index f8a07d7d2ee..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/NEW/CWE-611/Xxe.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref b/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref deleted file mode 100644 index 5eadbb1f26f..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/NEW/CWE-776/XmlBomb.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.expected b/python/ql/test/query-tests/Security/CWE-611-Xxe/Xxe.expected similarity index 100% rename from python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/Xxe.expected rename to python/ql/test/query-tests/Security/CWE-611-Xxe/Xxe.expected diff --git a/python/ql/test/query-tests/Security/CWE-611-Xxe/Xxe.qlref b/python/ql/test/query-tests/Security/CWE-611-Xxe/Xxe.qlref new file mode 100644 index 00000000000..62a3f7f22d9 --- /dev/null +++ b/python/ql/test/query-tests/Security/CWE-611-Xxe/Xxe.qlref @@ -0,0 +1 @@ +Security/CWE-611/Xxe.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/test.py b/python/ql/test/query-tests/Security/CWE-611-Xxe/test.py similarity index 100% rename from python/ql/test/experimental/query-tests/Security/CWE-611-Xxe/test.py rename to python/ql/test/query-tests/Security/CWE-611-Xxe/test.py diff --git a/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected b/python/ql/test/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected similarity index 100% rename from python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected rename to python/ql/test/query-tests/Security/CWE-776-XmlBomb/XmlBomb.expected diff --git a/python/ql/test/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref b/python/ql/test/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref new file mode 100644 index 00000000000..c983b357446 --- /dev/null +++ b/python/ql/test/query-tests/Security/CWE-776-XmlBomb/XmlBomb.qlref @@ -0,0 +1 @@ +Security/CWE-776/XmlBomb.ql diff --git a/python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/test.py b/python/ql/test/query-tests/Security/CWE-776-XmlBomb/test.py similarity index 100% rename from python/ql/test/experimental/query-tests/Security/CWE-776-XmlBomb/test.py rename to python/ql/test/query-tests/Security/CWE-776-XmlBomb/test.py From d2b03bb4809b1156d1d0799ca739da4265c68ba7 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 31 Mar 2022 20:37:28 +0200 Subject: [PATCH 0120/1618] Python: Fix `SimpleXmlRpcServer.ql` --- .../src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql b/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql index 3d2a736ed49..53ff6eeedb8 100644 --- a/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql +++ b/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql @@ -10,14 +10,14 @@ */ private import python -private import experimental.semmle.python.Concepts +private import semmle.python.Concepts private import semmle.python.ApiGraphs from DataFlow::CallCfgNode call, string kinds where call = API::moduleImport("xmlrpc").getMember("server").getMember("SimpleXMLRPCServer").getACall() and kinds = - strictconcat(ExperimentalXML::XMLParsingVulnerabilityKind kind | + strictconcat(XML::XMLParsingVulnerabilityKind kind | kind.isBillionLaughs() or kind.isQuadraticBlowup() | kind, ", " From 61860c9ae9aa5f2ace564479777f9e9013049bcd Mon Sep 17 00:00:00 2001 From: ihsinme Date: Sat, 2 Apr 2022 13:44:40 +0300 Subject: [PATCH 0121/1618] Update DangerousUseOfExceptionBlocks.ql --- .../CWE-476/DangerousUseOfExceptionBlocks.ql | 68 +++++++------------ 1 file changed, 25 insertions(+), 43 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql index 08ce7302238..1ab1230f35b 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql @@ -15,7 +15,7 @@ import cpp /** Holds if `vr` may be released in the `try` block associated with `cb`, or in a `catch` block prior to `cb`. */ pragma[inline] -predicate doubleCallDelete(CatchAnyBlock cb, Variable vr) { +predicate doubleCallDelete(BlockStmt b, CatchAnyBlock cb, Variable vr) { // Search for exceptions after freeing memory. exists(Expr e1 | // `e1` is a delete of `vr` @@ -24,50 +24,32 @@ predicate doubleCallDelete(CatchAnyBlock cb, Variable vr) { e1 = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(DeleteExpr) ) and e1.getEnclosingFunction() = cb.getEnclosingFunction() and - ( - // `e1` occurs in the `try` block associated with `cb` - e1.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and - // `e2` is a `throw` (or a function call that may throw) that occurs in the `try` block after `e1` - exists(Expr e2, ThrowExpr th | - ( - e2 = th or - e2 = th.getEnclosingFunction().getACallToThisFunction() - ) and - e2.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and - e1.getASuccessor+() = e2 + // there is no assignment `vr = 0` in the `try` block after `e1` + not exists(AssignExpr ae | + ae.getLValue().(VariableAccess).getTarget() = vr and + ae.getRValue().getValue() = "0" and + e1.getASuccessor+() = ae and + ae.getEnclosingStmt().getParentStmt*() = b + ) and + // `e2` is a `throw` (or a function call that may throw) that occurs in the `try` or `catch` block after `e1` + exists(Expr e2, ThrowExpr th | + ( + e2 = th or + e2 = th.getEnclosingFunction().getACallToThisFunction() ) and - // there is no assignment `vr = 0` in the `try` block after `e1` - not exists(AssignExpr ae | - ae.getLValue().(VariableAccess).getTarget() = vr and - ae.getRValue().getValue() = "0" and - e1.getASuccessor+() = ae and - ae.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() - ) + e2.getEnclosingStmt().getParentStmt*() = b and + e1.getASuccessor+() = e2 + ) and + e1.getEnclosingStmt().getParentStmt*() = b and + ( + // Search for a situation where there is a release in the block of `try`. + b = cb.getTryStmt().getStmt() or // Search for a situation when there is a higher catch block that also frees memory. - exists(CatchBlock cbt, Expr e2, ThrowExpr th | - e1.getEnclosingStmt().getParentStmt*() = cbt and - exists(cbt.getParameter()) and - // `e2` is a `throw` (or a function call that may throw) that occurs in the `catch` block after `e1` - ( - e2 = th or - e2 = th.getEnclosingFunction().getACallToThisFunction() - ) and - e2.getEnclosingStmt().getParentStmt*() = cbt and - e1.getASuccessor+() = e2 and - // there is no assignment `vr = 0` in the `catch` block after `e1` - not exists(AssignExpr ae | - ae.getLValue().(VariableAccess).getTarget() = vr and - ae.getRValue().getValue() = "0" and - e1.getASuccessor+() = ae and - ae.getEnclosingStmt().getParentStmt*() = cbt - ) - ) + exists(b.(CatchBlock).getParameter()) ) and // Exclude the presence of a check in catch block. - not exists(IfStmt ifst | - ifst.getEnclosingStmt().getParentStmt*() = cb.getAStmt() - ) + not exists(IfStmt ifst | ifst.getEnclosingStmt().getParentStmt*() = cb.getAStmt()) ) } @@ -166,9 +148,9 @@ where exp.(DeleteArrayExpr).getEnclosingStmt().getParentStmt*() = cb and vr = exp.(DeleteArrayExpr).getExpr().(VariableAccess).getTarget() ) and - doubleCallDelete(cb, vr) and + doubleCallDelete(_, cb, vr) and msg = - "This allocation may have been released in the try block or a previous catch block." - + vr.getName() + "This allocation may have been released in the try block or a previous catch block." + + vr.getName() ) select cb, msg From 73de757f396ec82350fa546056d6f88dba1ffeb6 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Mon, 4 Apr 2022 21:38:03 +0300 Subject: [PATCH 0122/1618] Update DangerousUseOfExceptionBlocks.ql --- .../Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql index 1ab1230f35b..f2a27877988 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql @@ -69,6 +69,7 @@ predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { vro = ase.getLValue().(VariableAccess).getTarget() ) or + // `e0` is a `new` expression (or equivalent function call) assigned to the array element `vro` exists(AssignExpr ase | ase = vro.getAnAccess().(Qualifier).getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and ( From ab59d5c786893d71dc044107af0517e56b460171 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 5 Apr 2022 11:06:22 +0200 Subject: [PATCH 0123/1618] Python: Rename to `XmlParsing` To follow our style guide --- python/ql/lib/semmle/python/Concepts.qll | 8 ++++---- python/ql/lib/semmle/python/frameworks/Lxml.qll | 6 +++--- python/ql/lib/semmle/python/frameworks/Stdlib.qll | 10 +++++----- python/ql/lib/semmle/python/frameworks/Xmltodict.qll | 2 +- .../python/security/dataflow/XmlBombCustomizations.qll | 2 +- .../python/security/dataflow/XxeCustomizations.qll | 2 +- python/ql/test/experimental/meta/ConceptsTest.qll | 2 +- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index b1727e4829d..b0a5e1766a2 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -580,9 +580,9 @@ module XML { * A data-flow node that parses XML. * * Extend this class to model new APIs. If you want to refine existing API models, - * extend `XMLParsing` instead. + * extend `XmlParsing` instead. */ - class XMLParsing extends Decoding instanceof XMLParsing::Range { + class XmlParsing extends Decoding instanceof XmlParsing::Range { /** * Holds if this XML parsing is vulnerable to `kind`. */ @@ -590,12 +590,12 @@ module XML { } /** Provides classes for modeling XML parsing APIs. */ - module XMLParsing { + module XmlParsing { /** * A data-flow node that parses XML. * * Extend this class to model new APIs. If you want to refine existing API models, - * extend `XMLParsing` instead. + * extend `XmlParsing` instead. */ abstract class Range extends Decoding::Range { /** diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index a3825a70db0..05dfd388dac 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -196,7 +196,7 @@ private module Lxml { /** * A call to the `feed` method of an `lxml` parser. */ - private class LXMLParserFeedCall extends DataFlow::MethodCallNode, XML::XMLParsing::Range { + private class LXMLParserFeedCall extends DataFlow::MethodCallNode, XML::XmlParsing::Range { LXMLParserFeedCall() { this.calls(instance(_), "feed") } override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } @@ -233,7 +233,7 @@ private module Lxml { * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parse * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parseid */ - private class LXMLParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { + private class LXMLParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { LXMLParsing() { this = API::moduleImport("lxml") @@ -305,7 +305,7 @@ private module Lxml { * See * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.iterparse */ - private class LXMLIterparseCall extends DataFlow::CallCfgNode, XML::XMLParsing::Range, + private class LXMLIterparseCall extends DataFlow::CallCfgNode, XML::XmlParsing::Range, FileSystemAccess::Range { LXMLIterparseCall() { this = API::moduleImport("lxml").getMember("etree").getMember("iterparse").getACall() diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 38fe32a3b3c..e45e8e3a879 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3236,7 +3236,7 @@ private module StdlibPrivate { /** * A call to the `feed` method of an `xml.etree` parser. */ - private class XMLEtreeParserFeedCall extends DataFlow::MethodCallNode, XML::XMLParsing::Range { + private class XMLEtreeParserFeedCall extends DataFlow::MethodCallNode, XML::XmlParsing::Range { XMLEtreeParserFeedCall() { this.calls(instance(), "feed") } override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } @@ -3274,7 +3274,7 @@ private module StdlibPrivate { * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.parse * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.iterparse */ - private class XMLEtreeParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { + private class XMLEtreeParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { XMLEtreeParsing() { this = API::moduleImport("xml") @@ -3445,7 +3445,7 @@ private module StdlibPrivate { * * See https://docs.python.org/3/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.parse */ - private class XMLSaxInstanceParsing extends DataFlow::MethodCallNode, XML::XMLParsing::Range, + private class XMLSaxInstanceParsing extends DataFlow::MethodCallNode, XML::XmlParsing::Range, FileSystemAccess::Range { XMLSaxInstanceParsing() { this = @@ -3496,7 +3496,7 @@ private module StdlibPrivate { * - https://docs.python.org/3.10/library/xml.sax.html#xml.sax.parse * - https://docs.python.org/3.10/library/xml.sax.html#xml.sax.parseString */ - private class XMLSaxParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { + private class XMLSaxParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { XMLSaxParsing() { this = API::moduleImport("xml").getMember("sax").getMember(["parse", "parseString"]).getACall() @@ -3562,7 +3562,7 @@ private module StdlibPrivate { * - https://docs.python.org/3/library/xml.dom.minidom.html#xml.dom.minidom.parse * - https://docs.python.org/3/library/xml.dom.pulldom.html#xml.dom.pulldom.parse */ - private class XMLDomParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { + private class XMLDomParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { XMLDomParsing() { this = API::moduleImport("xml") diff --git a/python/ql/lib/semmle/python/frameworks/Xmltodict.qll b/python/ql/lib/semmle/python/frameworks/Xmltodict.qll index bb65607251f..84b0b0fe03f 100644 --- a/python/ql/lib/semmle/python/frameworks/Xmltodict.qll +++ b/python/ql/lib/semmle/python/frameworks/Xmltodict.qll @@ -20,7 +20,7 @@ private module Xmltodict { /** * A call to `xmltodict.parse`. */ - private class XMLtoDictParsing extends DataFlow::CallCfgNode, XML::XMLParsing::Range { + private class XMLtoDictParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { XMLtoDictParsing() { this = API::moduleImport("xmltodict").getMember("parse").getACall() } override DataFlow::Node getAnInput() { diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll index d6f2e0791f9..5da602173a1 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll @@ -40,7 +40,7 @@ module XmlBomb { */ class XmlParsingWithEntityResolution extends Sink { XmlParsingWithEntityResolution() { - exists(XML::XMLParsing parsing, XML::XMLParsingVulnerabilityKind kind | + exists(XML::XmlParsing parsing, XML::XMLParsingVulnerabilityKind kind | (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and parsing.vulnerableTo(kind) and this = parsing.getAnInput() diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll index a4473285b8d..355b3aeefc9 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll @@ -40,7 +40,7 @@ module Xxe { */ class XmlParsingWithExternalEntityResolution extends Sink { XmlParsingWithExternalEntityResolution() { - exists(XML::XMLParsing parsing, XML::XMLParsingVulnerabilityKind kind | + exists(XML::XmlParsing parsing, XML::XMLParsingVulnerabilityKind kind | kind.isXxe() and parsing.vulnerableTo(kind) and this = parsing.getAnInput() diff --git a/python/ql/test/experimental/meta/ConceptsTest.qll b/python/ql/test/experimental/meta/ConceptsTest.qll index cd90d716dd4..24c3c270413 100644 --- a/python/ql/test/experimental/meta/ConceptsTest.qll +++ b/python/ql/test/experimental/meta/ConceptsTest.qll @@ -547,7 +547,7 @@ class XmlParsingTest extends InlineExpectationsTest { override predicate hasActualResult(Location location, string element, string tag, string value) { exists(location.getFile().getRelativePath()) and - exists(XML::XMLParsing parsing, XML::XMLParsingVulnerabilityKind kind | + exists(XML::XmlParsing parsing, XML::XMLParsingVulnerabilityKind kind | parsing.vulnerableTo(kind) and location = parsing.getLocation() and element = parsing.toString() and From 1f285b8983c15e31b08886aa4080f4fad3c8b42b Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 5 Apr 2022 11:07:12 +0200 Subject: [PATCH 0124/1618] Python: Rename to `XmlParsingVulnerabilityKind` To keep up with style guide --- python/ql/lib/semmle/python/Concepts.qll | 8 ++++---- python/ql/lib/semmle/python/frameworks/Lxml.qll | 14 +++++++------- python/ql/lib/semmle/python/frameworks/Stdlib.qll | 10 +++++----- .../ql/lib/semmle/python/frameworks/Xmltodict.qll | 2 +- .../Security/CWE-611/SimpleXmlRpcServer.ql | 2 +- .../security/dataflow/XmlBombCustomizations.qll | 2 +- .../python/security/dataflow/XxeCustomizations.qll | 2 +- python/ql/test/experimental/meta/ConceptsTest.qll | 2 +- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index b0a5e1766a2..091ce31a157 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -558,8 +558,8 @@ module XML { * * See PoC at `python/PoCs/XmlParsing/PoC.py` for some tests of vulnerable XML parsing. */ - class XMLParsingVulnerabilityKind extends string { - XMLParsingVulnerabilityKind() { + class XmlParsingVulnerabilityKind extends string { + XmlParsingVulnerabilityKind() { this in ["Billion Laughs", "Quadratic Blowup", "XXE", "DTD retrieval"] } @@ -586,7 +586,7 @@ module XML { /** * Holds if this XML parsing is vulnerable to `kind`. */ - predicate vulnerableTo(XMLParsingVulnerabilityKind kind) { super.vulnerableTo(kind) } + predicate vulnerableTo(XmlParsingVulnerabilityKind kind) { super.vulnerableTo(kind) } } /** Provides classes for modeling XML parsing APIs. */ @@ -601,7 +601,7 @@ module XML { /** * Holds if this XML parsing is vulnerable to `kind`. */ - abstract predicate vulnerableTo(XMLParsingVulnerabilityKind kind); + abstract predicate vulnerableTo(XmlParsingVulnerabilityKind kind); override string getFormat() { result = "XML" } } diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index 05dfd388dac..6d310563ade 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -121,7 +121,7 @@ private module Lxml { */ abstract class InstanceSource extends DataFlow::LocalSourceNode { /** Holds if this instance is vulnerable to `kind`. */ - abstract predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind); + abstract predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind); } /** @@ -135,7 +135,7 @@ private module Lxml { } // NOTE: it's not possible to change settings of a parser after constructing it - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { kind.isXxe() and ( // resolve_entities has default True @@ -165,7 +165,7 @@ private module Lxml { API::moduleImport("lxml").getMember("etree").getMember("get_default_parser").getACall() } - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { // as highlighted by // https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.XMLParser // by default XXE is allow. so as long as the default parser has not been @@ -189,7 +189,7 @@ private module Lxml { } /** Gets a reference to an `lxml.etree` parser instance, that is vulnerable to `kind`. */ - DataFlow::Node instanceVulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + DataFlow::Node instanceVulnerableTo(XML::XmlParsingVulnerabilityKind kind) { exists(InstanceSource origin | result = instance(origin) and origin.vulnerableTo(kind)) } @@ -201,7 +201,7 @@ private module Lxml { override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { this.calls(instanceVulnerableTo(kind), "feed") } @@ -256,7 +256,7 @@ private module Lxml { DataFlow::Node getParserArg() { result in [this.getArg(1), this.getArgByName("parser")] } - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { this.getParserArg() = XMLParser::instanceVulnerableTo(kind) or kind.isXxe() and @@ -313,7 +313,7 @@ private module Lxml { override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("source")] } - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { // note that there is no `resolve_entities` argument, so it's not possible to turn off XXE :O kind.isXxe() or diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index e45e8e3a879..91ba7bc75b5 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3241,7 +3241,7 @@ private module StdlibPrivate { override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { kind.isBillionLaughs() or kind.isQuadraticBlowup() } @@ -3298,7 +3298,7 @@ private module StdlibPrivate { ] } - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { // note: it does not matter what `xml.etree` parser you are using, you cannot // change the security features anyway :| kind.isBillionLaughs() or kind.isQuadraticBlowup() @@ -3459,7 +3459,7 @@ private module StdlibPrivate { override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("source")] } - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { // always vuln to these (kind.isBillionLaughs() or kind.isQuadraticBlowup()) or @@ -3512,7 +3512,7 @@ private module StdlibPrivate { ] } - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { // always vuln to these (kind.isBillionLaughs() or kind.isQuadraticBlowup()) } @@ -3586,7 +3586,7 @@ private module StdlibPrivate { DataFlow::Node getParserArg() { result in [this.getArg(1), this.getArgByName("parser")] } - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { this.getParserArg() = saxParserWithFeatureExternalGesTurnedOn() and (kind.isXxe() or kind.isDtdRetrieval()) or diff --git a/python/ql/lib/semmle/python/frameworks/Xmltodict.qll b/python/ql/lib/semmle/python/frameworks/Xmltodict.qll index 84b0b0fe03f..db2c443d8e9 100644 --- a/python/ql/lib/semmle/python/frameworks/Xmltodict.qll +++ b/python/ql/lib/semmle/python/frameworks/Xmltodict.qll @@ -27,7 +27,7 @@ private module Xmltodict { result in [this.getArg(0), this.getArgByName("xml_input")] } - override predicate vulnerableTo(XML::XMLParsingVulnerabilityKind kind) { + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and this.getArgByName("disable_entities").getALocalSource().asExpr() = any(False f) } diff --git a/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql b/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql index 53ff6eeedb8..e638c13853f 100644 --- a/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql +++ b/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql @@ -17,7 +17,7 @@ from DataFlow::CallCfgNode call, string kinds where call = API::moduleImport("xmlrpc").getMember("server").getMember("SimpleXMLRPCServer").getACall() and kinds = - strictconcat(XML::XMLParsingVulnerabilityKind kind | + strictconcat(XML::XmlParsingVulnerabilityKind kind | kind.isBillionLaughs() or kind.isQuadraticBlowup() | kind, ", " diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll index 5da602173a1..05f6fc57a34 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll @@ -40,7 +40,7 @@ module XmlBomb { */ class XmlParsingWithEntityResolution extends Sink { XmlParsingWithEntityResolution() { - exists(XML::XmlParsing parsing, XML::XMLParsingVulnerabilityKind kind | + exists(XML::XmlParsing parsing, XML::XmlParsingVulnerabilityKind kind | (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and parsing.vulnerableTo(kind) and this = parsing.getAnInput() diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll index 355b3aeefc9..0fc139ec4f3 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll @@ -40,7 +40,7 @@ module Xxe { */ class XmlParsingWithExternalEntityResolution extends Sink { XmlParsingWithExternalEntityResolution() { - exists(XML::XmlParsing parsing, XML::XMLParsingVulnerabilityKind kind | + exists(XML::XmlParsing parsing, XML::XmlParsingVulnerabilityKind kind | kind.isXxe() and parsing.vulnerableTo(kind) and this = parsing.getAnInput() diff --git a/python/ql/test/experimental/meta/ConceptsTest.qll b/python/ql/test/experimental/meta/ConceptsTest.qll index 24c3c270413..73bcf8b4aa9 100644 --- a/python/ql/test/experimental/meta/ConceptsTest.qll +++ b/python/ql/test/experimental/meta/ConceptsTest.qll @@ -547,7 +547,7 @@ class XmlParsingTest extends InlineExpectationsTest { override predicate hasActualResult(Location location, string element, string tag, string value) { exists(location.getFile().getRelativePath()) and - exists(XML::XmlParsing parsing, XML::XMLParsingVulnerabilityKind kind | + exists(XML::XmlParsing parsing, XML::XmlParsingVulnerabilityKind kind | parsing.vulnerableTo(kind) and location = parsing.getLocation() and element = parsing.toString() and From a7dab53ed2df129e7bdab97cd04f73b9b133574b Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 5 Apr 2022 11:46:49 +0200 Subject: [PATCH 0125/1618] Python: Add change-note --- python/ql/src/change-notes/2022-04-05-add-xxe-and-xmlbomb.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/src/change-notes/2022-04-05-add-xxe-and-xmlbomb.md diff --git a/python/ql/src/change-notes/2022-04-05-add-xxe-and-xmlbomb.md b/python/ql/src/change-notes/2022-04-05-add-xxe-and-xmlbomb.md new file mode 100644 index 00000000000..bd867091aea --- /dev/null +++ b/python/ql/src/change-notes/2022-04-05-add-xxe-and-xmlbomb.md @@ -0,0 +1,5 @@ +--- +category: newQuery +--- +* "XML external entity expansion" (`py/xxe`). Results will appear by default. This query was based on [an experimental query by @jorgectf](https://github.com/github/codeql/pull/6112). +* "XML internal entity expansion" (`py/xml-bomb`). Results will appear by default. This query was based on [an experimental query by @jorgectf](https://github.com/github/codeql/pull/6112). From b7f56dd17e982ddace861a561ba851e8e7cf7e5c Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 5 Apr 2022 12:31:09 +0200 Subject: [PATCH 0126/1618] Python: Rewrite concepts to use `extends ... instanceof ...` This caused compilation time for `ConceptsTest.ql` to go from 1m24s to 7s --- python/ql/lib/semmle/python/Concepts.qll | 241 ++++++++--------------- 1 file changed, 77 insertions(+), 164 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index 091ce31a157..eec0cd0d1a0 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -17,13 +17,9 @@ private import semmle.python.Frameworks * Extend this class to refine existing API models. If you want to model new APIs, * extend `SystemCommandExecution::Range` instead. */ -class SystemCommandExecution extends DataFlow::Node { - SystemCommandExecution::Range range; - - SystemCommandExecution() { this = range } - +class SystemCommandExecution extends DataFlow::Node instanceof SystemCommandExecution::Range { /** Gets the argument that specifies the command to be executed. */ - DataFlow::Node getCommand() { result = range.getCommand() } + DataFlow::Node getCommand() { result = super.getCommand() } } /** Provides a class for modeling new system-command execution APIs. */ @@ -48,13 +44,9 @@ module SystemCommandExecution { * Extend this class to refine existing API models. If you want to model new APIs, * extend `FileSystemAccess::Range` instead. */ -class FileSystemAccess extends DataFlow::Node { - FileSystemAccess::Range range; - - FileSystemAccess() { this = range } - +class FileSystemAccess extends DataFlow::Node instanceof FileSystemAccess::Range { /** Gets an argument to this file system access that is interpreted as a path. */ - DataFlow::Node getAPathArgument() { result = range.getAPathArgument() } + DataFlow::Node getAPathArgument() { result = super.getAPathArgument() } } /** Provides a class for modeling new file system access APIs. */ @@ -78,14 +70,12 @@ module FileSystemAccess { * Extend this class to refine existing API models. If you want to model new APIs, * extend `FileSystemWriteAccess::Range` instead. */ -class FileSystemWriteAccess extends FileSystemAccess { - override FileSystemWriteAccess::Range range; - +class FileSystemWriteAccess extends FileSystemAccess instanceof FileSystemWriteAccess::Range { /** * Gets a node that represents data to be written to the file system (possibly with * some transformation happening before it is written, like JSON encoding). */ - DataFlow::Node getADataNode() { result = range.getADataNode() } + DataFlow::Node getADataNode() { result = super.getADataNode() } } /** Provides a class for modeling new file system writes. */ @@ -111,13 +101,9 @@ module Path { * A data-flow node that performs path normalization. This is often needed in order * to safely access paths. */ - class PathNormalization extends DataFlow::Node { - PathNormalization::Range range; - - PathNormalization() { this = range } - + class PathNormalization extends DataFlow::Node instanceof PathNormalization::Range { /** Gets an argument to this path normalization that is interpreted as a path. */ - DataFlow::Node getPathArg() { result = range.getPathArg() } + DataFlow::Node getPathArg() { result = super.getPathArg() } } /** Provides a class for modeling new path normalization APIs. */ @@ -133,12 +119,10 @@ module Path { } /** A data-flow node that checks that a path is safe to access. */ - class SafeAccessCheck extends DataFlow::BarrierGuard { - SafeAccessCheck::Range range; - - SafeAccessCheck() { this = range } - - override predicate checks(ControlFlowNode node, boolean branch) { range.checks(node, branch) } + class SafeAccessCheck extends DataFlow::BarrierGuard instanceof SafeAccessCheck::Range { + override predicate checks(ControlFlowNode node, boolean branch) { + SafeAccessCheck::Range.super.checks(node, branch) + } } /** Provides a class for modeling new path safety checks. */ @@ -160,22 +144,18 @@ module Path { * Extend this class to refine existing API models. If you want to model new APIs, * extend `Decoding::Range` instead. */ -class Decoding extends DataFlow::Node { - Decoding::Range range; - - Decoding() { this = range } - +class Decoding extends DataFlow::Node instanceof Decoding::Range { /** Holds if this call may execute code embedded in its input. */ - predicate mayExecuteInput() { range.mayExecuteInput() } + predicate mayExecuteInput() { super.mayExecuteInput() } /** Gets an input that is decoded by this function. */ - DataFlow::Node getAnInput() { result = range.getAnInput() } + DataFlow::Node getAnInput() { result = super.getAnInput() } /** Gets the output that contains the decoded data produced by this function. */ - DataFlow::Node getOutput() { result = range.getOutput() } + DataFlow::Node getOutput() { result = super.getOutput() } /** Gets an identifier for the format this function decodes from, such as "JSON". */ - string getFormat() { result = range.getFormat() } + string getFormat() { result = super.getFormat() } } /** Provides a class for modeling new decoding mechanisms. */ @@ -226,19 +206,15 @@ private class DecodingAdditionalTaintStep extends TaintTracking::AdditionalTaint * Extend this class to refine existing API models. If you want to model new APIs, * extend `Encoding::Range` instead. */ -class Encoding extends DataFlow::Node { - Encoding::Range range; - - Encoding() { this = range } - +class Encoding extends DataFlow::Node instanceof Encoding::Range { /** Gets an input that is encoded by this function. */ - DataFlow::Node getAnInput() { result = range.getAnInput() } + DataFlow::Node getAnInput() { result = super.getAnInput() } /** Gets the output that contains the encoded data produced by this function. */ - DataFlow::Node getOutput() { result = range.getOutput() } + DataFlow::Node getOutput() { result = super.getOutput() } /** Gets an identifier for the format this function decodes from, such as "JSON". */ - string getFormat() { result = range.getFormat() } + string getFormat() { result = super.getFormat() } } /** Provides a class for modeling new encoding mechanisms. */ @@ -280,13 +256,9 @@ private class EncodingAdditionalTaintStep extends TaintTracking::AdditionalTaint * Extend this class to refine existing API models. If you want to model new APIs, * extend `Logging::Range` instead. */ -class Logging extends DataFlow::Node { - Logging::Range range; - - Logging() { this = range } - +class Logging extends DataFlow::Node instanceof Logging::Range { /** Gets an input that is logged. */ - DataFlow::Node getAnInput() { result = range.getAnInput() } + DataFlow::Node getAnInput() { result = super.getAnInput() } } /** Provides a class for modeling new logging mechanisms. */ @@ -309,13 +281,9 @@ module Logging { * Extend this class to refine existing API models. If you want to model new APIs, * extend `CodeExecution::Range` instead. */ -class CodeExecution extends DataFlow::Node { - CodeExecution::Range range; - - CodeExecution() { this = range } - +class CodeExecution extends DataFlow::Node instanceof CodeExecution::Range { /** Gets the argument that specifies the code to be executed. */ - DataFlow::Node getCode() { result = range.getCode() } + DataFlow::Node getCode() { result = super.getCode() } } /** Provides a class for modeling new dynamic code execution APIs. */ @@ -343,13 +311,9 @@ module CodeExecution { * Extend this class to refine existing API models. If you want to model new APIs, * extend `SqlConstruction::Range` instead. */ -class SqlConstruction extends DataFlow::Node { - SqlConstruction::Range range; - - SqlConstruction() { this = range } - +class SqlConstruction extends DataFlow::Node instanceof SqlConstruction::Range { /** Gets the argument that specifies the SQL statements to be constructed. */ - DataFlow::Node getSql() { result = range.getSql() } + DataFlow::Node getSql() { result = super.getSql() } } /** Provides a class for modeling new SQL execution APIs. */ @@ -380,13 +344,9 @@ module SqlConstruction { * Extend this class to refine existing API models. If you want to model new APIs, * extend `SqlExecution::Range` instead. */ -class SqlExecution extends DataFlow::Node { - SqlExecution::Range range; - - SqlExecution() { this = range } - +class SqlExecution extends DataFlow::Node instanceof SqlExecution::Range { /** Gets the argument that specifies the SQL statements to be executed. */ - DataFlow::Node getSql() { result = range.getSql() } + DataFlow::Node getSql() { result = super.getSql() } } /** Provides a class for modeling new SQL execution APIs. */ @@ -412,22 +372,18 @@ module SqlExecution { * Extend this class to refine existing API models. If you want to model new APIs, * extend `RegexExecution::Range` instead. */ -class RegexExecution extends DataFlow::Node { - RegexExecution::Range range; - - RegexExecution() { this = range } - +class RegexExecution extends DataFlow::Node instanceof RegexExecution::Range { /** Gets the data flow node for the regex being executed by this node. */ - DataFlow::Node getRegex() { result = range.getRegex() } + DataFlow::Node getRegex() { result = super.getRegex() } /** Gets a dataflow node for the string to be searched or matched against. */ - DataFlow::Node getString() { result = range.getString() } + DataFlow::Node getString() { result = super.getString() } /** * Gets the name of this regex execution, typically the name of an executing method. * This is used for nice alert messages and should include the module if possible. */ - string getName() { result = range.getName() } + string getName() { result = super.getName() } } /** Provides classes for modeling new regular-expression execution APIs. */ @@ -466,19 +422,15 @@ module XML { * Extend this class to refine existing API models. If you want to model new APIs, * extend `XPathConstruction::Range` instead. */ - class XPathConstruction extends DataFlow::Node { - XPathConstruction::Range range; - - XPathConstruction() { this = range } - + class XPathConstruction extends DataFlow::Node instanceof XPathConstruction::Range { /** Gets the argument that specifies the XPath expressions to be constructed. */ - DataFlow::Node getXPath() { result = range.getXPath() } + DataFlow::Node getXPath() { result = super.getXPath() } /** * Gets the name of this XPath expression construction, typically the name of an executing method. * This is used for nice alert messages and should include the module if possible. */ - string getName() { result = range.getName() } + string getName() { result = super.getName() } } /** Provides a class for modeling new XPath construction APIs. */ @@ -513,19 +465,15 @@ module XML { * Extend this class to refine existing API models. If you want to model new APIs, * extend `XPathExecution::Range` instead. */ - class XPathExecution extends DataFlow::Node { - XPathExecution::Range range; - - XPathExecution() { this = range } - + class XPathExecution extends DataFlow::Node instanceof XPathExecution::Range { /** Gets the data flow node for the XPath expression being executed by this node. */ - DataFlow::Node getXPath() { result = range.getXPath() } + DataFlow::Node getXPath() { result = super.getXPath() } /** * Gets the name of this XPath expression execution, typically the name of an executing method. * This is used for nice alert messages and should include the module if possible. */ - string getName() { result = range.getName() } + string getName() { result = super.getName() } } /** Provides classes for modeling new regular-expression execution APIs. */ @@ -616,16 +564,12 @@ module LDAP { * Extend this class to refine existing API models. If you want to model new APIs, * extend `LDAPQuery::Range` instead. */ - class LdapExecution extends DataFlow::Node { - LdapExecution::Range range; - - LdapExecution() { this = range } - + class LdapExecution extends DataFlow::Node instanceof LdapExecution::Range { /** Gets the argument containing the filter string. */ - DataFlow::Node getFilter() { result = range.getFilter() } + DataFlow::Node getFilter() { result = super.getFilter() } /** Gets the argument containing the base DN. */ - DataFlow::Node getBaseDn() { result = range.getBaseDn() } + DataFlow::Node getBaseDn() { result = super.getBaseDn() } } /** Provides classes for modeling new LDAP query execution-related APIs. */ @@ -653,26 +597,23 @@ module LDAP { * Extend this class to refine existing API models. If you want to model new APIs, * extend `Escaping::Range` instead. */ -class Escaping extends DataFlow::Node { - Escaping::Range range; - +class Escaping extends DataFlow::Node instanceof Escaping::Range { Escaping() { - this = range and // escapes that don't have _both_ input/output defined are not valid - exists(range.getAnInput()) and - exists(range.getOutput()) + exists(super.getAnInput()) and + exists(super.getOutput()) } /** Gets an input that will be escaped. */ - DataFlow::Node getAnInput() { result = range.getAnInput() } + DataFlow::Node getAnInput() { result = super.getAnInput() } /** Gets the output that contains the escaped data. */ - DataFlow::Node getOutput() { result = range.getOutput() } + DataFlow::Node getOutput() { result = super.getOutput() } /** * Gets the context that this function escapes for, such as `html`, or `url`. */ - string getKind() { result = range.getKind() } + string getKind() { result = super.getKind() } } /** Provides a class for modeling new escaping APIs. */ @@ -730,7 +671,7 @@ module Escaping { * `

    {}

    `. */ class HtmlEscaping extends Escaping { - HtmlEscaping() { range.getKind() = Escaping::getHtmlKind() } + HtmlEscaping() { super.getKind() = Escaping::getHtmlKind() } } /** @@ -738,7 +679,7 @@ class HtmlEscaping extends Escaping { * the body of a regex. */ class RegexEscaping extends Escaping { - RegexEscaping() { range.getKind() = Escaping::getRegexKind() } + RegexEscaping() { super.getKind() = Escaping::getRegexKind() } } /** @@ -746,14 +687,14 @@ class RegexEscaping extends Escaping { * in an LDAP search. */ class LdapDnEscaping extends Escaping { - LdapDnEscaping() { range.getKind() = Escaping::getLdapDnKind() } + LdapDnEscaping() { super.getKind() = Escaping::getLdapDnKind() } } /** * An escape of a string so it can be safely used as a filter in an LDAP search. */ class LdapFilterEscaping extends Escaping { - LdapFilterEscaping() { range.getKind() = Escaping::getLdapFilterKind() } + LdapFilterEscaping() { super.getKind() = Escaping::getLdapFilterKind() } } /** Provides classes for modeling HTTP-related APIs. */ @@ -772,29 +713,25 @@ module HTTP { * Extend this class to refine existing API models. If you want to model new APIs, * extend `RouteSetup::Range` instead. */ - class RouteSetup extends DataFlow::Node { - RouteSetup::Range range; - - RouteSetup() { this = range } - + class RouteSetup extends DataFlow::Node instanceof RouteSetup::Range { /** Gets the URL pattern for this route, if it can be statically determined. */ - string getUrlPattern() { result = range.getUrlPattern() } + string getUrlPattern() { result = super.getUrlPattern() } /** * Gets a function that will handle incoming requests for this route, if any. * * NOTE: This will be modified in the near future to have a `RequestHandler` result, instead of a `Function`. */ - Function getARequestHandler() { result = range.getARequestHandler() } + Function getARequestHandler() { result = super.getARequestHandler() } /** * Gets a parameter that will receive parts of the url when handling incoming * requests for this route, if any. These automatically become a `RemoteFlowSource`. */ - Parameter getARoutedParameter() { result = range.getARoutedParameter() } + Parameter getARoutedParameter() { result = super.getARoutedParameter() } /** Gets a string that identifies the framework used for this route setup. */ - string getFramework() { result = range.getFramework() } + string getFramework() { result = super.getFramework() } } /** Provides a class for modeling new HTTP routing APIs. */ @@ -841,19 +778,15 @@ module HTTP { * Extend this class to refine existing API models. If you want to model new APIs, * extend `RequestHandler::Range` instead. */ - class RequestHandler extends Function { - RequestHandler::Range range; - - RequestHandler() { this = range } - + class RequestHandler extends Function instanceof RequestHandler::Range { /** * Gets a parameter that could receive parts of the url when handling incoming * requests, if any. These automatically become a `RemoteFlowSource`. */ - Parameter getARoutedParameter() { result = range.getARoutedParameter() } + Parameter getARoutedParameter() { result = super.getARoutedParameter() } /** Gets a string that identifies the framework used for this route setup. */ - string getFramework() { result = range.getFramework() } + string getFramework() { result = super.getFramework() } } /** Provides a class for modeling new HTTP request handlers. */ @@ -909,16 +842,12 @@ module HTTP { * Extend this class to refine existing API models. If you want to model new APIs, * extend `HttpResponse::Range` instead. */ - class HttpResponse extends DataFlow::Node { - HttpResponse::Range range; - - HttpResponse() { this = range } - + class HttpResponse extends DataFlow::Node instanceof HttpResponse::Range { /** Gets the data-flow node that specifies the body of this HTTP response. */ - DataFlow::Node getBody() { result = range.getBody() } + DataFlow::Node getBody() { result = super.getBody() } /** Gets the mimetype of this HTTP response, if it can be statically determined. */ - string getMimetype() { result = range.getMimetype() } + string getMimetype() { result = super.getMimetype() } } /** Provides a class for modeling new HTTP response APIs. */ @@ -964,13 +893,9 @@ module HTTP { * Extend this class to refine existing API models. If you want to model new APIs, * extend `HttpRedirectResponse::Range` instead. */ - class HttpRedirectResponse extends HttpResponse { - override HttpRedirectResponse::Range range; - - HttpRedirectResponse() { this = range } - + class HttpRedirectResponse extends HttpResponse instanceof HttpRedirectResponse::Range { /** Gets the data-flow node that specifies the location of this HTTP redirect response. */ - DataFlow::Node getRedirectLocation() { result = range.getRedirectLocation() } + DataFlow::Node getRedirectLocation() { result = super.getRedirectLocation() } } /** Provides a class for modeling new HTTP redirect response APIs. */ @@ -996,25 +921,21 @@ module HTTP { * Extend this class to refine existing API models. If you want to model new APIs, * extend `HTTP::CookieWrite::Range` instead. */ - class CookieWrite extends DataFlow::Node { - CookieWrite::Range range; - - CookieWrite() { this = range } - + class CookieWrite extends DataFlow::Node instanceof CookieWrite::Range { /** * Gets the argument, if any, specifying the raw cookie header. */ - DataFlow::Node getHeaderArg() { result = range.getHeaderArg() } + DataFlow::Node getHeaderArg() { result = super.getHeaderArg() } /** * Gets the argument, if any, specifying the cookie name. */ - DataFlow::Node getNameArg() { result = range.getNameArg() } + DataFlow::Node getNameArg() { result = super.getNameArg() } /** * Gets the argument, if any, specifying the cookie value. */ - DataFlow::Node getValueArg() { result = range.getValueArg() } + DataFlow::Node getValueArg() { result = super.getValueArg() } } /** Provides a class for modeling new cookie writes on HTTP responses. */ @@ -1131,27 +1052,23 @@ module Cryptography { * Extend this class to refine existing API models. If you want to model new APIs, * extend `KeyGeneration::Range` instead. */ - class KeyGeneration extends DataFlow::Node { - KeyGeneration::Range range; - - KeyGeneration() { this = range } - + class KeyGeneration extends DataFlow::Node instanceof KeyGeneration::Range { /** Gets the name of the cryptographic algorithm (for example `"RSA"` or `"AES"`). */ - string getName() { result = range.getName() } + string getName() { result = super.getName() } /** Gets the argument that specifies the size of the key in bits, if available. */ - DataFlow::Node getKeySizeArg() { result = range.getKeySizeArg() } + DataFlow::Node getKeySizeArg() { result = super.getKeySizeArg() } /** * Gets the size of the key generated (in bits), as well as the `origin` that * explains how we obtained this specific key size. */ int getKeySizeWithOrigin(DataFlow::Node origin) { - result = range.getKeySizeWithOrigin(origin) + result = super.getKeySizeWithOrigin(origin) } /** Gets the minimum key size (in bits) for this algorithm to be considered secure. */ - int minimumSecureKeySize() { result = range.minimumSecureKeySize() } + int minimumSecureKeySize() { result = super.minimumSecureKeySize() } } /** Provides classes for modeling new key-pair generation APIs. */ @@ -1230,16 +1147,12 @@ module Cryptography { * Extend this class to refine existing API models. If you want to model new APIs, * extend `CryptographicOperation::Range` instead. */ - class CryptographicOperation extends DataFlow::Node { - CryptographicOperation::Range range; - - CryptographicOperation() { this = range } - + class CryptographicOperation extends DataFlow::Node instanceof CryptographicOperation::Range { /** Gets the algorithm used, if it matches a known `CryptographicAlgorithm`. */ - CryptographicAlgorithm getAlgorithm() { result = range.getAlgorithm() } + CryptographicAlgorithm getAlgorithm() { result = super.getAlgorithm() } /** Gets an input the algorithm is used on, for example the plain text input to be encrypted. */ - DataFlow::Node getAnInput() { result = range.getAnInput() } + DataFlow::Node getAnInput() { result = super.getAnInput() } } /** Provides classes for modeling new applications of a cryptographic algorithms. */ From 275b29a2886c7ea1771b07d992d92cbf4c39702b Mon Sep 17 00:00:00 2001 From: ihsinme Date: Tue, 5 Apr 2022 22:48:11 +0300 Subject: [PATCH 0127/1618] Update DangerousUseOfExceptionBlocks.expected --- .../semmle/tests/DangerousUseOfExceptionBlocks.expected | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected index 8f44dc5abe8..30d41b69eaa 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected @@ -1,3 +1,3 @@ | test.cpp:63:3:71:3 | { ... } | it is possible to dereference a pointer when accessing a buffer, since it is possible to throw an exception before the memory for the bufMyData is allocated | -| test.cpp:181:3:183:3 | { ... } | perhaps a situation of uncertainty due to the repeated call of the delete function for the variable valData | -| test.cpp:219:3:221:3 | { ... } | perhaps a situation of uncertainty due to the repeated call of the delete function for the variable valData | +| test.cpp:181:3:183:3 | { ... } | This allocation may have been released in the try block or a previous catch block.valData | +| test.cpp:219:3:221:3 | { ... } | This allocation may have been released in the try block or a previous catch block.valData | From c784f15762b8ea2f749e1f3d92fe29d498b63de3 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 6 Apr 2022 15:40:04 +0200 Subject: [PATCH 0128/1618] Python: Rename more XML classes to follow convention - `XMLEtree` to `XmlEtree` - `XMLSax` to `XmlSax` - `LXML` to `Lxml` - `XMLParser` to `XmlParser` --- .../ql/lib/semmle/python/frameworks/Lxml.qll | 30 +++++++++---------- .../lib/semmle/python/frameworks/Stdlib.qll | 28 ++++++++--------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index 6d310563ade..24afbd199df 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -109,7 +109,7 @@ private module Lxml { * * See https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.XMLParser */ - module XMLParser { + module XmlParser { /** * A source of instances of `lxml.etree` parsers, extend this class to model new instances. * @@ -117,7 +117,7 @@ private module Lxml { * calls, or a special parameter that will be set when functions are called by an external * library. * - * Use the predicate `XMLParser::instance()` to get references to instances of `lxml.etree` parsers. + * Use the predicate `XmlParser::instance()` to get references to instances of `lxml.etree` parsers. */ abstract class InstanceSource extends DataFlow::LocalSourceNode { /** Holds if this instance is vulnerable to `kind`. */ @@ -129,8 +129,8 @@ private module Lxml { * * See https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.XMLParser */ - private class LXMLParser extends InstanceSource, DataFlow::CallCfgNode { - LXMLParser() { + private class LxmlParser extends InstanceSource, DataFlow::CallCfgNode { + LxmlParser() { this = API::moduleImport("lxml").getMember("etree").getMember("XMLParser").getACall() } @@ -159,8 +159,8 @@ private module Lxml { * * See https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.get_default_parser */ - private class LXMLDefaultParser extends InstanceSource, DataFlow::CallCfgNode { - LXMLDefaultParser() { + private class LxmlDefaultParser extends InstanceSource, DataFlow::CallCfgNode { + LxmlDefaultParser() { this = API::moduleImport("lxml").getMember("etree").getMember("get_default_parser").getACall() } @@ -196,8 +196,8 @@ private module Lxml { /** * A call to the `feed` method of an `lxml` parser. */ - private class LXMLParserFeedCall extends DataFlow::MethodCallNode, XML::XmlParsing::Range { - LXMLParserFeedCall() { this.calls(instance(_), "feed") } + private class LxmlParserFeedCall extends DataFlow::MethodCallNode, XML::XmlParsing::Range { + LxmlParserFeedCall() { this.calls(instance(_), "feed") } override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } @@ -233,8 +233,8 @@ private module Lxml { * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parse * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parseid */ - private class LXMLParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { - LXMLParsing() { + private class LxmlParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { + LxmlParsing() { this = API::moduleImport("lxml") .getMember("etree") @@ -257,7 +257,7 @@ private module Lxml { DataFlow::Node getParserArg() { result in [this.getArg(1), this.getArgByName("parser")] } override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { - this.getParserArg() = XMLParser::instanceVulnerableTo(kind) + this.getParserArg() = XmlParser::instanceVulnerableTo(kind) or kind.isXxe() and not exists(this.getParserArg()) @@ -284,8 +284,8 @@ private module Lxml { * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parse * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parseid */ - private class FileAccessFromLXMLParsing extends LXMLParsing, FileSystemAccess::Range { - FileAccessFromLXMLParsing() { + private class FileAccessFromLxmlParsing extends LxmlParsing, FileSystemAccess::Range { + FileAccessFromLxmlParsing() { this = API::moduleImport("lxml").getMember("etree").getMember(["parse", "parseid"]).getACall() // I considered whether we should try to reduce FPs from people passing file-like // objects, which will not be a file system access (and couldn't cause a @@ -305,9 +305,9 @@ private module Lxml { * See * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.iterparse */ - private class LXMLIterparseCall extends DataFlow::CallCfgNode, XML::XmlParsing::Range, + private class LxmlIterparseCall extends DataFlow::CallCfgNode, XML::XmlParsing::Range, FileSystemAccess::Range { - LXMLIterparseCall() { + LxmlIterparseCall() { this = API::moduleImport("lxml").getMember("etree").getMember("iterparse").getACall() } diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 91ba7bc75b5..8508aaef5f0 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3191,7 +3191,7 @@ private module StdlibPrivate { * - https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.XMLParser * - https://docs.python.org/3.10/library/xml.etree.elementtree.html#xml.etree.ElementTree.XMLPullParser */ - module XMLParser { + module XmlParser { /** * A source of instances of `xml.etree` parsers, extend this class to model new instances. * @@ -3199,7 +3199,7 @@ private module StdlibPrivate { * calls, or a special parameter that will be set when functions are called by an external * library. * - * Use the predicate `XMLParser::instance()` to get references to instances of `xml.etree` parsers. + * Use the predicate `XmlParser::instance()` to get references to instances of `xml.etree` parsers. */ abstract class InstanceSource extends DataFlow::LocalSourceNode { } @@ -3236,8 +3236,8 @@ private module StdlibPrivate { /** * A call to the `feed` method of an `xml.etree` parser. */ - private class XMLEtreeParserFeedCall extends DataFlow::MethodCallNode, XML::XmlParsing::Range { - XMLEtreeParserFeedCall() { this.calls(instance(), "feed") } + private class XmlEtreeParserFeedCall extends DataFlow::MethodCallNode, XML::XmlParsing::Range { + XmlEtreeParserFeedCall() { this.calls(instance(), "feed") } override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } @@ -3274,8 +3274,8 @@ private module StdlibPrivate { * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.parse * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.iterparse */ - private class XMLEtreeParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { - XMLEtreeParsing() { + private class XmlEtreeParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { + XmlEtreeParsing() { this = API::moduleImport("xml") .getMember("etree") @@ -3325,8 +3325,8 @@ private module StdlibPrivate { * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.parse * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.iterparse */ - private class FileAccessFromXMLEtreeParsing extends XMLEtreeParsing, FileSystemAccess::Range { - FileAccessFromXMLEtreeParsing() { + private class FileAccessFromXmlEtreeParsing extends XmlEtreeParsing, FileSystemAccess::Range { + FileAccessFromXmlEtreeParsing() { this = API::moduleImport("xml") .getMember("etree") @@ -3445,9 +3445,9 @@ private module StdlibPrivate { * * See https://docs.python.org/3/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.parse */ - private class XMLSaxInstanceParsing extends DataFlow::MethodCallNode, XML::XmlParsing::Range, + private class XmlSaxInstanceParsing extends DataFlow::MethodCallNode, XML::XmlParsing::Range, FileSystemAccess::Range { - XMLSaxInstanceParsing() { + XmlSaxInstanceParsing() { this = API::moduleImport("xml") .getMember("sax") @@ -3496,8 +3496,8 @@ private module StdlibPrivate { * - https://docs.python.org/3.10/library/xml.sax.html#xml.sax.parse * - https://docs.python.org/3.10/library/xml.sax.html#xml.sax.parseString */ - private class XMLSaxParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { - XMLSaxParsing() { + private class XmlSaxParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { + XmlSaxParsing() { this = API::moduleImport("xml").getMember("sax").getMember(["parse", "parseString"]).getACall() } @@ -3535,8 +3535,8 @@ private module StdlibPrivate { * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.parse * - https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.iterparse */ - private class FileAccessFromXMLSaxParsing extends XMLSaxParsing, FileSystemAccess::Range { - FileAccessFromXMLSaxParsing() { + private class FileAccessFromXmlSaxParsing extends XmlSaxParsing, FileSystemAccess::Range { + FileAccessFromXmlSaxParsing() { this = API::moduleImport("xml").getMember("sax").getMember("parse").getACall() // I considered whether we should try to reduce FPs from people passing file-like // objects, which will not be a file system access (and couldn't cause a From f2f0873d911dc9bb685fa708707e3f4c1de6fc9d Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 6 Apr 2022 15:49:06 +0200 Subject: [PATCH 0129/1618] Python: Use new `API::CallNode` for XML constant check This also means that the detection of the values passed to these keyword arguments will no longer just be from a local scope, but can also be across function boundaries. --- .../ql/lib/semmle/python/frameworks/Lxml.qll | 21 ++++++++++--------- .../semmle/python/frameworks/Xmltodict.qll | 4 ++-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index 24afbd199df..a77da9e7915 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -129,7 +129,7 @@ private module Lxml { * * See https://lxml.de/apidoc/lxml.etree.html?highlight=xmlparser#lxml.etree.XMLParser */ - private class LxmlParser extends InstanceSource, DataFlow::CallCfgNode { + private class LxmlParser extends InstanceSource, API::CallNode { LxmlParser() { this = API::moduleImport("lxml").getMember("etree").getMember("XMLParser").getACall() } @@ -141,16 +141,17 @@ private module Lxml { // resolve_entities has default True not exists(this.getArgByName("resolve_entities")) or - this.getArgByName("resolve_entities").getALocalSource().asExpr() = any(True t) + this.getKeywordParameter("resolve_entities").getAValueReachingRhs().asExpr() = any(True t) ) or (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and - this.getArgByName("huge_tree").getALocalSource().asExpr() = any(True t) and - not this.getArgByName("resolve_entities").getALocalSource().asExpr() = any(False t) + this.getKeywordParameter("huge_tree").getAValueReachingRhs().asExpr() = any(True t) and + not this.getKeywordParameter("resolve_entities").getAValueReachingRhs().asExpr() = + any(False t) or kind.isDtdRetrieval() and - this.getArgByName("load_dtd").getALocalSource().asExpr() = any(True t) and - this.getArgByName("no_network").getALocalSource().asExpr() = any(False t) + this.getKeywordParameter("load_dtd").getAValueReachingRhs().asExpr() = any(True t) and + this.getKeywordParameter("no_network").getAValueReachingRhs().asExpr() = any(False t) } } @@ -305,7 +306,7 @@ private module Lxml { * See * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.iterparse */ - private class LxmlIterparseCall extends DataFlow::CallCfgNode, XML::XmlParsing::Range, + private class LxmlIterparseCall extends API::CallNode, XML::XmlParsing::Range, FileSystemAccess::Range { LxmlIterparseCall() { this = API::moduleImport("lxml").getMember("etree").getMember("iterparse").getACall() @@ -318,11 +319,11 @@ private module Lxml { kind.isXxe() or (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and - this.getArgByName("huge_tree").getALocalSource().asExpr() = any(True t) + this.getKeywordParameter("huge_tree").getAValueReachingRhs().asExpr() = any(True t) or kind.isDtdRetrieval() and - this.getArgByName("load_dtd").getALocalSource().asExpr() = any(True t) and - this.getArgByName("no_network").getALocalSource().asExpr() = any(False t) + this.getKeywordParameter("load_dtd").getAValueReachingRhs().asExpr() = any(True t) and + this.getKeywordParameter("no_network").getAValueReachingRhs().asExpr() = any(False t) } override predicate mayExecuteInput() { none() } diff --git a/python/ql/lib/semmle/python/frameworks/Xmltodict.qll b/python/ql/lib/semmle/python/frameworks/Xmltodict.qll index db2c443d8e9..95d44d6d1b0 100644 --- a/python/ql/lib/semmle/python/frameworks/Xmltodict.qll +++ b/python/ql/lib/semmle/python/frameworks/Xmltodict.qll @@ -20,7 +20,7 @@ private module Xmltodict { /** * A call to `xmltodict.parse`. */ - private class XMLtoDictParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { + private class XMLtoDictParsing extends API::CallNode, XML::XmlParsing::Range { XMLtoDictParsing() { this = API::moduleImport("xmltodict").getMember("parse").getACall() } override DataFlow::Node getAnInput() { @@ -29,7 +29,7 @@ private module Xmltodict { override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and - this.getArgByName("disable_entities").getALocalSource().asExpr() = any(False f) + this.getKeywordParameter("disable_entities").getAValueReachingRhs().asExpr() = any(False f) } override predicate mayExecuteInput() { none() } From 7728b6cf1b750eadf462606dbc3ca0660e86417d Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Apr 2022 10:45:43 +0200 Subject: [PATCH 0130/1618] Python: Change XmlBomb vulnerability kind --- python/ql/lib/semmle/python/Concepts.qll | 19 ++++++---- .../ql/lib/semmle/python/frameworks/Lxml.qll | 4 +- .../lib/semmle/python/frameworks/Stdlib.qll | 12 +++--- .../semmle/python/frameworks/Xmltodict.qll | 2 +- .../Security/CWE-611/SimpleXmlRpcServer.ql | 12 ++---- .../dataflow/XmlBombCustomizations.qll | 2 +- .../library-tests/frameworks/lxml/parsing.py | 4 +- .../frameworks/stdlib/XPathExecution.py | 6 +-- .../frameworks/stdlib/xml_dom.py | 24 ++++++------ .../frameworks/stdlib/xml_etree.py | 38 +++++++++---------- .../frameworks/stdlib/xml_sax.py | 26 ++++++------- .../frameworks/xmltodict/test.py | 2 +- 12 files changed, 73 insertions(+), 78 deletions(-) diff --git a/python/ql/lib/semmle/python/Concepts.qll b/python/ql/lib/semmle/python/Concepts.qll index eec0cd0d1a0..4fadc953c3b 100644 --- a/python/ql/lib/semmle/python/Concepts.qll +++ b/python/ql/lib/semmle/python/Concepts.qll @@ -507,15 +507,18 @@ module XML { * See PoC at `python/PoCs/XmlParsing/PoC.py` for some tests of vulnerable XML parsing. */ class XmlParsingVulnerabilityKind extends string { - XmlParsingVulnerabilityKind() { - this in ["Billion Laughs", "Quadratic Blowup", "XXE", "DTD retrieval"] - } + XmlParsingVulnerabilityKind() { this in ["XML bomb", "XXE", "DTD retrieval"] } - /** Holds for Billion Laughs vulnerability kind. */ - predicate isBillionLaughs() { this = "Billion Laughs" } - - /** Holds for Quadratic Blowup vulnerability kind. */ - predicate isQuadraticBlowup() { this = "Quadratic Blowup" } + /** + * Holds for XML bomb vulnerability kind, such as 'Billion Laughs' and 'Quadratic + * Blowup'. + * + * While a parser could technically be vulnerable to one and not the other, from our + * point of view the interesting part is that it IS vulnerable to these types of + * attacks, and not so much which one specifically works. In practice I haven't seen + * a parser that is vulnerable to one and not the other. + */ + predicate isXmlBomb() { this = "XML bomb" } /** Holds for XXE vulnerability kind. */ predicate isXxe() { this = "XXE" } diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index a77da9e7915..cfb83fd5732 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -144,7 +144,7 @@ private module Lxml { this.getKeywordParameter("resolve_entities").getAValueReachingRhs().asExpr() = any(True t) ) or - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and + kind.isXmlBomb() and this.getKeywordParameter("huge_tree").getAValueReachingRhs().asExpr() = any(True t) and not this.getKeywordParameter("resolve_entities").getAValueReachingRhs().asExpr() = any(False t) @@ -318,7 +318,7 @@ private module Lxml { // note that there is no `resolve_entities` argument, so it's not possible to turn off XXE :O kind.isXxe() or - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and + kind.isXmlBomb() and this.getKeywordParameter("huge_tree").getAValueReachingRhs().asExpr() = any(True t) or kind.isDtdRetrieval() and diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index 8508aaef5f0..f4b6915d440 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3241,9 +3241,7 @@ private module StdlibPrivate { override DataFlow::Node getAnInput() { result in [this.getArg(0), this.getArgByName("data")] } - override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { - kind.isBillionLaughs() or kind.isQuadraticBlowup() - } + override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { kind.isXmlBomb() } override predicate mayExecuteInput() { none() } @@ -3301,7 +3299,7 @@ private module StdlibPrivate { override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { // note: it does not matter what `xml.etree` parser you are using, you cannot // change the security features anyway :| - kind.isBillionLaughs() or kind.isQuadraticBlowup() + kind.isXmlBomb() } override predicate mayExecuteInput() { none() } @@ -3461,7 +3459,7 @@ private module StdlibPrivate { override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { // always vuln to these - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) + kind.isXmlBomb() or // can be vuln to other things if features has been turned on this.getObject() = saxParserWithFeatureExternalGesTurnedOn() and @@ -3514,7 +3512,7 @@ private module StdlibPrivate { override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { // always vuln to these - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) + kind.isXmlBomb() } override predicate mayExecuteInput() { none() } @@ -3590,7 +3588,7 @@ private module StdlibPrivate { this.getParserArg() = saxParserWithFeatureExternalGesTurnedOn() and (kind.isXxe() or kind.isDtdRetrieval()) or - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) + kind.isXmlBomb() } override predicate mayExecuteInput() { none() } diff --git a/python/ql/lib/semmle/python/frameworks/Xmltodict.qll b/python/ql/lib/semmle/python/frameworks/Xmltodict.qll index 95d44d6d1b0..f63fec7afe4 100644 --- a/python/ql/lib/semmle/python/frameworks/Xmltodict.qll +++ b/python/ql/lib/semmle/python/frameworks/Xmltodict.qll @@ -28,7 +28,7 @@ private module Xmltodict { } override predicate vulnerableTo(XML::XmlParsingVulnerabilityKind kind) { - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and + kind.isXmlBomb() and this.getKeywordParameter("disable_entities").getAValueReachingRhs().asExpr() = any(False f) } diff --git a/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql b/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql index e638c13853f..e31fdc88629 100644 --- a/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql +++ b/python/ql/src/experimental/Security/CWE-611/SimpleXmlRpcServer.ql @@ -13,13 +13,7 @@ private import python private import semmle.python.Concepts private import semmle.python.ApiGraphs -from DataFlow::CallCfgNode call, string kinds +from DataFlow::CallCfgNode call where - call = API::moduleImport("xmlrpc").getMember("server").getMember("SimpleXMLRPCServer").getACall() and - kinds = - strictconcat(XML::XmlParsingVulnerabilityKind kind | - kind.isBillionLaughs() or kind.isQuadraticBlowup() - | - kind, ", " - ) -select call, "SimpleXMLRPCServer is vulnerable to: " + kinds + "." + call = API::moduleImport("xmlrpc").getMember("server").getMember("SimpleXMLRPCServer").getACall() +select call, "SimpleXMLRPCServer is vulnerable to XML bombs" diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll index 05f6fc57a34..7cc4ec5bad5 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll @@ -41,7 +41,7 @@ module XmlBomb { class XmlParsingWithEntityResolution extends Sink { XmlParsingWithEntityResolution() { exists(XML::XmlParsing parsing, XML::XmlParsingVulnerabilityKind kind | - (kind.isBillionLaughs() or kind.isQuadraticBlowup()) and + kind.isXmlBomb() and parsing.vulnerableTo(kind) and this = parsing.getAnInput() ) diff --git a/python/ql/test/library-tests/frameworks/lxml/parsing.py b/python/ql/test/library-tests/frameworks/lxml/parsing.py index ca68c99a90e..63cdc79b4c1 100644 --- a/python/ql/test/library-tests/frameworks/lxml/parsing.py +++ b/python/ql/test/library-tests/frameworks/lxml/parsing.py @@ -50,7 +50,7 @@ lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVu # Billion laughs vuln (also XXE) parser = lxml.etree.XMLParser(huge_tree=True) -lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=lxml.etree.fromstring(..) +lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' xmlVuln='XXE' decodeOutput=lxml.etree.fromstring(..) # Safe for both Billion laughs and XXE parser = lxml.etree.XMLParser(resolve_entities=False, huge_tree=True) @@ -63,5 +63,5 @@ lxml.etree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVu # iterparse configurations ... this doesn't use a parser argument but takes MOST (!) of # the normal XMLParser arguments. Specifically, it doesn't allow disabling XXE :O -lxml.etree.iterparse(xml_file, huge_tree=True) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) getAPathArgument=xml_file +lxml.etree.iterparse(xml_file, huge_tree=True) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='XML bomb' xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) getAPathArgument=xml_file lxml.etree.iterparse(xml_file, load_dtd=True, no_network=False) # $ decodeFormat=XML decodeInput=xml_file xmlVuln='DTD retrieval' xmlVuln='XXE' decodeOutput=lxml.etree.iterparse(..) getAPathArgument=xml_file diff --git a/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py b/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py index 5faff5ed868..bf7dd08185b 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py +++ b/python/ql/test/library-tests/frameworks/stdlib/XPathExecution.py @@ -2,7 +2,7 @@ match = "dc:title" ns = {'dc': 'http://purl.org/dc/elements/1.1/'} import xml.etree.ElementTree as ET -tree = ET.parse('country_data.xml') # $ decodeFormat=XML decodeInput='country_data.xml' decodeOutput=ET.parse(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument='country_data.xml' +tree = ET.parse('country_data.xml') # $ decodeFormat=XML decodeInput='country_data.xml' decodeOutput=ET.parse(..) xmlVuln='XML bomb' getAPathArgument='country_data.xml' root = tree.getroot() root.find(match, namespaces=ns) # $ getXPath=match @@ -10,13 +10,13 @@ root.findall(match, namespaces=ns) # $ getXPath=match root.findtext(match, default=None, namespaces=ns) # $ getXPath=match tree = ET.ElementTree() -tree.parse("index.xhtml") # $ decodeFormat=XML decodeInput="index.xhtml" decodeOutput=tree.parse(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument="index.xhtml" +tree.parse("index.xhtml") # $ decodeFormat=XML decodeInput="index.xhtml" decodeOutput=tree.parse(..) xmlVuln='XML bomb' getAPathArgument="index.xhtml" tree.find(match, namespaces=ns) # $ getXPath=match tree.findall(match, namespaces=ns) # $ getXPath=match tree.findtext(match, default=None, namespaces=ns) # $ getXPath=match parser = ET.XMLParser() -parser.feed("bar") # $ decodeFormat=XML decodeInput="bar" xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.feed("bar") # $ decodeFormat=XML decodeInput="bar" xmlVuln='XML bomb' tree = parser.close() # $ decodeOutput=parser.close() tree.find(match, namespaces=ns) # $ getXPath=match diff --git a/python/ql/test/library-tests/frameworks/stdlib/xml_dom.py b/python/ql/test/library-tests/frameworks/stdlib/xml_dom.py index b3a1ab7f930..8d511c51733 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/xml_dom.py +++ b/python/ql/test/library-tests/frameworks/stdlib/xml_dom.py @@ -6,26 +6,26 @@ import xml.sax x = "some xml" # minidom -xml.dom.minidom.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) -xml.dom.minidom.parse(file=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) +xml.dom.minidom.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) +xml.dom.minidom.parse(file=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) -xml.dom.minidom.parseString(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parseString(..) -xml.dom.minidom.parseString(string=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.minidom.parseString(..) +xml.dom.minidom.parseString(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xml.dom.minidom.parseString(..) +xml.dom.minidom.parseString(string=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xml.dom.minidom.parseString(..) # pulldom -xml.dom.pulldom.parse(StringIO(x))['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) -xml.dom.pulldom.parse(stream_or_string=StringIO(x))['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) +xml.dom.pulldom.parse(StringIO(x))['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) +xml.dom.pulldom.parse(stream_or_string=StringIO(x))['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) -xml.dom.pulldom.parseString(x)['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parseString(..) -xml.dom.pulldom.parseString(string=x)['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.dom.pulldom.parseString(..) +xml.dom.pulldom.parseString(x)['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xml.dom.pulldom.parseString(..) +xml.dom.pulldom.parseString(string=x)['START_DOCUMENT'][1] # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xml.dom.pulldom.parseString(..) # These are based on SAX parses, and you can specify your own, so you can expose yourself to XXE (yay/) parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) -xml.dom.minidom.parse(StringIO(x), parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) -xml.dom.minidom.parse(StringIO(x), parser=parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) +xml.dom.minidom.parse(StringIO(x), parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' xmlVuln='DTD retrieval' xmlVuln='XXE' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) +xml.dom.minidom.parse(StringIO(x), parser=parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' xmlVuln='DTD retrieval' xmlVuln='XXE' decodeOutput=xml.dom.minidom.parse(..) getAPathArgument=StringIO(..) -xml.dom.pulldom.parse(StringIO(x), parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) -xml.dom.pulldom.parse(StringIO(x), parser=parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) +xml.dom.pulldom.parse(StringIO(x), parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' xmlVuln='DTD retrieval' xmlVuln='XXE' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) +xml.dom.pulldom.parse(StringIO(x), parser=parser) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' xmlVuln='DTD retrieval' xmlVuln='XXE' decodeOutput=xml.dom.pulldom.parse(..) getAPathArgument=StringIO(..) diff --git a/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py b/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py index 00f3b964b18..441f9adc87a 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py +++ b/python/ql/test/library-tests/frameworks/stdlib/xml_etree.py @@ -4,43 +4,43 @@ import xml.etree.ElementTree x = "some xml" # Parsing in different ways -xml.etree.ElementTree.fromstring(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.fromstring(..) -xml.etree.ElementTree.fromstring(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.fromstring(..) +xml.etree.ElementTree.fromstring(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.fromstring(..) +xml.etree.ElementTree.fromstring(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.fromstring(..) -xml.etree.ElementTree.fromstringlist([x]) # $ decodeFormat=XML decodeInput=List xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.fromstringlist(..) -xml.etree.ElementTree.fromstringlist(sequence=[x]) # $ decodeFormat=XML decodeInput=List xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.fromstringlist(..) +xml.etree.ElementTree.fromstringlist([x]) # $ decodeFormat=XML decodeInput=List xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.fromstringlist(..) +xml.etree.ElementTree.fromstringlist(sequence=[x]) # $ decodeFormat=XML decodeInput=List xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.fromstringlist(..) -xml.etree.ElementTree.XML(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.XML(..) -xml.etree.ElementTree.XML(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.XML(..) +xml.etree.ElementTree.XML(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.XML(..) +xml.etree.ElementTree.XML(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.XML(..) -xml.etree.ElementTree.XMLID(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.XMLID(..) -xml.etree.ElementTree.XMLID(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.XMLID(..) +xml.etree.ElementTree.XMLID(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.XMLID(..) +xml.etree.ElementTree.XMLID(text=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.XMLID(..) -xml.etree.ElementTree.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.parse(..) getAPathArgument=StringIO(..) -xml.etree.ElementTree.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.parse(..) getAPathArgument=StringIO(..) +xml.etree.ElementTree.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.parse(..) getAPathArgument=StringIO(..) +xml.etree.ElementTree.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.parse(..) getAPathArgument=StringIO(..) -xml.etree.ElementTree.iterparse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.iterparse(..) getAPathArgument=StringIO(..) -xml.etree.ElementTree.iterparse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.iterparse(..) getAPathArgument=StringIO(..) +xml.etree.ElementTree.iterparse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.iterparse(..) getAPathArgument=StringIO(..) +xml.etree.ElementTree.iterparse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.iterparse(..) getAPathArgument=StringIO(..) tree = xml.etree.ElementTree.ElementTree() -tree.parse("file.xml") # $ decodeFormat=XML decodeInput="file.xml" xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=tree.parse(..) getAPathArgument="file.xml" -tree.parse(source="file.xml") # $ decodeFormat=XML decodeInput="file.xml" xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=tree.parse(..) getAPathArgument="file.xml" +tree.parse("file.xml") # $ decodeFormat=XML decodeInput="file.xml" xmlVuln='XML bomb' decodeOutput=tree.parse(..) getAPathArgument="file.xml" +tree.parse(source="file.xml") # $ decodeFormat=XML decodeInput="file.xml" xmlVuln='XML bomb' decodeOutput=tree.parse(..) getAPathArgument="file.xml" # With parsers (no options available to disable/enable security features) parser = xml.etree.ElementTree.XMLParser() -xml.etree.ElementTree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xml.etree.ElementTree.fromstring(..) +xml.etree.ElementTree.fromstring(x, parser=parser) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xml.etree.ElementTree.fromstring(..) # manual use of feed method parser = xml.etree.ElementTree.XMLParser() -parser.feed(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -parser.feed(data=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.feed(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' +parser.feed(data=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' parser.close() # $ decodeOutput=parser.close() # manual use of feed method on XMLPullParser parser = xml.etree.ElementTree.XMLPullParser() -parser.feed(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -parser.feed(data=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +parser.feed(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' +parser.feed(data=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' parser.close() # $ decodeOutput=parser.close() # note: it's technically possible to use the thing wrapper func `fromstring` with an diff --git a/python/ql/test/library-tests/frameworks/stdlib/xml_sax.py b/python/ql/test/library-tests/frameworks/stdlib/xml_sax.py index c08034907a4..6199fd76cc1 100644 --- a/python/ql/test/library-tests/frameworks/stdlib/xml_sax.py +++ b/python/ql/test/library-tests/frameworks/stdlib/xml_sax.py @@ -10,41 +10,41 @@ class MainHandler(xml.sax.ContentHandler): def characters(self, data): self._result.append(data) -xml.sax.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) -xml.sax.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) +xml.sax.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' getAPathArgument=StringIO(..) +xml.sax.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' getAPathArgument=StringIO(..) -xml.sax.parseString(x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' -xml.sax.parseString(string=x) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' +xml.sax.parseString(x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' +xml.sax.parseString(string=x) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' parser = xml.sax.make_parser() -parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) -parser.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' getAPathArgument=StringIO(..) +parser.parse(source=StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' getAPathArgument=StringIO(..) # You can make it vuln to both XXE and DTD retrieval by setting this flag # see https://docs.python.org/3/library/xml.sax.handler.html#xml.sax.handler.feature_external_ges parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) -parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' getAPathArgument=StringIO(..) +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' xmlVuln='DTD retrieval' xmlVuln='XXE' getAPathArgument=StringIO(..) parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, False) -parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' getAPathArgument=StringIO(..) # Forward Type Tracking test def func(cond): parser = xml.sax.make_parser() if cond: parser.setFeature(xml.sax.handler.feature_external_ges, True) - parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' getAPathArgument=StringIO(..) + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' xmlVuln='DTD retrieval' xmlVuln='XXE' getAPathArgument=StringIO(..) else: - parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' getAPathArgument=StringIO(..) # make it vuln, then making it safe # a bit of an edge-case, but is nice to be able to handle. parser = xml.sax.make_parser() parser.setFeature(xml.sax.handler.feature_external_ges, True) parser.setFeature(xml.sax.handler.feature_external_ges, False) -parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' getAPathArgument=StringIO(..) +parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' getAPathArgument=StringIO(..) def check_conditional_assignment(cond): parser = xml.sax.make_parser() @@ -52,7 +52,7 @@ def check_conditional_assignment(cond): parser.setFeature(xml.sax.handler.feature_external_ges, True) else: parser.setFeature(xml.sax.handler.feature_external_ges, False) - parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' getAPathArgument=StringIO(..) + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' xmlVuln='DTD retrieval' xmlVuln='XXE' getAPathArgument=StringIO(..) def check_conditional_assignment2(cond): parser = xml.sax.make_parser() @@ -61,4 +61,4 @@ def check_conditional_assignment2(cond): else: flag_value = False parser.setFeature(xml.sax.handler.feature_external_ges, flag_value) - parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='Billion Laughs' xmlVuln='DTD retrieval' xmlVuln='Quadratic Blowup' xmlVuln='XXE' getAPathArgument=StringIO(..) + parser.parse(StringIO(x)) # $ decodeFormat=XML decodeInput=StringIO(..) xmlVuln='XML bomb' xmlVuln='DTD retrieval' xmlVuln='XXE' getAPathArgument=StringIO(..) diff --git a/python/ql/test/library-tests/frameworks/xmltodict/test.py b/python/ql/test/library-tests/frameworks/xmltodict/test.py index 01dc2f3c484..ef236f7796c 100644 --- a/python/ql/test/library-tests/frameworks/xmltodict/test.py +++ b/python/ql/test/library-tests/frameworks/xmltodict/test.py @@ -5,4 +5,4 @@ x = "some xml" xmltodict.parse(x) # $ decodeFormat=XML decodeInput=x decodeOutput=xmltodict.parse(..) xmltodict.parse(xml_input=x) # $ decodeFormat=XML decodeInput=x decodeOutput=xmltodict.parse(..) -xmltodict.parse(x, disable_entities=False) # $ decodeFormat=XML decodeInput=x xmlVuln='Billion Laughs' xmlVuln='Quadratic Blowup' decodeOutput=xmltodict.parse(..) +xmltodict.parse(x, disable_entities=False) # $ decodeFormat=XML decodeInput=x xmlVuln='XML bomb' decodeOutput=xmltodict.parse(..) From 405480c41045f943e025aa7d21a33b971b231cf2 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Apr 2022 15:34:56 +0200 Subject: [PATCH 0131/1618] Python: Rename sink definitions for XXE/XML bomb --- .../python/security/dataflow/XmlBombCustomizations.qll | 7 +++---- .../semmle/python/security/dataflow/XxeCustomizations.qll | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll index 7cc4ec5bad5..a2fe1b8ecb2 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll @@ -35,11 +35,10 @@ module XmlBomb { } /** - * A call to an XML parser that performs internal entity expansion, viewed - * as a data flow sink for XML-bomb vulnerabilities. + * A call to an XML parser that is vulnerable to XML bombs. */ - class XmlParsingWithEntityResolution extends Sink { - XmlParsingWithEntityResolution() { + class XmlParsingVulnerableToXmlBomb extends Sink { + XmlParsingVulnerableToXmlBomb() { exists(XML::XmlParsing parsing, XML::XmlParsingVulnerabilityKind kind | kind.isXmlBomb() and parsing.vulnerableTo(kind) and diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll index 0fc139ec4f3..1d1ad087f84 100644 --- a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll +++ b/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll @@ -35,11 +35,10 @@ module Xxe { } /** - * A call to an XML parser that performs external entity expansion, viewed - * as a data flow sink for XXE vulnerabilities. + * A call to an XML parser that is vulnerable to XXE. */ - class XmlParsingWithExternalEntityResolution extends Sink { - XmlParsingWithExternalEntityResolution() { + class XmlParsingVulnerableToXxe extends Sink { + XmlParsingVulnerableToXxe() { exists(XML::XmlParsing parsing, XML::XmlParsingVulnerabilityKind kind | kind.isXxe() and parsing.vulnerableTo(kind) and From 8191be9d7506bec7909a19f001276d2716d4f600 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Apr 2022 15:36:04 +0200 Subject: [PATCH 0132/1618] Python: Move last XXE/XML bomb out of experimental --- .../semmle/python/security/dataflow/XmlBombCustomizations.qll | 0 .../semmle/python/security/dataflow/XmlBombQuery.qll | 0 .../semmle/python/security/dataflow/XxeCustomizations.qll | 0 .../semmle/python/security/dataflow/XxeQuery.qll | 0 python/ql/src/Security/CWE-611/Xxe.ql | 2 +- python/ql/src/Security/CWE-776/XmlBomb.ql | 2 +- 6 files changed, 2 insertions(+), 2 deletions(-) rename python/ql/{src/experimental => lib}/semmle/python/security/dataflow/XmlBombCustomizations.qll (100%) rename python/ql/{src/experimental => lib}/semmle/python/security/dataflow/XmlBombQuery.qll (100%) rename python/ql/{src/experimental => lib}/semmle/python/security/dataflow/XxeCustomizations.qll (100%) rename python/ql/{src/experimental => lib}/semmle/python/security/dataflow/XxeQuery.qll (100%) diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/XmlBombCustomizations.qll similarity index 100% rename from python/ql/src/experimental/semmle/python/security/dataflow/XmlBombCustomizations.qll rename to python/ql/lib/semmle/python/security/dataflow/XmlBombCustomizations.qll diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XmlBombQuery.qll b/python/ql/lib/semmle/python/security/dataflow/XmlBombQuery.qll similarity index 100% rename from python/ql/src/experimental/semmle/python/security/dataflow/XmlBombQuery.qll rename to python/ql/lib/semmle/python/security/dataflow/XmlBombQuery.qll diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll b/python/ql/lib/semmle/python/security/dataflow/XxeCustomizations.qll similarity index 100% rename from python/ql/src/experimental/semmle/python/security/dataflow/XxeCustomizations.qll rename to python/ql/lib/semmle/python/security/dataflow/XxeCustomizations.qll diff --git a/python/ql/src/experimental/semmle/python/security/dataflow/XxeQuery.qll b/python/ql/lib/semmle/python/security/dataflow/XxeQuery.qll similarity index 100% rename from python/ql/src/experimental/semmle/python/security/dataflow/XxeQuery.qll rename to python/ql/lib/semmle/python/security/dataflow/XxeQuery.qll diff --git a/python/ql/src/Security/CWE-611/Xxe.ql b/python/ql/src/Security/CWE-611/Xxe.ql index f706ea6e909..5cc6da25467 100644 --- a/python/ql/src/Security/CWE-611/Xxe.ql +++ b/python/ql/src/Security/CWE-611/Xxe.ql @@ -13,7 +13,7 @@ */ import python -import experimental.semmle.python.security.dataflow.XxeQuery +import semmle.python.security.dataflow.XxeQuery import DataFlow::PathGraph from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink diff --git a/python/ql/src/Security/CWE-776/XmlBomb.ql b/python/ql/src/Security/CWE-776/XmlBomb.ql index 2a1ea5916c4..54d483db17e 100644 --- a/python/ql/src/Security/CWE-776/XmlBomb.ql +++ b/python/ql/src/Security/CWE-776/XmlBomb.ql @@ -13,7 +13,7 @@ */ import python -import experimental.semmle.python.security.dataflow.XmlBombQuery +import semmle.python.security.dataflow.XmlBombQuery import DataFlow::PathGraph from Configuration cfg, DataFlow::PathNode source, DataFlow::PathNode sink From 30fff1cf8b23e57d32417e4d89b516b0180d5810 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Apr 2022 16:02:41 +0200 Subject: [PATCH 0133/1618] Python: Merge pymongo NoSQL tests --- .../Security/CWE-943/NoSQLInjection.expected | 24 +++++++++---------- .../Security/CWE-943/pymongo_bad.py | 17 ------------- .../{pymongo_good.py => pymongo_test.py} | 17 +++++++++---- 3 files changed, 25 insertions(+), 33 deletions(-) delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_bad.py rename python/ql/test/experimental/query-tests/Security/CWE-943/{pymongo_good.py => pymongo_test.py} (57%) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected index 6fa158370a6..5213b12744d 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected @@ -44,11 +44,11 @@ edges | mongoengine_bad.py:57:21:57:42 | ControlFlowNode for Subscript | mongoengine_bad.py:58:30:58:42 | ControlFlowNode for unsafe_search | | mongoengine_bad.py:58:19:58:43 | ControlFlowNode for Attribute() | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | | mongoengine_bad.py:58:30:58:42 | ControlFlowNode for unsafe_search | mongoengine_bad.py:58:19:58:43 | ControlFlowNode for Attribute() | -| pymongo_bad.py:11:21:11:27 | ControlFlowNode for request | pymongo_bad.py:11:21:11:32 | ControlFlowNode for Attribute | -| pymongo_bad.py:11:21:11:32 | ControlFlowNode for Attribute | pymongo_bad.py:11:21:11:42 | ControlFlowNode for Subscript | -| pymongo_bad.py:11:21:11:42 | ControlFlowNode for Subscript | pymongo_bad.py:12:30:12:42 | ControlFlowNode for unsafe_search | -| pymongo_bad.py:12:19:12:43 | ControlFlowNode for Attribute() | pymongo_bad.py:14:42:14:62 | ControlFlowNode for Dict | -| pymongo_bad.py:12:30:12:42 | ControlFlowNode for unsafe_search | pymongo_bad.py:12:19:12:43 | ControlFlowNode for Attribute() | +| pymongo_test.py:12:21:12:27 | ControlFlowNode for request | pymongo_test.py:12:21:12:32 | ControlFlowNode for Attribute | +| pymongo_test.py:12:21:12:32 | ControlFlowNode for Attribute | pymongo_test.py:12:21:12:42 | ControlFlowNode for Subscript | +| pymongo_test.py:12:21:12:42 | ControlFlowNode for Subscript | pymongo_test.py:13:30:13:42 | ControlFlowNode for unsafe_search | +| pymongo_test.py:13:19:13:43 | ControlFlowNode for Attribute() | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | +| pymongo_test.py:13:30:13:42 | ControlFlowNode for unsafe_search | pymongo_test.py:13:19:13:43 | ControlFlowNode for Attribute() | nodes | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | flask_mongoengine_bad.py:19:21:19:32 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | @@ -104,12 +104,12 @@ nodes | mongoengine_bad.py:58:19:58:43 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | mongoengine_bad.py:58:30:58:42 | ControlFlowNode for unsafe_search | semmle.label | ControlFlowNode for unsafe_search | | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | semmle.label | ControlFlowNode for Dict | -| pymongo_bad.py:11:21:11:27 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| pymongo_bad.py:11:21:11:32 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| pymongo_bad.py:11:21:11:42 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | -| pymongo_bad.py:12:19:12:43 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| pymongo_bad.py:12:30:12:42 | ControlFlowNode for unsafe_search | semmle.label | ControlFlowNode for unsafe_search | -| pymongo_bad.py:14:42:14:62 | ControlFlowNode for Dict | semmle.label | ControlFlowNode for Dict | +| pymongo_test.py:12:21:12:27 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| pymongo_test.py:12:21:12:32 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| pymongo_test.py:12:21:12:42 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| pymongo_test.py:13:19:13:43 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| pymongo_test.py:13:30:13:42 | ControlFlowNode for unsafe_search | semmle.label | ControlFlowNode for unsafe_search | +| pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | semmle.label | ControlFlowNode for Dict | subpaths #select | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | $@ NoSQL query contains an unsanitized $@ | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | This | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | user-provided value | @@ -121,4 +121,4 @@ subpaths | mongoengine_bad.py:46:26:46:46 | ControlFlowNode for Dict | mongoengine_bad.py:42:21:42:27 | ControlFlowNode for request | mongoengine_bad.py:46:26:46:46 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | mongoengine_bad.py:46:26:46:46 | ControlFlowNode for Dict | This | mongoengine_bad.py:42:21:42:27 | ControlFlowNode for request | user-provided value | | mongoengine_bad.py:53:34:53:44 | ControlFlowNode for json_search | mongoengine_bad.py:50:21:50:27 | ControlFlowNode for request | mongoengine_bad.py:53:34:53:44 | ControlFlowNode for json_search | $@ NoSQL query contains an unsanitized $@ | mongoengine_bad.py:53:34:53:44 | ControlFlowNode for json_search | This | mongoengine_bad.py:50:21:50:27 | ControlFlowNode for request | user-provided value | | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | This | mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | user-provided value | -| pymongo_bad.py:14:42:14:62 | ControlFlowNode for Dict | pymongo_bad.py:11:21:11:27 | ControlFlowNode for request | pymongo_bad.py:14:42:14:62 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | pymongo_bad.py:14:42:14:62 | ControlFlowNode for Dict | This | pymongo_bad.py:11:21:11:27 | ControlFlowNode for request | user-provided value | +| pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | pymongo_test.py:12:21:12:27 | ControlFlowNode for request | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | This | pymongo_test.py:12:21:12:27 | ControlFlowNode for request | user-provided value | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_bad.py b/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_bad.py deleted file mode 100644 index da16df828b8..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_bad.py +++ /dev/null @@ -1,17 +0,0 @@ -from flask import Flask, request -from pymongo import MongoClient -import json - -app = Flask(__name__) -client = MongoClient() - - -@app.route("/") -def home_page(): - unsafe_search = request.args['search'] - json_search = json.loads(unsafe_search) - - return client.db.collection.find_one({'data': json_search}) - -# if __name__ == "__main__": -# app.run(debug=True) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_good.py b/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_test.py similarity index 57% rename from python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_good.py rename to python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_test.py index 5b112e12385..300567ac8c3 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_good.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_test.py @@ -7,13 +7,22 @@ app = Flask(__name__) client = MongoClient() -@app.route("/") -def home_page(): +@app.route("/bad") +def bad(): + unsafe_search = request.args['search'] + json_search = json.loads(unsafe_search) + + return client.db.collection.find_one({'data': json_search}) + + +@app.route("/good") +def good(): unsafe_search = request.args['search'] json_search = json.loads(unsafe_search) safe_search = sanitize(json_search) return client.db.collection.find_one({'data': safe_search}) -# if __name__ == "__main__": -# app.run(debug=True) + +if __name__ == "__main__": + app.run(debug=True) From 81fdc1bd78c55bfb215b608b700a88dc21cdcdb0 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Apr 2022 16:07:02 +0200 Subject: [PATCH 0134/1618] Python: Add more `pymongo` NoSQL tests --- .../Security/CWE-943/NoSQLInjection.expected | 10 ++++++++++ .../Security/CWE-943/pymongo_test.py | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected index 5213b12744d..c39aea2345d 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected @@ -49,6 +49,10 @@ edges | pymongo_test.py:12:21:12:42 | ControlFlowNode for Subscript | pymongo_test.py:13:30:13:42 | ControlFlowNode for unsafe_search | | pymongo_test.py:13:19:13:43 | ControlFlowNode for Attribute() | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | | pymongo_test.py:13:30:13:42 | ControlFlowNode for unsafe_search | pymongo_test.py:13:19:13:43 | ControlFlowNode for Attribute() | +| pymongo_test.py:29:16:29:51 | ControlFlowNode for Attribute() | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | +| pymongo_test.py:29:27:29:33 | ControlFlowNode for request | pymongo_test.py:29:27:29:38 | ControlFlowNode for Attribute | +| pymongo_test.py:29:27:29:38 | ControlFlowNode for Attribute | pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | +| pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | pymongo_test.py:29:16:29:51 | ControlFlowNode for Attribute() | nodes | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | flask_mongoengine_bad.py:19:21:19:32 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | @@ -110,6 +114,11 @@ nodes | pymongo_test.py:13:19:13:43 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | | pymongo_test.py:13:30:13:42 | ControlFlowNode for unsafe_search | semmle.label | ControlFlowNode for unsafe_search | | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | semmle.label | ControlFlowNode for Dict | +| pymongo_test.py:29:16:29:51 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| pymongo_test.py:29:27:29:33 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| pymongo_test.py:29:27:29:38 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | semmle.label | ControlFlowNode for Dict | subpaths #select | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | $@ NoSQL query contains an unsanitized $@ | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | This | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | user-provided value | @@ -122,3 +131,4 @@ subpaths | mongoengine_bad.py:53:34:53:44 | ControlFlowNode for json_search | mongoengine_bad.py:50:21:50:27 | ControlFlowNode for request | mongoengine_bad.py:53:34:53:44 | ControlFlowNode for json_search | $@ NoSQL query contains an unsanitized $@ | mongoengine_bad.py:53:34:53:44 | ControlFlowNode for json_search | This | mongoengine_bad.py:50:21:50:27 | ControlFlowNode for request | user-provided value | | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | This | mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | user-provided value | | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | pymongo_test.py:12:21:12:27 | ControlFlowNode for request | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | This | pymongo_test.py:12:21:12:27 | ControlFlowNode for request | user-provided value | +| pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | pymongo_test.py:29:27:29:33 | ControlFlowNode for request | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | This | pymongo_test.py:29:27:29:33 | ControlFlowNode for request | user-provided value | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_test.py b/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_test.py index 300567ac8c3..052c1c65d4f 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_test.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_test.py @@ -24,5 +24,23 @@ def good(): return client.db.collection.find_one({'data': safe_search}) +@app.route("/bad2") +def bad2(): + event_id = json.loads(request.args['event_id']) + client = MongoClient("localhost", 27017, maxPoolSize=50) + db = client.localhost + collection = db['collection'] + cursor = collection.find_one({"$where": f"this._id == '${event_id}'"}) + + +@app.route("/bad3") +def bad3(): + event_id = json.loads(request.args['event_id']) + client = MongoClient("localhost", 27017, maxPoolSize=50) + db = client.get_database(name="localhost") + collection = db['collection'] + cursor = collection.find_one({"$where": f"this._id == '${event_id}'"}) + + if __name__ == "__main__": app.run(debug=True) From 0ce2ced1aadf28e38c518a8786eeab42fa829197 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Apr 2022 16:16:10 +0200 Subject: [PATCH 0135/1618] Python: Model `pymongo.mongo_client.MongoClient` --- python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll b/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll index bdd067218b3..99681c8502d 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll @@ -15,6 +15,10 @@ private module NoSql { /** Gets a reference to `pymongo.MongoClient` */ private API::Node pyMongo() { result = API::moduleImport("pymongo").getMember("MongoClient").getReturn() + or + // see https://pymongo.readthedocs.io/en/stable/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoClient + result = + API::moduleImport("pymongo").getMember("mongo_client").getMember("MongoClient").getReturn() } /** Gets a reference to `flask_pymongo.PyMongo` */ From e58e9a273bd5b4d9aa61f02345fe1c3cff234ffe Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Apr 2022 16:17:12 +0200 Subject: [PATCH 0136/1618] Python: `mongoClientInstance` refactoring --- .../src/experimental/semmle/python/frameworks/NoSQL.qll | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll b/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll index 99681c8502d..bfb350915eb 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll @@ -38,7 +38,7 @@ private module NoSql { * Gets a reference to an initialized `Mongo` instance. * See `pyMongo()`, `flask_PyMongo()` */ - private API::Node mongoInstance() { + private API::Node mongoClientInstance() { result = pyMongo() or result = flask_PyMongo() } @@ -56,17 +56,17 @@ private module NoSql { /** * Gets a reference to a `Mongo` DB use. * - * See `mongoInstance()`, `mongoDBInstance()`. + * See `mongoClientInstance()`, `mongoDBInstance()`. */ private DataFlow::LocalSourceNode mongoDB(DataFlow::TypeTracker t) { t.start() and ( exists(SubscriptNode subscript | - subscript.getObject() = mongoInstance().getAUse().asCfgNode() and + subscript.getObject() = mongoClientInstance().getAUse().asCfgNode() and result.asCfgNode() = subscript ) or - result.(DataFlow::AttrRead).getObject() = mongoInstance().getAUse() + result.(DataFlow::AttrRead).getObject() = mongoClientInstance().getAUse() or result = mongoDBInstance().getAUse() ) From 7ca19653dfd3242da06820e56392c8d5da2ee600 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Apr 2022 16:22:57 +0200 Subject: [PATCH 0137/1618] Python: `mongoDBInstance` refactor --- .../semmle/python/frameworks/NoSQL.qll | 34 +++++++------------ 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll b/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll index bfb350915eb..1fd1075b7d4 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll @@ -44,21 +44,9 @@ private module NoSql { } /** - * Gets a reference to an initialized `Mongo` DB instance. - * See `mongoEngine()`, `flask_MongoEngine()` + * Gets a reference to a `Mongo` DB instance. */ - private API::Node mongoDBInstance() { - result = mongoEngine().getMember(["get_db", "connect"]).getReturn() or - result = mongoEngine().getMember("connection").getMember(["get_db", "connect"]).getReturn() or - result = flask_MongoEngine().getMember("get_db").getReturn() - } - - /** - * Gets a reference to a `Mongo` DB use. - * - * See `mongoClientInstance()`, `mongoDBInstance()`. - */ - private DataFlow::LocalSourceNode mongoDB(DataFlow::TypeTracker t) { + private DataFlow::LocalSourceNode mongoDBInstance(DataFlow::TypeTracker t) { t.start() and ( exists(SubscriptNode subscript | @@ -68,10 +56,14 @@ private module NoSql { or result.(DataFlow::AttrRead).getObject() = mongoClientInstance().getAUse() or - result = mongoDBInstance().getAUse() + result = mongoEngine().getMember(["get_db", "connect"]).getACall() + or + result = mongoEngine().getMember("connection").getMember(["get_db", "connect"]).getACall() + or + result = flask_MongoEngine().getMember("get_db").getACall() ) or - exists(DataFlow::TypeTracker t2 | result = mongoDB(t2).track(t2, t)) + exists(DataFlow::TypeTracker t2 | result = mongoDBInstance(t2).track(t2, t)) } /** @@ -85,21 +77,21 @@ private module NoSql { * * `mongo.db` would be a use of a `Mongo` instance, and so the result. */ - private DataFlow::Node mongoDB() { mongoDB(DataFlow::TypeTracker::end()).flowsTo(result) } + private DataFlow::Node mongoDBInstance() { + mongoDBInstance(DataFlow::TypeTracker::end()).flowsTo(result) + } /** * Gets a reference to a `Mongo` collection use. - * - * See `mongoDB()`. */ private DataFlow::LocalSourceNode mongoCollection(DataFlow::TypeTracker t) { t.start() and ( exists(SubscriptNode subscript | result.asCfgNode() = subscript | - subscript.getObject() = mongoDB().asCfgNode() + subscript.getObject() = mongoDBInstance().asCfgNode() ) or - result.(DataFlow::AttrRead).getObject() = mongoDB() + result.(DataFlow::AttrRead).getObject() = mongoDBInstance() ) or exists(DataFlow::TypeTracker t2 | result = mongoCollection(t2).track(t2, t)) From 89eeaf85d50d487a81c464b10a63372c21389e89 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Apr 2022 16:24:21 +0200 Subject: [PATCH 0138/1618] Python: Handle `get_database` on `MongoClient` instance --- .../experimental/semmle/python/frameworks/NoSQL.qll | 4 ++++ .../Security/CWE-943/NoSQLInjection.expected | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll b/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll index 1fd1075b7d4..1be6cc6f74b 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll @@ -61,6 +61,10 @@ private module NoSql { result = mongoEngine().getMember("connection").getMember(["get_db", "connect"]).getACall() or result = flask_MongoEngine().getMember("get_db").getACall() + or + // see https://pymongo.readthedocs.io/en/stable/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoClient.get_default_database + // see https://pymongo.readthedocs.io/en/stable/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoClient.get_database + result = mongoClientInstance().getMember(["get_default_database", "get_database"]).getACall() ) or exists(DataFlow::TypeTracker t2 | result = mongoDBInstance(t2).track(t2, t)) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected index c39aea2345d..677d21b69e7 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected @@ -53,6 +53,10 @@ edges | pymongo_test.py:29:27:29:33 | ControlFlowNode for request | pymongo_test.py:29:27:29:38 | ControlFlowNode for Attribute | | pymongo_test.py:29:27:29:38 | ControlFlowNode for Attribute | pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | | pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | pymongo_test.py:29:16:29:51 | ControlFlowNode for Attribute() | +| pymongo_test.py:38:16:38:51 | ControlFlowNode for Attribute() | pymongo_test.py:42:34:42:73 | ControlFlowNode for Dict | +| pymongo_test.py:38:27:38:33 | ControlFlowNode for request | pymongo_test.py:38:27:38:38 | ControlFlowNode for Attribute | +| pymongo_test.py:38:27:38:38 | ControlFlowNode for Attribute | pymongo_test.py:38:27:38:50 | ControlFlowNode for Subscript | +| pymongo_test.py:38:27:38:50 | ControlFlowNode for Subscript | pymongo_test.py:38:16:38:51 | ControlFlowNode for Attribute() | nodes | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | flask_mongoengine_bad.py:19:21:19:32 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | @@ -119,6 +123,11 @@ nodes | pymongo_test.py:29:27:29:38 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | | pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | semmle.label | ControlFlowNode for Dict | +| pymongo_test.py:38:16:38:51 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| pymongo_test.py:38:27:38:33 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| pymongo_test.py:38:27:38:38 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| pymongo_test.py:38:27:38:50 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| pymongo_test.py:42:34:42:73 | ControlFlowNode for Dict | semmle.label | ControlFlowNode for Dict | subpaths #select | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | $@ NoSQL query contains an unsanitized $@ | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | This | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | user-provided value | @@ -132,3 +141,4 @@ subpaths | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | This | mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | user-provided value | | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | pymongo_test.py:12:21:12:27 | ControlFlowNode for request | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | This | pymongo_test.py:12:21:12:27 | ControlFlowNode for request | user-provided value | | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | pymongo_test.py:29:27:29:33 | ControlFlowNode for request | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | This | pymongo_test.py:29:27:29:33 | ControlFlowNode for request | user-provided value | +| pymongo_test.py:42:34:42:73 | ControlFlowNode for Dict | pymongo_test.py:38:27:38:33 | ControlFlowNode for request | pymongo_test.py:42:34:42:73 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | pymongo_test.py:42:34:42:73 | ControlFlowNode for Dict | This | pymongo_test.py:38:27:38:33 | ControlFlowNode for request | user-provided value | From ec66f26ade803c7d999dd852d93f282df1e11b4f Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Apr 2022 16:32:20 +0200 Subject: [PATCH 0139/1618] Python: Handle `get_collection` on pymongo DB --- .../semmle/python/frameworks/NoSQL.qll | 6 ++++++ .../Security/CWE-943/NoSQLInjection.expected | 20 +++++++++---------- .../Security/CWE-943/pymongo_test.py | 3 ++- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll b/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll index 1be6cc6f74b..fa135009ed0 100644 --- a/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll +++ b/python/ql/src/experimental/semmle/python/frameworks/NoSQL.qll @@ -96,6 +96,12 @@ private module NoSql { ) or result.(DataFlow::AttrRead).getObject() = mongoDBInstance() + or + // see https://pymongo.readthedocs.io/en/stable/api/pymongo/database.html#pymongo.database.Database.get_collection + // see https://pymongo.readthedocs.io/en/stable/api/pymongo/database.html#pymongo.database.Database.create_collection + result + .(DataFlow::MethodCallNode) + .calls(mongoDBInstance(), ["get_collection", "create_collection"]) ) or exists(DataFlow::TypeTracker t2 | result = mongoCollection(t2).track(t2, t)) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected b/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected index 677d21b69e7..2922cc9f97e 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-943/NoSQLInjection.expected @@ -53,10 +53,10 @@ edges | pymongo_test.py:29:27:29:33 | ControlFlowNode for request | pymongo_test.py:29:27:29:38 | ControlFlowNode for Attribute | | pymongo_test.py:29:27:29:38 | ControlFlowNode for Attribute | pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | | pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | pymongo_test.py:29:16:29:51 | ControlFlowNode for Attribute() | -| pymongo_test.py:38:16:38:51 | ControlFlowNode for Attribute() | pymongo_test.py:42:34:42:73 | ControlFlowNode for Dict | -| pymongo_test.py:38:27:38:33 | ControlFlowNode for request | pymongo_test.py:38:27:38:38 | ControlFlowNode for Attribute | -| pymongo_test.py:38:27:38:38 | ControlFlowNode for Attribute | pymongo_test.py:38:27:38:50 | ControlFlowNode for Subscript | -| pymongo_test.py:38:27:38:50 | ControlFlowNode for Subscript | pymongo_test.py:38:16:38:51 | ControlFlowNode for Attribute() | +| pymongo_test.py:39:16:39:51 | ControlFlowNode for Attribute() | pymongo_test.py:43:34:43:73 | ControlFlowNode for Dict | +| pymongo_test.py:39:27:39:33 | ControlFlowNode for request | pymongo_test.py:39:27:39:38 | ControlFlowNode for Attribute | +| pymongo_test.py:39:27:39:38 | ControlFlowNode for Attribute | pymongo_test.py:39:27:39:50 | ControlFlowNode for Subscript | +| pymongo_test.py:39:27:39:50 | ControlFlowNode for Subscript | pymongo_test.py:39:16:39:51 | ControlFlowNode for Attribute() | nodes | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | | flask_mongoengine_bad.py:19:21:19:32 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | @@ -123,11 +123,11 @@ nodes | pymongo_test.py:29:27:29:38 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | | pymongo_test.py:29:27:29:50 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | semmle.label | ControlFlowNode for Dict | -| pymongo_test.py:38:16:38:51 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | -| pymongo_test.py:38:27:38:33 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | -| pymongo_test.py:38:27:38:38 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | -| pymongo_test.py:38:27:38:50 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | -| pymongo_test.py:42:34:42:73 | ControlFlowNode for Dict | semmle.label | ControlFlowNode for Dict | +| pymongo_test.py:39:16:39:51 | ControlFlowNode for Attribute() | semmle.label | ControlFlowNode for Attribute() | +| pymongo_test.py:39:27:39:33 | ControlFlowNode for request | semmle.label | ControlFlowNode for request | +| pymongo_test.py:39:27:39:38 | ControlFlowNode for Attribute | semmle.label | ControlFlowNode for Attribute | +| pymongo_test.py:39:27:39:50 | ControlFlowNode for Subscript | semmle.label | ControlFlowNode for Subscript | +| pymongo_test.py:43:34:43:73 | ControlFlowNode for Dict | semmle.label | ControlFlowNode for Dict | subpaths #select | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | $@ NoSQL query contains an unsanitized $@ | flask_mongoengine_bad.py:22:34:22:44 | ControlFlowNode for json_search | This | flask_mongoengine_bad.py:19:21:19:27 | ControlFlowNode for request | user-provided value | @@ -141,4 +141,4 @@ subpaths | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | mongoengine_bad.py:61:29:61:49 | ControlFlowNode for Dict | This | mongoengine_bad.py:57:21:57:27 | ControlFlowNode for request | user-provided value | | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | pymongo_test.py:12:21:12:27 | ControlFlowNode for request | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | pymongo_test.py:15:42:15:62 | ControlFlowNode for Dict | This | pymongo_test.py:12:21:12:27 | ControlFlowNode for request | user-provided value | | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | pymongo_test.py:29:27:29:33 | ControlFlowNode for request | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | pymongo_test.py:33:34:33:73 | ControlFlowNode for Dict | This | pymongo_test.py:29:27:29:33 | ControlFlowNode for request | user-provided value | -| pymongo_test.py:42:34:42:73 | ControlFlowNode for Dict | pymongo_test.py:38:27:38:33 | ControlFlowNode for request | pymongo_test.py:42:34:42:73 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | pymongo_test.py:42:34:42:73 | ControlFlowNode for Dict | This | pymongo_test.py:38:27:38:33 | ControlFlowNode for request | user-provided value | +| pymongo_test.py:43:34:43:73 | ControlFlowNode for Dict | pymongo_test.py:39:27:39:33 | ControlFlowNode for request | pymongo_test.py:43:34:43:73 | ControlFlowNode for Dict | $@ NoSQL query contains an unsanitized $@ | pymongo_test.py:43:34:43:73 | ControlFlowNode for Dict | This | pymongo_test.py:39:27:39:33 | ControlFlowNode for request | user-provided value | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_test.py b/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_test.py index 052c1c65d4f..ecf53ec4f9a 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_test.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-943/pymongo_test.py @@ -35,10 +35,11 @@ def bad2(): @app.route("/bad3") def bad3(): + # using `get_` methods instead of subscript/attribute lookups event_id = json.loads(request.args['event_id']) client = MongoClient("localhost", 27017, maxPoolSize=50) db = client.get_database(name="localhost") - collection = db['collection'] + collection = db.get_collection("collection") cursor = collection.find_one({"$where": f"this._id == '${event_id}'"}) From 517444b5ff3067a178c57bdda5d523bd8c16316c Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Thu, 7 Apr 2022 16:42:40 +0200 Subject: [PATCH 0140/1618] Python: Fix `SimpleXmlRpcServer.expected` --- .../CWE-611-SimpleXmlRpcServer/SimpleXmlRpcServer.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-611-SimpleXmlRpcServer/SimpleXmlRpcServer.expected b/python/ql/test/experimental/query-tests/Security/CWE-611-SimpleXmlRpcServer/SimpleXmlRpcServer.expected index 4a08d61c47a..5f848fb56bb 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-611-SimpleXmlRpcServer/SimpleXmlRpcServer.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-611-SimpleXmlRpcServer/SimpleXmlRpcServer.expected @@ -1 +1 @@ -| xmlrpc_server.py:7:10:7:48 | ControlFlowNode for SimpleXMLRPCServer() | SimpleXMLRPCServer is vulnerable to: Billion Laughs, Quadratic Blowup. | +| xmlrpc_server.py:7:10:7:48 | ControlFlowNode for SimpleXMLRPCServer() | SimpleXMLRPCServer is vulnerable to XML bombs | From eccd97c7b7caf33d44ee18e60b7096781ac10585 Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Sat, 9 Apr 2022 01:14:15 +0000 Subject: [PATCH 0141/1618] Query to detect unsafe getResource calls in Java EE applications --- .../semmle/code/java/frameworks/Servlets.qll | 15 +++ .../CWE/CWE-552/UnsafeResourceGet.java | 14 +++ .../CWE/CWE-552/UnsafeUrlForward.qhelp | 10 ++ .../Security/CWE/CWE-552/UnsafeUrlForward.qll | 44 +++++++++ .../semmle/code/java/frameworks/Jsf.qll | 24 +++++ .../security/CWE-552/UnsafeResourceGet.java | 92 +++++++++++++++++++ .../CWE-552/UnsafeUrlForward.expected | 8 ++ 7 files changed, 207 insertions(+) create mode 100644 java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java create mode 100644 java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll create mode 100644 java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java diff --git a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll index de82d49a7aa..57e1137817e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll @@ -377,3 +377,18 @@ class RequestDispatchMethod extends Method { this.hasName(["forward", "include"]) } } + +/** + * The interface `javax.servlet.ServletContext`. + */ +library class ServletContext extends RefType { + ServletContext() { this.hasQualifiedName("javax.servlet", "ServletContext") } +} + +/** The `getResource` and `getResourceAsStream` methods of `ServletContext`. */ +class GetServletResourceMethod extends Method { + GetServletResourceMethod() { + this.getDeclaringType() instanceof ServletContext and + this.hasName(["getResource", "getResourceAsStream"]) + } +} diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java new file mode 100644 index 00000000000..682cdbed0e7 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java @@ -0,0 +1,14 @@ +// BAD: no URI validation +URL url = servletContext.getResource(requestUrl); +InputStream in = url.openStream(); + +InputStream in = request.getServletContext().getResourceAsStream(requestPath); + +// GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix: +// (alternatively use `Path.normalize` instead of checking for `..`) +if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { + InputStream in = request.getServletContext().getResourceAsStream(requestPath); +} + +Path path = Paths.get(requestUrl).normalize().toRealPath(); +URL url = sc.getResource(path.toString()); diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp index 345eca1e5d4..10354c3507e 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp @@ -36,6 +36,13 @@ attacks. It also shows how to remedy the problem by validating the user input. +

    The following examples show an HTTP request parameter or request path being used directly to +retrieve a resource of a Java EE application without validating the input, which allows sensitive +file exposure attacks. It also shows how to remedy the problem by validating the user input. +

    + + +
  • File Disclosure: @@ -47,5 +54,8 @@ attacks. It also shows how to remedy the problem by validating the user input.
  • Micro Focus: File Disclosure: J2EE
  • +
  • + Apache Tomcat 6.0/7.0/8.0/9.0 Servletcontext Getresource/getresourceasstream/getresourcepaths Path Traversal +
  • diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll index f9528ac3750..d92278db69d 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll @@ -1,4 +1,5 @@ import java +import experimental.semmle.code.java.frameworks.Jsf import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.StringPrefixes @@ -18,6 +19,49 @@ private class RequestDispatcherSink extends UnsafeUrlForwardSink { } } +/** The JBoss class `FileResourceManager`. */ +class FileResourceManager extends RefType { + FileResourceManager() { + this.hasQualifiedName("io.undertow.server.handlers.resource", "FileResourceManager") + } +} + +/** The JBoss method `getResource` of `FileResourceManager`. */ +class GetWildflyResourceMethod extends Method { + GetWildflyResourceMethod() { + this.getDeclaringType().getASupertype*() instanceof FileResourceManager and + this.hasName("getResource") + } +} + +/** The JBoss class `VirtualFile`. */ +class VirtualFile extends RefType { + VirtualFile() { this.hasQualifiedName("org.jboss.vfs", "VirtualFile") } +} + +/** The JBoss method `getChild` of `FileResourceManager`. */ +class GetVirtualFileMethod extends Method { + GetVirtualFileMethod() { + this.getDeclaringType().getASupertype*() instanceof VirtualFile and + this.hasName("getChild") + } +} + +/** An argument to `getResource()` or `getResourceAsStream()`. */ +private class GetResourceSink extends UnsafeUrlForwardSink { + GetResourceSink() { + exists(MethodAccess ma | + ( + ma.getMethod() instanceof GetServletResourceMethod or + ma.getMethod() instanceof GetFacesResourceMethod or + ma.getMethod() instanceof GetWildflyResourceMethod or + ma.getMethod() instanceof GetVirtualFileMethod + ) and + ma.getArgument(0) = this.asExpr() + ) + } +} + /** An argument to `new ModelAndView` or `ModelAndView.setViewName`. */ private class SpringModelAndViewSink extends UnsafeUrlForwardSink { SpringModelAndViewSink() { diff --git a/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll b/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll new file mode 100644 index 00000000000..9035bda3422 --- /dev/null +++ b/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll @@ -0,0 +1,24 @@ +/** + * Provides classes and predicates for working with the Java Server Faces (JSF). + */ + +import semmle.code.java.Type + +/** + * The JSF class `FacesContext` for processing HTTP requests. + */ +class ExternalContext extends RefType { + ExternalContext() { + this.hasQualifiedName(["javax.faces.context", "jakarta.faces.context"], "ExternalContext") + } +} + +/** + * The methods `getResource()` and `getResourceAsStream()` declared in JSF `ExternalContext`. + */ +class GetFacesResourceMethod extends Method { + GetFacesResourceMethod() { + this.getDeclaringType().getASupertype*() instanceof ExternalContext and + this.hasName(["getResource", "getResourceAsStream"]) + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java new file mode 100644 index 00000000000..996f00a8aaf --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java @@ -0,0 +1,92 @@ +import java.io.InputStream; +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.net.URL; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.ServletOutputStream; +import javax.servlet.ServletException; +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; + +public class UnsafeResourceGet extends HttpServlet { + @Override + // BAD: getResource constructed from `ServletContext` without input validation + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + ServletOutputStream out = response.getOutputStream(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + URL url = sc.getResource(requestUrl); + + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + + // GOOD: getResource constructed from `ServletContext` with input validation + protected void doGetGood(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + ServletOutputStream out = response.getOutputStream(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + Path path = Paths.get(requestUrl).normalize().toRealPath(); + URL url = sc.getResource(path.toString()); + + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + + @Override + // BAD: getResourceAsStream constructed from `ServletContext` without input validation + protected void doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestPath = request.getParameter("requestPath"); + ServletOutputStream out = response.getOutputStream(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + InputStream in = request.getServletContext().getResourceAsStream(requestPath); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + + // GOOD: getResourceAsStream constructed from `ServletContext` with input validation + protected void doPostGood(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestPath = request.getParameter("requestPath"); + ServletOutputStream out = response.getOutputStream(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { + InputStream in = request.getServletContext().getResourceAsStream(requestPath); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected index 185508dfc57..3d5e7e9e997 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected @@ -1,5 +1,7 @@ edges | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | +| UnsafeResourceGet.java:20:23:20:56 | getParameter(...) : String | UnsafeResourceGet.java:26:28:26:37 | requestUrl | +| UnsafeResourceGet.java:60:24:60:58 | getParameter(...) : String | UnsafeResourceGet.java:66:68:66:78 | requestPath | | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | @@ -19,6 +21,10 @@ edges nodes | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | semmle.label | getServletPath(...) : String | | UnsafeRequestPath.java:23:33:23:36 | path | semmle.label | path | +| UnsafeResourceGet.java:20:23:20:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:26:28:26:37 | requestUrl | semmle.label | requestUrl | +| UnsafeResourceGet.java:60:24:60:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:66:68:66:78 | requestPath | semmle.label | requestPath | | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | semmle.label | returnURL | | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | @@ -49,6 +55,8 @@ nodes subpaths #select | UnsafeRequestPath.java:23:33:23:36 | path | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | Potentially untrusted URL forward due to $@. | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) | user-provided value | +| UnsafeResourceGet.java:26:28:26:37 | requestUrl | UnsafeResourceGet.java:20:23:20:56 | getParameter(...) : String | UnsafeResourceGet.java:26:28:26:37 | requestUrl | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:20:23:20:56 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:66:68:66:78 | requestPath | UnsafeResourceGet.java:60:24:60:58 | getParameter(...) : String | UnsafeResourceGet.java:66:68:66:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:60:24:60:58 | getParameter(...) | user-provided value | | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) | user-provided value | | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) | user-provided value | | UnsafeServletRequestDispatch.java:76:53:76:56 | path | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) | user-provided value | From 0f1582f3f67e17dd9d99c863e215e171e672b300 Mon Sep 17 00:00:00 2001 From: bananabr Date: Sat, 9 Apr 2022 22:33:30 -0500 Subject: [PATCH 0142/1618] included JavaScript drag and drop API Xss sources --- javascript/ql/lib/javascript.qll | 1 + .../javascript/frameworks/DragAndDrop.qll | 63 +++++++++++++++++++ .../Security/CWE-079/DomBasedXss/Xss.expected | 35 +++++++++++ .../XssWithAdditionalSources.expected | 31 +++++++++ .../CWE-079/DomBasedXss/dragAndDrop.ts | 34 ++++++++++ 5 files changed, 164 insertions(+) create mode 100644 javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll create mode 100644 javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts diff --git a/javascript/ql/lib/javascript.qll b/javascript/ql/lib/javascript.qll index 75ffa46cf00..95f68b93a37 100644 --- a/javascript/ql/lib/javascript.qll +++ b/javascript/ql/lib/javascript.qll @@ -88,6 +88,7 @@ import semmle.javascript.frameworks.D3 import semmle.javascript.frameworks.data.ModelsAsData import semmle.javascript.frameworks.DateFunctions import semmle.javascript.frameworks.DigitalOcean +import semmle.javascript.frameworks.DragAndDrop import semmle.javascript.frameworks.Electron import semmle.javascript.frameworks.EventEmitter import semmle.javascript.frameworks.Files diff --git a/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll b/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll new file mode 100644 index 00000000000..869f612a259 --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll @@ -0,0 +1,63 @@ +/** + * Provides predicates for reasoning about dragAndDrop data. + */ + +import javascript + +/** + * Gets a jQuery "drop" event. + * E.g. `e` in `$("#foo").on("drop", function(e) { ... })`. + */ +private DataFlow::SourceNode jQueryDropEvent(DataFlow::TypeTracker t) { + t.start() and + exists(DataFlow::CallNode call | + call = JQuery::objectRef().getAMethodCall(["bind", "on", "live", "one", "delegate"]) and + call.getArgument(0).mayHaveStringValue("drop") + | + result = call.getCallback(call.getNumArgument() - 1).getParameter(0) + ) + or + exists(DataFlow::TypeTracker t2 | result = jQueryDropEvent(t2).track(t2, t)) +} + +/** + * Gets a DOM "drop" event. + * E.g. `e` in `document.addEventListener("drop", e => { ... })`. + */ +private DataFlow::SourceNode dropEvent(DataFlow::TypeTracker t) { + t.start() and + exists(DataFlow::CallNode call | call = DOM::domValueRef().getAMemberCall("addEventListener") | + call.getArgument(0).mayHaveStringValue("drop") and + result = call.getCallback(1).getParameter(0) + ) + or + t.start() and + result = jQueryDropEvent(DataFlow::TypeTracker::end()).getAPropertyRead("originalEvent") + or + exists(DataFlow::TypeTracker t2 | result = dropEvent(t2).track(t2, t)) +} + +/** + * Gets a reference to the dragAndDropData DataTransfer object. + * https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API + */ +private DataFlow::SourceNode dragAndDropDataTransferSource(DataFlow::TypeTracker t) { + t.start() and + exists(DataFlow::PropRead read | read = result | + read.getPropertyName() = "dataTransfer" and + read.getBase().getALocalSource() = dropEvent(DataFlow::TypeTracker::end()) + ) + or + exists(DataFlow::TypeTracker t2 | result = dragAndDropDataTransferSource(t2).track(t2, t)) +} + +/** + * A reference to data from the dragAndDrop. Seen as a source for DOM-based XSS. + */ +private class DragAndDropSource extends RemoteFlowSource { + DragAndDropSource() { + this = dragAndDropDataTransferSource(DataFlow::TypeTracker::end()).getAMethodCall("getData") + } + + override string getSourceType() { result = "DragAndDrop data" } +} diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected index 098160b9d4d..8887e22e60d 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected @@ -295,6 +295,26 @@ nodes | dates.js:61:42:61:86 | dayjs.s ... (taint) | | dates.js:61:81:61:85 | taint | | dates.js:61:81:61:85 | taint | +| dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | +| dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | +| dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | +| dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | +| dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | +| dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | +| dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | +| dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | +| dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | +| dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | +| dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | +| dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | +| dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | @@ -1318,6 +1338,17 @@ edges | dates.js:61:42:61:86 | dayjs.s ... (taint) | dates.js:61:31:61:88 | `Time i ... aint)}` | | dates.js:61:81:61:85 | taint | dates.js:61:42:61:86 | dayjs.s ... (taint) | | dates.js:61:81:61:85 | taint | dates.js:61:42:61:86 | dayjs.s ... (taint) | +| dragAndDrop.ts:8:11:8:50 | html | dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:8:11:8:50 | html | dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:8:11:8:50 | html | dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:8:11:8:50 | html | dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | +| dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | +| dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | @@ -2082,6 +2113,10 @@ edges | dates.js:57:31:57:101 | `Time i ... aint)}` | dates.js:54:36:54:55 | window.location.hash | dates.js:57:31:57:101 | `Time i ... aint)}` | Cross-site scripting vulnerability due to $@. | dates.js:54:36:54:55 | window.location.hash | user-provided value | | dates.js:59:31:59:87 | `Time i ... aint)}` | dates.js:54:36:54:55 | window.location.hash | dates.js:59:31:59:87 | `Time i ... aint)}` | Cross-site scripting vulnerability due to $@. | dates.js:54:36:54:55 | window.location.hash | user-provided value | | dates.js:61:31:61:88 | `Time i ... aint)}` | dates.js:54:36:54:55 | window.location.hash | dates.js:61:31:61:88 | `Time i ... aint)}` | Cross-site scripting vulnerability due to $@. | dates.js:54:36:54:55 | window.location.hash | user-provided value | +| dragAndDrop.ts:15:25:15:28 | html | dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:15:25:15:28 | html | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | user-provided value | +| dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | user-provided value | +| dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | user-provided value | +| dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | user-provided value | | event-handler-receiver.js:2:31:2:83 | '

    ' | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | Cross-site scripting vulnerability due to $@. | event-handler-receiver.js:2:49:2:61 | location.href | user-provided value | | express.js:7:15:7:33 | req.param("wobble") | express.js:7:15:7:33 | req.param("wobble") | express.js:7:15:7:33 | req.param("wobble") | Cross-site scripting vulnerability due to $@. | express.js:7:15:7:33 | req.param("wobble") | user-provided value | | jquery.js:7:5:7:34 | "
    " | jquery.js:2:17:2:40 | documen ... .search | jquery.js:7:5:7:34 | "
    " | Cross-site scripting vulnerability due to $@. | jquery.js:2:17:2:40 | documen ... .search | user-provided value | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected index 63367061c84..1a8d6e8653c 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected @@ -295,6 +295,26 @@ nodes | dates.js:61:42:61:86 | dayjs.s ... (taint) | | dates.js:61:81:61:85 | taint | | dates.js:61:81:61:85 | taint | +| dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | +| dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | +| dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | +| dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | +| dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | +| dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | +| dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | +| dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | +| dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | +| dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | +| dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | +| dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | +| dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | @@ -1368,6 +1388,17 @@ edges | dates.js:61:42:61:86 | dayjs.s ... (taint) | dates.js:61:31:61:88 | `Time i ... aint)}` | | dates.js:61:81:61:85 | taint | dates.js:61:42:61:86 | dayjs.s ... (taint) | | dates.js:61:81:61:85 | taint | dates.js:61:42:61:86 | dayjs.s ... (taint) | +| dragAndDrop.ts:8:11:8:50 | html | dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:8:11:8:50 | html | dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:8:11:8:50 | html | dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:8:11:8:50 | html | dragAndDrop.ts:15:25:15:28 | html | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:8:11:8:50 | html | +| dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | +| dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | +| dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts new file mode 100644 index 00000000000..b6e68418307 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts @@ -0,0 +1,34 @@ +$("#foo").on("drop", drop); + +function drop(e) { + const { dataTransfer } = e.originalEvent; + if (!dataTransfer) return; + + const text = dataTransfer.getData('text/plain'); + const html = dataTransfer.getData('text/html'); + if (!text && !html) return; + + e.preventDefault(); + + const div = document.createElement('div'); + if (html) { + div.innerHTML = html; // NOT OK + } else { + div.textContent = text; + } + document.body.append(div); +} + +export function install(el: HTMLElement): void { + el.addEventListener('drop', (e) => { + $("#id").html(e.dataTransfer.getData('text/html')); // NOT OK + }) +} + +document.addEventListener('drop', (e) => { + $("#id").html(e.dataTransfer.getData('text/html')); // NOT OK +}); + +$("#foo").bind('drop', (e) => { + $("#id").html(e.originalEvent.dataTransfer.getData('text/html')); // NOT OK +}); \ No newline at end of file From bc5dc6ad50abf2985198118c1c86ebf79f1c844a Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sun, 10 Apr 2022 18:24:26 +0200 Subject: [PATCH 0143/1618] Java: Remove TODO comment for `getRuleExpression()` behavior Predicate behavior has been fixed on `main`. --- java/ql/lib/semmle/code/java/Expr.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 4659d0e78fc..1e6b14fc9e7 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2151,7 +2151,6 @@ class StmtExpr extends Expr { this = any(ForStmt s).getAnUpdate() or // Only applies to SwitchStmt, but not to SwitchExpr, see JLS 17 section 14.11.2 - // TODO: Possibly redundant depending on how https://github.com/github/codeql/issues/8570 is resolved this = any(SwitchStmt s).getACase().getRuleExpression() or // TODO: Workarounds for https://github.com/github/codeql/issues/3605 From 121aad7fd2697266691d53d63bf3a458b6b6aa2f Mon Sep 17 00:00:00 2001 From: bananabr Date: Mon, 11 Apr 2022 12:45:37 -0500 Subject: [PATCH 0144/1618] updated change notes --- .../ql/lib/change-notes/2022-04-11-drag-and-drop-data.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/lib/change-notes/2022-04-11-drag-and-drop-data.md diff --git a/javascript/ql/lib/change-notes/2022-04-11-drag-and-drop-data.md b/javascript/ql/lib/change-notes/2022-04-11-drag-and-drop-data.md new file mode 100644 index 00000000000..ff804280429 --- /dev/null +++ b/javascript/ql/lib/change-notes/2022-04-11-drag-and-drop-data.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The security queries now recognize drag and drop data as a source, enabling the queries to flag additional alerts. From 6713b2c671d55c0e9e99a5aad78837ef34867dd4 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 11 Apr 2022 20:06:12 +0200 Subject: [PATCH 0145/1618] add support for domNode.ondrop for drag-and-drop events --- .../javascript/frameworks/DragAndDrop.qll | 6 +++++ .../Security/CWE-079/DomBasedXss/Xss.expected | 17 +++++++++++++ .../XssWithAdditionalSources.expected | 16 +++++++++++++ .../CWE-079/DomBasedXss/dragAndDrop.ts | 24 ++++++++++++++++++- 4 files changed, 62 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll b/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll index 869f612a259..aa7e67b78c8 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll @@ -32,6 +32,12 @@ private DataFlow::SourceNode dropEvent(DataFlow::TypeTracker t) { ) or t.start() and + exists(DataFlow::PropWrite pw | pw = DOM::domValueRef().getAPropertyWrite() | + pw.getPropertyName() = "ondrop" and + result = pw.getRhs().getABoundFunctionValue(0).getParameter(0) + ) + or + t.start() and result = jQueryDropEvent(DataFlow::TypeTracker::end()).getAPropertyRead("originalEvent") or exists(DataFlow::TypeTracker t2 | result = dropEvent(t2).track(t2, t)) diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected index 8887e22e60d..365679ea8cd 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected @@ -315,6 +315,14 @@ nodes | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | +| dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | +| dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:50:29:50:32 | html | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | @@ -1349,6 +1357,14 @@ edges | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | +| dragAndDrop.ts:43:15:43:54 | html | dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:43:15:43:54 | html | dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:43:15:43:54 | html | dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:43:15:43:54 | html | dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | @@ -2117,6 +2133,7 @@ edges | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | user-provided value | | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | user-provided value | | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | user-provided value | +| dragAndDrop.ts:50:29:50:32 | html | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:50:29:50:32 | html | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | user-provided value | | event-handler-receiver.js:2:31:2:83 | '

    ' | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | Cross-site scripting vulnerability due to $@. | event-handler-receiver.js:2:49:2:61 | location.href | user-provided value | | express.js:7:15:7:33 | req.param("wobble") | express.js:7:15:7:33 | req.param("wobble") | express.js:7:15:7:33 | req.param("wobble") | Cross-site scripting vulnerability due to $@. | express.js:7:15:7:33 | req.param("wobble") | user-provided value | | jquery.js:7:5:7:34 | "
    " | jquery.js:2:17:2:40 | documen ... .search | jquery.js:7:5:7:34 | "
    " | Cross-site scripting vulnerability due to $@. | jquery.js:2:17:2:40 | documen ... .search | user-provided value | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected index 1a8d6e8653c..a8fba9602b7 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected @@ -315,6 +315,14 @@ nodes | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | +| dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | +| dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:50:29:50:32 | html | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | @@ -1399,6 +1407,14 @@ edges | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | +| dragAndDrop.ts:43:15:43:54 | html | dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:43:15:43:54 | html | dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:43:15:43:54 | html | dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:43:15:43:54 | html | dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts index b6e68418307..fcf10a7cd1f 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts @@ -31,4 +31,26 @@ document.addEventListener('drop', (e) => { $("#foo").bind('drop', (e) => { $("#id").html(e.originalEvent.dataTransfer.getData('text/html')); // NOT OK -}); \ No newline at end of file +}); + +(function () { + let div = document.createElement("div"); + div.ondrop = function (e: DragEvent) { + const { dataTransfer } = e; + if (!dataTransfer) return; + + const text = dataTransfer.getData('text/plain'); + const html = dataTransfer.getData('text/html'); + if (!text && !html) return; + + e.preventDefault(); + + const div = document.createElement('div'); + if (html) { + div.innerHTML = html; // NOT OK + } else { + div.textContent = text; + } + document.body.append(div); + } +})(); \ No newline at end of file From aafa8ddc9f3f9d4f9c5b74eccce1c4dcccff98ad Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 11 Apr 2022 20:10:56 +0200 Subject: [PATCH 0146/1618] add support for domNode.onpaste for copy-paste events --- .../javascript/frameworks/Clipboard.qll | 6 +++++ .../Security/CWE-079/DomBasedXss/Xss.expected | 17 +++++++++++++ .../XssWithAdditionalSources.expected | 16 +++++++++++++ .../Security/CWE-079/DomBasedXss/clipboard.ts | 24 ++++++++++++++++++- 4 files changed, 62 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll b/javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll index be7e414eb28..f320da64dca 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll @@ -32,6 +32,12 @@ private DataFlow::SourceNode pasteEvent(DataFlow::TypeTracker t) { ) or t.start() and + exists(DataFlow::PropWrite pw | pw = DOM::domValueRef().getAPropertyWrite() | + pw.getPropertyName() = "onpaste" and + result = pw.getRhs().getABoundFunctionValue(0).getParameter(0) + ) + or + t.start() and result = jQueryPasteEvent(DataFlow::TypeTracker::end()).getAPropertyRead("originalEvent") or exists(DataFlow::TypeTracker t2 | result = pasteEvent(t2).track(t2, t)) diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected index 365679ea8cd..df03c52d130 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected @@ -136,6 +136,14 @@ nodes | clipboard.ts:33:19:33:68 | e.origi ... /html') | | clipboard.ts:33:19:33:68 | e.origi ... /html') | | clipboard.ts:33:19:33:68 | e.origi ... /html') | +| clipboard.ts:43:15:43:55 | html | +| clipboard.ts:43:15:43:55 | html | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | +| clipboard.ts:50:29:50:32 | html | +| clipboard.ts:50:29:50:32 | html | +| clipboard.ts:50:29:50:32 | html | | d3.js:4:12:4:22 | window.name | | d3.js:4:12:4:22 | window.name | | d3.js:4:12:4:22 | window.name | @@ -1158,6 +1166,14 @@ edges | clipboard.ts:24:23:24:58 | e.clipb ... /html') | clipboard.ts:24:23:24:58 | e.clipb ... /html') | | clipboard.ts:29:19:29:54 | e.clipb ... /html') | clipboard.ts:29:19:29:54 | e.clipb ... /html') | | clipboard.ts:33:19:33:68 | e.origi ... /html') | clipboard.ts:33:19:33:68 | e.origi ... /html') | +| clipboard.ts:43:15:43:55 | html | clipboard.ts:50:29:50:32 | html | +| clipboard.ts:43:15:43:55 | html | clipboard.ts:50:29:50:32 | html | +| clipboard.ts:43:15:43:55 | html | clipboard.ts:50:29:50:32 | html | +| clipboard.ts:43:15:43:55 | html | clipboard.ts:50:29:50:32 | html | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | @@ -2109,6 +2125,7 @@ edges | clipboard.ts:24:23:24:58 | e.clipb ... /html') | clipboard.ts:24:23:24:58 | e.clipb ... /html') | clipboard.ts:24:23:24:58 | e.clipb ... /html') | Cross-site scripting vulnerability due to $@. | clipboard.ts:24:23:24:58 | e.clipb ... /html') | user-provided value | | clipboard.ts:29:19:29:54 | e.clipb ... /html') | clipboard.ts:29:19:29:54 | e.clipb ... /html') | clipboard.ts:29:19:29:54 | e.clipb ... /html') | Cross-site scripting vulnerability due to $@. | clipboard.ts:29:19:29:54 | e.clipb ... /html') | user-provided value | | clipboard.ts:33:19:33:68 | e.origi ... /html') | clipboard.ts:33:19:33:68 | e.origi ... /html') | clipboard.ts:33:19:33:68 | e.origi ... /html') | Cross-site scripting vulnerability due to $@. | clipboard.ts:33:19:33:68 | e.origi ... /html') | user-provided value | +| clipboard.ts:50:29:50:32 | html | clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:50:29:50:32 | html | Cross-site scripting vulnerability due to $@. | clipboard.ts:43:22:43:55 | clipboa ... /html') | user-provided value | | d3.js:11:15:11:24 | getTaint() | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | Cross-site scripting vulnerability due to $@. | d3.js:4:12:4:22 | window.name | user-provided value | | d3.js:12:20:12:29 | getTaint() | d3.js:4:12:4:22 | window.name | d3.js:12:20:12:29 | getTaint() | Cross-site scripting vulnerability due to $@. | d3.js:4:12:4:22 | window.name | user-provided value | | d3.js:14:20:14:29 | getTaint() | d3.js:4:12:4:22 | window.name | d3.js:14:20:14:29 | getTaint() | Cross-site scripting vulnerability due to $@. | d3.js:4:12:4:22 | window.name | user-provided value | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected index a8fba9602b7..4f96689637b 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected @@ -136,6 +136,14 @@ nodes | clipboard.ts:33:19:33:68 | e.origi ... /html') | | clipboard.ts:33:19:33:68 | e.origi ... /html') | | clipboard.ts:33:19:33:68 | e.origi ... /html') | +| clipboard.ts:43:15:43:55 | html | +| clipboard.ts:43:15:43:55 | html | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | +| clipboard.ts:50:29:50:32 | html | +| clipboard.ts:50:29:50:32 | html | +| clipboard.ts:50:29:50:32 | html | | d3.js:4:12:4:22 | window.name | | d3.js:4:12:4:22 | window.name | | d3.js:4:12:4:22 | window.name | @@ -1208,6 +1216,14 @@ edges | clipboard.ts:24:23:24:58 | e.clipb ... /html') | clipboard.ts:24:23:24:58 | e.clipb ... /html') | | clipboard.ts:29:19:29:54 | e.clipb ... /html') | clipboard.ts:29:19:29:54 | e.clipb ... /html') | | clipboard.ts:33:19:33:68 | e.origi ... /html') | clipboard.ts:33:19:33:68 | e.origi ... /html') | +| clipboard.ts:43:15:43:55 | html | clipboard.ts:50:29:50:32 | html | +| clipboard.ts:43:15:43:55 | html | clipboard.ts:50:29:50:32 | html | +| clipboard.ts:43:15:43:55 | html | clipboard.ts:50:29:50:32 | html | +| clipboard.ts:43:15:43:55 | html | clipboard.ts:50:29:50:32 | html | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | +| clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts index 93eab788d06..4064a5cd999 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts @@ -31,4 +31,26 @@ document.addEventListener('paste', (e) => { $("#foo").bind('paste', (e) => { $("#id").html(e.originalEvent.clipboardData.getData('text/html')); // NOT OK -}); \ No newline at end of file +}); + +(function () { + let div = document.createElement("div"); + div.onpaste = function (e: ClipboardEvent) { + const { clipboardData } = e; + if (!clipboardData) return; + + const text = clipboardData.getData('text/plain'); + const html = clipboardData.getData('text/html'); + if (!text && !html) return; + + e.preventDefault(); + + const div = document.createElement('div'); + if (html) { + div.innerHTML = html; // NOT OK + } else { + div.textContent = text; + } + document.body.append(div); + } +})(); \ No newline at end of file From 7029802f3bf40e50626725b4680863588b00a881 Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Mon, 11 Apr 2022 21:03:48 +0000 Subject: [PATCH 0147/1618] Add sinks for getClass() and getClassLoader() --- .../CWE/CWE-552/UnsafeResourceGet.java | 2 + .../Security/CWE/CWE-552/UnsafeUrlForward.qll | 18 ++++ .../security/CWE-552/UnsafeResourceGet.java | 97 +++++++++++++++++-- .../CWE-552/UnsafeUrlForward.expected | 24 +++-- 4 files changed, 127 insertions(+), 14 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java index 682cdbed0e7..d40345db3c5 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java @@ -1,8 +1,10 @@ // BAD: no URI validation URL url = servletContext.getResource(requestUrl); +url = getClass().getResource(requestUrl); InputStream in = url.openStream(); InputStream in = request.getServletContext().getResourceAsStream(requestPath); +in = getClass().getClassLoader().getResourceAsStream(requestPath); // GOOD: check for a trusted prefix, ensuring path traversal is not used to erase that prefix: // (alternatively use `Path.normalize` instead of checking for `..`) diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll index d92278db69d..f87617d83f5 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll @@ -19,6 +19,22 @@ private class RequestDispatcherSink extends UnsafeUrlForwardSink { } } +/** The `getResource` and `getResourceAsStream` methods of `Class`. */ +class GetClassResourceMethod extends Method { + GetClassResourceMethod() { + this.getSourceDeclaration().getDeclaringType().hasQualifiedName("java.lang", "Class") and + this.hasName(["getResource", "getResourceAsStream"]) + } +} + +/** The `getResource` and `getResourceAsStream` methods of `ClassLoader`. */ +class GetClassLoaderResourceMethod extends Method { + GetClassLoaderResourceMethod() { + this.getDeclaringType().hasQualifiedName("java.lang", "ClassLoader") and + this.hasName(["getResource", "getResourceAsStream"]) + } +} + /** The JBoss class `FileResourceManager`. */ class FileResourceManager extends RefType { FileResourceManager() { @@ -54,6 +70,8 @@ private class GetResourceSink extends UnsafeUrlForwardSink { ( ma.getMethod() instanceof GetServletResourceMethod or ma.getMethod() instanceof GetFacesResourceMethod or + ma.getMethod() instanceof GetClassResourceMethod or + ma.getMethod() instanceof GetClassLoaderResourceMethod or ma.getMethod() instanceof GetWildflyResourceMethod or ma.getMethod() instanceof GetVirtualFileMethod ) and diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java index 996f00a8aaf..523e5210ee6 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java @@ -1,3 +1,5 @@ +package com.example; + import java.io.InputStream; import java.io.IOException; import java.nio.file.Path; @@ -13,6 +15,8 @@ import javax.servlet.ServletConfig; import javax.servlet.ServletContext; public class UnsafeResourceGet extends HttpServlet { + private static final String BASE_PATH = "/pages"; + @Override // BAD: getResource constructed from `ServletContext` without input validation protected void doGet(HttpServletRequest request, HttpServletResponse response) @@ -23,6 +27,7 @@ public class UnsafeResourceGet extends HttpServlet { ServletConfig cfg = getServletConfig(); ServletContext sc = cfg.getServletContext(); + // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file URL url = sc.getResource(requestUrl); InputStream in = url.openStream(); @@ -43,13 +48,15 @@ public class UnsafeResourceGet extends HttpServlet { ServletContext sc = cfg.getServletContext(); Path path = Paths.get(requestUrl).normalize().toRealPath(); - URL url = sc.getResource(path.toString()); + if (path.startsWith(BASE_PATH)) { + URL url = sc.getResource(path.toString()); - InputStream in = url.openStream(); - byte[] buf = new byte[4 * 1024]; // 4K buffer - int bytesRead; - while ((bytesRead = in.read(buf)) != -1) { - out.write(buf, 0, bytesRead); + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } } } @@ -63,6 +70,7 @@ public class UnsafeResourceGet extends HttpServlet { ServletConfig cfg = getServletConfig(); ServletContext sc = cfg.getServletContext(); + // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file InputStream in = request.getServletContext().getResourceAsStream(requestPath); byte[] buf = new byte[4 * 1024]; // 4K buffer int bytesRead; @@ -89,4 +97,81 @@ public class UnsafeResourceGet extends HttpServlet { } } } + + @Override + // BAD: getResource constructed from `Class` without input validation + protected void doHead(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + ServletOutputStream out = response.getOutputStream(); + + // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file + // Note the class is in two levels of subpackages and `Class.loadResource` starts from its own directory + URL url = getClass().getResource(requestUrl); + + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + + // GOOD: getResource constructed from `Class` with input validation + protected void doHeadGood(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + ServletOutputStream out = response.getOutputStream(); + + Path path = Paths.get(requestUrl).normalize().toRealPath(); + if (path.startsWith(BASE_PATH)) { + URL url = getClass().getResource(path.toString()); + + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + } + + @Override + // BAD: getResourceAsStream constructed from `ClassLoader` without input validation + protected void doPut(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestPath = request.getParameter("requestPath"); + ServletOutputStream out = response.getOutputStream(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + // A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file + // Note the class is in two levels of subpackages and `ClassLoader.getResourceAsStream` starts from its own directory + InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + + // GOOD: getResourceAsStream constructed from `ClassLoader` with input validation + protected void doPutGood(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestPath = request.getParameter("requestPath"); + ServletOutputStream out = response.getOutputStream(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { + InputStream in = getClass().getClassLoader().getResourceAsStream(requestPath); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + } } diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected index 3d5e7e9e997..ddbfd3cb900 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected @@ -1,7 +1,9 @@ edges | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | -| UnsafeResourceGet.java:20:23:20:56 | getParameter(...) : String | UnsafeResourceGet.java:26:28:26:37 | requestUrl | -| UnsafeResourceGet.java:60:24:60:58 | getParameter(...) : String | UnsafeResourceGet.java:66:68:66:78 | requestPath | +| UnsafeResourceGet.java:24:23:24:56 | getParameter(...) : String | UnsafeResourceGet.java:31:28:31:37 | requestUrl | +| UnsafeResourceGet.java:67:24:67:58 | getParameter(...) : String | UnsafeResourceGet.java:74:68:74:78 | requestPath | +| UnsafeResourceGet.java:105:23:105:56 | getParameter(...) : String | UnsafeResourceGet.java:110:36:110:45 | requestUrl | +| UnsafeResourceGet.java:143:24:143:58 | getParameter(...) : String | UnsafeResourceGet.java:151:68:151:78 | requestPath | | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | @@ -21,10 +23,14 @@ edges nodes | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | semmle.label | getServletPath(...) : String | | UnsafeRequestPath.java:23:33:23:36 | path | semmle.label | path | -| UnsafeResourceGet.java:20:23:20:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:26:28:26:37 | requestUrl | semmle.label | requestUrl | -| UnsafeResourceGet.java:60:24:60:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:66:68:66:78 | requestPath | semmle.label | requestPath | +| UnsafeResourceGet.java:24:23:24:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:31:28:31:37 | requestUrl | semmle.label | requestUrl | +| UnsafeResourceGet.java:67:24:67:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:74:68:74:78 | requestPath | semmle.label | requestPath | +| UnsafeResourceGet.java:105:23:105:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:110:36:110:45 | requestUrl | semmle.label | requestUrl | +| UnsafeResourceGet.java:143:24:143:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:151:68:151:78 | requestPath | semmle.label | requestPath | | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | semmle.label | returnURL | | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | @@ -55,8 +61,10 @@ nodes subpaths #select | UnsafeRequestPath.java:23:33:23:36 | path | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | Potentially untrusted URL forward due to $@. | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) | user-provided value | -| UnsafeResourceGet.java:26:28:26:37 | requestUrl | UnsafeResourceGet.java:20:23:20:56 | getParameter(...) : String | UnsafeResourceGet.java:26:28:26:37 | requestUrl | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:20:23:20:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:66:68:66:78 | requestPath | UnsafeResourceGet.java:60:24:60:58 | getParameter(...) : String | UnsafeResourceGet.java:66:68:66:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:60:24:60:58 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:31:28:31:37 | requestUrl | UnsafeResourceGet.java:24:23:24:56 | getParameter(...) : String | UnsafeResourceGet.java:31:28:31:37 | requestUrl | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:24:23:24:56 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:74:68:74:78 | requestPath | UnsafeResourceGet.java:67:24:67:58 | getParameter(...) : String | UnsafeResourceGet.java:74:68:74:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:67:24:67:58 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:110:36:110:45 | requestUrl | UnsafeResourceGet.java:105:23:105:56 | getParameter(...) : String | UnsafeResourceGet.java:110:36:110:45 | requestUrl | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:105:23:105:56 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:151:68:151:78 | requestPath | UnsafeResourceGet.java:143:24:143:58 | getParameter(...) : String | UnsafeResourceGet.java:151:68:151:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:143:24:143:58 | getParameter(...) | user-provided value | | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) | user-provided value | | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) | user-provided value | | UnsafeServletRequestDispatch.java:76:53:76:56 | path | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) | user-provided value | From 57fac949fdcade3f3aa140a4324e54f1d43184b3 Mon Sep 17 00:00:00 2001 From: bananabr Date: Mon, 11 Apr 2022 16:37:00 -0500 Subject: [PATCH 0148/1618] included ClipboardEvent and DragEvent as XSS sources --- .../2022-04-11-drag-and-drop-data.md | 1 + .../javascript/frameworks/Clipboard.qll | 6 ++++ .../javascript/frameworks/DragAndDrop.qll | 6 ++++ .../Security/CWE-079/DomBasedXss/Xss.expected | 34 ++++++++++++++++++ .../XssWithAdditionalSources.expected | 32 +++++++++++++++++ .../Security/CWE-079/DomBasedXss/clipboard.ts | 35 ++++++++++++++++++- .../CWE-079/DomBasedXss/dragAndDrop.ts | 35 ++++++++++++++++++- 7 files changed, 147 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/change-notes/2022-04-11-drag-and-drop-data.md b/javascript/ql/lib/change-notes/2022-04-11-drag-and-drop-data.md index ff804280429..8d3208ffcd2 100644 --- a/javascript/ql/lib/change-notes/2022-04-11-drag-and-drop-data.md +++ b/javascript/ql/lib/change-notes/2022-04-11-drag-and-drop-data.md @@ -2,3 +2,4 @@ category: minorAnalysis --- * The security queries now recognize drag and drop data as a source, enabling the queries to flag additional alerts. +* The security queries now recognize ClipboardEvent function parameters as a source, enabling the queries to flag additional alerts. diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll b/javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll index f320da64dca..37adafe678f 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll @@ -32,6 +32,12 @@ private DataFlow::SourceNode pasteEvent(DataFlow::TypeTracker t) { ) or t.start() and + exists(DataFlow::ParameterNode pn | + // https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent + pn.hasUnderlyingType("ClipboardEvent") and result = pn + ) + or + t.start() and exists(DataFlow::PropWrite pw | pw = DOM::domValueRef().getAPropertyWrite() | pw.getPropertyName() = "onpaste" and result = pw.getRhs().getABoundFunctionValue(0).getParameter(0) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll b/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll index aa7e67b78c8..0d1516bd809 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll @@ -32,6 +32,12 @@ private DataFlow::SourceNode dropEvent(DataFlow::TypeTracker t) { ) or t.start() and + exists(DataFlow::ParameterNode pn | + // https://developer.mozilla.org/en-US/docs/Web/API/DragEvent + pn.hasUnderlyingType("DragEvent") and result = pn + ) + or + t.start() and exists(DataFlow::PropWrite pw | pw = DOM::domValueRef().getAPropertyWrite() | pw.getPropertyName() = "ondrop" and result = pw.getRhs().getABoundFunctionValue(0).getParameter(0) diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected index df03c52d130..194ce87462b 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected @@ -144,6 +144,14 @@ nodes | clipboard.ts:50:29:50:32 | html | | clipboard.ts:50:29:50:32 | html | | clipboard.ts:50:29:50:32 | html | +| clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | +| clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:73:29:73:39 | droppedHtml | | d3.js:4:12:4:22 | window.name | | d3.js:4:12:4:22 | window.name | | d3.js:4:12:4:22 | window.name | @@ -331,6 +339,14 @@ nodes | dragAndDrop.ts:50:29:50:32 | html | | dragAndDrop.ts:50:29:50:32 | html | | dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | +| dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:73:29:73:39 | droppedHtml | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | @@ -1174,6 +1190,14 @@ edges | clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | | clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | | clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | +| clipboard.ts:71:13:71:62 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:71:13:71:62 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:71:13:71:62 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:71:13:71:62 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | @@ -1381,6 +1405,14 @@ edges | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:61 | droppedHtml | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:61 | droppedHtml | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:61 | droppedHtml | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:61 | droppedHtml | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | @@ -2126,6 +2158,7 @@ edges | clipboard.ts:29:19:29:54 | e.clipb ... /html') | clipboard.ts:29:19:29:54 | e.clipb ... /html') | clipboard.ts:29:19:29:54 | e.clipb ... /html') | Cross-site scripting vulnerability due to $@. | clipboard.ts:29:19:29:54 | e.clipb ... /html') | user-provided value | | clipboard.ts:33:19:33:68 | e.origi ... /html') | clipboard.ts:33:19:33:68 | e.origi ... /html') | clipboard.ts:33:19:33:68 | e.origi ... /html') | Cross-site scripting vulnerability due to $@. | clipboard.ts:33:19:33:68 | e.origi ... /html') | user-provided value | | clipboard.ts:50:29:50:32 | html | clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:50:29:50:32 | html | Cross-site scripting vulnerability due to $@. | clipboard.ts:43:22:43:55 | clipboa ... /html') | user-provided value | +| clipboard.ts:73:29:73:39 | droppedHtml | clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:73:29:73:39 | droppedHtml | Cross-site scripting vulnerability due to $@. | clipboard.ts:71:27:71:62 | e.clipb ... /html') | user-provided value | | d3.js:11:15:11:24 | getTaint() | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | Cross-site scripting vulnerability due to $@. | d3.js:4:12:4:22 | window.name | user-provided value | | d3.js:12:20:12:29 | getTaint() | d3.js:4:12:4:22 | window.name | d3.js:12:20:12:29 | getTaint() | Cross-site scripting vulnerability due to $@. | d3.js:4:12:4:22 | window.name | user-provided value | | d3.js:14:20:14:29 | getTaint() | d3.js:4:12:4:22 | window.name | d3.js:14:20:14:29 | getTaint() | Cross-site scripting vulnerability due to $@. | d3.js:4:12:4:22 | window.name | user-provided value | @@ -2151,6 +2184,7 @@ edges | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | user-provided value | | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:33:19:33:67 | e.origi ... /html') | user-provided value | | dragAndDrop.ts:50:29:50:32 | html | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:50:29:50:32 | html | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | user-provided value | +| dragAndDrop.ts:73:29:73:39 | droppedHtml | dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:73:29:73:39 | droppedHtml | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | user-provided value | | event-handler-receiver.js:2:31:2:83 | '

    ' | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | Cross-site scripting vulnerability due to $@. | event-handler-receiver.js:2:49:2:61 | location.href | user-provided value | | express.js:7:15:7:33 | req.param("wobble") | express.js:7:15:7:33 | req.param("wobble") | express.js:7:15:7:33 | req.param("wobble") | Cross-site scripting vulnerability due to $@. | express.js:7:15:7:33 | req.param("wobble") | user-provided value | | jquery.js:7:5:7:34 | "
    " | jquery.js:2:17:2:40 | documen ... .search | jquery.js:7:5:7:34 | "
    " | Cross-site scripting vulnerability due to $@. | jquery.js:2:17:2:40 | documen ... .search | user-provided value | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected index 4f96689637b..97e6561b05f 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected @@ -144,6 +144,14 @@ nodes | clipboard.ts:50:29:50:32 | html | | clipboard.ts:50:29:50:32 | html | | clipboard.ts:50:29:50:32 | html | +| clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | +| clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:73:29:73:39 | droppedHtml | | d3.js:4:12:4:22 | window.name | | d3.js:4:12:4:22 | window.name | | d3.js:4:12:4:22 | window.name | @@ -331,6 +339,14 @@ nodes | dragAndDrop.ts:50:29:50:32 | html | | dragAndDrop.ts:50:29:50:32 | html | | dragAndDrop.ts:50:29:50:32 | html | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | +| dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:73:29:73:39 | droppedHtml | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:31:2:83 | '

    ' | @@ -1224,6 +1240,14 @@ edges | clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | | clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | | clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:43:15:43:55 | html | +| clipboard.ts:71:13:71:62 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:71:13:71:62 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:71:13:71:62 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:71:13:71:62 | droppedHtml | clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | @@ -1431,6 +1455,14 @@ edges | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | | dragAndDrop.ts:43:22:43:54 | dataTra ... /html') | dragAndDrop.ts:43:15:43:54 | html | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:71:13:71:61 | droppedHtml | dragAndDrop.ts:73:29:73:39 | droppedHtml | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:61 | droppedHtml | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:61 | droppedHtml | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:61 | droppedHtml | +| dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:61 | droppedHtml | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts index 4064a5cd999..c392a156e5b 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts @@ -53,4 +53,37 @@ $("#foo").bind('paste', (e) => { } document.body.append(div); } -})(); \ No newline at end of file +})(); + +async function getClipboardData(e: ClipboardEvent): Promise> { + // Using a set to filter out duplicates. For some reason, dropping URLs duplicates them 3 times (for me) + const dropItems = new Set(); + + // First get all files in the drop event + if (e.clipboardData.files.length > 0) { + // tslint:disable-next-line: prefer-for-of + for (let i = 0; i < e.clipboardData.files.length; i++) { + const file = e.clipboardData.files[i]; + } + } + + if (e.clipboardData.types.includes('text/html')) { + const droppedHtml = e.clipboardData.getData('text/html'); + const container = document.createElement('html'); + container.innerHTML = droppedHtml; + const imgs = container.getElementsByTagName('img'); + if (imgs.length === 1) { + const src = imgs[0].src; + dropItems.add(src); + } + } else if (e.clipboardData.types.includes('text/plain')) { + const plainText = e.clipboardData.getData('text/plain'); + // Check if text is an URL + if (/^https?:\/\//i.test(plainText)) { + dropItems.add(plainText); + } + } + + const imageItems = Array.from(dropItems); + return imageItems; + } \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts index fcf10a7cd1f..487e51c8f8a 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dragAndDrop.ts @@ -53,4 +53,37 @@ $("#foo").bind('drop', (e) => { } document.body.append(div); } -})(); \ No newline at end of file +})(); + +async function getDropData(e: DragEvent): Promise> { + // Using a set to filter out duplicates. For some reason, dropping URLs duplicates them 3 times (for me) + const dropItems = new Set(); + + // First get all files in the drop event + if (e.dataTransfer.files.length > 0) { + // tslint:disable-next-line: prefer-for-of + for (let i = 0; i < e.dataTransfer.files.length; i++) { + const file = e.dataTransfer.files[i]; + } + } + + if (e.dataTransfer.types.includes('text/html')) { + const droppedHtml = e.dataTransfer.getData('text/html'); + const container = document.createElement('html'); + container.innerHTML = droppedHtml; + const imgs = container.getElementsByTagName('img'); + if (imgs.length === 1) { + const src = imgs[0].src; + dropItems.add(src); + } + } else if (e.dataTransfer.types.includes('text/plain')) { + const plainText = e.dataTransfer.getData('text/plain'); + // Check if text is an URL + if (/^https?:\/\//i.test(plainText)) { + dropItems.add(plainText); + } + } + + const imageItems = Array.from(dropItems); + return imageItems; + } \ No newline at end of file From 18532bae54eacb812b86e8c4541ce2ff553e6c6e Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 8 Apr 2022 10:28:30 +0200 Subject: [PATCH 0149/1618] move js/missing-postmessageorigin-verification out of experimental --- .../Security/CWE-020/PostMessageNoOriginCheck.qhelp | 0 .../Security/CWE-020/PostMessageNoOriginCheck.ql | 0 .../Security/CWE-020/examples/postMessageInsufficientCheck.js | 0 .../Security/CWE-020/examples/postMessageNoOriginCheck.js | 0 .../Security/CWE-020/examples/postMessageWithOriginCheck.js | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename javascript/ql/src/{experimental => }/Security/CWE-020/PostMessageNoOriginCheck.qhelp (100%) rename javascript/ql/src/{experimental => }/Security/CWE-020/PostMessageNoOriginCheck.ql (100%) rename javascript/ql/src/{experimental => }/Security/CWE-020/examples/postMessageInsufficientCheck.js (100%) rename javascript/ql/src/{experimental => }/Security/CWE-020/examples/postMessageNoOriginCheck.js (100%) rename javascript/ql/src/{experimental => }/Security/CWE-020/examples/postMessageWithOriginCheck.js (100%) diff --git a/javascript/ql/src/experimental/Security/CWE-020/PostMessageNoOriginCheck.qhelp b/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.qhelp similarity index 100% rename from javascript/ql/src/experimental/Security/CWE-020/PostMessageNoOriginCheck.qhelp rename to javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.qhelp diff --git a/javascript/ql/src/experimental/Security/CWE-020/PostMessageNoOriginCheck.ql b/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.ql similarity index 100% rename from javascript/ql/src/experimental/Security/CWE-020/PostMessageNoOriginCheck.ql rename to javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.ql diff --git a/javascript/ql/src/experimental/Security/CWE-020/examples/postMessageInsufficientCheck.js b/javascript/ql/src/Security/CWE-020/examples/postMessageInsufficientCheck.js similarity index 100% rename from javascript/ql/src/experimental/Security/CWE-020/examples/postMessageInsufficientCheck.js rename to javascript/ql/src/Security/CWE-020/examples/postMessageInsufficientCheck.js diff --git a/javascript/ql/src/experimental/Security/CWE-020/examples/postMessageNoOriginCheck.js b/javascript/ql/src/Security/CWE-020/examples/postMessageNoOriginCheck.js similarity index 100% rename from javascript/ql/src/experimental/Security/CWE-020/examples/postMessageNoOriginCheck.js rename to javascript/ql/src/Security/CWE-020/examples/postMessageNoOriginCheck.js diff --git a/javascript/ql/src/experimental/Security/CWE-020/examples/postMessageWithOriginCheck.js b/javascript/ql/src/Security/CWE-020/examples/postMessageWithOriginCheck.js similarity index 100% rename from javascript/ql/src/experimental/Security/CWE-020/examples/postMessageWithOriginCheck.js rename to javascript/ql/src/Security/CWE-020/examples/postMessageWithOriginCheck.js From ec9c308d0603a2a159fdbbc5bb7d9b0175b7652f Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 8 Apr 2022 10:58:40 +0200 Subject: [PATCH 0150/1618] reorganize the tests in CWE-020 --- .../IncompleteHostnameRegExp.expected | 0 .../{ => IncompleteHostnameRegExp}/IncompleteHostnameRegExp.qlref | 0 .../tst-IncompleteHostnameRegExp.js | 0 .../IncompleteUrlSchemeCheck.expected | 0 .../{ => IncompleteUrlSchemeCheck}/IncompleteUrlSchemeCheck.js | 0 .../{ => IncompleteUrlSchemeCheck}/IncompleteUrlSchemeCheck.qlref | 0 .../IncompleteUrlSchemeCheckGood.js | 0 .../IncompleteUrlSubstringSanitization.expected | 0 .../IncompleteUrlSubstringSanitization.qlref | 0 .../tst-IncompleteUrlSubstringSanitization.js | 0 .../{ => IncorrectSuffixCheck}/IncorrectSuffixCheck.expected | 0 .../CWE-020/{ => IncorrectSuffixCheck}/IncorrectSuffixCheck.qlref | 0 .../{ => IncorrectSuffixCheck}/examples/IncorrectSuffixCheck.js | 0 .../examples/IncorrectSuffixCheckGood.js | 0 .../Security/CWE-020/{ => IncorrectSuffixCheck}/tst.js | 0 .../{ => MissingRegExpAnchor}/MissingRegExpAnchor.expected | 0 .../CWE-020/{ => MissingRegExpAnchor}/MissingRegExpAnchor.qlref | 0 .../CWE-020/{ => MissingRegExpAnchor}/tst-SemiAnchoredRegExp.js | 0 .../CWE-020/{ => MissingRegExpAnchor}/tst-UnanchoredUrlRegExp.js | 0 .../UntrustedDataToExternalAPI.expected | 0 .../UntrustedDataToExternalAPI.qlref | 0 .../tst-UntrustedDataToExternalAPI.js | 0 .../{ => UselessCharacterEscape}/UselessCharacterEscape.expected | 0 .../{ => UselessCharacterEscape}/UselessCharacterEscape.ql | 0 .../UselessRegExpCharacterEscape.expected | 0 .../UselessRegExpCharacterEscape.qlref | 0 .../Security/CWE-020/{ => UselessCharacterEscape}/tst-escapes.js | 0 27 files changed, 0 insertions(+), 0 deletions(-) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncompleteHostnameRegExp}/IncompleteHostnameRegExp.expected (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncompleteHostnameRegExp}/IncompleteHostnameRegExp.qlref (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncompleteHostnameRegExp}/tst-IncompleteHostnameRegExp.js (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncompleteUrlSchemeCheck}/IncompleteUrlSchemeCheck.expected (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncompleteUrlSchemeCheck}/IncompleteUrlSchemeCheck.js (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncompleteUrlSchemeCheck}/IncompleteUrlSchemeCheck.qlref (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncompleteUrlSchemeCheck}/IncompleteUrlSchemeCheckGood.js (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncompleteUrlSubstringSanitization}/IncompleteUrlSubstringSanitization.expected (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncompleteUrlSubstringSanitization}/IncompleteUrlSubstringSanitization.qlref (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncompleteUrlSubstringSanitization}/tst-IncompleteUrlSubstringSanitization.js (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncorrectSuffixCheck}/IncorrectSuffixCheck.expected (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncorrectSuffixCheck}/IncorrectSuffixCheck.qlref (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncorrectSuffixCheck}/examples/IncorrectSuffixCheck.js (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncorrectSuffixCheck}/examples/IncorrectSuffixCheckGood.js (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => IncorrectSuffixCheck}/tst.js (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => MissingRegExpAnchor}/MissingRegExpAnchor.expected (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => MissingRegExpAnchor}/MissingRegExpAnchor.qlref (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => MissingRegExpAnchor}/tst-SemiAnchoredRegExp.js (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => MissingRegExpAnchor}/tst-UnanchoredUrlRegExp.js (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => UntrustedDataToExternalAPI}/UntrustedDataToExternalAPI.expected (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => UntrustedDataToExternalAPI}/UntrustedDataToExternalAPI.qlref (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => UntrustedDataToExternalAPI}/tst-UntrustedDataToExternalAPI.js (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => UselessCharacterEscape}/UselessCharacterEscape.expected (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => UselessCharacterEscape}/UselessCharacterEscape.ql (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => UselessCharacterEscape}/UselessRegExpCharacterEscape.expected (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => UselessCharacterEscape}/UselessRegExpCharacterEscape.qlref (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{ => UselessCharacterEscape}/tst-escapes.js (100%) diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp.expected b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.expected similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp.expected rename to javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.expected diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp.qlref b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.qlref similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp.qlref rename to javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/IncompleteHostnameRegExp.qlref diff --git a/javascript/ql/test/query-tests/Security/CWE-020/tst-IncompleteHostnameRegExp.js b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/tst-IncompleteHostnameRegExp.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/tst-IncompleteHostnameRegExp.js rename to javascript/ql/test/query-tests/Security/CWE-020/IncompleteHostnameRegExp/tst-IncompleteHostnameRegExp.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck.expected b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.expected similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck.expected rename to javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.expected diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck.js b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck.js rename to javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck.qlref b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.qlref similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck.qlref rename to javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheck.qlref diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheckGood.js b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheckGood.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheckGood.js rename to javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSchemeCheck/IncompleteUrlSchemeCheckGood.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization.expected b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/IncompleteUrlSubstringSanitization.expected similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization.expected rename to javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/IncompleteUrlSubstringSanitization.expected diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization.qlref b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/IncompleteUrlSubstringSanitization.qlref similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization.qlref rename to javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/IncompleteUrlSubstringSanitization.qlref diff --git a/javascript/ql/test/query-tests/Security/CWE-020/tst-IncompleteUrlSubstringSanitization.js b/javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/tst-IncompleteUrlSubstringSanitization.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/tst-IncompleteUrlSubstringSanitization.js rename to javascript/ql/test/query-tests/Security/CWE-020/IncompleteUrlSubstringSanitization/tst-IncompleteUrlSubstringSanitization.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck.expected b/javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck/IncorrectSuffixCheck.expected similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck.expected rename to javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck/IncorrectSuffixCheck.expected diff --git a/javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck.qlref b/javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck/IncorrectSuffixCheck.qlref similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck.qlref rename to javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck/IncorrectSuffixCheck.qlref diff --git a/javascript/ql/test/query-tests/Security/CWE-020/examples/IncorrectSuffixCheck.js b/javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck/examples/IncorrectSuffixCheck.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/examples/IncorrectSuffixCheck.js rename to javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck/examples/IncorrectSuffixCheck.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/examples/IncorrectSuffixCheckGood.js b/javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck/examples/IncorrectSuffixCheckGood.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/examples/IncorrectSuffixCheckGood.js rename to javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck/examples/IncorrectSuffixCheckGood.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/tst.js b/javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck/tst.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/tst.js rename to javascript/ql/test/query-tests/Security/CWE-020/IncorrectSuffixCheck/tst.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor.expected b/javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/MissingRegExpAnchor.expected similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor.expected rename to javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/MissingRegExpAnchor.expected diff --git a/javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor.qlref b/javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/MissingRegExpAnchor.qlref similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor.qlref rename to javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/MissingRegExpAnchor.qlref diff --git a/javascript/ql/test/query-tests/Security/CWE-020/tst-SemiAnchoredRegExp.js b/javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/tst-SemiAnchoredRegExp.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/tst-SemiAnchoredRegExp.js rename to javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/tst-SemiAnchoredRegExp.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/tst-UnanchoredUrlRegExp.js b/javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/tst-UnanchoredUrlRegExp.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/tst-UnanchoredUrlRegExp.js rename to javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/tst-UnanchoredUrlRegExp.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI.expected b/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.expected similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI.expected rename to javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.expected diff --git a/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI.qlref b/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.qlref similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI.qlref rename to javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/UntrustedDataToExternalAPI.qlref diff --git a/javascript/ql/test/query-tests/Security/CWE-020/tst-UntrustedDataToExternalAPI.js b/javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/tst-UntrustedDataToExternalAPI.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/tst-UntrustedDataToExternalAPI.js rename to javascript/ql/test/query-tests/Security/CWE-020/UntrustedDataToExternalAPI/tst-UntrustedDataToExternalAPI.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape.expected b/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessCharacterEscape.expected similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape.expected rename to javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessCharacterEscape.expected diff --git a/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape.ql b/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessCharacterEscape.ql similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape.ql rename to javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessCharacterEscape.ql diff --git a/javascript/ql/test/query-tests/Security/CWE-020/UselessRegExpCharacterEscape.expected b/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessRegExpCharacterEscape.expected similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/UselessRegExpCharacterEscape.expected rename to javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessRegExpCharacterEscape.expected diff --git a/javascript/ql/test/query-tests/Security/CWE-020/UselessRegExpCharacterEscape.qlref b/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessRegExpCharacterEscape.qlref similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/UselessRegExpCharacterEscape.qlref rename to javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessRegExpCharacterEscape.qlref diff --git a/javascript/ql/test/query-tests/Security/CWE-020/tst-escapes.js b/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/tst-escapes.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/tst-escapes.js rename to javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/tst-escapes.js From e2badab2513449e1ca75c3454f7563bb3ed0ea8d Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Fri, 8 Apr 2022 11:00:27 +0200 Subject: [PATCH 0151/1618] update expected output after test reorganization --- .../MissingRegExpAnchor/MissingRegExpAnchor.expected | 10 ---------- .../UselessCharacterEscape.expected | 3 --- .../UselessRegExpCharacterEscape.expected | 3 --- 3 files changed, 16 deletions(-) diff --git a/javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/MissingRegExpAnchor.expected b/javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/MissingRegExpAnchor.expected index abc97d625d9..0554d826383 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/MissingRegExpAnchor.expected +++ b/javascript/ql/test/query-tests/Security/CWE-020/MissingRegExpAnchor/MissingRegExpAnchor.expected @@ -1,13 +1,3 @@ -| tst-IncompleteHostnameRegExp.js:2:2:2:24 | /^http: ... le.com/ | This hostname pattern may match any domain name, as it is missing a '$' or '/' at the end. | -| tst-IncompleteHostnameRegExp.js:3:2:3:29 | /^http: ... le.com/ | This hostname pattern may match any domain name, as it is missing a '$' or '/' at the end. | -| tst-IncompleteHostnameRegExp.js:5:2:5:29 | /^http: ... le.net/ | This hostname pattern may match any domain name, as it is missing a '$' or '/' at the end. | -| tst-IncompleteHostnameRegExp.js:6:2:6:43 | /^http: ... b).com/ | This hostname pattern may match any domain name, as it is missing a '$' or '/' at the end. | -| tst-IncompleteHostnameRegExp.js:11:13:11:38 | "^http: ... le.com" | This hostname pattern may match any domain name, as it is missing a '$' or '/' at the end. | -| tst-IncompleteHostnameRegExp.js:12:14:12:39 | "^http: ... le.com" | This hostname pattern may match any domain name, as it is missing a '$' or '/' at the end. | -| tst-IncompleteHostnameRegExp.js:15:22:15:47 | "^http: ... le.com" | This hostname pattern may match any domain name, as it is missing a '$' or '/' at the end. | -| tst-IncompleteHostnameRegExp.js:19:17:19:35 | '^test.example.com' | This hostname pattern may match any domain name, as it is missing a '$' or '/' at the end. | -| tst-IncompleteHostnameRegExp.js:40:2:40:30 | /^https ... le.com/ | This hostname pattern may match any domain name, as it is missing a '$' or '/' at the end. | -| tst-IncompleteHostnameRegExp.js:55:13:55:39 | '^http: ... le.com' | This hostname pattern may match any domain name, as it is missing a '$' or '/' at the end. | | tst-SemiAnchoredRegExp.js:3:2:3:7 | /^a\|b/ | Misleading operator precedence. The subexpression '^a' is anchored at the beginning, but the other parts of this regular expression are not | | tst-SemiAnchoredRegExp.js:6:2:6:9 | /^a\|b\|c/ | Misleading operator precedence. The subexpression '^a' is anchored at the beginning, but the other parts of this regular expression are not | | tst-SemiAnchoredRegExp.js:12:2:12:9 | /^a\|(b)/ | Misleading operator precedence. The subexpression '^a' is anchored at the beginning, but the other parts of this regular expression are not | diff --git a/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessCharacterEscape.expected b/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessCharacterEscape.expected index 39084b5867e..6cd6e27b0ed 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessCharacterEscape.expected +++ b/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessCharacterEscape.expected @@ -1,6 +1,3 @@ -| tst-IncompleteHostnameRegExp.js:42:13:42:65 | '^http[ ... \\/(.+)' | The escape sequence '\\/' is equivalent to just '/'. | -| tst-SemiAnchoredRegExp.js:72:13:72:40 | '^good\\ ... \\\\.com' | The escape sequence '\\.' is equivalent to just '.'. | -| tst-SemiAnchoredRegExp.js:109:2:109:45 | /^((\\+\| ... ?\\d\\d)/ | The escape sequence '\\:' is equivalent to just ':'. | | tst-escapes.js:19:8:19:11 | "\\ " | The escape sequence '\\ ' is equivalent to just ' '. | | tst-escapes.js:20:1:20:54 | /\\a\\b\\c ... x\\y\\z"/ | The escape sequence '\\a' is equivalent to just 'a'. | | tst-escapes.js:20:1:20:54 | /\\a\\b\\c ... x\\y\\z"/ | The escape sequence '\\e' is equivalent to just 'e'. | diff --git a/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessRegExpCharacterEscape.expected b/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessRegExpCharacterEscape.expected index d37ee6a0e28..f7badbcbd86 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessRegExpCharacterEscape.expected +++ b/javascript/ql/test/query-tests/Security/CWE-020/UselessCharacterEscape/UselessRegExpCharacterEscape.expected @@ -1,6 +1,3 @@ -| tst-IncompleteHostnameRegExp.js:55:26:55:27 | '\\.' is equivalent to just '.', so the sequence may still represent a meta-character | The escape sequence '\\.' is equivalent to just '.', so the sequence may still represent a meta-character when it is used in a $@. | tst-IncompleteHostnameRegExp.js:55:13:55:39 | '^http: ... le.com' | regular expression | -| tst-SemiAnchoredRegExp.js:70:19:70:20 | '\\.' is equivalent to just '.', so the sequence may still represent a meta-character | The escape sequence '\\.' is equivalent to just '.', so the sequence may still represent a meta-character when it is used in a $@. | tst-SemiAnchoredRegExp.js:70:13:70:36 | '^good\\ ... r\\.com' | regular expression | -| tst-SemiAnchoredRegExp.js:70:31:70:32 | '\\.' is equivalent to just '.', so the sequence may still represent a meta-character | The escape sequence '\\.' is equivalent to just '.', so the sequence may still represent a meta-character when it is used in a $@. | tst-SemiAnchoredRegExp.js:70:13:70:36 | '^good\\ ... r\\.com' | regular expression | | tst-escapes.js:13:11:13:12 | '\\b' is a backspace, and not a word-boundary assertion | The escape sequence '\\b' is a backspace, and not a word-boundary assertion when it is used in a $@. | tst-escapes.js:13:8:13:61 | "\\a\\b\\c ... \\x\\y\\z" | regular expression | | tst-escapes.js:13:13:13:14 | '\\c' is equivalent to just 'c', so the sequence is not a character class | The escape sequence '\\c' is equivalent to just 'c', so the sequence is not a character class when it is used in a $@. | tst-escapes.js:13:8:13:61 | "\\a\\b\\c ... \\x\\y\\z" | regular expression | | tst-escapes.js:13:15:13:16 | '\\d' is equivalent to just 'd', so the sequence is not a character class | The escape sequence '\\d' is equivalent to just 'd', so the sequence is not a character class when it is used in a $@. | tst-escapes.js:13:8:13:61 | "\\a\\b\\c ... \\x\\y\\z" | regular expression | From 2d6d304d7c973c2a8334518a2f0edcd06f9a6c2d Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 12 Apr 2022 13:15:31 +0200 Subject: [PATCH 0152/1618] add `InclusionTest` to `PostMessageEventSanitizer` --- .../javascript/dataflow/TaintTracking.qll | 18 ++++++++++++------ .../CWE-079/DomBasedXss/addEventListener.js | 13 +++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/TaintTracking.qll b/javascript/ql/lib/semmle/javascript/dataflow/TaintTracking.qll index 184e8a255a7..45a68e39357 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/TaintTracking.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/TaintTracking.qll @@ -1225,19 +1225,25 @@ module TaintTracking { * An equality test on `e.origin` or `e.source` where `e` is a `postMessage` event object, * considered as a sanitizer for `e`. */ - private class PostMessageEventSanitizer extends AdditionalSanitizerGuardNode, DataFlow::ValueNode { + private class PostMessageEventSanitizer extends AdditionalSanitizerGuardNode { VarAccess event; - override EqualityTest astNode; + boolean polarity; PostMessageEventSanitizer() { - exists(string prop | prop = "origin" or prop = "source" | - astNode.getAnOperand().(PropAccess).accesses(event, prop) and - event.mayReferToParameter(any(PostMessageEventHandler h).getEventParameter()) + event.mayReferToParameter(any(PostMessageEventHandler h).getEventParameter()) and + exists(DataFlow::PropRead read | read.accesses(event.flow(), ["origin", "source"]) | + exists(EqualityTest test | polarity = test.getPolarity() and this.getAstNode() = test | + test.getAnOperand().flow() = read + ) + or + exists(InclusionTest test | polarity = test.getPolarity() and this = test | + test.getContainedNode() = read + ) ) } override predicate sanitizes(boolean outcome, Expr e) { - outcome = astNode.getPolarity() and + outcome = polarity and e = event } diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/addEventListener.js b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/addEventListener.js index fbb1dcfe01d..97d21371d08 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/addEventListener.js +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/addEventListener.js @@ -14,4 +14,17 @@ function test() { } window.addEventListener("message", foo.bind(null, {data: 'items'})); + + window.onmessage = e => { + if (e.origin !== "https://foobar.com") { + return; + } + document.write(e.data); // OK - there is an origin check + } + + window.onmessage = e => { + if (mySet.includes(e.origin)) { + document.write(e.data); // OK - there is an origin check + } + } } From 591fcda8629ae65a5ea55df736819c540b972c6a Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 12 Apr 2022 11:57:33 +0200 Subject: [PATCH 0153/1618] various improvements to the js/missing-origin-verification query --- .../CWE-020/PostMessageNoOriginCheck.qhelp | 25 +++-- .../CWE-020/PostMessageNoOriginCheck.ql | 105 ++++++++++-------- .../examples/postMessageInsufficientCheck.js | 14 --- .../examples/postMessageWithOriginCheck.js | 2 +- .../PostMessageNoOriginCheck.expected | 3 + .../PostMessageNoOriginCheck.qlref | 1 + .../Security/CWE-020/PostMessage/tst.js | 64 +++++++++++ 7 files changed, 142 insertions(+), 72 deletions(-) delete mode 100644 javascript/ql/src/Security/CWE-020/examples/postMessageInsufficientCheck.js create mode 100644 javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.expected create mode 100644 javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.qlref create mode 100644 javascript/ql/test/query-tests/Security/CWE-020/PostMessage/tst.js diff --git a/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.qhelp b/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.qhelp index b8bcf242b55..1151e59e835 100644 --- a/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.qhelp +++ b/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.qhelp @@ -5,26 +5,31 @@ -

    If you use cross-origin communication between Window objects and do expect to receive messages from other sites, always verify the sender's identity using the origin and possibly source properties of the recevied `MessageEvent`.

    - -

    Unexpected behaviours, like `DOM-based XSS` could occur, if the event handler for incoming data does not check the origin of the data received and handles the data in an unsafe way.

    +

    +The "message" event is used to send messages between windows. +An untrusted origin is allowed to send messages to a trusted window, and if the origin +is not checked that can lead to various security issues. +

    -Always verify the sender's identity of incoming messages. +Always verify the origin of incoming messages.

    -
    -

    In the first example, the `MessageEvent.data` is passed to the `eval` function withouth checking the origin. This means that any window can send arbitrary messages that will be executed in the window receiving the message

    +

    +The example below uses a received message to execute some code. However, the +origin of the message is not checked, so it might be possible for an attacker +to execute arbitrary code. +

    -

    In the second example, the `MessageEvent.origin` is verified with an unsecure check. For example, using `event.origin.indexOf('www.example.com') > -1` can be bypassed because the string `www.example.com` could appear anywhere in `event.origin` (i.e. `www.example.com.mydomain.com`)

    - - -

    In the third example, the `MessageEvent.origin` is properly checked against a trusted origin.

    +

    +The example is fixed below, where the origin is checked to be trusted. +It is therefore not possible for an attacker to attack using an untrusted origin. +

    diff --git a/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.ql b/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.ql index 43d46d9133b..44d6ae6a18a 100644 --- a/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.ql +++ b/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.ql @@ -1,62 +1,73 @@ /** - * @name Missing `MessageEvent.origin` verification in `postMessage` handlers - * @description Missing the `MessageEvent.origin` verification in `postMessage` handlers, allows any windows to send arbitrary data to the `MessageEvent` listener. - * This could lead to unexpected behavior, especially when `MessageEvent.data` is used in an unsafe way. + * @name Missing origin verification in `postMessage` handler + * @description Missing origin verification in a `postMessage` handler allows any windows to send arbitrary data to the handler. * @kind problem * @problem.severity warning - * @precision high - * @id js/missing-postmessageorigin-verification + * @security-severity 5 + * @precision medium + * @id js/missing-origin-verification * @tags correctness * security * external/cwe/cwe-020 */ import javascript -import semmle.javascript.security.dataflow.DOM -/** - * A method call for the insecure functions used to verify the `MessageEvent.origin`. - */ -class InsufficientOriginChecks extends DataFlow::Node { - InsufficientOriginChecks() { - exists(DataFlow::Node node | - this.(StringOps::StartsWith).getSubstring() = node or - this.(StringOps::Includes).getSubstring() = node or - this.(StringOps::EndsWith).getSubstring() = node - ) - } -} - -/** - * A function handler for the `MessageEvent`. - */ +/** A function that handles "message" events. */ class PostMessageHandler extends DataFlow::FunctionNode { - PostMessageHandler() { this.getFunction() instanceof PostMessageEventHandler } -} + override PostMessageEventHandler astNode; -/** - * The `MessageEvent` parameter received by the handler - */ -class PostMessageEvent extends DataFlow::SourceNode { - PostMessageEvent() { exists(PostMessageHandler handler | this = handler.getParameter(0)) } - - /** - * Holds if an access on `MessageEvent.origin` is in an `EqualityTest` and there is no call of an insufficient verification method on `MessageEvent.origin` - */ - predicate hasOriginChecked() { - exists(EqualityTest test | - this.getAPropertyRead(["origin", "source"]).flowsToExpr(test.getAnOperand()) - ) - } - - /** - * Holds if there is an insufficient method call (i.e indexOf) used to verify `MessageEvent.origin` - */ - predicate hasOriginInsufficientlyChecked() { - this.getAPropertyRead("origin").getAMethodCall*() instanceof InsufficientOriginChecks + /** Gets the parameter that contains the event. */ + DataFlow::ParameterNode getEventParameter() { + result = DataFlow::parameterNode(astNode.getEventParameter()) } } -from PostMessageEvent event -where not event.hasOriginChecked() or event.hasOriginInsufficientlyChecked() -select event, "Missing or unsafe origin verification." +/** Gets a reference to the event from a postmessage `handler` */ +DataFlow::SourceNode event(DataFlow::TypeTracker t, PostMessageHandler handler) { + t.start() and + result = handler.getEventParameter() + or + exists(DataFlow::TypeTracker t2 | result = event(t2, handler).track(t2, t)) +} + +/** Gets a reference to the .origin from a postmessage event. */ +DataFlow::SourceNode origin(DataFlow::TypeTracker t, PostMessageHandler handler) { + t.start() and + result = event(DataFlow::TypeTracker::end(), handler).getAPropertyRead("origin") + or + result = + origin(t.continue(), handler) + .getAMethodCall([ + "toString", "toLowerCase", "toUpperCase", "toLocaleLowerCase", "toLocaleUpperCase" + ]) + or + exists(DataFlow::TypeTracker t2 | result = origin(t2, handler).track(t2, t)) +} + +/** Gets a reference to the .source from a postmessage event. */ +DataFlow::SourceNode source(DataFlow::TypeTracker t, PostMessageHandler handler) { + t.start() and + result = event(DataFlow::TypeTracker::end(), handler).getAPropertyRead("source") + or + exists(DataFlow::TypeTracker t2 | result = source(t2, handler).track(t2, t)) +} + +/** Gets a reference to the origin or the source of a postmessage event. */ +DataFlow::SourceNode sourceOrOrigin(PostMessageHandler handler) { + result = source(DataFlow::TypeTracker::end(), handler) or + result = origin(DataFlow::TypeTracker::end(), handler) +} + +/** Holds if there exists a check of the .origin or .source of the postmessage `handler`. */ +predicate hasOriginCheck(PostMessageHandler handler) { + // event.origin === "constant" + exists(EqualityTest test | sourceOrOrigin(handler).flowsToExpr(test.getAnOperand())) + or + // set.includes(event.source) + exists(InclusionTest test | sourceOrOrigin(handler).flowsTo(test.getContainedNode())) +} + +from PostMessageHandler handler +where not hasOriginCheck(handler) +select handler.getEventParameter(), "Postmessage handler has no origin check." diff --git a/javascript/ql/src/Security/CWE-020/examples/postMessageInsufficientCheck.js b/javascript/ql/src/Security/CWE-020/examples/postMessageInsufficientCheck.js deleted file mode 100644 index b92887f74e8..00000000000 --- a/javascript/ql/src/Security/CWE-020/examples/postMessageInsufficientCheck.js +++ /dev/null @@ -1,14 +0,0 @@ -function postMessageHandler(event) { - let origin = event.origin.toLowerCase(); - - let host = window.location.host; - - // BAD - if (origin.indexOf(host) === -1) - return; - - - eval(event.data); -} - -window.addEventListener('message', postMessageHandler, false); \ No newline at end of file diff --git a/javascript/ql/src/Security/CWE-020/examples/postMessageWithOriginCheck.js b/javascript/ql/src/Security/CWE-020/examples/postMessageWithOriginCheck.js index e528f980235..8dec29f2e18 100644 --- a/javascript/ql/src/Security/CWE-020/examples/postMessageWithOriginCheck.js +++ b/javascript/ql/src/Security/CWE-020/examples/postMessageWithOriginCheck.js @@ -1,7 +1,7 @@ function postMessageHandler(event) { console.log(event.origin) // GOOD: the origin property is checked - if (event.origin === 'www.example.com') { + if (event.origin === 'https://www.example.com') { // do something } } diff --git a/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.expected b/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.expected new file mode 100644 index 00000000000..58fb6ce7997 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.expected @@ -0,0 +1,3 @@ +| tst.js:11:20:11:24 | event | Postmessage handler has no origin check. | +| tst.js:24:27:24:27 | e | Postmessage handler has no origin check. | +| tst.js:40:27:40:27 | e | Postmessage handler has no origin check. | diff --git a/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.qlref b/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.qlref new file mode 100644 index 00000000000..1b99d9b605a --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.qlref @@ -0,0 +1 @@ +Security/CWE-020/PostMessageNoOriginCheck.ql \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/tst.js b/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/tst.js new file mode 100644 index 00000000000..729f35637fc --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/tst.js @@ -0,0 +1,64 @@ +window.onmessage = event => { // OK - good origin check + let origin = event.origin.toLowerCase(); + + if (origin !== window.location.origin) { + return; + } + + eval(event.data); +} + +window.onmessage = event => { // NOT OK - no origin check + let origin = event.origin.toLowerCase(); + + console.log(origin); + eval(event.data); +} + +window.onmessage = event => { // OK - there is an origin check + if (event.origin === "https://www.example.com") { + // do something + } +} + +self.onmessage = function(e) { // NOT OK + Commands[e.data.cmd].apply(null, e.data.args); +}; + +window.onmessage = event => { // OK - there is an origin check + if (mySet.includes(event.origin)) { + // do something + } +} + +window.onmessage = event => { // OK - there is an origin check + if (mySet.includes(event.source)) { + // do something + } +} + +self.onmessage = function(e) { // NOT OK + Commands[e.data.cmd].apply(null, e.data.args); +}; + +window.addEventListener('message', function(e) { // OK - has a good origin check + if (is_sysend_post_message(e) && is_valid_origin(e.origin)) { + var payload = JSON.parse(e.data); + if (payload && payload.name === uniq_prefix) { + var data = unserialize(payload.data); + sysend.broadcast(payload.key, data); + } + } +}); + +function is_valid_origin(origin) { + if (!domains) { + warn("no domains configured"); + return true; + } + var valid = domains.includes(origin); + if (!valid) { + warn("invalid origin: " + origin); + } + return valid; +} \ No newline at end of file From bca4d1412942371735870f508f5e8955cd5cb7bf Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 12 Apr 2022 14:37:43 +0200 Subject: [PATCH 0154/1618] rename files --- ...ostMessageNoOriginCheck.qhelp => MissingOriginCheck.qhelp} | 4 ++-- .../{PostMessageNoOriginCheck.ql => MissingOriginCheck.ql} | 2 +- .../{postMessageNoOriginCheck.js => MissingOriginCheckBad.js} | 0 ...ostMessageWithOriginCheck.js => MissingOriginCheckGood.js} | 0 .../MissingOriginCheck.expected} | 0 .../CWE-020/MissingOriginCheck/MissingOriginCheck.qlref | 1 + .../CWE-020/{PostMessage => MissingOriginCheck}/tst.js | 0 .../CWE-020/PostMessage/PostMessageNoOriginCheck.qlref | 1 - 8 files changed, 4 insertions(+), 4 deletions(-) rename javascript/ql/src/Security/CWE-020/{PostMessageNoOriginCheck.qhelp => MissingOriginCheck.qhelp} (92%) rename javascript/ql/src/Security/CWE-020/{PostMessageNoOriginCheck.ql => MissingOriginCheck.ql} (98%) rename javascript/ql/src/Security/CWE-020/examples/{postMessageNoOriginCheck.js => MissingOriginCheckBad.js} (100%) rename javascript/ql/src/Security/CWE-020/examples/{postMessageWithOriginCheck.js => MissingOriginCheckGood.js} (100%) rename javascript/ql/test/query-tests/Security/CWE-020/{PostMessage/PostMessageNoOriginCheck.expected => MissingOriginCheck/MissingOriginCheck.expected} (100%) create mode 100644 javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/MissingOriginCheck.qlref rename javascript/ql/test/query-tests/Security/CWE-020/{PostMessage => MissingOriginCheck}/tst.js (100%) delete mode 100644 javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.qlref diff --git a/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.qhelp b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp similarity index 92% rename from javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.qhelp rename to javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp index 1151e59e835..1bc5a87cbb1 100644 --- a/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.qhelp +++ b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp @@ -24,13 +24,13 @@ The example below uses a received message to execute some code. However, the origin of the message is not checked, so it might be possible for an attacker to execute arbitrary code.

    - +

    The example is fixed below, where the origin is checked to be trusted. It is therefore not possible for an attacker to attack using an untrusted origin.

    - + diff --git a/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.ql b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.ql similarity index 98% rename from javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.ql rename to javascript/ql/src/Security/CWE-020/MissingOriginCheck.ql index 44d6ae6a18a..f4446ed7565 100644 --- a/javascript/ql/src/Security/CWE-020/PostMessageNoOriginCheck.ql +++ b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.ql @@ -5,7 +5,7 @@ * @problem.severity warning * @security-severity 5 * @precision medium - * @id js/missing-origin-verification + * @id js/missing-origin-check * @tags correctness * security * external/cwe/cwe-020 diff --git a/javascript/ql/src/Security/CWE-020/examples/postMessageNoOriginCheck.js b/javascript/ql/src/Security/CWE-020/examples/MissingOriginCheckBad.js similarity index 100% rename from javascript/ql/src/Security/CWE-020/examples/postMessageNoOriginCheck.js rename to javascript/ql/src/Security/CWE-020/examples/MissingOriginCheckBad.js diff --git a/javascript/ql/src/Security/CWE-020/examples/postMessageWithOriginCheck.js b/javascript/ql/src/Security/CWE-020/examples/MissingOriginCheckGood.js similarity index 100% rename from javascript/ql/src/Security/CWE-020/examples/postMessageWithOriginCheck.js rename to javascript/ql/src/Security/CWE-020/examples/MissingOriginCheckGood.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.expected b/javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/MissingOriginCheck.expected similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.expected rename to javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/MissingOriginCheck.expected diff --git a/javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/MissingOriginCheck.qlref b/javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/MissingOriginCheck.qlref new file mode 100644 index 00000000000..02296c134e1 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/MissingOriginCheck.qlref @@ -0,0 +1 @@ +Security/CWE-020/MissingOriginCheck.ql \ No newline at end of file diff --git a/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/tst.js b/javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/tst.js similarity index 100% rename from javascript/ql/test/query-tests/Security/CWE-020/PostMessage/tst.js rename to javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/tst.js diff --git a/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.qlref b/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.qlref deleted file mode 100644 index 1b99d9b605a..00000000000 --- a/javascript/ql/test/query-tests/Security/CWE-020/PostMessage/PostMessageNoOriginCheck.qlref +++ /dev/null @@ -1 +0,0 @@ -Security/CWE-020/PostMessageNoOriginCheck.ql \ No newline at end of file From df295e69d6e59933b450ea907e5455602633bc1a Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 12 Apr 2022 14:37:51 +0200 Subject: [PATCH 0155/1618] add change-note --- .../2022-04-12-postmessage-origin-verification.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 javascript/ql/src/change-notes/2022-04-12-postmessage-origin-verification.md diff --git a/javascript/ql/src/change-notes/2022-04-12-postmessage-origin-verification.md b/javascript/ql/src/change-notes/2022-04-12-postmessage-origin-verification.md new file mode 100644 index 00000000000..f59652a8640 --- /dev/null +++ b/javascript/ql/src/change-notes/2022-04-12-postmessage-origin-verification.md @@ -0,0 +1,5 @@ +--- +category: newQuery +--- +* The `js/missing-origin-check` query has been added. It highlights "message" event handlers that do not check the origin of the event. + The query previously existed as the experimental `js/missing-postmessageorigin-verification` query. \ No newline at end of file From 785dc1af3c49140a7b4e9ad936ecc80d037b0335 Mon Sep 17 00:00:00 2001 From: Porcupiney Hairs Date: Tue, 12 Apr 2022 21:09:05 +0530 Subject: [PATCH 0156/1618] Include changes from review --- .../Security/CWE-285/PamAuthorization.ql | 62 ++++-------- .../Security/CWE-285/PamAuthorizationBad.py | 4 +- .../CWE-285/PamAuthorization.expected | 2 +- .../query-tests/Security/CWE-285/bad.py | 95 ------------------ .../query-tests/Security/CWE-285/good.py | 97 ------------------- .../query-tests/Security/CWE-285/pam_test.py | 59 +++++++++++ 6 files changed, 81 insertions(+), 238 deletions(-) delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-285/bad.py delete mode 100644 python/ql/test/experimental/query-tests/Security/CWE-285/good.py create mode 100644 python/ql/test/experimental/query-tests/Security/CWE-285/pam_test.py diff --git a/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql b/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql index e67745cceac..3f11728de4e 100644 --- a/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql +++ b/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql @@ -13,46 +13,24 @@ import semmle.python.ApiGraphs import experimental.semmle.python.Concepts import semmle.python.dataflow.new.TaintTracking -private class LibPam extends API::Node { - LibPam() { - exists( - API::Node cdll, API::Node find_library, API::Node libpam, API::CallNode cdll_call, - API::CallNode find_lib_call, StrConst str - | - API::moduleImport("ctypes").getMember("CDLL") = cdll and - find_library = API::moduleImport("ctypes.util").getMember("find_library") and - cdll_call = cdll.getACall() and - find_lib_call = find_library.getACall() and - DataFlow::localFlow(DataFlow::exprNode(str), find_lib_call.getArg(0)) and - str.getText() = "pam" and - cdll_call.getArg(0) = find_lib_call and - libpam = cdll_call.getReturn() - | - libpam = this - ) - } - - override string toString() { result = "libpam" } -} - -class PamAuthCall extends API::Node { - PamAuthCall() { exists(LibPam pam | pam.getMember("pam_authenticate") = this) } - - override string toString() { result = "pam_authenticate" } -} - -class PamActMgt extends API::Node { - PamActMgt() { exists(LibPam pam | pam.getMember("pam_acct_mgmt") = this) } - - override string toString() { result = "pam_acct_mgmt" } -} - -from PamAuthCall p, API::CallNode u, Expr handle -where - u = p.getACall() and - handle = u.asExpr().(Call).getArg(0) and - not exists(PamActMgt pam | - DataFlow::localFlow(DataFlow::exprNode(handle), - DataFlow::exprNode(pam.getACall().asExpr().(Call).getArg(0))) +API::Node libPam() { + exists(API::CallNode findLibCall, API::CallNode cdllCall, StrConst str | + findLibCall = API::moduleImport("ctypes.util").getMember("find_library").getACall() and + cdllCall = API::moduleImport("ctypes").getMember("CDLL").getACall() and + DataFlow::localFlow(DataFlow::exprNode(str), findLibCall.getArg(0)) and + str.getText() = "pam" and + cdllCall.getArg(0) = findLibCall + | + result = cdllCall.getReturn() ) -select u, "This PAM authentication call may be lead to an authorization bypass." +} + +from API::CallNode authenticateCall, DataFlow::Node handle +where + authenticateCall = libPam().getMember("pam_authenticate").getACall() and + handle = authenticateCall.getArg(0) and + not exists(API::CallNode acctMgmtCall | + acctMgmtCall = libPam().getMember("pam_acct_mgmt").getACall() and + DataFlow::localFlow(handle, acctMgmtCall.getArg(0)) + ) +select authenticateCall, "This PAM authentication call may be lead to an authorization bypass." diff --git a/python/ql/src/experimental/Security/CWE-285/PamAuthorizationBad.py b/python/ql/src/experimental/Security/CWE-285/PamAuthorizationBad.py index 3b06156f551..257f9b99729 100644 --- a/python/ql/src/experimental/Security/CWE-285/PamAuthorizationBad.py +++ b/python/ql/src/experimental/Security/CWE-285/PamAuthorizationBad.py @@ -1,11 +1,9 @@ def authenticate(self, username, password, service='login', encoding='utf-8', resetcreds=True): libpam = CDLL(find_library("pam")) pam_authenticate = libpam.pam_authenticate - pam_acct_mgmt = libpam.pam_acct_mgmt pam_authenticate.restype = c_int pam_authenticate.argtypes = [PamHandle, c_int] - pam_acct_mgmt.restype = c_int - pam_acct_mgmt.argtypes = [PamHandle, c_int] + handle = PamHandle() conv = PamConv(my_conv, 0) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected b/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected index 52c4c8ac669..cde7271874a 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected @@ -1 +1 @@ -| bad.py:92:18:92:44 | ControlFlowNode for pam_authenticate() | This PAM authentication call may be lead to an authorization bypass. | +| pam_test.py:44:18:44:44 | ControlFlowNode for pam_authenticate() | This PAM authentication call may be lead to an authorization bypass. | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-285/bad.py b/python/ql/test/experimental/query-tests/Security/CWE-285/bad.py deleted file mode 100644 index 84527d6f6fb..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-285/bad.py +++ /dev/null @@ -1,95 +0,0 @@ -from ctypes import CDLL, POINTER, Structure, CFUNCTYPE, cast, byref, sizeof -from ctypes import c_void_p, c_size_t, c_char_p, c_char, c_int -from ctypes import memmove -from ctypes.util import find_library - -class PamHandle(Structure): - _fields_ = [ ("handle", c_void_p) ] - - def __init__(self): - Structure.__init__(self) - self.handle = 0 - -class PamMessage(Structure): - """wrapper class for pam_message structure""" - _fields_ = [ ("msg_style", c_int), ("msg", c_char_p) ] - - def __repr__(self): - return "" % (self.msg_style, self.msg) - -class PamResponse(Structure): - """wrapper class for pam_response structure""" - _fields_ = [ ("resp", c_char_p), ("resp_retcode", c_int) ] - - def __repr__(self): - return "" % (self.resp_retcode, self.resp) - -conv_func = CFUNCTYPE(c_int, c_int, POINTER(POINTER(PamMessage)), POINTER(POINTER(PamResponse)), c_void_p) - -class PamConv(Structure): - """wrapper class for pam_conv structure""" - _fields_ = [ ("conv", conv_func), ("appdata_ptr", c_void_p) ] - -# Various constants -PAM_PROMPT_ECHO_OFF = 1 -PAM_PROMPT_ECHO_ON = 2 -PAM_ERROR_MSG = 3 -PAM_TEXT_INFO = 4 -PAM_REINITIALIZE_CRED = 8 - -libc = CDLL(find_library("c")) -libpam = CDLL(find_library("pam")) - -calloc = libc.calloc -calloc.restype = c_void_p -calloc.argtypes = [c_size_t, c_size_t] - -# bug #6 (@NIPE-SYSTEMS), some libpam versions don't include this function -if hasattr(libpam, 'pam_end'): - pam_end = libpam.pam_end - pam_end.restype = c_int - pam_end.argtypes = [PamHandle, c_int] - -pam_start = libpam.pam_start -pam_start.restype = c_int -pam_start.argtypes = [c_char_p, c_char_p, POINTER(PamConv), POINTER(PamHandle)] - -pam_setcred = libpam.pam_setcred -pam_setcred.restype = c_int -pam_setcred.argtypes = [PamHandle, c_int] - -pam_strerror = libpam.pam_strerror -pam_strerror.restype = c_char_p -pam_strerror.argtypes = [PamHandle, c_int] - -pam_authenticate = libpam.pam_authenticate -pam_authenticate.restype = c_int -pam_authenticate.argtypes = [PamHandle, c_int] - -pam_acct_mgmt = libpam.pam_acct_mgmt -pam_acct_mgmt.restype = c_int -pam_acct_mgmt.argtypes = [PamHandle, c_int] - -class pam(): - code = 0 - reason = None - - def __init__(self): - pass - - def authenticate(self, username, password, service='login', encoding='utf-8', resetcreds=True): - @conv_func - def my_conv(n_messages, messages, p_response, app_data): - return 0 - - - cpassword = c_char_p(password) - - handle = PamHandle() - conv = PamConv(my_conv, 0) - retval = pam_start(service, username, byref(conv), byref(handle)) - - retval = pam_authenticate(handle, 0) - auth_success = retval == 0 - - return auth_success \ No newline at end of file diff --git a/python/ql/test/experimental/query-tests/Security/CWE-285/good.py b/python/ql/test/experimental/query-tests/Security/CWE-285/good.py deleted file mode 100644 index e9996c770ed..00000000000 --- a/python/ql/test/experimental/query-tests/Security/CWE-285/good.py +++ /dev/null @@ -1,97 +0,0 @@ -from ctypes import CDLL, POINTER, Structure, CFUNCTYPE, cast, byref, sizeof -from ctypes import c_void_p, c_size_t, c_char_p, c_char, c_int -from ctypes import memmove -from ctypes.util import find_library - -class PamHandle(Structure): - _fields_ = [ ("handle", c_void_p) ] - - def __init__(self): - Structure.__init__(self) - self.handle = 0 - -class PamMessage(Structure): - """wrapper class for pam_message structure""" - _fields_ = [ ("msg_style", c_int), ("msg", c_char_p) ] - - def __repr__(self): - return "" % (self.msg_style, self.msg) - -class PamResponse(Structure): - """wrapper class for pam_response structure""" - _fields_ = [ ("resp", c_char_p), ("resp_retcode", c_int) ] - - def __repr__(self): - return "" % (self.resp_retcode, self.resp) - -conv_func = CFUNCTYPE(c_int, c_int, POINTER(POINTER(PamMessage)), POINTER(POINTER(PamResponse)), c_void_p) - -class PamConv(Structure): - """wrapper class for pam_conv structure""" - _fields_ = [ ("conv", conv_func), ("appdata_ptr", c_void_p) ] - -# Various constants -PAM_PROMPT_ECHO_OFF = 1 -PAM_PROMPT_ECHO_ON = 2 -PAM_ERROR_MSG = 3 -PAM_TEXT_INFO = 4 -PAM_REINITIALIZE_CRED = 8 - -libc = CDLL(find_library("c")) -libpam = CDLL(find_library("pam")) - -calloc = libc.calloc -calloc.restype = c_void_p -calloc.argtypes = [c_size_t, c_size_t] - -# bug #6 (@NIPE-SYSTEMS), some libpam versions don't include this function -if hasattr(libpam, 'pam_end'): - pam_end = libpam.pam_end - pam_end.restype = c_int - pam_end.argtypes = [PamHandle, c_int] - -pam_start = libpam.pam_start -pam_start.restype = c_int -pam_start.argtypes = [c_char_p, c_char_p, POINTER(PamConv), POINTER(PamHandle)] - -pam_setcred = libpam.pam_setcred -pam_setcred.restype = c_int -pam_setcred.argtypes = [PamHandle, c_int] - -pam_strerror = libpam.pam_strerror -pam_strerror.restype = c_char_p -pam_strerror.argtypes = [PamHandle, c_int] - -pam_authenticate = libpam.pam_authenticate -pam_authenticate.restype = c_int -pam_authenticate.argtypes = [PamHandle, c_int] - -pam_acct_mgmt = libpam.pam_acct_mgmt -pam_acct_mgmt.restype = c_int -pam_acct_mgmt.argtypes = [PamHandle, c_int] - -class pam(): - code = 0 - reason = None - - def __init__(self): - pass - - def authenticate(self, username, password, service='login', encoding='utf-8', resetcreds=True): - @conv_func - def my_conv(n_messages, messages, p_response, app_data): - return 0 - - - cpassword = c_char_p(password) - - handle = PamHandle() - conv = PamConv(my_conv, 0) - retval = pam_start(service, username, byref(conv), byref(handle)) - - retval = pam_authenticate(handle, 0) - if retval == 0: - retval = pam_acct_mgmt(handle, 0) - auth_success = retval == 0 - - return auth_success \ No newline at end of file diff --git a/python/ql/test/experimental/query-tests/Security/CWE-285/pam_test.py b/python/ql/test/experimental/query-tests/Security/CWE-285/pam_test.py new file mode 100644 index 00000000000..60408ade722 --- /dev/null +++ b/python/ql/test/experimental/query-tests/Security/CWE-285/pam_test.py @@ -0,0 +1,59 @@ +from ctypes import CDLL, POINTER, Structure, byref +from ctypes import c_char_p, c_int +from ctypes.util import find_library + + +class PamHandle(Structure): + pass + + +class PamMessage(Structure): + pass + + +class PamResponse(Structure): + pass + + +class PamConv(Structure): + pass + + +libpam = CDLL(find_library("pam")) + +pam_start = libpam.pam_start +pam_start.restype = c_int +pam_start.argtypes = [c_char_p, c_char_p, POINTER(PamConv), POINTER(PamHandle)] + +pam_authenticate = libpam.pam_authenticate +pam_authenticate.restype = c_int +pam_authenticate.argtypes = [PamHandle, c_int] + +pam_acct_mgmt = libpam.pam_acct_mgmt +pam_acct_mgmt.restype = c_int +pam_acct_mgmt.argtypes = [PamHandle, c_int] + + +class pam(): + + def authenticate_bad(self, username, service='login'): + handle = PamHandle() + conv = PamConv(None, 0) + retval = pam_start(service, username, byref(conv), byref(handle)) + + retval = pam_authenticate(handle, 0) + auth_success = retval == 0 + + return auth_success + + def authenticate_good(self, username, service='login'): + handle = PamHandle() + conv = PamConv(None, 0) + retval = pam_start(service, username, byref(conv), byref(handle)) + + retval = pam_authenticate(handle, 0) + if retval == 0: + retval = pam_acct_mgmt(handle, 0) + auth_success = retval == 0 + + return auth_success From bdadf2b445ccfd684e3fbfb3dafce246ff008a41 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 13 Apr 2022 10:30:59 +0200 Subject: [PATCH 0157/1618] Python: Fix warnings --- python/ql/lib/semmle/python/frameworks/Django.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/frameworks/Django.qll b/python/ql/lib/semmle/python/frameworks/Django.qll index d9e9aff6468..65efa459d73 100644 --- a/python/ql/lib/semmle/python/frameworks/Django.qll +++ b/python/ql/lib/semmle/python/frameworks/Django.qll @@ -2650,7 +2650,7 @@ module PrivateDjango { DjangoFileFieldUploadToFunctionFilenameParam() { exists(DataFlow::CallCfgNode call, DataFlow::Node uploadToArg, Function func | this.getParameter() = func.getArg(1) and - call = django::db::models::FileField::subclassRef().getACall() and + call = DjangoImpl::DB::Models::FileField::subclassRef().getACall() and uploadToArg in [call.getArg(2), call.getArgByName("upload_to")] and uploadToArg = poorMansFunctionTracker(func) ) From 304713ca8731c2ef27743abb772456d55ad0f3a8 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 13 Apr 2022 11:21:44 +0200 Subject: [PATCH 0158/1618] Python: Handle django v4 as well in tests --- .../frameworks/django-v2-v3/testapp/urls.py | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/urls.py b/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/urls.py index 2f0d978c97a..5ff2e6869f8 100644 --- a/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/urls.py +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/urls.py @@ -1,8 +1,5 @@ from django.urls import path, re_path -# This version 1.x way of defining urls is deprecated in Django 3.1, but still works -from django.conf.urls import url - from . import views urlpatterns = [ @@ -11,7 +8,6 @@ urlpatterns = [ # inline expectation tests (which thinks the `$` would mark the beginning of a new # line) re_path(r"^ba[rz]/", views.bar_baz), # $routeSetup="^ba[rz]/" - url(r"^deprecated/", views.deprecated), # $routeSetup="^deprecated/" path("basic-view-handler/", views.MyBasicViewHandler.as_view()), # $routeSetup="basic-view-handler/" path("custom-inheritance-view-handler/", views.MyViewHandlerWithCustomInheritance.as_view()), # $routeSetup="custom-inheritance-view-handler/" @@ -19,3 +15,20 @@ urlpatterns = [ path("CustomRedirectView/", views.CustomRedirectView.as_view()), # $routeSetup="CustomRedirectView/" path("CustomRedirectView2/", views.CustomRedirectView2.as_view()), # $routeSetup="CustomRedirectView2/" ] + +from django import __version__ as django_version + +if django_version[0] == "3": + # This version 1.x way of defining urls is deprecated in Django 3.1, but still works. + # However, it is removed in Django 4.0, so we need this guard to make our code runnable + from django.conf.urls import url + + old_urlpatterns = urlpatterns + + # we need this assignment to get our logic working... maybe it should be more + # sophisticated? + urlpatterns = [ + url(r"^deprecated/", views.deprecated), # $routeSetup="^deprecated/" + ] + + urlpatterns += old_urlpatterns From c87b3087be2829a6504b1fdf822c34d06c7ebc4d Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 13 Apr 2022 11:25:15 +0200 Subject: [PATCH 0159/1618] Python: Add test for Django FileField upload_to The output from running the test script is: ``` 'rootdir/bar' [13/Apr/2022 09:20:36] "POST /app/file-test/ HTTP/1.1" 200 2 'rootdir/bar' [13/Apr/2022 09:20:36] "POST /app/file-test/ HTTP/1.1" 200 2 'rootdir/foo%2fbar' [13/Apr/2022 09:20:36] "POST /app/file-test/ HTTP/1.1" 200 2 'rootdir/%2e%2e%2fbar' [13/Apr/2022 09:20:36] "POST /app/file-test/ HTTP/1.1" 200 2 'rootdir/foo%c0%afbar' [13/Apr/2022 09:20:36] "POST /app/file-test/ HTTP/1.1" 200 2 ``` I didn't add a `.py` extension, so it wasn't extracted, since we don't actually care about what we model in that file. --- .../frameworks/django-v2-v3/.gitignore | 5 +++ .../frameworks/django-v2-v3/test_file_field | 31 +++++++++++++++++++ .../frameworks/django-v2-v3/testapp/models.py | 9 +++++- .../frameworks/django-v2-v3/testapp/urls.py | 2 ++ .../frameworks/django-v2-v3/testapp/views.py | 11 +++++++ .../django-v2-v3/testproj/settings.py | 12 +++---- 6 files changed, 63 insertions(+), 7 deletions(-) create mode 100644 python/ql/test/library-tests/frameworks/django-v2-v3/.gitignore create mode 100755 python/ql/test/library-tests/frameworks/django-v2-v3/test_file_field diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/.gitignore b/python/ql/test/library-tests/frameworks/django-v2-v3/.gitignore new file mode 100644 index 00000000000..d3646a96410 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/.gitignore @@ -0,0 +1,5 @@ +db.sqlite3 + +# The testapp/migrations/ folder needs to be comitted to git, +# but we don't care to store the actual migrations +testapp/migrations/ diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/test_file_field b/python/ql/test/library-tests/frameworks/django-v2-v3/test_file_field new file mode 100755 index 00000000000..00061d85ea7 --- /dev/null +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/test_file_field @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +# first run the server with +# python manage.py makemigrations && python manage.py migrate && python manage.py runserver + +import requests + +requests.post( + "http://127.0.0.1:8000/app/file-test/", + files={"fieldname": ("foo/bar", open("/home/rasmus/TODO", "rb"))} +) + +requests.post( + "http://127.0.0.1:8000/app/file-test/", + files={"fieldname": ("../bar", open("/home/rasmus/TODO", "rb"))} +) + +requests.post( + "http://127.0.0.1:8000/app/file-test/", + files={"fieldname": (r"foo%2fbar", open("/home/rasmus/TODO", "rb"))} +) + +requests.post( + "http://127.0.0.1:8000/app/file-test/", + files={"fieldname": (r"%2e%2e%2fbar", open("/home/rasmus/TODO", "rb"))} +) + +requests.post( + "http://127.0.0.1:8000/app/file-test/", + files={"fieldname": (r"foo%c0%afbar", open("/home/rasmus/TODO", "rb"))} +) diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/models.py b/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/models.py index 71a83623907..2a133aa5f4d 100644 --- a/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/models.py +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/models.py @@ -1,3 +1,10 @@ +import os.path + from django.db import models -# Create your models here. +def custom_path_function(instance, filename): + print(repr(os.path.join("rootdir", filename))) + raise NotImplementedError() + +class MyModel(models.Model): + upload = models.FileField(upload_to=custom_path_function) diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/urls.py b/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/urls.py index 5ff2e6869f8..e8f6930c895 100644 --- a/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/urls.py +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/urls.py @@ -14,6 +14,8 @@ urlpatterns = [ path("CustomRedirectView/", views.CustomRedirectView.as_view()), # $routeSetup="CustomRedirectView/" path("CustomRedirectView2/", views.CustomRedirectView2.as_view()), # $routeSetup="CustomRedirectView2/" + + path("file-test/", views.file_test), # $routeSetup="file-test/" ] from django import __version__ as django_version diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/views.py b/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/views.py index 2a3ed803507..0ba978ea365 100644 --- a/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/views.py +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/testapp/views.py @@ -2,6 +2,7 @@ from django.http import HttpRequest, HttpResponse from django.views.generic import View, RedirectView from django.views.decorators.csrf import csrf_exempt +from .models import MyModel def foo(request: HttpRequest): # $requestHandler return HttpResponse("foo") # $HttpResponse @@ -45,3 +46,13 @@ class CustomRedirectView(RedirectView): class CustomRedirectView2(RedirectView): url = "https://example.com/%(foo)s" + + +# Test of FileField upload_to functions +def file_test(request: HttpRequest): # $ requestHandler + model = MyModel(upload=request.FILES['fieldname']) + try: + model.save() + except NotImplementedError: + pass + return HttpResponse("ok") # $ HttpResponse diff --git a/python/ql/test/library-tests/frameworks/django-v2-v3/testproj/settings.py b/python/ql/test/library-tests/frameworks/django-v2-v3/testproj/settings.py index 5343182c1c9..ab98afe52d0 100644 --- a/python/ql/test/library-tests/frameworks/django-v2-v3/testproj/settings.py +++ b/python/ql/test/library-tests/frameworks/django-v2-v3/testproj/settings.py @@ -74,12 +74,12 @@ WSGI_APPLICATION = 'testproj.wsgi.application' # Database # https://docs.djangoproject.com/en/3.1/ref/settings/#databases -# DATABASES = { -# 'default': { -# 'ENGINE': 'django.db.backends.sqlite3', -# 'NAME': BASE_DIR / 'db.sqlite3', -# } -# } +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} # Password validation From 6235dc503965deafd3f30ff76e3c7fcd2d5fceb6 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 13 Apr 2022 11:44:15 +0200 Subject: [PATCH 0160/1618] Python: Handle `find_library` assignment to temp variable --- .../src/experimental/Security/CWE-285/PamAuthorization.ql | 7 +++---- .../query-tests/Security/CWE-285/PamAuthorization.expected | 2 +- .../experimental/query-tests/Security/CWE-285/pam_test.py | 6 +++++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql b/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql index 3f11728de4e..595d1af13a4 100644 --- a/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql +++ b/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql @@ -14,12 +14,11 @@ import experimental.semmle.python.Concepts import semmle.python.dataflow.new.TaintTracking API::Node libPam() { - exists(API::CallNode findLibCall, API::CallNode cdllCall, StrConst str | + exists(API::CallNode findLibCall, API::CallNode cdllCall | findLibCall = API::moduleImport("ctypes.util").getMember("find_library").getACall() and + findLibCall.getParameter(0).getAValueReachingRhs().asExpr().(StrConst).getText() = "pam" and cdllCall = API::moduleImport("ctypes").getMember("CDLL").getACall() and - DataFlow::localFlow(DataFlow::exprNode(str), findLibCall.getArg(0)) and - str.getText() = "pam" and - cdllCall.getArg(0) = findLibCall + cdllCall.getParameter(0).getAValueReachingRhs() = findLibCall | result = cdllCall.getReturn() ) diff --git a/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected b/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected index cde7271874a..1b6c23291be 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected +++ b/python/ql/test/experimental/query-tests/Security/CWE-285/PamAuthorization.expected @@ -1 +1 @@ -| pam_test.py:44:18:44:44 | ControlFlowNode for pam_authenticate() | This PAM authentication call may be lead to an authorization bypass. | +| pam_test.py:48:18:48:44 | ControlFlowNode for pam_authenticate() | This PAM authentication call may be lead to an authorization bypass. | diff --git a/python/ql/test/experimental/query-tests/Security/CWE-285/pam_test.py b/python/ql/test/experimental/query-tests/Security/CWE-285/pam_test.py index 60408ade722..966e13cb991 100644 --- a/python/ql/test/experimental/query-tests/Security/CWE-285/pam_test.py +++ b/python/ql/test/experimental/query-tests/Security/CWE-285/pam_test.py @@ -18,9 +18,13 @@ class PamResponse(Structure): class PamConv(Structure): pass - +# this is normal way to do things libpam = CDLL(find_library("pam")) +# but we also handle assignment to temp variable +temp = find_library("pam") +libpam = CDLL(temp) + pam_start = libpam.pam_start pam_start.restype = c_int pam_start.argtypes = [c_char_p, c_char_p, POINTER(PamConv), POINTER(PamHandle)] From 9e1b98e5a4da22c60e36871dc2486d16f91555df Mon Sep 17 00:00:00 2001 From: jorgectf Date: Fri, 15 Apr 2022 13:08:04 +0200 Subject: [PATCH 0161/1618] Detach `MyBatisAbstractSqlMethodsStep` from `MyBatisAbstractSql` --- .../semmle/code/java/frameworks/MyBatis.qll | 65 +++++++++---------- 1 file changed, 31 insertions(+), 34 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll index 4ddec87ff16..e2fb5b3707f 100644 --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll @@ -116,38 +116,6 @@ private class MyBatisProvider extends RefType { } } -private class MyBatisAbstractSqlMethod extends Method { - string taintedArgs; - string signature; - - MyBatisAbstractSqlMethod() { - this.getDeclaringType().getSourceDeclaration() instanceof MyBatisAbstractSql and - ( - this.hasName([ - "UPDATE", "SET", "INSERT_INTO", "SELECT", "OFFSET_ROWS", "LIMIT", "OFFSET", - "FETCH_FIRST_ROWS_ONLY", "DELETE_FROM", "INNER_JOIN", "ORDER_BY", "WHERE", "HAVING", - "OUTER_JOIN", "LEFT_OUTER_JOIN", "RIGHT_OUTER_JOIN", "GROUP_BY", "FROM", "SELECT_DISTINCT" - ]) and - taintedArgs = "Argument[0]" and - signature = "String" - or - this.hasName([ - "SET", "INTO_COLUMNS", "INTO_VALUES", "SELECT_DISTINCT", "FROM", "JOIN", "INNER_JOIN", - "LEFT_OUTER_JOIN", "RIGHT_OUTER_JOIN", "OUTER_JOIN", "WHERE", "GROUP_BY", "HAVING", - "ORDER_BY" - ]) and - taintedArgs = "Argument[0].ArrayElement" and - signature = "String[]" - or - this.hasName("VALUES") and taintedArgs = "Argument[0..1]" and signature = "String,String" - ) - } - - string getTaintedArgs() { result = taintedArgs } - - string getCsvSignature() { result = signature } -} - /** * A return statement of a method used in a MyBatis Provider. * @@ -189,12 +157,41 @@ private class MyBatisAbstractSqlToStringStep extends SummaryModelCsv { } } +private class MyBatisAbstractSqlMethod extends string { + string taintedArgs; + string signature; + + MyBatisAbstractSqlMethod() { + this in [ + "UPDATE", "SET", "INSERT_INTO", "SELECT", "OFFSET_ROWS", "LIMIT", "OFFSET", + "FETCH_FIRST_ROWS_ONLY", "DELETE_FROM", "INNER_JOIN", "ORDER_BY", "WHERE", "HAVING", + "OUTER_JOIN", "LEFT_OUTER_JOIN", "RIGHT_OUTER_JOIN", "GROUP_BY", "FROM", "SELECT_DISTINCT" + ] and + taintedArgs = "Argument[0]" and + signature = "String" + or + this in [ + "SET", "INTO_COLUMNS", "INTO_VALUES", "SELECT_DISTINCT", "FROM", "JOIN", "INNER_JOIN", + "LEFT_OUTER_JOIN", "RIGHT_OUTER_JOIN", "OUTER_JOIN", "WHERE", "GROUP_BY", "HAVING", + "ORDER_BY" + ] and + taintedArgs = "Argument[0].ArrayElement" and + signature = "String[]" + or + this = "VALUES" and taintedArgs = "Argument[0..1]" and signature = "String,String" + } + + string getTaintedArgs() { result = taintedArgs } + + string getCsvSignature() { result = signature } +} + private class MyBatisAbstractSqlMethodsStep extends SummaryModelCsv { override predicate row(string row) { exists(MyBatisAbstractSqlMethod m | row = - "org.apache.ibatis.jdbc;AbstractSQL;true;" + m.getName() + ";(" + m.getCsvSignature() + - ");;" + m.getTaintedArgs() + ";Argument[-1];taint" + "org.apache.ibatis.jdbc;AbstractSQL;true;" + m + ";(" + m.getCsvSignature() + ");;" + + m.getTaintedArgs() + ";Argument[-1];taint" ) } } From 7f592a6c64a828f3d9ae0532bffbae5ec2343cae Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 18 Apr 2022 22:17:31 +0200 Subject: [PATCH 0162/1618] merge `Clipboard.qll` and `DragAndDrop.qll`, and support `InputEvent` --- javascript/ql/lib/javascript.qll | 3 +- .../javascript/frameworks/Clipboard.qll | 75 --------------- .../javascript/frameworks/DomEvents.qll | 96 +++++++++++++++++++ .../javascript/frameworks/DragAndDrop.qll | 75 --------------- .../Security/CWE-079/DomBasedXss/Xss.expected | 17 ++++ .../XssWithAdditionalSources.expected | 16 ++++ .../Security/CWE-079/DomBasedXss/clipboard.ts | 14 ++- 7 files changed, 143 insertions(+), 153 deletions(-) delete mode 100644 javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll create mode 100644 javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll delete mode 100644 javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll diff --git a/javascript/ql/lib/javascript.qll b/javascript/ql/lib/javascript.qll index 95f68b93a37..53bb91797aa 100644 --- a/javascript/ql/lib/javascript.qll +++ b/javascript/ql/lib/javascript.qll @@ -79,7 +79,6 @@ import semmle.javascript.frameworks.ComposedFunctions import semmle.javascript.frameworks.Classnames import semmle.javascript.frameworks.ClassValidator import semmle.javascript.frameworks.ClientRequests -import semmle.javascript.frameworks.Clipboard import semmle.javascript.frameworks.ClosureLibrary import semmle.javascript.frameworks.CookieLibraries import semmle.javascript.frameworks.Credentials @@ -88,7 +87,7 @@ import semmle.javascript.frameworks.D3 import semmle.javascript.frameworks.data.ModelsAsData import semmle.javascript.frameworks.DateFunctions import semmle.javascript.frameworks.DigitalOcean -import semmle.javascript.frameworks.DragAndDrop +import semmle.javascript.frameworks.DomEvents import semmle.javascript.frameworks.Electron import semmle.javascript.frameworks.EventEmitter import semmle.javascript.frameworks.Files diff --git a/javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll b/javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll deleted file mode 100644 index 37adafe678f..00000000000 --- a/javascript/ql/lib/semmle/javascript/frameworks/Clipboard.qll +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Provides predicates for reasoning about clipboard data. - */ - -import javascript - -/** - * Gets a jQuery "paste" event. - * E.g. `e` in `$("#foo").on("paste", function(e) { ... })`. - */ -private DataFlow::SourceNode jQueryPasteEvent(DataFlow::TypeTracker t) { - t.start() and - exists(DataFlow::CallNode call | - call = JQuery::objectRef().getAMethodCall(["bind", "on", "live", "one", "delegate"]) and - call.getArgument(0).mayHaveStringValue("paste") - | - result = call.getCallback(call.getNumArgument() - 1).getParameter(0) - ) - or - exists(DataFlow::TypeTracker t2 | result = jQueryPasteEvent(t2).track(t2, t)) -} - -/** - * Gets a DOM "paste" event. - * E.g. `e` in `document.addEventListener("paste", e => { ... })`. - */ -private DataFlow::SourceNode pasteEvent(DataFlow::TypeTracker t) { - t.start() and - exists(DataFlow::CallNode call | call = DOM::domValueRef().getAMemberCall("addEventListener") | - call.getArgument(0).mayHaveStringValue("paste") and - result = call.getCallback(1).getParameter(0) - ) - or - t.start() and - exists(DataFlow::ParameterNode pn | - // https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent - pn.hasUnderlyingType("ClipboardEvent") and result = pn - ) - or - t.start() and - exists(DataFlow::PropWrite pw | pw = DOM::domValueRef().getAPropertyWrite() | - pw.getPropertyName() = "onpaste" and - result = pw.getRhs().getABoundFunctionValue(0).getParameter(0) - ) - or - t.start() and - result = jQueryPasteEvent(DataFlow::TypeTracker::end()).getAPropertyRead("originalEvent") - or - exists(DataFlow::TypeTracker t2 | result = pasteEvent(t2).track(t2, t)) -} - -/** - * Gets a reference to the clipboardData DataTransfer object. - * https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent/clipboardData - */ -private DataFlow::SourceNode clipboardDataTransferSource(DataFlow::TypeTracker t) { - t.start() and - exists(DataFlow::PropRead read | read = result | - read.getPropertyName() = "clipboardData" and - read.getBase().getALocalSource() = pasteEvent(DataFlow::TypeTracker::end()) - ) - or - exists(DataFlow::TypeTracker t2 | result = clipboardDataTransferSource(t2).track(t2, t)) -} - -/** - * A reference to data from the clipboard. Seen as a source for DOM-based XSS. - */ -private class ClipboardSource extends RemoteFlowSource { - ClipboardSource() { - this = clipboardDataTransferSource(DataFlow::TypeTracker::end()).getAMethodCall("getData") - } - - override string getSourceType() { result = "Clipboard data" } -} diff --git a/javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll b/javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll new file mode 100644 index 00000000000..60f01090f1a --- /dev/null +++ b/javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll @@ -0,0 +1,96 @@ +/** + * Provides predicates for reasoning about events from the DOM that introduce tainted data. + */ + +import javascript + +/** Gets the name of a DOM event that might introduce tainted data. */ +private string getATaintedDomEvent() { result = ["paste", "drop", "beforeinput"] } + +/** + * Gets a jQuery event that might introduce tainted data. + * E.g. `e` in `$("#foo").on("paste", function(e) { ... })`. + */ +private DataFlow::SourceNode taintedJQueryEvent(DataFlow::TypeTracker t, string event) { + t.start() and + exists(DataFlow::CallNode call | + call = JQuery::objectRef().getAMethodCall(["bind", "on", "live", "one", "delegate"]) and + call.getArgument(0).mayHaveStringValue(event) and + event = getATaintedDomEvent() + | + result = call.getCallback(call.getNumArgument() - 1).getParameter(0) + ) + or + exists(DataFlow::TypeTracker t2 | result = taintedJQueryEvent(t2, event).track(t2, t)) +} + +/** + * Gets a DOM event that might introduce tainted data. + * E.g. `e` in `document.addEventListener("paste", e => { ... })`. + */ +private DataFlow::SourceNode taintedEvent(DataFlow::TypeTracker t, string event) { + t.start() and + exists(DataFlow::CallNode call | call = DOM::domValueRef().getAMemberCall("addEventListener") | + call.getArgument(0).mayHaveStringValue(event) and + event = getATaintedDomEvent() and + result = call.getCallback(1).getParameter(0) + ) + or + t.start() and + exists(DataFlow::ParameterNode pn | + // https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent + pn.hasUnderlyingType("ClipboardEvent") and + result = pn and + event = "paste" + or + // https://developer.mozilla.org/en-US/docs/Web/API/DragEvent + pn.hasUnderlyingType("DragEvent") and + result = pn and + event = "drop" + or + // https://developer.mozilla.org/en-US/docs/Web/API/InputEvent + pn.hasUnderlyingType("InputEvent") and + result = pn and + event = "beforeinput" + ) + or + t.start() and + exists(DataFlow::PropWrite pw | pw = DOM::domValueRef().getAPropertyWrite() | + pw.getPropertyName() = "on" + event and + event = ["paste", "drop"] and // doesn't work for beforeinput, it's just not part of the API + result = pw.getRhs().getABoundFunctionValue(0).getParameter(0) + ) + or + t.start() and + result = taintedJQueryEvent(DataFlow::TypeTracker::end(), event).getAPropertyRead("originalEvent") + or + exists(DataFlow::TypeTracker t2 | result = taintedEvent(t2, event).track(t2, t)) +} + +/** + * Gets a reference to a DataTransfer object. + * https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent/clipboardData + */ +private DataFlow::SourceNode taintedDataTransfer(DataFlow::TypeTracker t) { + t.start() and + result = taintedEvent(DataFlow::TypeTracker::end(), "paste").getAPropertyRead("clipboardData") + or + t.start() and + result = + taintedEvent(DataFlow::TypeTracker::end(), ["drop", "beforeinput"]) + .getAPropertyRead("dataTransfer") + or + exists(DataFlow::TypeTracker t2 | result = taintedDataTransfer(t2).track(t2, t)) +} + +/** + * A reference to data from a DataTransfer object, which might originate from e.g. the clipboard. + * Seen as a source for DOM-based XSS. + */ +private class TaintedDataTransfer extends RemoteFlowSource { + TaintedDataTransfer() { + this = taintedDataTransfer(DataFlow::TypeTracker::end()).getAMethodCall("getData") + } + + override string getSourceType() { result = "Clipboard data" } +} diff --git a/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll b/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll deleted file mode 100644 index 0d1516bd809..00000000000 --- a/javascript/ql/lib/semmle/javascript/frameworks/DragAndDrop.qll +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Provides predicates for reasoning about dragAndDrop data. - */ - -import javascript - -/** - * Gets a jQuery "drop" event. - * E.g. `e` in `$("#foo").on("drop", function(e) { ... })`. - */ -private DataFlow::SourceNode jQueryDropEvent(DataFlow::TypeTracker t) { - t.start() and - exists(DataFlow::CallNode call | - call = JQuery::objectRef().getAMethodCall(["bind", "on", "live", "one", "delegate"]) and - call.getArgument(0).mayHaveStringValue("drop") - | - result = call.getCallback(call.getNumArgument() - 1).getParameter(0) - ) - or - exists(DataFlow::TypeTracker t2 | result = jQueryDropEvent(t2).track(t2, t)) -} - -/** - * Gets a DOM "drop" event. - * E.g. `e` in `document.addEventListener("drop", e => { ... })`. - */ -private DataFlow::SourceNode dropEvent(DataFlow::TypeTracker t) { - t.start() and - exists(DataFlow::CallNode call | call = DOM::domValueRef().getAMemberCall("addEventListener") | - call.getArgument(0).mayHaveStringValue("drop") and - result = call.getCallback(1).getParameter(0) - ) - or - t.start() and - exists(DataFlow::ParameterNode pn | - // https://developer.mozilla.org/en-US/docs/Web/API/DragEvent - pn.hasUnderlyingType("DragEvent") and result = pn - ) - or - t.start() and - exists(DataFlow::PropWrite pw | pw = DOM::domValueRef().getAPropertyWrite() | - pw.getPropertyName() = "ondrop" and - result = pw.getRhs().getABoundFunctionValue(0).getParameter(0) - ) - or - t.start() and - result = jQueryDropEvent(DataFlow::TypeTracker::end()).getAPropertyRead("originalEvent") - or - exists(DataFlow::TypeTracker t2 | result = dropEvent(t2).track(t2, t)) -} - -/** - * Gets a reference to the dragAndDropData DataTransfer object. - * https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API - */ -private DataFlow::SourceNode dragAndDropDataTransferSource(DataFlow::TypeTracker t) { - t.start() and - exists(DataFlow::PropRead read | read = result | - read.getPropertyName() = "dataTransfer" and - read.getBase().getALocalSource() = dropEvent(DataFlow::TypeTracker::end()) - ) - or - exists(DataFlow::TypeTracker t2 | result = dragAndDropDataTransferSource(t2).track(t2, t)) -} - -/** - * A reference to data from the dragAndDrop. Seen as a source for DOM-based XSS. - */ -private class DragAndDropSource extends RemoteFlowSource { - DragAndDropSource() { - this = dragAndDropDataTransferSource(DataFlow::TypeTracker::end()).getAMethodCall("getData") - } - - override string getSourceType() { result = "DragAndDrop data" } -} diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected index d1f49ca5ab8..e81dbd4d99a 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected @@ -152,6 +152,14 @@ nodes | clipboard.ts:73:29:73:39 | droppedHtml | | clipboard.ts:73:29:73:39 | droppedHtml | | clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:98:15:98:54 | html | +| clipboard.ts:98:15:98:54 | html | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | +| clipboard.ts:99:23:99:26 | html | +| clipboard.ts:99:23:99:26 | html | +| clipboard.ts:99:23:99:26 | html | | custom-element.js:5:26:5:36 | window.name | | custom-element.js:5:26:5:36 | window.name | | custom-element.js:5:26:5:36 | window.name | @@ -1202,6 +1210,14 @@ edges | clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | | clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | | clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:98:15:98:54 | html | clipboard.ts:99:23:99:26 | html | +| clipboard.ts:98:15:98:54 | html | clipboard.ts:99:23:99:26 | html | +| clipboard.ts:98:15:98:54 | html | clipboard.ts:99:23:99:26 | html | +| clipboard.ts:98:15:98:54 | html | clipboard.ts:99:23:99:26 | html | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:54 | html | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:54 | html | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:54 | html | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:54 | html | | custom-element.js:5:26:5:36 | window.name | custom-element.js:5:26:5:36 | window.name | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | @@ -2164,6 +2180,7 @@ edges | clipboard.ts:33:19:33:68 | e.origi ... /html') | clipboard.ts:33:19:33:68 | e.origi ... /html') | clipboard.ts:33:19:33:68 | e.origi ... /html') | Cross-site scripting vulnerability due to $@. | clipboard.ts:33:19:33:68 | e.origi ... /html') | user-provided value | | clipboard.ts:50:29:50:32 | html | clipboard.ts:43:22:43:55 | clipboa ... /html') | clipboard.ts:50:29:50:32 | html | Cross-site scripting vulnerability due to $@. | clipboard.ts:43:22:43:55 | clipboa ... /html') | user-provided value | | clipboard.ts:73:29:73:39 | droppedHtml | clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:73:29:73:39 | droppedHtml | Cross-site scripting vulnerability due to $@. | clipboard.ts:71:27:71:62 | e.clipb ... /html') | user-provided value | +| clipboard.ts:99:23:99:26 | html | clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:99:23:99:26 | html | Cross-site scripting vulnerability due to $@. | clipboard.ts:98:22:98:54 | dataTra ... /html') | user-provided value | | custom-element.js:5:26:5:36 | window.name | custom-element.js:5:26:5:36 | window.name | custom-element.js:5:26:5:36 | window.name | Cross-site scripting vulnerability due to $@. | custom-element.js:5:26:5:36 | window.name | user-provided value | | d3.js:11:15:11:24 | getTaint() | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | Cross-site scripting vulnerability due to $@. | d3.js:4:12:4:22 | window.name | user-provided value | | d3.js:12:20:12:29 | getTaint() | d3.js:4:12:4:22 | window.name | d3.js:12:20:12:29 | getTaint() | Cross-site scripting vulnerability due to $@. | d3.js:4:12:4:22 | window.name | user-provided value | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected index 69e0be045b6..e72df859347 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected @@ -152,6 +152,14 @@ nodes | clipboard.ts:73:29:73:39 | droppedHtml | | clipboard.ts:73:29:73:39 | droppedHtml | | clipboard.ts:73:29:73:39 | droppedHtml | +| clipboard.ts:98:15:98:54 | html | +| clipboard.ts:98:15:98:54 | html | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | +| clipboard.ts:99:23:99:26 | html | +| clipboard.ts:99:23:99:26 | html | +| clipboard.ts:99:23:99:26 | html | | custom-element.js:5:26:5:36 | window.name | | custom-element.js:5:26:5:36 | window.name | | custom-element.js:5:26:5:36 | window.name | @@ -1252,6 +1260,14 @@ edges | clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | | clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | | clipboard.ts:71:27:71:62 | e.clipb ... /html') | clipboard.ts:71:13:71:62 | droppedHtml | +| clipboard.ts:98:15:98:54 | html | clipboard.ts:99:23:99:26 | html | +| clipboard.ts:98:15:98:54 | html | clipboard.ts:99:23:99:26 | html | +| clipboard.ts:98:15:98:54 | html | clipboard.ts:99:23:99:26 | html | +| clipboard.ts:98:15:98:54 | html | clipboard.ts:99:23:99:26 | html | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:54 | html | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:54 | html | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:54 | html | +| clipboard.ts:98:22:98:54 | dataTra ... /html') | clipboard.ts:98:15:98:54 | html | | custom-element.js:5:26:5:36 | window.name | custom-element.js:5:26:5:36 | window.name | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | | d3.js:4:12:4:22 | window.name | d3.js:11:15:11:24 | getTaint() | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts index c392a156e5b..b87d5a43bee 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/clipboard.ts @@ -86,4 +86,16 @@ async function getClipboardData(e: ClipboardEvent): Promise const imageItems = Array.from(dropItems); return imageItems; - } \ No newline at end of file + } + +// inputevent +(function () { + let div = document.createElement("div"); + div.addEventListener("beforeinput", function (e: InputEvent) { + const { data, inputType, isComposing, dataTransfer } = e; + if (!dataTransfer) return; + + const html = dataTransfer.getData('text/html'); + $("#id").html(html); // NOT OK + }); +})(); \ No newline at end of file From e0b5197d3c1b939147a2d8f95a464d656c633ae0 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 18 Apr 2022 22:21:41 +0200 Subject: [PATCH 0163/1618] a slight refactor --- .../ql/lib/semmle/javascript/frameworks/DomEvents.qll | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll b/javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll index 60f01090f1a..1bebf082091 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll @@ -37,26 +37,22 @@ private DataFlow::SourceNode taintedEvent(DataFlow::TypeTracker t, string event) ) or t.start() and - exists(DataFlow::ParameterNode pn | + exists(DataFlow::ParameterNode pn | result = pn | // https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent pn.hasUnderlyingType("ClipboardEvent") and - result = pn and event = "paste" or // https://developer.mozilla.org/en-US/docs/Web/API/DragEvent pn.hasUnderlyingType("DragEvent") and - result = pn and event = "drop" or // https://developer.mozilla.org/en-US/docs/Web/API/InputEvent pn.hasUnderlyingType("InputEvent") and - result = pn and event = "beforeinput" ) or t.start() and - exists(DataFlow::PropWrite pw | pw = DOM::domValueRef().getAPropertyWrite() | - pw.getPropertyName() = "on" + event and + exists(DataFlow::PropWrite pw | pw = DOM::domValueRef().getAPropertyWrite("on" + event) | event = ["paste", "drop"] and // doesn't work for beforeinput, it's just not part of the API result = pw.getRhs().getABoundFunctionValue(0).getParameter(0) ) From f0c4b1955b1f70115b5b6027eb4e64bc8ebb0cad Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Tue, 19 Apr 2022 15:55:09 +0000 Subject: [PATCH 0164/1618] Change getResource() to be a taint step --- .../semmle/code/java/frameworks/Servlets.qll | 12 +++++-- .../Security/CWE/CWE-552/UnsafeUrlForward.ql | 14 ++++++++ .../Security/CWE/CWE-552/UnsafeUrlForward.qll | 35 ++++++++++++++----- .../semmle/code/java/frameworks/Jsf.qll | 14 ++++++-- 4 files changed, 62 insertions(+), 13 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll index 57e1137817e..f065a60f8e1 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll @@ -385,10 +385,18 @@ library class ServletContext extends RefType { ServletContext() { this.hasQualifiedName("javax.servlet", "ServletContext") } } -/** The `getResource` and `getResourceAsStream` methods of `ServletContext`. */ +/** The `getResource` method of `ServletContext`. */ class GetServletResourceMethod extends Method { GetServletResourceMethod() { this.getDeclaringType() instanceof ServletContext and - this.hasName(["getResource", "getResourceAsStream"]) + this.hasName("getResource") + } +} + +/** The `getResourceAsStream` method of `ServletContext`. */ +class GetServletResourceAsStreamMethod extends Method { + GetServletResourceAsStreamMethod() { + this.getDeclaringType() instanceof ServletContext and + this.hasName("getResourceAsStream") } } diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql index 94cdaafa553..e7a11d6806f 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql @@ -41,6 +41,20 @@ class UnsafeUrlForwardFlowConfig extends TaintTracking::Configuration { override DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSourceCallContext } + + override predicate isAdditionalTaintStep(DataFlow::Node prev, DataFlow::Node succ) { + exists(MethodAccess ma | + ( + ma.getMethod() instanceof GetServletResourceMethod or + ma.getMethod() instanceof GetFacesResourceMethod or + ma.getMethod() instanceof GetClassResourceMethod or + ma.getMethod() instanceof GetClassLoaderResourceMethod or + ma.getMethod() instanceof GetWildflyResourceMethod + ) and + ma.getArgument(0) = prev.asExpr() and + ma = succ.asExpr() + ) + } } from DataFlow::PathNode source, DataFlow::PathNode sink, UnsafeUrlForwardFlowConfig conf diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll index f87617d83f5..e7928b717a0 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll @@ -19,19 +19,35 @@ private class RequestDispatcherSink extends UnsafeUrlForwardSink { } } -/** The `getResource` and `getResourceAsStream` methods of `Class`. */ +/** The `getResource` method of `Class`. */ class GetClassResourceMethod extends Method { GetClassResourceMethod() { this.getSourceDeclaration().getDeclaringType().hasQualifiedName("java.lang", "Class") and - this.hasName(["getResource", "getResourceAsStream"]) + this.hasName("getResource") } } -/** The `getResource` and `getResourceAsStream` methods of `ClassLoader`. */ +/** The `getResourceAsStream` method of `Class`. */ +class GetClassResourceAsStreamMethod extends Method { + GetClassResourceAsStreamMethod() { + this.getSourceDeclaration().getDeclaringType().hasQualifiedName("java.lang", "Class") and + this.hasName("getResourceAsStream") + } +} + +/** The `getResource` method of `ClassLoader`. */ class GetClassLoaderResourceMethod extends Method { GetClassLoaderResourceMethod() { this.getDeclaringType().hasQualifiedName("java.lang", "ClassLoader") and - this.hasName(["getResource", "getResourceAsStream"]) + this.hasName("getResource") + } +} + +/** The `getResourceAsStream` method of `ClassLoader`. */ +class GetClassLoaderResourceAsStreamMethod extends Method { + GetClassLoaderResourceAsStreamMethod() { + this.getDeclaringType().hasQualifiedName("java.lang", "ClassLoader") and + this.hasName("getResourceAsStream") } } @@ -66,13 +82,14 @@ class GetVirtualFileMethod extends Method { /** An argument to `getResource()` or `getResourceAsStream()`. */ private class GetResourceSink extends UnsafeUrlForwardSink { GetResourceSink() { + sinkNode(this, "open-url") + or exists(MethodAccess ma | ( - ma.getMethod() instanceof GetServletResourceMethod or - ma.getMethod() instanceof GetFacesResourceMethod or - ma.getMethod() instanceof GetClassResourceMethod or - ma.getMethod() instanceof GetClassLoaderResourceMethod or - ma.getMethod() instanceof GetWildflyResourceMethod or + ma.getMethod() instanceof GetServletResourceAsStreamMethod or + ma.getMethod() instanceof GetFacesResourceAsStreamMethod or + ma.getMethod() instanceof GetClassResourceAsStreamMethod or + ma.getMethod() instanceof GetClassLoaderResourceAsStreamMethod or ma.getMethod() instanceof GetVirtualFileMethod ) and ma.getArgument(0) = this.asExpr() diff --git a/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll b/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll index 9035bda3422..5769a842611 100644 --- a/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll +++ b/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll @@ -14,11 +14,21 @@ class ExternalContext extends RefType { } /** - * The methods `getResource()` and `getResourceAsStream()` declared in JSF `ExternalContext`. + * The method `getResource()` declared in JSF `ExternalContext`. */ class GetFacesResourceMethod extends Method { GetFacesResourceMethod() { this.getDeclaringType().getASupertype*() instanceof ExternalContext and - this.hasName(["getResource", "getResourceAsStream"]) + this.hasName("getResource") + } +} + +/** + * The method `getResourceAsStream()` declared in JSF `ExternalContext`. + */ +class GetFacesResourceAsStreamMethod extends Method { + GetFacesResourceAsStreamMethod() { + this.getDeclaringType().getASupertype*() instanceof ExternalContext and + this.hasName("getResourceAsStream") } } From b76873fc8dfb1878ac6c2586559b613245f93557 Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Tue, 19 Apr 2022 22:22:15 +0000 Subject: [PATCH 0165/1618] Add more test cases --- .../security/CWE-552/UnsafeResourceGet.java | 43 ++++++++++++++++--- .../CWE-552/UnsafeUrlForward.expected | 32 +++++++------- 2 files changed, 53 insertions(+), 22 deletions(-) diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java index 523e5210ee6..ae22a7e7d0f 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java @@ -2,6 +2,7 @@ package com.example; import java.io.InputStream; import java.io.IOException; +import java.io.PrintWriter; import java.nio.file.Path; import java.nio.file.Paths; import java.net.URL; @@ -60,6 +61,42 @@ public class UnsafeResourceGet extends HttpServlet { } } + // GOOD: getResource constructed from `ServletContext` with null check only + protected void doGetGood2(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + PrintWriter writer = response.getWriter(); + + ServletConfig cfg = getServletConfig(); + ServletContext sc = cfg.getServletContext(); + + // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file + URL url = sc.getResource(requestUrl); + if (url == null) { + writer.println("Requested source not found"); + } + } + + // GOOD: getResource constructed from `ServletContext` with `equals` check + protected void doGetGood3(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + String requestUrl = request.getParameter("requestURL"); + ServletOutputStream out = response.getOutputStream(); + + ServletContext sc = request.getServletContext(); + + if (requestUrl.equals("/public/crossdomain.xml")) { + URL url = sc.getResource(requestUrl); + + InputStream in = url.openStream(); + byte[] buf = new byte[4 * 1024]; // 4K buffer + int bytesRead; + while ((bytesRead = in.read(buf)) != -1) { + out.write(buf, 0, bytesRead); + } + } + } + @Override // BAD: getResourceAsStream constructed from `ServletContext` without input validation protected void doPost(HttpServletRequest request, HttpServletResponse response) @@ -67,9 +104,6 @@ public class UnsafeResourceGet extends HttpServlet { String requestPath = request.getParameter("requestPath"); ServletOutputStream out = response.getOutputStream(); - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - // A sample request /fake.jsp/../WEB-INF/web.xml can load the web.xml file InputStream in = request.getServletContext().getResourceAsStream(requestPath); byte[] buf = new byte[4 * 1024]; // 4K buffer @@ -85,9 +119,6 @@ public class UnsafeResourceGet extends HttpServlet { String requestPath = request.getParameter("requestPath"); ServletOutputStream out = response.getOutputStream(); - ServletConfig cfg = getServletConfig(); - ServletContext sc = cfg.getServletContext(); - if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { InputStream in = request.getServletContext().getResourceAsStream(requestPath); byte[] buf = new byte[4 * 1024]; // 4K buffer diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected index ddbfd3cb900..2f136732fdc 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected @@ -1,9 +1,9 @@ edges | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | -| UnsafeResourceGet.java:24:23:24:56 | getParameter(...) : String | UnsafeResourceGet.java:31:28:31:37 | requestUrl | -| UnsafeResourceGet.java:67:24:67:58 | getParameter(...) : String | UnsafeResourceGet.java:74:68:74:78 | requestPath | -| UnsafeResourceGet.java:105:23:105:56 | getParameter(...) : String | UnsafeResourceGet.java:110:36:110:45 | requestUrl | -| UnsafeResourceGet.java:143:24:143:58 | getParameter(...) : String | UnsafeResourceGet.java:151:68:151:78 | requestPath | +| UnsafeResourceGet.java:25:23:25:56 | getParameter(...) : String | UnsafeResourceGet.java:34:20:34:22 | url | +| UnsafeResourceGet.java:104:24:104:58 | getParameter(...) : String | UnsafeResourceGet.java:108:68:108:78 | requestPath | +| UnsafeResourceGet.java:136:23:136:56 | getParameter(...) : String | UnsafeResourceGet.java:143:20:143:22 | url | +| UnsafeResourceGet.java:174:24:174:58 | getParameter(...) : String | UnsafeResourceGet.java:182:68:182:78 | requestPath | | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | @@ -23,14 +23,14 @@ edges nodes | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | semmle.label | getServletPath(...) : String | | UnsafeRequestPath.java:23:33:23:36 | path | semmle.label | path | -| UnsafeResourceGet.java:24:23:24:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:31:28:31:37 | requestUrl | semmle.label | requestUrl | -| UnsafeResourceGet.java:67:24:67:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:74:68:74:78 | requestPath | semmle.label | requestPath | -| UnsafeResourceGet.java:105:23:105:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:110:36:110:45 | requestUrl | semmle.label | requestUrl | -| UnsafeResourceGet.java:143:24:143:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | -| UnsafeResourceGet.java:151:68:151:78 | requestPath | semmle.label | requestPath | +| UnsafeResourceGet.java:25:23:25:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:34:20:34:22 | url | semmle.label | url | +| UnsafeResourceGet.java:104:24:104:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:108:68:108:78 | requestPath | semmle.label | requestPath | +| UnsafeResourceGet.java:136:23:136:56 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:143:20:143:22 | url | semmle.label | url | +| UnsafeResourceGet.java:174:24:174:58 | getParameter(...) : String | semmle.label | getParameter(...) : String | +| UnsafeResourceGet.java:182:68:182:78 | requestPath | semmle.label | requestPath | | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | semmle.label | returnURL | | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | semmle.label | getParameter(...) : String | @@ -61,10 +61,10 @@ nodes subpaths #select | UnsafeRequestPath.java:23:33:23:36 | path | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | Potentially untrusted URL forward due to $@. | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) | user-provided value | -| UnsafeResourceGet.java:31:28:31:37 | requestUrl | UnsafeResourceGet.java:24:23:24:56 | getParameter(...) : String | UnsafeResourceGet.java:31:28:31:37 | requestUrl | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:24:23:24:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:74:68:74:78 | requestPath | UnsafeResourceGet.java:67:24:67:58 | getParameter(...) : String | UnsafeResourceGet.java:74:68:74:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:67:24:67:58 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:110:36:110:45 | requestUrl | UnsafeResourceGet.java:105:23:105:56 | getParameter(...) : String | UnsafeResourceGet.java:110:36:110:45 | requestUrl | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:105:23:105:56 | getParameter(...) | user-provided value | -| UnsafeResourceGet.java:151:68:151:78 | requestPath | UnsafeResourceGet.java:143:24:143:58 | getParameter(...) : String | UnsafeResourceGet.java:151:68:151:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:143:24:143:58 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:34:20:34:22 | url | UnsafeResourceGet.java:25:23:25:56 | getParameter(...) : String | UnsafeResourceGet.java:34:20:34:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:25:23:25:56 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:108:68:108:78 | requestPath | UnsafeResourceGet.java:104:24:104:58 | getParameter(...) : String | UnsafeResourceGet.java:108:68:108:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:104:24:104:58 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:143:20:143:22 | url | UnsafeResourceGet.java:136:23:136:56 | getParameter(...) : String | UnsafeResourceGet.java:143:20:143:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:136:23:136:56 | getParameter(...) | user-provided value | +| UnsafeResourceGet.java:182:68:182:78 | requestPath | UnsafeResourceGet.java:174:24:174:58 | getParameter(...) : String | UnsafeResourceGet.java:182:68:182:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:174:24:174:58 | getParameter(...) | user-provided value | | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) | user-provided value | | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) | user-provided value | | UnsafeServletRequestDispatch.java:76:53:76:56 | path | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) | user-provided value | From 5dbbd17bb27d56cd95baa20be60daa9f24fd5b72 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 13 Apr 2022 12:27:06 +0200 Subject: [PATCH 0166/1618] Python: Add test to ensure we keep DataFlow imports clean Currently we're not in a good state :( --- .../experimental/dataflow/qll-private-imports/README.md | 3 +++ .../dataflow/qll-private-imports/Test.expected | 1 + .../experimental/dataflow/qll-private-imports/Test.ql | 8 ++++++++ .../experimental/dataflow/qll-private-imports/test.py | 1 + 4 files changed, 13 insertions(+) create mode 100644 python/ql/test/experimental/dataflow/qll-private-imports/README.md create mode 100644 python/ql/test/experimental/dataflow/qll-private-imports/Test.expected create mode 100644 python/ql/test/experimental/dataflow/qll-private-imports/Test.ql create mode 100644 python/ql/test/experimental/dataflow/qll-private-imports/test.py diff --git a/python/ql/test/experimental/dataflow/qll-private-imports/README.md b/python/ql/test/experimental/dataflow/qll-private-imports/README.md new file mode 100644 index 00000000000..f11beca34d9 --- /dev/null +++ b/python/ql/test/experimental/dataflow/qll-private-imports/README.md @@ -0,0 +1,3 @@ +Sometimes we accidentally re-export too much from `DataFlow` such that for example we can access `Add` from `DataFlow::Add` :disappointed: + +This test should always FAIL to compile! diff --git a/python/ql/test/experimental/dataflow/qll-private-imports/Test.expected b/python/ql/test/experimental/dataflow/qll-private-imports/Test.expected new file mode 100644 index 00000000000..94b2fd22d12 --- /dev/null +++ b/python/ql/test/experimental/dataflow/qll-private-imports/Test.expected @@ -0,0 +1 @@ +| Add | diff --git a/python/ql/test/experimental/dataflow/qll-private-imports/Test.ql b/python/ql/test/experimental/dataflow/qll-private-imports/Test.ql new file mode 100644 index 00000000000..302504fcf96 --- /dev/null +++ b/python/ql/test/experimental/dataflow/qll-private-imports/Test.ql @@ -0,0 +1,8 @@ +import python +private import semmle.python.dataflow.new.DataFlow + +// Sometimes we accidentally re-export too much from `DataFlow` such that for example we can access `Add` from `DataFlow::Add` :( +// +// This test should always FAIL to compile! +from DataFlow::Add this_should_not_work +select this_should_not_work diff --git a/python/ql/test/experimental/dataflow/qll-private-imports/test.py b/python/ql/test/experimental/dataflow/qll-private-imports/test.py new file mode 100644 index 00000000000..c040fa67d34 --- /dev/null +++ b/python/ql/test/experimental/dataflow/qll-private-imports/test.py @@ -0,0 +1 @@ +1+1 From 084c8eb22e8507b3bea78f538de5b6890634e3aa Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 13 Apr 2022 12:36:09 +0200 Subject: [PATCH 0167/1618] Python: Don't re-export `python` under `DataFlow::` --- .../python/dataflow/new/internal/DataFlowImplSpecific.qll | 6 ++++++ .../semmle/python/dataflow/new/internal/DataFlowUtil.qll | 1 + .../semmle/python/dataflow/new/internal/LocalSources.qll | 2 +- .../experimental/dataflow/qll-private-imports/Test.expected | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll index e88726b158b..cdbd1eecb2c 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplSpecific.qll @@ -1,9 +1,15 @@ /** * Provides Python-specific definitions for use in the data flow library. */ + +// we need to export `Unit` for the DataFlowImpl* files +private import python as Python + module Private { import DataFlowPrivate + // import DataFlowDispatch + class Unit = Python::Unit; } module Public { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowUtil.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowUtil.qll index 4dbf2a5d4cd..4d0d52e9a4b 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowUtil.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowUtil.qll @@ -2,6 +2,7 @@ * Contains utility functions for writing data flow queries */ +private import python private import DataFlowPrivate import DataFlowPublic diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll index 5bf6f22e945..08d8dff2a02 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/LocalSources.qll @@ -6,7 +6,7 @@ * local tracking within a function. */ -import python +private import python import DataFlowPublic private import DataFlowPrivate private import semmle.python.internal.CachedStages diff --git a/python/ql/test/experimental/dataflow/qll-private-imports/Test.expected b/python/ql/test/experimental/dataflow/qll-private-imports/Test.expected index 94b2fd22d12..c0963a9ef61 100644 --- a/python/ql/test/experimental/dataflow/qll-private-imports/Test.expected +++ b/python/ql/test/experimental/dataflow/qll-private-imports/Test.expected @@ -1 +1 @@ -| Add | +ERROR: Could not resolve type DataFlow::Add (Test.ql:7,6-19) From d70f2470019b8d906141a62d56fd02028390ce99 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 13 Apr 2022 12:36:29 +0200 Subject: [PATCH 0168/1618] Python: More `private import python` --- python/ql/lib/semmle/python/SpecialMethods.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/SpecialMethods.qll b/python/ql/lib/semmle/python/SpecialMethods.qll index afa9367c269..eb960005f4d 100644 --- a/python/ql/lib/semmle/python/SpecialMethods.qll +++ b/python/ql/lib/semmle/python/SpecialMethods.qll @@ -8,7 +8,7 @@ * Extend `SpecialMethod::Potential` to capture more cases. */ -import python +private import python /** A control flow node which might correspond to a special method call. */ class PotentialSpecialMethodCallNode extends ControlFlowNode { From 888a38c060ee74cfc06152f318d0410a10ecba87 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 20 Apr 2022 11:46:09 +0200 Subject: [PATCH 0169/1618] Python: Add change-note --- .../change-notes/2022-04-20-export-python-under-DataFlow.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 python/ql/lib/change-notes/2022-04-20-export-python-under-DataFlow.md diff --git a/python/ql/lib/change-notes/2022-04-20-export-python-under-DataFlow.md b/python/ql/lib/change-notes/2022-04-20-export-python-under-DataFlow.md new file mode 100644 index 00000000000..2729b834ccf --- /dev/null +++ b/python/ql/lib/change-notes/2022-04-20-export-python-under-DataFlow.md @@ -0,0 +1,4 @@ +--- + category: breaking +--- + * The imports made available from `import python` are no longer exposed under `DataFlow::` after doing `import semmle.python.dataflow.new.DataFlow`, for example using `DataFlow::Add` will now cause a compile error. From 40da7a10553c76ad98bb0f6c6a5af652fc3f4e5e Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 21 Apr 2022 16:55:50 +0100 Subject: [PATCH 0170/1618] C++: Add a test of NoCheckBeforeUnsafePutUser.ql. --- .../NoCheckBeforeUnsafePutUser.expected | 1 + .../NoCheckBeforeUnsafePutUser.qlref | 1 + .../NoCheckBeforeUnsafePutUser/test.cpp | 82 +++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.expected create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.qlref create mode 100644 cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/test.cpp diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.expected new file mode 100644 index 00000000000..ffb7941f1cd --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.expected @@ -0,0 +1 @@ +| test.cpp:14:16:14:16 | p | unsafe_put_user write user-mode pointer $@ without check. | test.cpp:14:16:14:16 | p | p | diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.qlref b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.qlref new file mode 100644 index 00000000000..a4543b332dd --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/NoCheckBeforeUnsafePutUser.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser.ql diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/test.cpp new file mode 100644 index 00000000000..755a73864c7 --- /dev/null +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-020/NoCheckBeforeUnsafePutUser/test.cpp @@ -0,0 +1,82 @@ + +typedef unsigned long size_t; + +void SYSC_SOMESYSTEMCALL(void *param); + +bool user_access_begin_impl(const void *where, size_t sz); +void user_access_end_impl(); +#define user_access_begin(where, sz) user_access_begin_impl(where, sz) +#define user_access_end() user_access_end_impl() + +void unsafe_put_user_impl(int what, const void *where, size_t sz); +#define unsafe_put_user(what, where) unsafe_put_user_impl( (what), (where), sizeof(*(where)) ) + +void test1(int p) +{ + SYSC_SOMESYSTEMCALL(&p); + + unsafe_put_user(123, &p); // BAD +} + +void test2(int p) +{ + SYSC_SOMESYSTEMCALL(&p); + + if (user_access_begin(&p, sizeof(p))) + { + unsafe_put_user(123, &p); // GOOD + + user_access_end(); + } +} + +void test3() +{ + int v; + + SYSC_SOMESYSTEMCALL(&v); + + unsafe_put_user(123, &v); // BAD [NOT DETECTED] +} + +void test4() +{ + int v; + + SYSC_SOMESYSTEMCALL(&v); + + if (user_access_begin(&v, sizeof(v))) + { + unsafe_put_user(123, &v); // GOOD + + user_access_end(); + } +} + +struct data +{ + int x; +}; + +void test5() +{ + data myData; + + SYSC_SOMESYSTEMCALL(&myData); + + unsafe_put_user(123, &(myData.x)); // BAD [NOT DETECTED] +} + +void test6() +{ + data myData; + + SYSC_SOMESYSTEMCALL(&myData); + + if (user_access_begin(&myData, sizeof(myData))) + { + unsafe_put_user(123, &(myData.x)); // GOOD + + user_access_end(); + } +} From b5193d99d76e80992825e285d59ace24cc6be106 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 25 Apr 2022 11:32:52 +0200 Subject: [PATCH 0171/1618] have getSourceType() depend on which kind of event it is --- .../javascript/frameworks/DomEvents.qll | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll b/javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll index 1bebf082091..7fb13d56f08 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/DomEvents.qll @@ -67,16 +67,16 @@ private DataFlow::SourceNode taintedEvent(DataFlow::TypeTracker t, string event) * Gets a reference to a DataTransfer object. * https://developer.mozilla.org/en-US/docs/Web/API/ClipboardEvent/clipboardData */ -private DataFlow::SourceNode taintedDataTransfer(DataFlow::TypeTracker t) { +private DataFlow::SourceNode taintedDataTransfer(DataFlow::TypeTracker t, string event) { t.start() and - result = taintedEvent(DataFlow::TypeTracker::end(), "paste").getAPropertyRead("clipboardData") + result = taintedEvent(DataFlow::TypeTracker::end(), event).getAPropertyRead("clipboardData") and + event = "paste" or t.start() and - result = - taintedEvent(DataFlow::TypeTracker::end(), ["drop", "beforeinput"]) - .getAPropertyRead("dataTransfer") + result = taintedEvent(DataFlow::TypeTracker::end(), event).getAPropertyRead("dataTransfer") and + event = ["drop", "beforeinput"] or - exists(DataFlow::TypeTracker t2 | result = taintedDataTransfer(t2).track(t2, t)) + exists(DataFlow::TypeTracker t2 | result = taintedDataTransfer(t2, event).track(t2, t)) } /** @@ -84,9 +84,20 @@ private DataFlow::SourceNode taintedDataTransfer(DataFlow::TypeTracker t) { * Seen as a source for DOM-based XSS. */ private class TaintedDataTransfer extends RemoteFlowSource { + string event; + TaintedDataTransfer() { - this = taintedDataTransfer(DataFlow::TypeTracker::end()).getAMethodCall("getData") + this = taintedDataTransfer(DataFlow::TypeTracker::end(), event).getAMethodCall("getData") } - override string getSourceType() { result = "Clipboard data" } + override string getSourceType() { + event = "paste" and + result = "Clipboard data" + or + event = "drop" and + result = "Drag&Drop data" + or + event = "beforeinput" and + result = "Input data" + } } From fe3d71ebc21dc225a37bcad3d1da3e2d0aed610a Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 25 Apr 2022 14:07:01 +0200 Subject: [PATCH 0172/1618] fix qhelp: the window, not the origin, is sending the message Co-authored-by: Esben Sparre Andreasen --- javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp index 1bc5a87cbb1..ab551927ed1 100644 --- a/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp +++ b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp @@ -7,8 +7,7 @@

    The "message" event is used to send messages between windows. -An untrusted origin is allowed to send messages to a trusted window, and if the origin -is not checked that can lead to various security issues. +An untrusted window can send a message to a trusted window, and it is up to the receiver to verify the legitimacy of the message. One way of doing that verification is to check the origin of the message ensure that it origins from a trusted window.

    From 0a26e891a22ad57a29138150fc73f90bcfe5c37b Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 25 Apr 2022 15:28:50 +0200 Subject: [PATCH 0173/1618] include startsWith/endsWith checks in js/missing-origin-check --- .../ql/src/Security/CWE-020/MissingOriginCheck.ql | 10 ++++++++++ .../Security/CWE-020/MissingOriginCheck/tst.js | 8 +++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/javascript/ql/src/Security/CWE-020/MissingOriginCheck.ql b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.ql index f4446ed7565..543d3996abb 100644 --- a/javascript/ql/src/Security/CWE-020/MissingOriginCheck.ql +++ b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.ql @@ -66,6 +66,16 @@ predicate hasOriginCheck(PostMessageHandler handler) { or // set.includes(event.source) exists(InclusionTest test | sourceOrOrigin(handler).flowsTo(test.getContainedNode())) + or + // "safeOrigin".startsWith(event.origin) + exists(StringOps::StartsWith starts | + origin(DataFlow::TypeTracker::end(), handler).flowsTo(starts.getSubstring()) + ) + or + // "safeOrigin".endsWith(event.origin) + exists(StringOps::EndsWith ends | + origin(DataFlow::TypeTracker::end(), handler).flowsTo(ends.getSubstring()) + ) } from PostMessageHandler handler diff --git a/javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/tst.js b/javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/tst.js index 729f35637fc..6e5c0ce6a14 100644 --- a/javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/tst.js +++ b/javascript/ql/test/query-tests/Security/CWE-020/MissingOriginCheck/tst.js @@ -61,4 +61,10 @@ function is_valid_origin(origin) { warn("invalid origin: " + origin); } return valid; -} \ No newline at end of file +} + +window.onmessage = event => { // OK - the check is OK + if ("https://www.example.com".startsWith(event.origin)) { + // do something + } +} From 5a7043f528c1eed69abfd59a5a53462e61b87870 Mon Sep 17 00:00:00 2001 From: James Fletcher <42464962+jf205@users.noreply.github.com> Date: Mon, 25 Apr 2022 15:57:18 +0100 Subject: [PATCH 0174/1618] Update analyzing-databases-with-the-codeql-cli.rst --- .../codeql-cli/analyzing-databases-with-the-codeql-cli.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst b/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst index 724d050e488..d3b04a32a0b 100644 --- a/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst +++ b/docs/codeql/codeql-cli/analyzing-databases-with-the-codeql-cli.rst @@ -147,7 +147,7 @@ you could use the following command from the directory containing your database: The analysis generates a file in the v2.1.0 SARIF format that is supported by all versions of GitHub. This file can be uploaded to GitHub by executing ``codeql github upload-results`` or the code scanning API. -For more information, see `Analyzing a CodeQL database `__ +For more information, see `Analyzing a CodeQL database `__ or `Code scanning API `__ in the GitHub documentation. CodeQL query suites are ``.qls`` files that use directives to select queries to run From 2ee83e2ba2ed320544e282fecc676c52b4c8e137 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 26 Apr 2022 11:00:41 +0200 Subject: [PATCH 0175/1618] Add Editable.toString flow step --- ...-26-android-editable-tostring-flow-step.md | 4 + .../code/java/frameworks/android/Widget.qll | 12 +++ .../CleartextStorageAndroidDatabaseQuery.qll | 14 ---- .../java/security/CleartextStorageQuery.qll | 15 ---- .../frameworks/android/widget/TestWidget.java | 11 +++ .../frameworks/android/widget/options | 1 + .../frameworks/android/widget/test.expected | 0 .../frameworks/android/widget/test.ql | 7 ++ .../android/app/RemoteAction.java | 30 +++++++ .../android/text/Editable.java | 29 +++++++ .../android/text/GetChars.java | 9 ++ .../android/text/InputFilter.java | 10 +++ .../android/text/Layout.java | 83 +++++++++++++++++++ .../android/text/NoCopySpan.java | 8 ++ .../android/text/ParcelableSpan.java | 10 +++ .../android/text/PrecomputedText.java | 41 +++++++++ .../android/text/TextDirectionHeuristic.java | 10 +++ .../android/text/TextUtils.java | 75 +++++++++++++++++ .../android/text/TextWatcher.java | 13 +++ .../android/text/method/KeyListener.java | 16 ++++ .../android/text/method/MovementMethod.java | 21 +++++ .../text/method/TransformationMethod.java | 12 +++ .../android/text/style/URLSpan.java | 20 +++++ .../textclassifier/ConversationAction.java | 31 +++++++ .../textclassifier/ConversationActions.java | 51 ++++++++++++ .../view/textclassifier/SelectionEvent.java | 61 ++++++++++++++ .../textclassifier/TextClassification.java | 48 +++++++++++ .../TextClassificationContext.java | 18 ++++ .../TextClassificationSessionId.java | 17 ++++ .../view/textclassifier/TextClassifier.java | 68 +++++++++++++++ .../textclassifier/TextClassifierEvent.java | 54 ++++++++++++ .../view/textclassifier/TextLanguage.java | 32 +++++++ .../view/textclassifier/TextSelection.java | 40 +++++++++ .../android/widget/EditText.java | 29 +++++++ .../android/widget/Scroller.java | 34 ++++++++ 35 files changed, 905 insertions(+), 29 deletions(-) create mode 100644 java/ql/lib/change-notes/2022-04-26-android-editable-tostring-flow-step.md create mode 100644 java/ql/test/library-tests/frameworks/android/widget/TestWidget.java create mode 100644 java/ql/test/library-tests/frameworks/android/widget/options create mode 100644 java/ql/test/library-tests/frameworks/android/widget/test.expected create mode 100644 java/ql/test/library-tests/frameworks/android/widget/test.ql create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/app/RemoteAction.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/Editable.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/GetChars.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/InputFilter.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/Layout.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/NoCopySpan.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/ParcelableSpan.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/PrecomputedText.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/TextDirectionHeuristic.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/TextUtils.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/TextWatcher.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/method/KeyListener.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/method/MovementMethod.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/method/TransformationMethod.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/text/style/URLSpan.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationAction.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationActions.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/SelectionEvent.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassification.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationContext.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationSessionId.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifier.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifierEvent.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLanguage.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextSelection.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/widget/EditText.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/widget/Scroller.java diff --git a/java/ql/lib/change-notes/2022-04-26-android-editable-tostring-flow-step.md b/java/ql/lib/change-notes/2022-04-26-android-editable-tostring-flow-step.md new file mode 100644 index 00000000000..2c8e2e367fb --- /dev/null +++ b/java/ql/lib/change-notes/2022-04-26-android-editable-tostring-flow-step.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +Added a flow step for `toString` calls on tainted `android.text.Editable` objects. \ No newline at end of file diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Widget.qll b/java/ql/lib/semmle/code/java/frameworks/android/Widget.qll index c5eda29547b..606f84cbc26 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Widget.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Widget.qll @@ -16,6 +16,18 @@ private class DefaultAndroidWidgetSources extends RemoteFlowSource { override string getSourceType() { result = "Android widget source" } } +private class EditableToStringStep extends AdditionalTaintStep { + override predicate step(DataFlow::Node n1, DataFlow::Node n2) { + exists(MethodAccess toString | + toString.getMethod().hasName("toString") and + toString.getReceiverType().hasQualifiedName("android.text", "Editable") + | + n1.asExpr() = toString.getQualifier() and + n2.asExpr() = toString + ) + } +} + private class AndroidWidgetSummaryModels extends SummaryModelCsv { override predicate row(string row) { row = "android.widget;EditText;true;getText;;;Argument[-1];ReturnValue;taint" diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidDatabaseQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidDatabaseQuery.qll index 0a1f306677f..7edd9e74c50 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidDatabaseQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidDatabaseQuery.qll @@ -11,20 +11,6 @@ private class LocalDatabaseCleartextStorageSink extends CleartextStorageSink { LocalDatabaseCleartextStorageSink() { localDatabaseInput(_, this.asExpr()) } } -private class LocalDatabaseCleartextStorageStep extends CleartextStorageAdditionalTaintStep { - override predicate step(DataFlow::Node n1, DataFlow::Node n2) { - // EditText.getText() return type is parsed as `Object`, so we need to - // add a taint step for `Object.toString` to model `editText.getText().toString()` - exists(MethodAccess ma, Method m | - ma.getMethod() = m and - m.getDeclaringType() instanceof TypeObject and - m.hasName("toString") - | - n1.asExpr() = ma.getQualifier() and n2.asExpr() = ma - ) - } -} - /** The creation of an object that can be used to store data in a local database. */ class LocalDatabaseOpenMethodAccess extends Storable, Call { LocalDatabaseOpenMethodAccess() { diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll index 094d4b41c9d..8bd14b63ea6 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageQuery.qll @@ -85,18 +85,3 @@ private class EncryptedValueFlowConfig extends DataFlow4::Configuration { override predicate isSink(DataFlow::Node sink) { sink.asExpr() instanceof SensitiveExpr } } - -/** A taint step for `EditText.toString` in Android. */ -private class AndroidEditTextCleartextStorageStep extends CleartextStorageAdditionalTaintStep { - override predicate step(DataFlow::Node n1, DataFlow::Node n2) { - // EditText.getText() return type is parsed as `Object`, so we need to - // add a taint step for `Object.toString` to model `editText.getText().toString()` - exists(MethodAccess ma, Method m | - ma.getMethod() = m and - m.getDeclaringType() instanceof TypeObject and - m.hasName("toString") - | - n1.asExpr() = ma.getQualifier() and n2.asExpr() = ma - ) - } -} diff --git a/java/ql/test/library-tests/frameworks/android/widget/TestWidget.java b/java/ql/test/library-tests/frameworks/android/widget/TestWidget.java new file mode 100644 index 00000000000..7a7285180f0 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/widget/TestWidget.java @@ -0,0 +1,11 @@ +import android.widget.EditText; + +public class TestWidget { + + private void sink(Object sink) {} + + public void test(EditText t) { + sink(t.getText().toString()); // $ hasTaintFlow + } +} + diff --git a/java/ql/test/library-tests/frameworks/android/widget/options b/java/ql/test/library-tests/frameworks/android/widget/options new file mode 100644 index 00000000000..33cdc1ea940 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/widget/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/google-android-9.0.0 diff --git a/java/ql/test/library-tests/frameworks/android/widget/test.expected b/java/ql/test/library-tests/frameworks/android/widget/test.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/library-tests/frameworks/android/widget/test.ql b/java/ql/test/library-tests/frameworks/android/widget/test.ql new file mode 100644 index 00000000000..29b5248779a --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/widget/test.ql @@ -0,0 +1,7 @@ +import java +import semmle.code.java.dataflow.FlowSources +import TestUtilities.InlineFlowTest + +class SourceTaintFlowConf extends DefaultTaintFlowConf { + override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/app/RemoteAction.java b/java/ql/test/stubs/google-android-9.0.0/android/app/RemoteAction.java new file mode 100644 index 00000000000..58dec2cc81a --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/app/RemoteAction.java @@ -0,0 +1,30 @@ +// Generated automatically from android.app.RemoteAction for testing purposes + +package android.app; + +import android.app.PendingIntent; +import android.graphics.drawable.Icon; +import android.os.Parcel; +import android.os.Parcelable; +import java.io.PrintWriter; + +public class RemoteAction implements Parcelable +{ + protected RemoteAction() {} + public CharSequence getContentDescription(){ return null; } + public CharSequence getTitle(){ return null; } + public Icon getIcon(){ return null; } + public PendingIntent getActionIntent(){ return null; } + public RemoteAction clone(){ return null; } + public RemoteAction(Icon p0, CharSequence p1, CharSequence p2, PendingIntent p3){} + public boolean equals(Object p0){ return false; } + public boolean isEnabled(){ return false; } + public boolean shouldShowIcon(){ return false; } + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void dump(String p0, PrintWriter p1){} + public void setEnabled(boolean p0){} + public void setShouldShowIcon(boolean p0){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/Editable.java b/java/ql/test/stubs/google-android-9.0.0/android/text/Editable.java new file mode 100644 index 00000000000..8481739b1e4 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/Editable.java @@ -0,0 +1,29 @@ +// Generated automatically from android.text.Editable for testing purposes + +package android.text; + +import android.text.GetChars; +import android.text.InputFilter; +import android.text.Spannable; + +public interface Editable extends Appendable, CharSequence, GetChars, Spannable +{ + Editable append(CharSequence p0); + Editable append(CharSequence p0, int p1, int p2); + Editable append(char p0); + Editable delete(int p0, int p1); + Editable insert(int p0, CharSequence p1); + Editable insert(int p0, CharSequence p1, int p2, int p3); + Editable replace(int p0, int p1, CharSequence p2); + Editable replace(int p0, int p1, CharSequence p2, int p3, int p4); + InputFilter[] getFilters(); + static public class Factory + { + public Editable newEditable(CharSequence p0){ return null; } + public Factory(){} + public static Editable.Factory getInstance(){ return null; } + } + void clear(); + void clearSpans(); + void setFilters(InputFilter[] p0); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/GetChars.java b/java/ql/test/stubs/google-android-9.0.0/android/text/GetChars.java new file mode 100644 index 00000000000..1dc6c89d470 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/GetChars.java @@ -0,0 +1,9 @@ +// Generated automatically from android.text.GetChars for testing purposes + +package android.text; + + +public interface GetChars extends CharSequence +{ + void getChars(int p0, int p1, char[] p2, int p3); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/InputFilter.java b/java/ql/test/stubs/google-android-9.0.0/android/text/InputFilter.java new file mode 100644 index 00000000000..fb2fdc6441c --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/InputFilter.java @@ -0,0 +1,10 @@ +// Generated automatically from android.text.InputFilter for testing purposes + +package android.text; + +import android.text.Spanned; + +public interface InputFilter +{ + CharSequence filter(CharSequence p0, int p1, int p2, Spanned p3, int p4, int p5); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/Layout.java b/java/ql/test/stubs/google-android-9.0.0/android/text/Layout.java new file mode 100644 index 00000000000..94cb2378773 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/Layout.java @@ -0,0 +1,83 @@ +// Generated automatically from android.text.Layout for testing purposes + +package android.text; + +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.Rect; +import android.text.TextPaint; + +abstract public class Layout +{ + protected Layout() {} + protected Layout(CharSequence p0, TextPaint p1, int p2, Layout.Alignment p3, float p4, float p5){} + protected final boolean isSpanned(){ return false; } + public abstract Layout.Directions getLineDirections(int p0); + public abstract boolean getLineContainsTab(int p0); + public abstract int getBottomPadding(); + public abstract int getEllipsisCount(int p0); + public abstract int getEllipsisStart(int p0); + public abstract int getLineCount(); + public abstract int getLineDescent(int p0); + public abstract int getLineStart(int p0); + public abstract int getLineTop(int p0); + public abstract int getParagraphDirection(int p0); + public abstract int getTopPadding(); + public boolean isRtlCharAt(int p0){ return false; } + public final CharSequence getText(){ return null; } + public final Layout.Alignment getAlignment(){ return null; } + public final Layout.Alignment getParagraphAlignment(int p0){ return null; } + public final TextPaint getPaint(){ return null; } + public final float getSpacingAdd(){ return 0; } + public final float getSpacingMultiplier(){ return 0; } + public final int getLineAscent(int p0){ return 0; } + public final int getLineBaseline(int p0){ return 0; } + public final int getLineBottom(int p0){ return 0; } + public final int getLineEnd(int p0){ return 0; } + public final int getParagraphLeft(int p0){ return 0; } + public final int getParagraphRight(int p0){ return 0; } + public final int getWidth(){ return 0; } + public final void increaseWidthTo(int p0){} + public float getLineLeft(int p0){ return 0; } + public float getLineMax(int p0){ return 0; } + public float getLineRight(int p0){ return 0; } + public float getLineWidth(int p0){ return 0; } + public float getPrimaryHorizontal(int p0){ return 0; } + public float getSecondaryHorizontal(int p0){ return 0; } + public int getEllipsizedWidth(){ return 0; } + public int getHeight(){ return 0; } + public int getLineBounds(int p0, Rect p1){ return 0; } + public int getLineForOffset(int p0){ return 0; } + public int getLineForVertical(int p0){ return 0; } + public int getLineVisibleEnd(int p0){ return 0; } + public int getOffsetForHorizontal(int p0, float p1){ return 0; } + public int getOffsetToLeftOf(int p0){ return 0; } + public int getOffsetToRightOf(int p0){ return 0; } + public static float DEFAULT_LINESPACING_ADDITION = 0; + public static float DEFAULT_LINESPACING_MULTIPLIER = 0; + public static float getDesiredWidth(CharSequence p0, TextPaint p1){ return 0; } + public static float getDesiredWidth(CharSequence p0, int p1, int p2, TextPaint p3){ return 0; } + public static int BREAK_STRATEGY_BALANCED = 0; + public static int BREAK_STRATEGY_HIGH_QUALITY = 0; + public static int BREAK_STRATEGY_SIMPLE = 0; + public static int DIR_LEFT_TO_RIGHT = 0; + public static int DIR_RIGHT_TO_LEFT = 0; + public static int HYPHENATION_FREQUENCY_FULL = 0; + public static int HYPHENATION_FREQUENCY_NONE = 0; + public static int HYPHENATION_FREQUENCY_NORMAL = 0; + public static int JUSTIFICATION_MODE_INTER_WORD = 0; + public static int JUSTIFICATION_MODE_NONE = 0; + public void draw(Canvas p0){} + public void draw(Canvas p0, Path p1, Paint p2, int p3){} + public void getCursorPath(int p0, Path p1, CharSequence p2){} + public void getSelectionPath(int p0, int p1, Path p2){} + static public class Directions + { + } + static public enum Alignment + { + ALIGN_CENTER, ALIGN_NORMAL, ALIGN_OPPOSITE; + private Alignment() {} + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/NoCopySpan.java b/java/ql/test/stubs/google-android-9.0.0/android/text/NoCopySpan.java new file mode 100644 index 00000000000..1b0ea15236b --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/NoCopySpan.java @@ -0,0 +1,8 @@ +// Generated automatically from android.text.NoCopySpan for testing purposes + +package android.text; + + +public interface NoCopySpan +{ +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/ParcelableSpan.java b/java/ql/test/stubs/google-android-9.0.0/android/text/ParcelableSpan.java new file mode 100644 index 00000000000..c074fc4c94e --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/ParcelableSpan.java @@ -0,0 +1,10 @@ +// Generated automatically from android.text.ParcelableSpan for testing purposes + +package android.text; + +import android.os.Parcelable; + +public interface ParcelableSpan extends Parcelable +{ + int getSpanTypeId(); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/PrecomputedText.java b/java/ql/test/stubs/google-android-9.0.0/android/text/PrecomputedText.java new file mode 100644 index 00000000000..e1121582fb9 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/PrecomputedText.java @@ -0,0 +1,41 @@ +// Generated automatically from android.text.PrecomputedText for testing purposes + +package android.text; + +import android.graphics.Rect; +import android.text.Spannable; +import android.text.TextDirectionHeuristic; +import android.text.TextPaint; + +public class PrecomputedText implements Spannable +{ + protected PrecomputedText() {} + public T[] getSpans(int p0, int p1, Class p2){ return null; } + public CharSequence subSequence(int p0, int p1){ return null; } + public PrecomputedText.Params getParams(){ return null; } + public String toString(){ return null; } + public char charAt(int p0){ return '0'; } + public float getWidth(int p0, int p1){ return 0; } + public int getParagraphCount(){ return 0; } + public int getParagraphEnd(int p0){ return 0; } + public int getParagraphStart(int p0){ return 0; } + public int getSpanEnd(Object p0){ return 0; } + public int getSpanFlags(Object p0){ return 0; } + public int getSpanStart(Object p0){ return 0; } + public int length(){ return 0; } + public int nextSpanTransition(int p0, int p1, Class p2){ return 0; } + public static PrecomputedText create(CharSequence p0, PrecomputedText.Params p1){ return null; } + public void getBounds(int p0, int p1, Rect p2){} + public void removeSpan(Object p0){} + public void setSpan(Object p0, int p1, int p2, int p3){} + static public class Params + { + public String toString(){ return null; } + public TextDirectionHeuristic getTextDirection(){ return null; } + public TextPaint getTextPaint(){ return null; } + public boolean equals(Object p0){ return false; } + public int getBreakStrategy(){ return 0; } + public int getHyphenationFrequency(){ return 0; } + public int hashCode(){ return 0; } + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/TextDirectionHeuristic.java b/java/ql/test/stubs/google-android-9.0.0/android/text/TextDirectionHeuristic.java new file mode 100644 index 00000000000..b1ea24b5fa9 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/TextDirectionHeuristic.java @@ -0,0 +1,10 @@ +// Generated automatically from android.text.TextDirectionHeuristic for testing purposes + +package android.text; + + +public interface TextDirectionHeuristic +{ + boolean isRtl(CharSequence p0, int p1, int p2); + boolean isRtl(char[] p0, int p1, int p2); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/TextUtils.java b/java/ql/test/stubs/google-android-9.0.0/android/text/TextUtils.java new file mode 100644 index 00000000000..bc31e7d558b --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/TextUtils.java @@ -0,0 +1,75 @@ +// Generated automatically from android.text.TextUtils for testing purposes + +package android.text; + +import android.content.Context; +import android.os.Parcel; +import android.os.Parcelable; +import android.text.Spannable; +import android.text.Spanned; +import android.text.TextPaint; +import android.util.Printer; +import java.util.List; +import java.util.Locale; +import java.util.regex.Pattern; + +public class TextUtils +{ + protected TextUtils() {} + public static CharSequence commaEllipsize(CharSequence p0, TextPaint p1, float p2, String p3, String p4){ return null; } + public static CharSequence concat(CharSequence... p0){ return null; } + public static CharSequence ellipsize(CharSequence p0, TextPaint p1, float p2, TextUtils.TruncateAt p3){ return null; } + public static CharSequence ellipsize(CharSequence p0, TextPaint p1, float p2, TextUtils.TruncateAt p3, boolean p4, TextUtils.EllipsizeCallback p5){ return null; } + public static CharSequence expandTemplate(CharSequence p0, CharSequence... p1){ return null; } + public static CharSequence getReverse(CharSequence p0, int p1, int p2){ return null; } + public static CharSequence listEllipsize(Context p0, List p1, String p2, TextPaint p3, float p4, int p5){ return null; } + public static CharSequence makeSafeForPresentation(String p0, int p1, float p2, int p3){ return null; } + public static CharSequence replace(CharSequence p0, String[] p1, CharSequence[] p2){ return null; } + public static CharSequence stringOrSpannedString(CharSequence p0){ return null; } + public static Parcelable.Creator CHAR_SEQUENCE_CREATOR = null; + public static String htmlEncode(String p0){ return null; } + public static String join(CharSequence p0, Iterable p1){ return null; } + public static String join(CharSequence p0, Object[] p1){ return null; } + public static String substring(CharSequence p0, int p1, int p2){ return null; } + public static String[] split(String p0, Pattern p1){ return null; } + public static String[] split(String p0, String p1){ return null; } + public static boolean equals(CharSequence p0, CharSequence p1){ return false; } + public static boolean isDigitsOnly(CharSequence p0){ return false; } + public static boolean isEmpty(CharSequence p0){ return false; } + public static boolean isGraphic(CharSequence p0){ return false; } + public static boolean isGraphic(char p0){ return false; } + public static boolean regionMatches(CharSequence p0, int p1, CharSequence p2, int p3, int p4){ return false; } + public static int CAP_MODE_CHARACTERS = 0; + public static int CAP_MODE_SENTENCES = 0; + public static int CAP_MODE_WORDS = 0; + public static int SAFE_STRING_FLAG_FIRST_LINE = 0; + public static int SAFE_STRING_FLAG_SINGLE_LINE = 0; + public static int SAFE_STRING_FLAG_TRIM = 0; + public static int getCapsMode(CharSequence p0, int p1, int p2){ return 0; } + public static int getLayoutDirectionFromLocale(Locale p0){ return 0; } + public static int getOffsetAfter(CharSequence p0, int p1){ return 0; } + public static int getOffsetBefore(CharSequence p0, int p1){ return 0; } + public static int getTrimmedLength(CharSequence p0){ return 0; } + public static int indexOf(CharSequence p0, CharSequence p1){ return 0; } + public static int indexOf(CharSequence p0, CharSequence p1, int p2){ return 0; } + public static int indexOf(CharSequence p0, CharSequence p1, int p2, int p3){ return 0; } + public static int indexOf(CharSequence p0, char p1){ return 0; } + public static int indexOf(CharSequence p0, char p1, int p2){ return 0; } + public static int indexOf(CharSequence p0, char p1, int p2, int p3){ return 0; } + public static int lastIndexOf(CharSequence p0, char p1){ return 0; } + public static int lastIndexOf(CharSequence p0, char p1, int p2){ return 0; } + public static int lastIndexOf(CharSequence p0, char p1, int p2, int p3){ return 0; } + public static void copySpansFrom(Spanned p0, int p1, int p2, Class p3, Spannable p4, int p5){} + public static void dumpSpans(CharSequence p0, Printer p1, String p2){} + public static void getChars(CharSequence p0, int p1, int p2, char[] p3, int p4){} + public static void writeToParcel(CharSequence p0, Parcel p1, int p2){} + static public enum TruncateAt + { + END, MARQUEE, MIDDLE, START; + private TruncateAt() {} + } + static public interface EllipsizeCallback + { + void ellipsized(int p0, int p1); + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/TextWatcher.java b/java/ql/test/stubs/google-android-9.0.0/android/text/TextWatcher.java new file mode 100644 index 00000000000..69bc3232df2 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/TextWatcher.java @@ -0,0 +1,13 @@ +// Generated automatically from android.text.TextWatcher for testing purposes + +package android.text; + +import android.text.Editable; +import android.text.NoCopySpan; + +public interface TextWatcher extends NoCopySpan +{ + void afterTextChanged(Editable p0); + void beforeTextChanged(CharSequence p0, int p1, int p2, int p3); + void onTextChanged(CharSequence p0, int p1, int p2, int p3); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/method/KeyListener.java b/java/ql/test/stubs/google-android-9.0.0/android/text/method/KeyListener.java new file mode 100644 index 00000000000..c2df31452ab --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/method/KeyListener.java @@ -0,0 +1,16 @@ +// Generated automatically from android.text.method.KeyListener for testing purposes + +package android.text.method; + +import android.text.Editable; +import android.view.KeyEvent; +import android.view.View; + +public interface KeyListener +{ + boolean onKeyDown(View p0, Editable p1, int p2, KeyEvent p3); + boolean onKeyOther(View p0, Editable p1, KeyEvent p2); + boolean onKeyUp(View p0, Editable p1, int p2, KeyEvent p3); + int getInputType(); + void clearMetaKeyState(View p0, Editable p1, int p2); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/method/MovementMethod.java b/java/ql/test/stubs/google-android-9.0.0/android/text/method/MovementMethod.java new file mode 100644 index 00000000000..a67d982a9e4 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/method/MovementMethod.java @@ -0,0 +1,21 @@ +// Generated automatically from android.text.method.MovementMethod for testing purposes + +package android.text.method; + +import android.text.Spannable; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.widget.TextView; + +public interface MovementMethod +{ + boolean canSelectArbitrarily(); + boolean onGenericMotionEvent(TextView p0, Spannable p1, MotionEvent p2); + boolean onKeyDown(TextView p0, Spannable p1, int p2, KeyEvent p3); + boolean onKeyOther(TextView p0, Spannable p1, KeyEvent p2); + boolean onKeyUp(TextView p0, Spannable p1, int p2, KeyEvent p3); + boolean onTouchEvent(TextView p0, Spannable p1, MotionEvent p2); + boolean onTrackballEvent(TextView p0, Spannable p1, MotionEvent p2); + void initialize(TextView p0, Spannable p1); + void onTakeFocus(TextView p0, Spannable p1, int p2); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/method/TransformationMethod.java b/java/ql/test/stubs/google-android-9.0.0/android/text/method/TransformationMethod.java new file mode 100644 index 00000000000..2b68101173c --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/method/TransformationMethod.java @@ -0,0 +1,12 @@ +// Generated automatically from android.text.method.TransformationMethod for testing purposes + +package android.text.method; + +import android.graphics.Rect; +import android.view.View; + +public interface TransformationMethod +{ + CharSequence getTransformation(CharSequence p0, View p1); + void onFocusChanged(View p0, CharSequence p1, boolean p2, int p3, Rect p4); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/text/style/URLSpan.java b/java/ql/test/stubs/google-android-9.0.0/android/text/style/URLSpan.java new file mode 100644 index 00000000000..3c8ba92a4ef --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/text/style/URLSpan.java @@ -0,0 +1,20 @@ +// Generated automatically from android.text.style.URLSpan for testing purposes + +package android.text.style; + +import android.os.Parcel; +import android.text.ParcelableSpan; +import android.text.style.ClickableSpan; +import android.view.View; + +public class URLSpan extends ClickableSpan implements ParcelableSpan +{ + protected URLSpan() {} + public String getURL(){ return null; } + public URLSpan(Parcel p0){} + public URLSpan(String p0){} + public int describeContents(){ return 0; } + public int getSpanTypeId(){ return 0; } + public void onClick(View p0){} + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationAction.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationAction.java new file mode 100644 index 00000000000..fc35651b52d --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationAction.java @@ -0,0 +1,31 @@ +// Generated automatically from android.view.textclassifier.ConversationAction for testing purposes + +package android.view.textclassifier; + +import android.app.RemoteAction; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; + +public class ConversationAction implements Parcelable +{ + protected ConversationAction() {} + public Bundle getExtras(){ return null; } + public CharSequence getTextReply(){ return null; } + public RemoteAction getAction(){ return null; } + public String getType(){ return null; } + public float getConfidenceScore(){ return 0; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static String TYPE_CALL_PHONE = null; + public static String TYPE_CREATE_REMINDER = null; + public static String TYPE_OPEN_URL = null; + public static String TYPE_SEND_EMAIL = null; + public static String TYPE_SEND_SMS = null; + public static String TYPE_SHARE_LOCATION = null; + public static String TYPE_TEXT_REPLY = null; + public static String TYPE_TRACK_FLIGHT = null; + public static String TYPE_VIEW_CALENDAR = null; + public static String TYPE_VIEW_MAP = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationActions.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationActions.java new file mode 100644 index 00000000000..ebe2eac2fd2 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationActions.java @@ -0,0 +1,51 @@ +// Generated automatically from android.view.textclassifier.ConversationActions for testing purposes + +package android.view.textclassifier; + +import android.app.Person; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; +import android.view.textclassifier.ConversationAction; +import android.view.textclassifier.TextClassifier; +import java.time.ZonedDateTime; +import java.util.List; + +public class ConversationActions implements Parcelable +{ + protected ConversationActions() {} + public ConversationActions(List p0, String p1){} + public List getConversationActions(){ return null; } + public String getId(){ return null; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} + static public class Message implements Parcelable + { + protected Message() {} + public Bundle getExtras(){ return null; } + public CharSequence getText(){ return null; } + public Person getAuthor(){ return null; } + public ZonedDateTime getReferenceTime(){ return null; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static Person PERSON_USER_OTHERS = null; + public static Person PERSON_USER_SELF = null; + public void writeToParcel(Parcel p0, int p1){} + } + static public class Request implements Parcelable + { + protected Request() {} + public Bundle getExtras(){ return null; } + public List getConversation(){ return null; } + public List getHints(){ return null; } + public String getCallingPackageName(){ return null; } + public TextClassifier.EntityConfig getTypeConfig(){ return null; } + public int describeContents(){ return 0; } + public int getMaxSuggestions(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static String HINT_FOR_IN_APP = null; + public static String HINT_FOR_NOTIFICATION = null; + public void writeToParcel(Parcel p0, int p1){} + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/SelectionEvent.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/SelectionEvent.java new file mode 100644 index 00000000000..70d75c390b8 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/SelectionEvent.java @@ -0,0 +1,61 @@ +// Generated automatically from android.view.textclassifier.SelectionEvent for testing purposes + +package android.view.textclassifier; + +import android.os.Parcel; +import android.os.Parcelable; +import android.view.textclassifier.TextClassification; +import android.view.textclassifier.TextClassificationSessionId; +import android.view.textclassifier.TextSelection; + +public class SelectionEvent implements Parcelable +{ + public String getEntityType(){ return null; } + public String getPackageName(){ return null; } + public String getResultId(){ return null; } + public String getWidgetType(){ return null; } + public String getWidgetVersion(){ return null; } + public String toString(){ return null; } + public TextClassificationSessionId getSessionId(){ return null; } + public boolean equals(Object p0){ return false; } + public int describeContents(){ return 0; } + public int getEnd(){ return 0; } + public int getEventIndex(){ return 0; } + public int getEventType(){ return 0; } + public int getInvocationMethod(){ return 0; } + public int getSmartEnd(){ return 0; } + public int getSmartStart(){ return 0; } + public int getStart(){ return 0; } + public int hashCode(){ return 0; } + public long getDurationSincePreviousEvent(){ return 0; } + public long getDurationSinceSessionStart(){ return 0; } + public long getEventTime(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static SelectionEvent createSelectionActionEvent(int p0, int p1, int p2){ return null; } + public static SelectionEvent createSelectionActionEvent(int p0, int p1, int p2, TextClassification p3){ return null; } + public static SelectionEvent createSelectionModifiedEvent(int p0, int p1){ return null; } + public static SelectionEvent createSelectionModifiedEvent(int p0, int p1, TextClassification p2){ return null; } + public static SelectionEvent createSelectionModifiedEvent(int p0, int p1, TextSelection p2){ return null; } + public static SelectionEvent createSelectionStartedEvent(int p0, int p1){ return null; } + public static boolean isTerminal(int p0){ return false; } + public static int ACTION_ABANDON = 0; + public static int ACTION_COPY = 0; + public static int ACTION_CUT = 0; + public static int ACTION_DRAG = 0; + public static int ACTION_OTHER = 0; + public static int ACTION_OVERTYPE = 0; + public static int ACTION_PASTE = 0; + public static int ACTION_RESET = 0; + public static int ACTION_SELECT_ALL = 0; + public static int ACTION_SHARE = 0; + public static int ACTION_SMART_SHARE = 0; + public static int EVENT_AUTO_SELECTION = 0; + public static int EVENT_SELECTION_MODIFIED = 0; + public static int EVENT_SELECTION_STARTED = 0; + public static int EVENT_SMART_SELECTION_MULTI = 0; + public static int EVENT_SMART_SELECTION_SINGLE = 0; + public static int INVOCATION_LINK = 0; + public static int INVOCATION_MANUAL = 0; + public static int INVOCATION_UNKNOWN = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassification.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassification.java new file mode 100644 index 00000000000..bd89b26c523 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassification.java @@ -0,0 +1,48 @@ +// Generated automatically from android.view.textclassifier.TextClassification for testing purposes + +package android.view.textclassifier; + +import android.app.RemoteAction; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.LocaleList; +import android.os.Parcel; +import android.os.Parcelable; +import android.view.View; +import java.time.ZonedDateTime; +import java.util.List; + +public class TextClassification implements Parcelable +{ + protected TextClassification() {} + public Bundle getExtras(){ return null; } + public CharSequence getLabel(){ return null; } + public Drawable getIcon(){ return null; } + public Intent getIntent(){ return null; } + public List getActions(){ return null; } + public String getEntity(int p0){ return null; } + public String getId(){ return null; } + public String getText(){ return null; } + public String toString(){ return null; } + public View.OnClickListener getOnClickListener(){ return null; } + public float getConfidenceScore(String p0){ return 0; } + public int describeContents(){ return 0; } + public int getEntityCount(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} + static public class Request implements Parcelable + { + protected Request() {} + public Bundle getExtras(){ return null; } + public CharSequence getText(){ return null; } + public LocaleList getDefaultLocales(){ return null; } + public String getCallingPackageName(){ return null; } + public ZonedDateTime getReferenceTime(){ return null; } + public int describeContents(){ return 0; } + public int getEndIndex(){ return 0; } + public int getStartIndex(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationContext.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationContext.java new file mode 100644 index 00000000000..a7ab6240ede --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationContext.java @@ -0,0 +1,18 @@ +// Generated automatically from android.view.textclassifier.TextClassificationContext for testing purposes + +package android.view.textclassifier; + +import android.os.Parcel; +import android.os.Parcelable; + +public class TextClassificationContext implements Parcelable +{ + protected TextClassificationContext() {} + public String getPackageName(){ return null; } + public String getWidgetType(){ return null; } + public String getWidgetVersion(){ return null; } + public String toString(){ return null; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationSessionId.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationSessionId.java new file mode 100644 index 00000000000..fda8b2a0449 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationSessionId.java @@ -0,0 +1,17 @@ +// Generated automatically from android.view.textclassifier.TextClassificationSessionId for testing purposes + +package android.view.textclassifier; + +import android.os.Parcel; +import android.os.Parcelable; + +public class TextClassificationSessionId implements Parcelable +{ + public String getValue(){ return null; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int describeContents(){ return 0; } + public int hashCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifier.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifier.java new file mode 100644 index 00000000000..9f3daa67ea1 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifier.java @@ -0,0 +1,68 @@ +// Generated automatically from android.view.textclassifier.TextClassifier for testing purposes + +package android.view.textclassifier; + +import android.os.LocaleList; +import android.os.Parcel; +import android.os.Parcelable; +import android.view.textclassifier.ConversationActions; +import android.view.textclassifier.SelectionEvent; +import android.view.textclassifier.TextClassification; +import android.view.textclassifier.TextClassifierEvent; +import android.view.textclassifier.TextLanguage; +import android.view.textclassifier.TextLinks; +import android.view.textclassifier.TextSelection; +import java.util.Collection; + +public interface TextClassifier +{ + default ConversationActions suggestConversationActions(ConversationActions.Request p0){ return null; } + default TextClassification classifyText(CharSequence p0, int p1, int p2, LocaleList p3){ return null; } + default TextClassification classifyText(TextClassification.Request p0){ return null; } + default TextLanguage detectLanguage(TextLanguage.Request p0){ return null; } + default TextLinks generateLinks(TextLinks.Request p0){ return null; } + default TextSelection suggestSelection(CharSequence p0, int p1, int p2, LocaleList p3){ return null; } + default TextSelection suggestSelection(TextSelection.Request p0){ return null; } + default boolean isDestroyed(){ return false; } + default int getMaxGenerateLinksTextLength(){ return 0; } + default void destroy(){} + default void onSelectionEvent(SelectionEvent p0){} + default void onTextClassifierEvent(TextClassifierEvent p0){} + static String EXTRA_FROM_TEXT_CLASSIFIER = null; + static String HINT_TEXT_IS_EDITABLE = null; + static String HINT_TEXT_IS_NOT_EDITABLE = null; + static String TYPE_ADDRESS = null; + static String TYPE_DATE = null; + static String TYPE_DATE_TIME = null; + static String TYPE_EMAIL = null; + static String TYPE_FLIGHT_NUMBER = null; + static String TYPE_OTHER = null; + static String TYPE_PHONE = null; + static String TYPE_UNKNOWN = null; + static String TYPE_URL = null; + static String WIDGET_TYPE_CLIPBOARD = null; + static String WIDGET_TYPE_CUSTOM_EDITTEXT = null; + static String WIDGET_TYPE_CUSTOM_TEXTVIEW = null; + static String WIDGET_TYPE_CUSTOM_UNSELECTABLE_TEXTVIEW = null; + static String WIDGET_TYPE_EDITTEXT = null; + static String WIDGET_TYPE_EDIT_WEBVIEW = null; + static String WIDGET_TYPE_NOTIFICATION = null; + static String WIDGET_TYPE_TEXTVIEW = null; + static String WIDGET_TYPE_UNKNOWN = null; + static String WIDGET_TYPE_UNSELECTABLE_TEXTVIEW = null; + static String WIDGET_TYPE_WEBVIEW = null; + static TextClassifier NO_OP = null; + static public class EntityConfig implements Parcelable + { + protected EntityConfig() {} + public Collection getHints(){ return null; } + public Collection resolveEntityListModifications(Collection p0){ return null; } + public boolean shouldIncludeTypesFromTextClassifier(){ return false; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static TextClassifier.EntityConfig create(Collection p0, Collection p1, Collection p2){ return null; } + public static TextClassifier.EntityConfig createWithExplicitEntityList(Collection p0){ return null; } + public static TextClassifier.EntityConfig createWithHints(Collection p0){ return null; } + public void writeToParcel(Parcel p0, int p1){} + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifierEvent.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifierEvent.java new file mode 100644 index 00000000000..ad18e8b78f5 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifierEvent.java @@ -0,0 +1,54 @@ +// Generated automatically from android.view.textclassifier.TextClassifierEvent for testing purposes + +package android.view.textclassifier; + +import android.icu.util.ULocale; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; +import android.view.textclassifier.TextClassificationContext; + +abstract public class TextClassifierEvent implements Parcelable +{ + protected TextClassifierEvent() {} + public Bundle getExtras(){ return null; } + public String getModelName(){ return null; } + public String getResultId(){ return null; } + public String toString(){ return null; } + public String[] getEntityTypes(){ return null; } + public TextClassificationContext getEventContext(){ return null; } + public ULocale getLocale(){ return null; } + public float[] getScores(){ return null; } + public int describeContents(){ return 0; } + public int getEventCategory(){ return 0; } + public int getEventIndex(){ return 0; } + public int getEventType(){ return 0; } + public int[] getActionIndices(){ return null; } + public static Parcelable.Creator CREATOR = null; + public static int CATEGORY_CONVERSATION_ACTIONS = 0; + public static int CATEGORY_LANGUAGE_DETECTION = 0; + public static int CATEGORY_LINKIFY = 0; + public static int CATEGORY_SELECTION = 0; + public static int TYPE_ACTIONS_GENERATED = 0; + public static int TYPE_ACTIONS_SHOWN = 0; + public static int TYPE_AUTO_SELECTION = 0; + public static int TYPE_COPY_ACTION = 0; + public static int TYPE_CUT_ACTION = 0; + public static int TYPE_LINKS_GENERATED = 0; + public static int TYPE_LINK_CLICKED = 0; + public static int TYPE_MANUAL_REPLY = 0; + public static int TYPE_OTHER_ACTION = 0; + public static int TYPE_OVERTYPE = 0; + public static int TYPE_PASTE_ACTION = 0; + public static int TYPE_SELECTION_DESTROYED = 0; + public static int TYPE_SELECTION_DRAG = 0; + public static int TYPE_SELECTION_MODIFIED = 0; + public static int TYPE_SELECTION_RESET = 0; + public static int TYPE_SELECTION_STARTED = 0; + public static int TYPE_SELECT_ALL = 0; + public static int TYPE_SHARE_ACTION = 0; + public static int TYPE_SMART_ACTION = 0; + public static int TYPE_SMART_SELECTION_MULTI = 0; + public static int TYPE_SMART_SELECTION_SINGLE = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLanguage.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLanguage.java new file mode 100644 index 00000000000..8c04c6b43df --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLanguage.java @@ -0,0 +1,32 @@ +// Generated automatically from android.view.textclassifier.TextLanguage for testing purposes + +package android.view.textclassifier; + +import android.icu.util.ULocale; +import android.os.Bundle; +import android.os.Parcel; +import android.os.Parcelable; + +public class TextLanguage implements Parcelable +{ + protected TextLanguage() {} + public Bundle getExtras(){ return null; } + public String getId(){ return null; } + public String toString(){ return null; } + public ULocale getLocale(int p0){ return null; } + public float getConfidenceScore(ULocale p0){ return 0; } + public int describeContents(){ return 0; } + public int getLocaleHypothesisCount(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} + static public class Request implements Parcelable + { + protected Request() {} + public Bundle getExtras(){ return null; } + public CharSequence getText(){ return null; } + public String getCallingPackageName(){ return null; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextSelection.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextSelection.java new file mode 100644 index 00000000000..015715305c4 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextSelection.java @@ -0,0 +1,40 @@ +// Generated automatically from android.view.textclassifier.TextSelection for testing purposes + +package android.view.textclassifier; + +import android.os.Bundle; +import android.os.LocaleList; +import android.os.Parcel; +import android.os.Parcelable; +import android.view.textclassifier.TextClassification; + +public class TextSelection implements Parcelable +{ + protected TextSelection() {} + public Bundle getExtras(){ return null; } + public String getEntity(int p0){ return null; } + public String getId(){ return null; } + public String toString(){ return null; } + public TextClassification getTextClassification(){ return null; } + public float getConfidenceScore(String p0){ return 0; } + public int describeContents(){ return 0; } + public int getEntityCount(){ return 0; } + public int getSelectionEndIndex(){ return 0; } + public int getSelectionStartIndex(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} + static public class Request implements Parcelable + { + protected Request() {} + public Bundle getExtras(){ return null; } + public CharSequence getText(){ return null; } + public LocaleList getDefaultLocales(){ return null; } + public String getCallingPackageName(){ return null; } + public boolean shouldIncludeTextClassification(){ return false; } + public int describeContents(){ return 0; } + public int getEndIndex(){ return 0; } + public int getStartIndex(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/widget/EditText.java b/java/ql/test/stubs/google-android-9.0.0/android/widget/EditText.java new file mode 100644 index 00000000000..52d5a697457 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/widget/EditText.java @@ -0,0 +1,29 @@ +// Generated automatically from android.widget.EditText for testing purposes + +package android.widget; + +import android.content.Context; +import android.text.Editable; +import android.text.TextUtils; +import android.text.method.MovementMethod; +import android.util.AttributeSet; + +public class EditText extends TextView +{ + protected EditText() { super(null); } + protected MovementMethod getDefaultMovementMethod(){ return null; } + protected boolean getDefaultEditable(){ return false; } + public CharSequence getAccessibilityClassName(){ return null; } + public EditText(Context p0){ super(null); } + public EditText(Context p0, AttributeSet p1){ super(null); } + public EditText(Context p0, AttributeSet p1, int p2){ super(null); } + public EditText(Context p0, AttributeSet p1, int p2, int p3){ super(null); } + public Editable getText(){ return null; } + public boolean getFreezesText(){ return false; } + public void extendSelection(int p0){} + public void selectAll(){} + public void setEllipsize(TextUtils.TruncateAt p0){} + public void setSelection(int p0){} + public void setSelection(int p0, int p1){} + public void setText(CharSequence p0, TextView.BufferType p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/widget/Scroller.java b/java/ql/test/stubs/google-android-9.0.0/android/widget/Scroller.java new file mode 100644 index 00000000000..cee54c16a86 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/widget/Scroller.java @@ -0,0 +1,34 @@ +// Generated automatically from android.widget.Scroller for testing purposes + +package android.widget; + +import android.content.Context; +import android.view.animation.Interpolator; + +public class Scroller +{ + protected Scroller() {} + public Scroller(Context p0){} + public Scroller(Context p0, Interpolator p1){} + public Scroller(Context p0, Interpolator p1, boolean p2){} + public boolean computeScrollOffset(){ return false; } + public final boolean isFinished(){ return false; } + public final int getCurrX(){ return 0; } + public final int getCurrY(){ return 0; } + public final int getDuration(){ return 0; } + public final int getFinalX(){ return 0; } + public final int getFinalY(){ return 0; } + public final int getStartX(){ return 0; } + public final int getStartY(){ return 0; } + public final void forceFinished(boolean p0){} + public final void setFriction(float p0){} + public float getCurrVelocity(){ return 0; } + public int timePassed(){ return 0; } + public void abortAnimation(){} + public void extendDuration(int p0){} + public void fling(int p0, int p1, int p2, int p3, int p4, int p5, int p6, int p7){} + public void setFinalX(int p0){} + public void setFinalY(int p0){} + public void startScroll(int p0, int p1, int p2, int p3){} + public void startScroll(int p0, int p1, int p2, int p3, int p4){} +} From 2565cdb964092fca017a09b66123f0a11d5fbe91 Mon Sep 17 00:00:00 2001 From: Jonathan Leitschuh Date: Tue, 26 Apr 2022 10:34:24 -0400 Subject: [PATCH 0176/1618] Add additional `File` taint value flow models Adds - File::getAbsoluteFile - File::getCanonicalFile - File::getAbsolutePath - File::getCanonicalPath --- .../2022-04-26-additional-file-taint-flow.md | 8 ++++++ .../code/java/dataflow/ExternalFlow.qll | 4 +++ .../TempDirLocalInformationDisclosure.ql | 10 ------- .../src/Security/CWE/CWE-200/TempDirUtils.qll | 26 ------------------- .../test/library-tests/dataflow/taint/B.java | 8 +++++- .../dataflow/taint/test.expected | 2 ++ ...TempDirLocalInformationDisclosure.expected | 8 ++++-- 7 files changed, 27 insertions(+), 39 deletions(-) create mode 100644 java/ql/lib/change-notes/2022-04-26-additional-file-taint-flow.md diff --git a/java/ql/lib/change-notes/2022-04-26-additional-file-taint-flow.md b/java/ql/lib/change-notes/2022-04-26-additional-file-taint-flow.md new file mode 100644 index 00000000000..bd931220045 --- /dev/null +++ b/java/ql/lib/change-notes/2022-04-26-additional-file-taint-flow.md @@ -0,0 +1,8 @@ +--- +category: minorAnalysis +--- + * Add taint models for the following `File` methods: + * `File::getAbsoluteFile` + * `File::getCanonicalFile` + * `File::getAbsolutePath` + * `File::getCanonicalPath` \ No newline at end of file diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index 28cfced918f..e5e4c582a66 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -300,6 +300,10 @@ private predicate summaryModelCsv(string row) { "java.net;URI;false;toAsciiString;;;Argument[-1];ReturnValue;taint", "java.io;File;false;toURI;;;Argument[-1];ReturnValue;taint", "java.io;File;false;toPath;;;Argument[-1];ReturnValue;taint", + "java.io;File;true;getAbsoluteFile;;;Argument[-1];ReturnValue;taint", + "java.io;File;true;getCanonicalFile;;;Argument[-1];ReturnValue;taint", + "java.io;File;true;getAbsolutePath;;;Argument[-1];ReturnValue;taint", + "java.io;File;true;getCanonicalPath;;;Argument[-1];ReturnValue;taint", "java.nio;ByteBuffer;false;array;();;Argument[-1];ReturnValue;taint", "java.nio.file;Path;false;toFile;;;Argument[-1];ReturnValue;taint", "java.io;BufferedReader;true;readLine;;;Argument[-1];ReturnValue;taint", diff --git a/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql b/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql index 01d60f1062e..16e8bb72c93 100644 --- a/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql +++ b/java/ql/src/Security/CWE/CWE-200/TempDirLocalInformationDisclosure.ql @@ -134,16 +134,6 @@ private class TempDirSystemGetPropertyToCreateConfig extends TaintTracking::Conf source.asExpr() instanceof ExprSystemGetPropertyTempDirTainted } - /** - * Find dataflow from the temp directory system property to the `File` constructor. - * Examples: - * - `new File(System.getProperty("java.io.tmpdir"))` - * - `new File(new File(System.getProperty("java.io.tmpdir")), "/child")` - */ - override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - isAdditionalFileTaintStep(node1, node2) - } - override predicate isSink(DataFlow::Node sink) { sink instanceof FileCreationSink and not any(TempDirSystemGetPropertyDirectlyToMkdirConfig config).hasFlowTo(sink) diff --git a/java/ql/src/Security/CWE/CWE-200/TempDirUtils.qll b/java/ql/src/Security/CWE/CWE-200/TempDirUtils.qll index 1984f16a58c..cb2d8dd7875 100644 --- a/java/ql/src/Security/CWE/CWE-200/TempDirUtils.qll +++ b/java/ql/src/Security/CWE/CWE-200/TempDirUtils.qll @@ -35,32 +35,6 @@ predicate isFileConstructorArgument(Expr expSource, Expr exprDest, int paramCoun ) } -/** - * A `File` method where the temporary directory is still part of the root path. - */ -private class TaintFollowingFileMethod extends Method { - TaintFollowingFileMethod() { - this.getDeclaringType() instanceof TypeFile and - this.hasName(["getAbsoluteFile", "getCanonicalFile"]) - } -} - -private predicate isTaintPropagatingFileTransformation(Expr expSource, Expr exprDest) { - exists(MethodAccess fileMethodAccess | - fileMethodAccess.getMethod() instanceof TaintFollowingFileMethod and - fileMethodAccess.getQualifier() = expSource and - fileMethodAccess = exprDest - ) -} - -/** - * Holds if taint should propagate from `node1` to `node2` across some file creation or transformation operation. - * For example, `taintedFile.getCanonicalFile()` is itself tainted. - */ -predicate isAdditionalFileTaintStep(DataFlow::Node node1, DataFlow::Node node2) { - isTaintPropagatingFileTransformation(node1.asExpr(), node2.asExpr()) -} - /** * A method call to `java.io.File::setReadable`. */ diff --git a/java/ql/test/library-tests/dataflow/taint/B.java b/java/ql/test/library-tests/dataflow/taint/B.java index 6e33111ad19..94a09dd915f 100644 --- a/java/ql/test/library-tests/dataflow/taint/B.java +++ b/java/ql/test/library-tests/dataflow/taint/B.java @@ -11,7 +11,7 @@ public class B { public static void sink(Object o) { } - public static void maintest() throws java.io.UnsupportedEncodingException, java.net.MalformedURLException { + public static void maintest() throws java.io.UnsupportedEncodingException, java.net.MalformedURLException, java.io.IOException { String[] args = taint(); // tainted - access to main args String[] aaaargs = args; @@ -156,6 +156,12 @@ public class B { // Tainted File to Path to File sink(new java.io.File(s).toPath().toFile()); + // Tainted file to absolute file + sink(new java.io.File(s).getAbsoluteFile()); + + // Tainted file to canonical file + sink(new java.io.File(s).getCanonicalFile()); + return; } diff --git a/java/ql/test/library-tests/dataflow/taint/test.expected b/java/ql/test/library-tests/dataflow/taint/test.expected index 158b7977dba..451248e18c0 100644 --- a/java/ql/test/library-tests/dataflow/taint/test.expected +++ b/java/ql/test/library-tests/dataflow/taint/test.expected @@ -41,6 +41,8 @@ | B.java:15:21:15:27 | taint(...) | B.java:151:10:151:44 | toURL(...) | | B.java:15:21:15:27 | taint(...) | B.java:154:10:154:37 | toPath(...) | | B.java:15:21:15:27 | taint(...) | B.java:157:10:157:46 | toFile(...) | +| B.java:15:21:15:27 | taint(...) | B.java:160:10:160:46 | getAbsoluteFile(...) | +| B.java:15:21:15:27 | taint(...) | B.java:163:10:163:47 | getCanonicalFile(...) | | CharSeq.java:7:26:7:32 | taint(...) | CharSeq.java:8:12:8:14 | seq | | CharSeq.java:7:26:7:32 | taint(...) | CharSeq.java:11:12:11:21 | seqFromSeq | | CharSeq.java:7:26:7:32 | taint(...) | CharSeq.java:14:12:14:24 | stringFromSeq | diff --git a/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure.expected b/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure.expected index 0791e49c71b..03c431822b5 100644 --- a/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure.expected +++ b/java/ql/test/query-tests/security/CWE-200/semmle/tests/TempDirLocalInformationDisclosure.expected @@ -8,9 +8,11 @@ edges | Test.java:50:29:50:94 | new File(...) : File | Test.java:53:63:53:74 | tempDirChild | | Test.java:50:38:50:83 | new File(...) : File | Test.java:50:29:50:94 | new File(...) : File | | Test.java:50:47:50:82 | getProperty(...) : String | Test.java:50:38:50:83 | new File(...) : File | -| Test.java:61:24:61:69 | new File(...) : File | Test.java:64:63:64:69 | tempDir | +| Test.java:61:24:61:69 | new File(...) : File | Test.java:61:24:61:88 | getCanonicalFile(...) : File | +| Test.java:61:24:61:88 | getCanonicalFile(...) : File | Test.java:64:63:64:69 | tempDir | | Test.java:61:33:61:68 | getProperty(...) : String | Test.java:61:24:61:69 | new File(...) : File | -| Test.java:75:24:75:69 | new File(...) : File | Test.java:78:63:78:69 | tempDir | +| Test.java:75:24:75:69 | new File(...) : File | Test.java:75:24:75:87 | getAbsoluteFile(...) : File | +| Test.java:75:24:75:87 | getAbsoluteFile(...) : File | Test.java:78:63:78:69 | tempDir | | Test.java:75:33:75:68 | getProperty(...) : String | Test.java:75:24:75:69 | new File(...) : File | | Test.java:110:29:110:84 | new File(...) : File | Test.java:113:9:113:20 | tempDirChild | | Test.java:110:38:110:73 | getProperty(...) : String | Test.java:110:29:110:84 | new File(...) : File | @@ -68,9 +70,11 @@ nodes | Test.java:50:47:50:82 | getProperty(...) : String | semmle.label | getProperty(...) : String | | Test.java:53:63:53:74 | tempDirChild | semmle.label | tempDirChild | | Test.java:61:24:61:69 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:61:24:61:88 | getCanonicalFile(...) : File | semmle.label | getCanonicalFile(...) : File | | Test.java:61:33:61:68 | getProperty(...) : String | semmle.label | getProperty(...) : String | | Test.java:64:63:64:69 | tempDir | semmle.label | tempDir | | Test.java:75:24:75:69 | new File(...) : File | semmle.label | new File(...) : File | +| Test.java:75:24:75:87 | getAbsoluteFile(...) : File | semmle.label | getAbsoluteFile(...) : File | | Test.java:75:33:75:68 | getProperty(...) : String | semmle.label | getProperty(...) : String | | Test.java:78:63:78:69 | tempDir | semmle.label | tempDir | | Test.java:97:24:97:65 | createTempDir(...) | semmle.label | createTempDir(...) | From f71cf2e1fc09c2241e36cdb736e8fef126ae5ac8 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 27 Apr 2022 15:48:11 +0000 Subject: [PATCH 0177/1618] Python: Add test --- .../dataflow/typetracking/attribute_tests.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py b/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py index fc51f01aff7..9a5de960204 100644 --- a/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py +++ b/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py @@ -49,6 +49,22 @@ def test_create_with_foo(): x = create_with_foo() # $ tracked=foo print(x.foo) # $ tracked=foo tracked +def test_global_attribute_assignment(): + global global_var + global_var.foo = tracked # $ tracked tracked=foo + +def test_global_attribute_read(): + x = global_var.foo # $ MISSING: tracked tracked=foo + +def test_local_attribute_assignment(): + # Same as `test_global_attribute_assignment`, but the assigned variable is not global + local_var = object() # $ tracked=foo + local_var.foo = tracked # $ tracked tracked=foo + +def test_local_attribute_read(): + x = local_var.foo + + # ------------------------------------------------------------------------------ # Attributes assigned statically to a class # ------------------------------------------------------------------------------ From b4a31e572fcf6c1e98c154a5ba05bca3321ff20a Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 27 Apr 2022 16:45:00 +0000 Subject: [PATCH 0178/1618] Python: Add global attribute writes --- .../dataflow/new/internal/Attributes.qll | 26 +++++++++++++++++++ .../dataflow/typetracking/attribute_tests.py | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll index 8782425b293..d40e06ce6d7 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/Attributes.qll @@ -92,6 +92,32 @@ private class AttributeAssignmentAsAttrWrite extends AttrWrite, CfgNode { override string getAttributeName() { result = node.getName() } } +/** + * An attribute assignment where the object is a global variable: `global_var.attr = value`. + * + * Syntactically, this is identical to the situation that is covered by + * `AttributeAssignmentAsAttrWrite`, however in this case we want to behave as if the object that is + * being written is the underlying `ModuleVariableNode`. + */ +private class GlobalAttributeAssignmentAsAttrWrite extends AttrWrite, CfgNode { + override AttributeAssignmentNode node; + + override Node getValue() { result.asCfgNode() = node.getValue() } + + override Node getObject() { + result.(ModuleVariableNode).getVariable() = node.getObject().getNode().(Name).getVariable() + } + + override ExprNode getAttributeNameExpr() { + // Attribute names don't exist as `Node`s in the control flow graph, as they can only ever be + // identifiers, and are therefore represented directly as strings. + // Use `getAttributeName` to access the name of the attribute. + none() + } + + override string getAttributeName() { result = node.getName() } +} + /** Represents `CallNode`s that may refer to calls to built-in functions or classes. */ private class BuiltInCallNode extends CallNode { string name; diff --git a/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py b/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py index 9a5de960204..dfb6489df41 100644 --- a/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py +++ b/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py @@ -54,7 +54,7 @@ def test_global_attribute_assignment(): global_var.foo = tracked # $ tracked tracked=foo def test_global_attribute_read(): - x = global_var.foo # $ MISSING: tracked tracked=foo + x = global_var.foo # $ tracked tracked=foo def test_local_attribute_assignment(): # Same as `test_global_attribute_assignment`, but the assigned variable is not global From 590b9d8519a1a58a9d38059b566a8b940ee7eed0 Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Wed, 27 Apr 2022 22:17:17 +0000 Subject: [PATCH 0179/1618] Standardize the query and update qldoc --- .../lib/semmle/code/java/frameworks/Servlets.qll | 2 +- .../Security/CWE/CWE-552/UnsafeResourceGet.java | 6 ++++-- .../Security/CWE/CWE-552/UnsafeUrlForward.qhelp | 4 ++-- .../Security/CWE/CWE-552/UnsafeUrlForward.ql | 1 + .../Security/CWE/CWE-552/UnsafeUrlForward.qll | 15 ++++++++------- .../semmle/code/java/frameworks/Jsf.qll | 2 +- 6 files changed, 17 insertions(+), 13 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll index f065a60f8e1..b3fa7ff4e36 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Servlets.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Servlets.qll @@ -381,7 +381,7 @@ class RequestDispatchMethod extends Method { /** * The interface `javax.servlet.ServletContext`. */ -library class ServletContext extends RefType { +class ServletContext extends RefType { ServletContext() { this.hasQualifiedName("javax.servlet", "ServletContext") } } diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java index d40345db3c5..8b3583bf59e 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeResourceGet.java @@ -1,5 +1,5 @@ // BAD: no URI validation -URL url = servletContext.getResource(requestUrl); +URL url = request.getServletContext().getResource(requestUrl); url = getClass().getResource(requestUrl); InputStream in = url.openStream(); @@ -13,4 +13,6 @@ if (!requestPath.contains("..") && requestPath.startsWith("/trusted")) { } Path path = Paths.get(requestUrl).normalize().toRealPath(); -URL url = sc.getResource(path.toString()); +if (path.startsWith("/trusted")) { + URL url = request.getServletContext().getResource(path.toString()); +} diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp index 10354c3507e..b1bcf6350c3 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qhelp @@ -54,8 +54,8 @@ file exposure attacks. It also shows how to remedy the problem by validating the
  • Micro Focus: File Disclosure: J2EE
  • -
  • - Apache Tomcat 6.0/7.0/8.0/9.0 Servletcontext Getresource/getresourceasstream/getresourcepaths Path Traversal +
  • CVE-2015-5174: + Apache Tomcat 6.0/7.0/8.0/9.0 Servletcontext getResource/getResourceAsStream/getResourcePaths Path Traversal
  • diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql index 494fc4d1c83..0e8fd0a4fe5 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.ql @@ -14,6 +14,7 @@ import java import UnsafeUrlForward import semmle.code.java.dataflow.FlowSources import semmle.code.java.dataflow.TaintTracking +import experimental.semmle.code.java.frameworks.Jsf import experimental.semmle.code.java.PathSanitizer import DataFlow::PathGraph diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll index 3e0bf1fefb6..2ee7188f313 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll @@ -3,6 +3,7 @@ private import experimental.semmle.code.java.frameworks.Jsf private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSources private import semmle.code.java.dataflow.StringPrefixes +private import semmle.code.java.frameworks.javaee.ejb.EJBRestrictions /** A sink for unsafe URL forward vulnerabilities. */ abstract class UnsafeUrlForwardSink extends DataFlow::Node { } @@ -23,7 +24,7 @@ private class RequestDispatcherSink extends UnsafeUrlForwardSink { /** The `getResource` method of `Class`. */ class GetClassResourceMethod extends Method { GetClassResourceMethod() { - this.getSourceDeclaration().getDeclaringType().hasQualifiedName("java.lang", "Class") and + this.getDeclaringType() instanceof TypeClass and this.hasName("getResource") } } @@ -31,7 +32,7 @@ class GetClassResourceMethod extends Method { /** The `getResourceAsStream` method of `Class`. */ class GetClassResourceAsStreamMethod extends Method { GetClassResourceAsStreamMethod() { - this.getSourceDeclaration().getDeclaringType().hasQualifiedName("java.lang", "Class") and + this.getDeclaringType() instanceof TypeClass and this.hasName("getResourceAsStream") } } @@ -39,7 +40,7 @@ class GetClassResourceAsStreamMethod extends Method { /** The `getResource` method of `ClassLoader`. */ class GetClassLoaderResourceMethod extends Method { GetClassLoaderResourceMethod() { - this.getDeclaringType().hasQualifiedName("java.lang", "ClassLoader") and + this.getDeclaringType() instanceof ClassLoaderClass and this.hasName("getResource") } } @@ -47,7 +48,7 @@ class GetClassLoaderResourceMethod extends Method { /** The `getResourceAsStream` method of `ClassLoader`. */ class GetClassLoaderResourceAsStreamMethod extends Method { GetClassLoaderResourceAsStreamMethod() { - this.getDeclaringType().hasQualifiedName("java.lang", "ClassLoader") and + this.getDeclaringType() instanceof ClassLoaderClass and this.hasName("getResourceAsStream") } } @@ -73,8 +74,8 @@ class VirtualFile extends RefType { } /** The JBoss method `getChild` of `FileResourceManager`. */ -class GetVirtualFileMethod extends Method { - GetVirtualFileMethod() { +class GetVirtualFileChildMethod extends Method { + GetVirtualFileChildMethod() { this.getDeclaringType().getASupertype*() instanceof VirtualFile and this.hasName("getChild") } @@ -91,7 +92,7 @@ private class GetResourceSink extends UnsafeUrlForwardSink { ma.getMethod() instanceof GetFacesResourceAsStreamMethod or ma.getMethod() instanceof GetClassResourceAsStreamMethod or ma.getMethod() instanceof GetClassLoaderResourceAsStreamMethod or - ma.getMethod() instanceof GetVirtualFileMethod + ma.getMethod() instanceof GetVirtualFileChildMethod ) and ma.getArgument(0) = this.asExpr() ) diff --git a/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll b/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll index 5769a842611..4701d6ca565 100644 --- a/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll +++ b/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll @@ -5,7 +5,7 @@ import semmle.code.java.Type /** - * The JSF class `FacesContext` for processing HTTP requests. + * The JSF class `ExternalContext` for processing HTTP requests. */ class ExternalContext extends RefType { ExternalContext() { From 0c65e67d18a205bd862ae027839e76c08286652c Mon Sep 17 00:00:00 2001 From: Jonas Jensen Date: Thu, 28 Apr 2022 09:13:36 +0200 Subject: [PATCH 0180/1618] QL language reference: variables must be lowerId To prepare for a future QL language change where variable names must start with a lower-case letter, this commit updates the QL language reference (including the language specification) to change the variable name grammar from `simpleId` to `lowerId`. --- .../ql-language-specification.rst | 16 ++++++++-------- docs/codeql/ql-language-reference/variables.rst | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/codeql/ql-language-reference/ql-language-specification.rst b/docs/codeql/ql-language-reference/ql-language-specification.rst index 2ba7887fec0..46d0123d6d4 100644 --- a/docs/codeql/ql-language-reference/ql-language-specification.rst +++ b/docs/codeql/ql-language-reference/ql-language-specification.rst @@ -364,7 +364,7 @@ A *variable declaration list* provides a sequence of variables and a type for ea :: var_decls ::= (var_decl ("," var_decl)*)? - var_decl ::= type simpleId + var_decl ::= type lowerId A valid variable declaration list must not include two declarations with the same variable name. Moreover, if the declaration has a typing environment that applies, it must not use a variable name that is already present in that typing environment. @@ -585,7 +585,7 @@ Identifiers are used in following syntactic constructs: dbasetype ::= atLowerId predicateRef ::= (moduleId "::")? literalId predicateName ::= lowerId - varname ::= simpleId + varname ::= lowerId literalId ::= lowerId | atLowerId Integer literals (int) @@ -948,7 +948,7 @@ The ``select`` keyword is followed by a number of *select expressions*. Select e :: as_exprs ::= as_expr ("," as_expr)* - as_expr ::= expr ("as" simpleId)? + as_expr ::= expr ("as" lowerId)? The keyword ``as`` gives a *label* to the select expression it is part of. No two select expressions may have the same label. No expression label may be the same as one of the variables of the select clause. @@ -957,7 +957,7 @@ The ``order`` keyword, if present, is followed by a number of *ordering directiv :: orderbys ::= orderby ("," orderby)* - orderby ::= simpleId ("asc" | "desc")? + orderby ::= lowerId ("asc" | "desc")? Each identifier in an ordering directive must identify exactly one of the select expressions. It must either be the label of the expression, or it must be a variable expression that is equivalent to exactly one of the select expressions. The type of the designated select expression must be a subtype of a primitive type. @@ -2042,11 +2042,11 @@ The complete grammar for QL is as follows: as_exprs ::= as_expr ("," as_expr)* - as_expr ::= expr ("as" simpleId)? + as_expr ::= expr ("as" lowerId)? orderbys ::= orderby ("," orderby)* - orderby ::= simpleId ("asc" | "desc")? + orderby ::= lowerId ("asc" | "desc")? predicate ::= qldoc? annotations head optbody @@ -2095,7 +2095,7 @@ The complete grammar for QL is as follows: var_decls ::= (var_decl ("," var_decl)*)? - var_decl ::= type simpleId + var_decl ::= type lowerId formula ::= fparen | disjunction @@ -2216,6 +2216,6 @@ The complete grammar for QL is as follows: predicateName ::= lowerId - varname ::= simpleId + varname ::= lowerId literalId ::= lowerId | atLowerId | "any" | "none" diff --git a/docs/codeql/ql-language-reference/variables.rst b/docs/codeql/ql-language-reference/variables.rst index 2b84e125971..5179183ef78 100644 --- a/docs/codeql/ql-language-reference/variables.rst +++ b/docs/codeql/ql-language-reference/variables.rst @@ -24,7 +24,7 @@ Declaring a variable All variable declarations consist of a :ref:`type ` and a name for the variable. The name can be any `identifier `_ -that starts with an uppercase or lowercase letter. +that starts with a lowercase letter. For example, ``int i``, ``SsaDefinitionNode node``, and ``LocalScopeVariable lsv`` declare variables ``i``, ``node``, and ``lsv`` with types ``int``, ``SsaDefinitionNode``, and From 7359ffaa2ea1be1aa45bb7957fdcacf9b8eb73c5 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 28 Apr 2022 11:36:01 +0200 Subject: [PATCH 0181/1618] Ruby: add tree-sitter test case --- .../library-tests/ast/TreeSitter.expected | 5846 +++++++++++++++++ ruby/ql/test/library-tests/ast/TreeSitter.ql | 31 + 2 files changed, 5877 insertions(+) create mode 100644 ruby/ql/test/library-tests/ast/TreeSitter.expected create mode 100644 ruby/ql/test/library-tests/ast/TreeSitter.ql diff --git a/ruby/ql/test/library-tests/ast/TreeSitter.expected b/ruby/ql/test/library-tests/ast/TreeSitter.expected new file mode 100644 index 00000000000..ecf00e54895 --- /dev/null +++ b/ruby/ql/test/library-tests/ast/TreeSitter.expected @@ -0,0 +1,5846 @@ +calls/calls.rb: +# 1| [Program] Program +# 2| 0: [Call] Call +# 2| 0: [Identifier] foo +# 2| 1: [ArgumentList] ArgumentList +# 2| 0: [ReservedWord] ( +# 2| 1: [ReservedWord] ) +# 5| 1: [Call] Call +# 5| 0: [ScopeResolution] ScopeResolution +# 5| 0: [Constant] Foo +# 5| 1: [ReservedWord] :: +# 5| 2: [Identifier] bar +# 5| 1: [ArgumentList] ArgumentList +# 5| 0: [ReservedWord] ( +# 5| 1: [ReservedWord] ) +# 8| 2: [Call] Call +# 8| 0: [ScopeResolution] ScopeResolution +# 8| 0: [ReservedWord] :: +# 8| 1: [Identifier] bar +# 8| 1: [ArgumentList] ArgumentList +# 8| 0: [ReservedWord] ( +# 8| 1: [ReservedWord] ) +# 11| 3: [Call] Call +# 11| 0: [Integer] 123 +# 11| 1: [ReservedWord] . +# 11| 2: [Identifier] bar +# 14| 4: [Call] Call +# 14| 0: [Identifier] foo +# 14| 1: [ArgumentList] ArgumentList +# 14| 0: [Integer] 0 +# 14| 1: [ReservedWord] , +# 14| 2: [Integer] 1 +# 14| 3: [ReservedWord] , +# 14| 4: [Integer] 2 +# 17| 5: [Call] Call +# 17| 0: [Identifier] foo +# 17| 1: [Block] Block +# 17| 0: [ReservedWord] { +# 17| 1: [BlockParameters] BlockParameters +# 17| 0: [ReservedWord] | +# 17| 1: [Identifier] x +# 17| 2: [ReservedWord] | +# 17| 2: [Binary] Binary +# 17| 0: [Identifier] x +# 17| 1: [ReservedWord] + +# 17| 2: [Integer] 1 +# 17| 3: [ReservedWord] } +# 20| 6: [Call] Call +# 20| 0: [Identifier] foo +# 20| 1: [DoBlock] DoBlock +# 20| 0: [ReservedWord] do +# 20| 1: [BlockParameters] BlockParameters +# 20| 0: [ReservedWord] | +# 20| 1: [Identifier] x +# 20| 2: [ReservedWord] | +# 21| 2: [Binary] Binary +# 21| 0: [Identifier] x +# 21| 1: [ReservedWord] + +# 21| 2: [Integer] 1 +# 22| 3: [ReservedWord] end +# 25| 7: [Call] Call +# 25| 0: [Integer] 123 +# 25| 1: [ReservedWord] . +# 25| 2: [Identifier] bar +# 25| 3: [ArgumentList] ArgumentList +# 25| 0: [ReservedWord] ( +# 25| 1: [String] String +# 25| 0: [ReservedWord] ' +# 25| 1: [StringContent] foo +# 25| 2: [ReservedWord] ' +# 25| 2: [ReservedWord] ) +# 25| 4: [DoBlock] DoBlock +# 25| 0: [ReservedWord] do +# 25| 1: [BlockParameters] BlockParameters +# 25| 0: [ReservedWord] | +# 25| 1: [Identifier] x +# 25| 2: [ReservedWord] | +# 26| 2: [Binary] Binary +# 26| 0: [Identifier] x +# 26| 1: [ReservedWord] + +# 26| 2: [Integer] 1 +# 27| 3: [ReservedWord] end +# 30| 8: [Method] Method +# 30| 0: [ReservedWord] def +# 30| 1: [Identifier] method_that_yields +# 31| 2: [Yield] Yield +# 31| 0: [ReservedWord] yield +# 32| 3: [ReservedWord] end +# 35| 9: [Method] Method +# 35| 0: [ReservedWord] def +# 35| 1: [Identifier] another_method_that_yields +# 36| 2: [Yield] Yield +# 36| 0: [ReservedWord] yield +# 36| 1: [ArgumentList] ArgumentList +# 36| 0: [Integer] 100 +# 36| 1: [ReservedWord] , +# 36| 2: [Integer] 200 +# 37| 3: [ReservedWord] end +# 46| 10: [Identifier] foo +# 47| 11: [ScopeResolution] ScopeResolution +# 47| 0: [Constant] X +# 47| 1: [ReservedWord] :: +# 47| 2: [Identifier] foo +# 50| 12: [ParenthesizedStatements] ParenthesizedStatements +# 50| 0: [ReservedWord] ( +# 50| 1: [Identifier] foo +# 50| 2: [ReservedWord] ) +# 51| 13: [ParenthesizedStatements] ParenthesizedStatements +# 51| 0: [ReservedWord] ( +# 51| 1: [ScopeResolution] ScopeResolution +# 51| 0: [Constant] X +# 51| 1: [ReservedWord] :: +# 51| 2: [Identifier] foo +# 51| 2: [ReservedWord] ) +# 54| 14: [Call] Call +# 54| 0: [Identifier] some_func +# 54| 1: [ArgumentList] ArgumentList +# 54| 0: [ReservedWord] ( +# 54| 1: [Identifier] foo +# 54| 2: [ReservedWord] ) +# 55| 15: [Call] Call +# 55| 0: [Identifier] some_func +# 55| 1: [ArgumentList] ArgumentList +# 55| 0: [ReservedWord] ( +# 55| 1: [ScopeResolution] ScopeResolution +# 55| 0: [Constant] X +# 55| 1: [ReservedWord] :: +# 55| 2: [Identifier] foo +# 55| 2: [ReservedWord] ) +# 58| 16: [Array] Array +# 58| 0: [ReservedWord] [ +# 58| 1: [Identifier] foo +# 58| 2: [ReservedWord] ] +# 59| 17: [Array] Array +# 59| 0: [ReservedWord] [ +# 59| 1: [ScopeResolution] ScopeResolution +# 59| 0: [Constant] X +# 59| 1: [ReservedWord] :: +# 59| 2: [Identifier] foo +# 59| 2: [ReservedWord] ] +# 62| 18: [Assignment] Assignment +# 62| 0: [Identifier] var1 +# 62| 1: [ReservedWord] = +# 62| 2: [Identifier] foo +# 63| 19: [Assignment] Assignment +# 63| 0: [Identifier] var1 +# 63| 1: [ReservedWord] = +# 63| 2: [ScopeResolution] ScopeResolution +# 63| 0: [Constant] X +# 63| 1: [ReservedWord] :: +# 63| 2: [Identifier] foo +# 66| 20: [OperatorAssignment] OperatorAssignment +# 66| 0: [Identifier] var1 +# 66| 1: [ReservedWord] += +# 66| 2: [Identifier] bar +# 67| 21: [OperatorAssignment] OperatorAssignment +# 67| 0: [Identifier] var1 +# 67| 1: [ReservedWord] += +# 67| 2: [ScopeResolution] ScopeResolution +# 67| 0: [Constant] X +# 67| 1: [ReservedWord] :: +# 67| 2: [Identifier] bar +# 70| 22: [Assignment] Assignment +# 70| 0: [Identifier] var1 +# 70| 1: [ReservedWord] = +# 70| 2: [RightAssignmentList] RightAssignmentList +# 70| 0: [Identifier] foo +# 70| 1: [ReservedWord] , +# 70| 2: [ScopeResolution] ScopeResolution +# 70| 0: [Constant] X +# 70| 1: [ReservedWord] :: +# 70| 2: [Identifier] bar +# 73| 23: [Begin] Begin +# 73| 0: [ReservedWord] begin +# 74| 1: [Identifier] foo +# 75| 2: [ScopeResolution] ScopeResolution +# 75| 0: [Constant] X +# 75| 1: [ReservedWord] :: +# 75| 2: [Identifier] foo +# 76| 3: [ReservedWord] end +# 79| 24: [BeginBlock] BeginBlock +# 79| 0: [ReservedWord] BEGIN +# 79| 1: [ReservedWord] { +# 79| 2: [Identifier] foo +# 79| 3: [ReservedWord] ; +# 79| 4: [ScopeResolution] ScopeResolution +# 79| 0: [Constant] X +# 79| 1: [ReservedWord] :: +# 79| 2: [Identifier] bar +# 79| 5: [ReservedWord] } +# 82| 25: [EndBlock] EndBlock +# 82| 0: [ReservedWord] END +# 82| 1: [ReservedWord] { +# 82| 2: [Identifier] foo +# 82| 3: [ReservedWord] ; +# 82| 4: [ScopeResolution] ScopeResolution +# 82| 0: [Constant] X +# 82| 1: [ReservedWord] :: +# 82| 2: [Identifier] bar +# 82| 5: [ReservedWord] } +# 85| 26: [Binary] Binary +# 85| 0: [Identifier] foo +# 85| 1: [ReservedWord] + +# 85| 2: [ScopeResolution] ScopeResolution +# 85| 0: [Constant] X +# 85| 1: [ReservedWord] :: +# 85| 2: [Identifier] bar +# 88| 27: [Unary] Unary +# 88| 0: [ReservedWord] ! +# 88| 1: [Identifier] foo +# 89| 28: [Unary] Unary +# 89| 0: [ReservedWord] ~ +# 89| 1: [ScopeResolution] ScopeResolution +# 89| 0: [Constant] X +# 89| 1: [ReservedWord] :: +# 89| 2: [Identifier] bar +# 92| 29: [Call] Call +# 92| 0: [Identifier] foo +# 92| 1: [ArgumentList] ArgumentList +# 92| 0: [ReservedWord] ( +# 92| 1: [ReservedWord] ) +# 92| 2: [Block] Block +# 92| 0: [ReservedWord] { +# 92| 1: [Identifier] bar +# 92| 2: [ReservedWord] ; +# 92| 3: [ScopeResolution] ScopeResolution +# 92| 0: [Constant] X +# 92| 1: [ReservedWord] :: +# 92| 2: [Identifier] baz +# 92| 4: [ReservedWord] } +# 95| 30: [Call] Call +# 95| 0: [Identifier] foo +# 95| 1: [ArgumentList] ArgumentList +# 95| 0: [ReservedWord] ( +# 95| 1: [ReservedWord] ) +# 95| 2: [DoBlock] DoBlock +# 95| 0: [ReservedWord] do +# 96| 1: [Identifier] bar +# 97| 2: [ScopeResolution] ScopeResolution +# 97| 0: [Constant] X +# 97| 1: [ReservedWord] :: +# 97| 2: [Identifier] baz +# 98| 3: [ReservedWord] end +# 101| 31: [Call] Call +# 101| 0: [Identifier] foo +# 101| 1: [ReservedWord] . +# 101| 2: [Identifier] bar +# 101| 3: [ArgumentList] ArgumentList +# 101| 0: [ReservedWord] ( +# 101| 1: [ReservedWord] ) +# 102| 32: [Call] Call +# 102| 0: [Identifier] bar +# 102| 1: [ReservedWord] . +# 102| 2: [Identifier] baz +# 102| 3: [ArgumentList] ArgumentList +# 102| 0: [ReservedWord] ( +# 102| 1: [ReservedWord] ) +# 106| 33: [Case] Case +# 106| 0: [ReservedWord] case +# 106| 1: [Identifier] foo +# 107| 2: [When] When +# 107| 0: [ReservedWord] when +# 107| 1: [Pattern] Pattern +# 107| 0: [Identifier] bar +# 107| 2: [Then] Then +# 108| 0: [Identifier] baz +# 109| 3: [ReservedWord] end +# 110| 34: [Case] Case +# 110| 0: [ReservedWord] case +# 110| 1: [ScopeResolution] ScopeResolution +# 110| 0: [Constant] X +# 110| 1: [ReservedWord] :: +# 110| 2: [Identifier] foo +# 111| 2: [When] When +# 111| 0: [ReservedWord] when +# 111| 1: [Pattern] Pattern +# 111| 0: [ScopeResolution] ScopeResolution +# 111| 0: [Constant] X +# 111| 1: [ReservedWord] :: +# 111| 2: [Identifier] bar +# 111| 2: [Then] Then +# 112| 0: [ScopeResolution] ScopeResolution +# 112| 0: [Constant] X +# 112| 1: [ReservedWord] :: +# 112| 2: [Identifier] baz +# 113| 3: [ReservedWord] end +# 116| 35: [Class] Class +# 116| 0: [ReservedWord] class +# 116| 1: [Constant] MyClass +# 117| 2: [Identifier] foo +# 118| 3: [ScopeResolution] ScopeResolution +# 118| 0: [Constant] X +# 118| 1: [ReservedWord] :: +# 118| 2: [Identifier] bar +# 119| 4: [ReservedWord] end +# 122| 36: [Class] Class +# 122| 0: [ReservedWord] class +# 122| 1: [Constant] MyClass +# 122| 2: [Superclass] Superclass +# 122| 0: [ReservedWord] < +# 122| 1: [Identifier] foo +# 123| 3: [ReservedWord] end +# 124| 37: [Class] Class +# 124| 0: [ReservedWord] class +# 124| 1: [Constant] MyClass2 +# 124| 2: [Superclass] Superclass +# 124| 0: [ReservedWord] < +# 124| 1: [ScopeResolution] ScopeResolution +# 124| 0: [Constant] X +# 124| 1: [ReservedWord] :: +# 124| 2: [Identifier] foo +# 125| 3: [ReservedWord] end +# 128| 38: [SingletonClass] SingletonClass +# 128| 0: [ReservedWord] class +# 128| 1: [ReservedWord] << +# 128| 2: [Identifier] foo +# 129| 3: [Identifier] bar +# 130| 4: [ReservedWord] end +# 131| 39: [SingletonClass] SingletonClass +# 131| 0: [ReservedWord] class +# 131| 1: [ReservedWord] << +# 131| 2: [ScopeResolution] ScopeResolution +# 131| 0: [Constant] X +# 131| 1: [ReservedWord] :: +# 131| 2: [Identifier] foo +# 132| 3: [ScopeResolution] ScopeResolution +# 132| 0: [Constant] X +# 132| 1: [ReservedWord] :: +# 132| 2: [Identifier] bar +# 133| 4: [ReservedWord] end +# 136| 40: [Method] Method +# 136| 0: [ReservedWord] def +# 136| 1: [Identifier] some_method +# 137| 2: [Identifier] foo +# 138| 3: [ScopeResolution] ScopeResolution +# 138| 0: [Constant] X +# 138| 1: [ReservedWord] :: +# 138| 2: [Identifier] bar +# 139| 4: [ReservedWord] end +# 142| 41: [SingletonMethod] SingletonMethod +# 142| 0: [ReservedWord] def +# 142| 1: [Identifier] foo +# 142| 2: [ReservedWord] . +# 142| 3: [Identifier] some_method +# 143| 4: [Identifier] bar +# 144| 5: [ScopeResolution] ScopeResolution +# 144| 0: [Constant] X +# 144| 1: [ReservedWord] :: +# 144| 2: [Identifier] baz +# 145| 6: [ReservedWord] end +# 148| 42: [Method] Method +# 148| 0: [ReservedWord] def +# 148| 1: [Identifier] method_with_keyword_param +# 148| 2: [MethodParameters] MethodParameters +# 148| 0: [ReservedWord] ( +# 148| 1: [KeywordParameter] KeywordParameter +# 148| 0: [Identifier] keyword +# 148| 1: [ReservedWord] : +# 148| 2: [Identifier] foo +# 148| 2: [ReservedWord] ) +# 149| 3: [ReservedWord] end +# 150| 43: [Method] Method +# 150| 0: [ReservedWord] def +# 150| 1: [Identifier] method_with_keyword_param2 +# 150| 2: [MethodParameters] MethodParameters +# 150| 0: [ReservedWord] ( +# 150| 1: [KeywordParameter] KeywordParameter +# 150| 0: [Identifier] keyword +# 150| 1: [ReservedWord] : +# 150| 2: [ScopeResolution] ScopeResolution +# 150| 0: [Constant] X +# 150| 1: [ReservedWord] :: +# 150| 2: [Identifier] foo +# 150| 2: [ReservedWord] ) +# 151| 3: [ReservedWord] end +# 154| 44: [Method] Method +# 154| 0: [ReservedWord] def +# 154| 1: [Identifier] method_with_optional_param +# 154| 2: [MethodParameters] MethodParameters +# 154| 0: [ReservedWord] ( +# 154| 1: [OptionalParameter] OptionalParameter +# 154| 0: [Identifier] param +# 154| 1: [ReservedWord] = +# 154| 2: [Identifier] foo +# 154| 2: [ReservedWord] ) +# 155| 3: [ReservedWord] end +# 156| 45: [Method] Method +# 156| 0: [ReservedWord] def +# 156| 1: [Identifier] method_with_optional_param2 +# 156| 2: [MethodParameters] MethodParameters +# 156| 0: [ReservedWord] ( +# 156| 1: [OptionalParameter] OptionalParameter +# 156| 0: [Identifier] param +# 156| 1: [ReservedWord] = +# 156| 2: [ScopeResolution] ScopeResolution +# 156| 0: [Constant] X +# 156| 1: [ReservedWord] :: +# 156| 2: [Identifier] foo +# 156| 2: [ReservedWord] ) +# 157| 3: [ReservedWord] end +# 160| 46: [Module] Module +# 160| 0: [ReservedWord] module +# 160| 1: [Constant] SomeModule +# 161| 2: [Identifier] foo +# 162| 3: [ScopeResolution] ScopeResolution +# 162| 0: [Constant] X +# 162| 1: [ReservedWord] :: +# 162| 2: [Identifier] bar +# 163| 4: [ReservedWord] end +# 166| 47: [Conditional] Conditional +# 166| 0: [Identifier] foo +# 166| 1: [ReservedWord] ? +# 166| 2: [Identifier] bar +# 166| 3: [ReservedWord] : +# 166| 4: [Identifier] baz +# 167| 48: [Conditional] Conditional +# 167| 0: [ScopeResolution] ScopeResolution +# 167| 0: [Constant] X +# 167| 1: [ReservedWord] :: +# 167| 2: [Identifier] foo +# 167| 1: [ReservedWord] ? +# 167| 2: [ScopeResolution] ScopeResolution +# 167| 0: [Constant] X +# 167| 1: [ReservedWord] :: +# 167| 2: [Identifier] bar +# 167| 3: [ReservedWord] : +# 167| 4: [ScopeResolution] ScopeResolution +# 167| 0: [Constant] X +# 167| 1: [ReservedWord] :: +# 167| 2: [Identifier] baz +# 170| 49: [If] If +# 170| 0: [ReservedWord] if +# 170| 1: [Identifier] foo +# 170| 2: [Then] Then +# 171| 0: [Identifier] wibble +# 172| 3: [Elsif] Elsif +# 172| 0: [ReservedWord] elsif +# 172| 1: [Identifier] bar +# 172| 2: [Then] Then +# 173| 0: [Identifier] wobble +# 174| 3: [Else] Else +# 174| 0: [ReservedWord] else +# 175| 1: [Identifier] wabble +# 176| 4: [ReservedWord] end +# 177| 50: [If] If +# 177| 0: [ReservedWord] if +# 177| 1: [ScopeResolution] ScopeResolution +# 177| 0: [Constant] X +# 177| 1: [ReservedWord] :: +# 177| 2: [Identifier] foo +# 177| 2: [Then] Then +# 178| 0: [ScopeResolution] ScopeResolution +# 178| 0: [Constant] X +# 178| 1: [ReservedWord] :: +# 178| 2: [Identifier] wibble +# 179| 3: [Elsif] Elsif +# 179| 0: [ReservedWord] elsif +# 179| 1: [ScopeResolution] ScopeResolution +# 179| 0: [Constant] X +# 179| 1: [ReservedWord] :: +# 179| 2: [Identifier] bar +# 179| 2: [Then] Then +# 180| 0: [ScopeResolution] ScopeResolution +# 180| 0: [Constant] X +# 180| 1: [ReservedWord] :: +# 180| 2: [Identifier] wobble +# 181| 3: [Else] Else +# 181| 0: [ReservedWord] else +# 182| 1: [ScopeResolution] ScopeResolution +# 182| 0: [Constant] X +# 182| 1: [ReservedWord] :: +# 182| 2: [Identifier] wabble +# 183| 4: [ReservedWord] end +# 186| 51: [IfModifier] IfModifier +# 186| 0: [Identifier] bar +# 186| 1: [ReservedWord] if +# 186| 2: [Identifier] foo +# 187| 52: [IfModifier] IfModifier +# 187| 0: [ScopeResolution] ScopeResolution +# 187| 0: [Constant] X +# 187| 1: [ReservedWord] :: +# 187| 2: [Identifier] bar +# 187| 1: [ReservedWord] if +# 187| 2: [ScopeResolution] ScopeResolution +# 187| 0: [Constant] X +# 187| 1: [ReservedWord] :: +# 187| 2: [Identifier] foo +# 190| 53: [Unless] Unless +# 190| 0: [ReservedWord] unless +# 190| 1: [Identifier] foo +# 190| 2: [Then] Then +# 191| 0: [Identifier] bar +# 192| 3: [ReservedWord] end +# 193| 54: [Unless] Unless +# 193| 0: [ReservedWord] unless +# 193| 1: [ScopeResolution] ScopeResolution +# 193| 0: [Constant] X +# 193| 1: [ReservedWord] :: +# 193| 2: [Identifier] foo +# 193| 2: [Then] Then +# 194| 0: [ScopeResolution] ScopeResolution +# 194| 0: [Constant] X +# 194| 1: [ReservedWord] :: +# 194| 2: [Identifier] bar +# 195| 3: [ReservedWord] end +# 198| 55: [UnlessModifier] UnlessModifier +# 198| 0: [Identifier] bar +# 198| 1: [ReservedWord] unless +# 198| 2: [Identifier] foo +# 199| 56: [UnlessModifier] UnlessModifier +# 199| 0: [ScopeResolution] ScopeResolution +# 199| 0: [Constant] X +# 199| 1: [ReservedWord] :: +# 199| 2: [Identifier] bar +# 199| 1: [ReservedWord] unless +# 199| 2: [ScopeResolution] ScopeResolution +# 199| 0: [Constant] X +# 199| 1: [ReservedWord] :: +# 199| 2: [Identifier] foo +# 202| 57: [While] While +# 202| 0: [ReservedWord] while +# 202| 1: [Identifier] foo +# 202| 2: [Do] Do +# 202| 0: [ReservedWord] do +# 203| 1: [Identifier] bar +# 204| 2: [ReservedWord] end +# 205| 58: [While] While +# 205| 0: [ReservedWord] while +# 205| 1: [ScopeResolution] ScopeResolution +# 205| 0: [Constant] X +# 205| 1: [ReservedWord] :: +# 205| 2: [Identifier] foo +# 205| 2: [Do] Do +# 205| 0: [ReservedWord] do +# 206| 1: [ScopeResolution] ScopeResolution +# 206| 0: [Constant] X +# 206| 1: [ReservedWord] :: +# 206| 2: [Identifier] bar +# 207| 2: [ReservedWord] end +# 210| 59: [WhileModifier] WhileModifier +# 210| 0: [Identifier] bar +# 210| 1: [ReservedWord] while +# 210| 2: [Identifier] foo +# 211| 60: [WhileModifier] WhileModifier +# 211| 0: [ScopeResolution] ScopeResolution +# 211| 0: [Constant] X +# 211| 1: [ReservedWord] :: +# 211| 2: [Identifier] bar +# 211| 1: [ReservedWord] while +# 211| 2: [ScopeResolution] ScopeResolution +# 211| 0: [Constant] X +# 211| 1: [ReservedWord] :: +# 211| 2: [Identifier] foo +# 214| 61: [Until] Until +# 214| 0: [ReservedWord] until +# 214| 1: [Identifier] foo +# 214| 2: [Do] Do +# 214| 0: [ReservedWord] do +# 215| 1: [Identifier] bar +# 216| 2: [ReservedWord] end +# 217| 62: [Until] Until +# 217| 0: [ReservedWord] until +# 217| 1: [ScopeResolution] ScopeResolution +# 217| 0: [Constant] X +# 217| 1: [ReservedWord] :: +# 217| 2: [Identifier] foo +# 217| 2: [Do] Do +# 217| 0: [ReservedWord] do +# 218| 1: [ScopeResolution] ScopeResolution +# 218| 0: [Constant] X +# 218| 1: [ReservedWord] :: +# 218| 2: [Identifier] bar +# 219| 2: [ReservedWord] end +# 222| 63: [UntilModifier] UntilModifier +# 222| 0: [Identifier] bar +# 222| 1: [ReservedWord] until +# 222| 2: [Identifier] foo +# 223| 64: [UntilModifier] UntilModifier +# 223| 0: [ScopeResolution] ScopeResolution +# 223| 0: [Constant] X +# 223| 1: [ReservedWord] :: +# 223| 2: [Identifier] bar +# 223| 1: [ReservedWord] until +# 223| 2: [ScopeResolution] ScopeResolution +# 223| 0: [Constant] X +# 223| 1: [ReservedWord] :: +# 223| 2: [Identifier] foo +# 226| 65: [For] For +# 226| 0: [ReservedWord] for +# 226| 1: [Identifier] x +# 226| 2: [In] In +# 226| 0: [ReservedWord] in +# 226| 1: [Identifier] bar +# 226| 3: [Do] Do +# 227| 0: [Identifier] baz +# 228| 1: [ReservedWord] end +# 229| 66: [For] For +# 229| 0: [ReservedWord] for +# 229| 1: [Identifier] x +# 229| 2: [In] In +# 229| 0: [ReservedWord] in +# 229| 1: [ScopeResolution] ScopeResolution +# 229| 0: [Constant] X +# 229| 1: [ReservedWord] :: +# 229| 2: [Identifier] bar +# 229| 3: [Do] Do +# 230| 0: [ScopeResolution] ScopeResolution +# 230| 0: [Constant] X +# 230| 1: [ReservedWord] :: +# 230| 2: [Identifier] baz +# 231| 1: [ReservedWord] end +# 234| 67: [ElementReference] ElementReference +# 234| 0: [Identifier] foo +# 234| 1: [ReservedWord] [ +# 234| 2: [Identifier] bar +# 234| 3: [ReservedWord] ] +# 235| 68: [ElementReference] ElementReference +# 235| 0: [ScopeResolution] ScopeResolution +# 235| 0: [Constant] X +# 235| 1: [ReservedWord] :: +# 235| 2: [Identifier] foo +# 235| 1: [ReservedWord] [ +# 235| 2: [ScopeResolution] ScopeResolution +# 235| 0: [Constant] X +# 235| 1: [ReservedWord] :: +# 235| 2: [Identifier] bar +# 235| 3: [ReservedWord] ] +# 238| 69: [String] String +# 238| 0: [ReservedWord] " +# 238| 1: [StringContent] foo- +# 238| 2: [Interpolation] Interpolation +# 238| 0: [ReservedWord] #{ +# 238| 1: [Identifier] bar +# 238| 2: [ReservedWord] } +# 238| 3: [StringContent] - +# 238| 4: [Interpolation] Interpolation +# 238| 0: [ReservedWord] #{ +# 238| 1: [ScopeResolution] ScopeResolution +# 238| 0: [Constant] X +# 238| 1: [ReservedWord] :: +# 238| 2: [Identifier] baz +# 238| 2: [ReservedWord] } +# 238| 5: [ReservedWord] " +# 241| 70: [ScopeResolution] ScopeResolution +# 241| 0: [Identifier] foo +# 241| 1: [ReservedWord] :: +# 241| 2: [Constant] Bar +# 242| 71: [ScopeResolution] ScopeResolution +# 242| 0: [ScopeResolution] ScopeResolution +# 242| 0: [Constant] X +# 242| 1: [ReservedWord] :: +# 242| 2: [Identifier] foo +# 242| 1: [ReservedWord] :: +# 242| 2: [Constant] Bar +# 245| 72: [Range] Range +# 245| 0: [Identifier] foo +# 245| 1: [ReservedWord] .. +# 245| 2: [Identifier] bar +# 246| 73: [Range] Range +# 246| 0: [ScopeResolution] ScopeResolution +# 246| 0: [Constant] X +# 246| 1: [ReservedWord] :: +# 246| 2: [Identifier] foo +# 246| 1: [ReservedWord] .. +# 246| 2: [ScopeResolution] ScopeResolution +# 246| 0: [Constant] X +# 246| 1: [ReservedWord] :: +# 246| 2: [Identifier] bar +# 249| 74: [Hash] Hash +# 249| 0: [ReservedWord] { +# 249| 1: [Pair] Pair +# 249| 0: [Identifier] foo +# 249| 1: [ReservedWord] => +# 249| 2: [Identifier] bar +# 249| 2: [ReservedWord] , +# 249| 3: [Pair] Pair +# 249| 0: [ScopeResolution] ScopeResolution +# 249| 0: [Constant] X +# 249| 1: [ReservedWord] :: +# 249| 2: [Identifier] foo +# 249| 1: [ReservedWord] => +# 249| 2: [ScopeResolution] ScopeResolution +# 249| 0: [Constant] X +# 249| 1: [ReservedWord] :: +# 249| 2: [Identifier] bar +# 249| 4: [ReservedWord] } +# 252| 75: [Begin] Begin +# 252| 0: [ReservedWord] begin +# 253| 1: [Rescue] Rescue +# 253| 0: [ReservedWord] rescue +# 253| 1: [Exceptions] Exceptions +# 253| 0: [Identifier] foo +# 254| 2: [Ensure] Ensure +# 254| 0: [ReservedWord] ensure +# 254| 1: [Identifier] bar +# 255| 3: [ReservedWord] end +# 256| 76: [Begin] Begin +# 256| 0: [ReservedWord] begin +# 257| 1: [Rescue] Rescue +# 257| 0: [ReservedWord] rescue +# 257| 1: [Exceptions] Exceptions +# 257| 0: [ScopeResolution] ScopeResolution +# 257| 0: [Constant] X +# 257| 1: [ReservedWord] :: +# 257| 2: [Identifier] foo +# 258| 2: [Ensure] Ensure +# 258| 0: [ReservedWord] ensure +# 258| 1: [ScopeResolution] ScopeResolution +# 258| 0: [Constant] X +# 258| 1: [ReservedWord] :: +# 258| 2: [Identifier] bar +# 259| 3: [ReservedWord] end +# 262| 77: [RescueModifier] RescueModifier +# 262| 0: [Identifier] foo +# 262| 1: [ReservedWord] rescue +# 262| 2: [Identifier] bar +# 263| 78: [RescueModifier] RescueModifier +# 263| 0: [ScopeResolution] ScopeResolution +# 263| 0: [Constant] X +# 263| 1: [ReservedWord] :: +# 263| 2: [Identifier] foo +# 263| 1: [ReservedWord] rescue +# 263| 2: [ScopeResolution] ScopeResolution +# 263| 0: [Constant] X +# 263| 1: [ReservedWord] :: +# 263| 2: [Identifier] bar +# 266| 79: [Call] Call +# 266| 0: [Identifier] foo +# 266| 1: [ArgumentList] ArgumentList +# 266| 0: [ReservedWord] ( +# 266| 1: [BlockArgument] BlockArgument +# 266| 0: [ReservedWord] & +# 266| 1: [Identifier] bar +# 266| 2: [ReservedWord] ) +# 267| 80: [Call] Call +# 267| 0: [Identifier] foo +# 267| 1: [ArgumentList] ArgumentList +# 267| 0: [ReservedWord] ( +# 267| 1: [BlockArgument] BlockArgument +# 267| 0: [ReservedWord] & +# 267| 1: [ScopeResolution] ScopeResolution +# 267| 0: [Constant] X +# 267| 1: [ReservedWord] :: +# 267| 2: [Identifier] bar +# 267| 2: [ReservedWord] ) +# 268| 81: [Call] Call +# 268| 0: [Identifier] foo +# 268| 1: [ArgumentList] ArgumentList +# 268| 0: [ReservedWord] ( +# 268| 1: [BlockArgument] BlockArgument +# 268| 0: [ReservedWord] & +# 268| 2: [ReservedWord] ) +# 270| 82: [Call] Call +# 270| 0: [Identifier] foo +# 270| 1: [ArgumentList] ArgumentList +# 270| 0: [ReservedWord] ( +# 270| 1: [SplatArgument] SplatArgument +# 270| 0: [ReservedWord] * +# 270| 1: [Identifier] bar +# 270| 2: [ReservedWord] ) +# 271| 83: [Call] Call +# 271| 0: [Identifier] foo +# 271| 1: [ArgumentList] ArgumentList +# 271| 0: [ReservedWord] ( +# 271| 1: [SplatArgument] SplatArgument +# 271| 0: [ReservedWord] * +# 271| 1: [ScopeResolution] ScopeResolution +# 271| 0: [Constant] X +# 271| 1: [ReservedWord] :: +# 271| 2: [Identifier] bar +# 271| 2: [ReservedWord] ) +# 274| 84: [Call] Call +# 274| 0: [Identifier] foo +# 274| 1: [ArgumentList] ArgumentList +# 274| 0: [ReservedWord] ( +# 274| 1: [HashSplatArgument] HashSplatArgument +# 274| 0: [ReservedWord] ** +# 274| 1: [Identifier] bar +# 274| 2: [ReservedWord] ) +# 275| 85: [Call] Call +# 275| 0: [Identifier] foo +# 275| 1: [ArgumentList] ArgumentList +# 275| 0: [ReservedWord] ( +# 275| 1: [HashSplatArgument] HashSplatArgument +# 275| 0: [ReservedWord] ** +# 275| 1: [ScopeResolution] ScopeResolution +# 275| 0: [Constant] X +# 275| 1: [ReservedWord] :: +# 275| 2: [Identifier] bar +# 275| 2: [ReservedWord] ) +# 278| 86: [Call] Call +# 278| 0: [Identifier] foo +# 278| 1: [ArgumentList] ArgumentList +# 278| 0: [ReservedWord] ( +# 278| 1: [Pair] Pair +# 278| 0: [HashKeySymbol] blah +# 278| 1: [ReservedWord] : +# 278| 2: [Identifier] bar +# 278| 2: [ReservedWord] ) +# 279| 87: [Call] Call +# 279| 0: [Identifier] foo +# 279| 1: [ArgumentList] ArgumentList +# 279| 0: [ReservedWord] ( +# 279| 1: [Pair] Pair +# 279| 0: [HashKeySymbol] blah +# 279| 1: [ReservedWord] : +# 279| 2: [ScopeResolution] ScopeResolution +# 279| 0: [Constant] X +# 279| 1: [ReservedWord] :: +# 279| 2: [Identifier] bar +# 279| 2: [ReservedWord] ) +# 284| 88: [Class] Class +# 284| 0: [ReservedWord] class +# 284| 1: [Constant] MyClass +# 285| 2: [Method] Method +# 285| 0: [ReservedWord] def +# 285| 1: [Identifier] my_method +# 286| 2: [Super] super +# 287| 3: [Call] Call +# 287| 0: [Super] super +# 287| 1: [ArgumentList] ArgumentList +# 287| 0: [ReservedWord] ( +# 287| 1: [ReservedWord] ) +# 288| 4: [Call] Call +# 288| 0: [Super] super +# 288| 1: [ArgumentList] ArgumentList +# 288| 0: [String] String +# 288| 0: [ReservedWord] ' +# 288| 1: [StringContent] blah +# 288| 2: [ReservedWord] ' +# 289| 5: [Call] Call +# 289| 0: [Super] super +# 289| 1: [ArgumentList] ArgumentList +# 289| 0: [Integer] 1 +# 289| 1: [ReservedWord] , +# 289| 2: [Integer] 2 +# 289| 3: [ReservedWord] , +# 289| 4: [Integer] 3 +# 290| 6: [Call] Call +# 290| 0: [Super] super +# 290| 1: [Block] Block +# 290| 0: [ReservedWord] { +# 290| 1: [BlockParameters] BlockParameters +# 290| 0: [ReservedWord] | +# 290| 1: [Identifier] x +# 290| 2: [ReservedWord] | +# 290| 2: [Binary] Binary +# 290| 0: [Identifier] x +# 290| 1: [ReservedWord] + +# 290| 2: [Integer] 1 +# 290| 3: [ReservedWord] } +# 291| 7: [Call] Call +# 291| 0: [Super] super +# 291| 1: [DoBlock] DoBlock +# 291| 0: [ReservedWord] do +# 291| 1: [BlockParameters] BlockParameters +# 291| 0: [ReservedWord] | +# 291| 1: [Identifier] x +# 291| 2: [ReservedWord] | +# 291| 2: [Binary] Binary +# 291| 0: [Identifier] x +# 291| 1: [ReservedWord] * +# 291| 2: [Integer] 2 +# 291| 3: [ReservedWord] end +# 292| 8: [Call] Call +# 292| 0: [Super] super +# 292| 1: [ArgumentList] ArgumentList +# 292| 0: [Integer] 4 +# 292| 1: [ReservedWord] , +# 292| 2: [Integer] 5 +# 292| 2: [Block] Block +# 292| 0: [ReservedWord] { +# 292| 1: [BlockParameters] BlockParameters +# 292| 0: [ReservedWord] | +# 292| 1: [Identifier] x +# 292| 2: [ReservedWord] | +# 292| 2: [Binary] Binary +# 292| 0: [Identifier] x +# 292| 1: [ReservedWord] + +# 292| 2: [Integer] 100 +# 292| 3: [ReservedWord] } +# 293| 9: [Call] Call +# 293| 0: [Super] super +# 293| 1: [ArgumentList] ArgumentList +# 293| 0: [Integer] 6 +# 293| 1: [ReservedWord] , +# 293| 2: [Integer] 7 +# 293| 2: [DoBlock] DoBlock +# 293| 0: [ReservedWord] do +# 293| 1: [BlockParameters] BlockParameters +# 293| 0: [ReservedWord] | +# 293| 1: [Identifier] x +# 293| 2: [ReservedWord] | +# 293| 2: [Binary] Binary +# 293| 0: [Identifier] x +# 293| 1: [ReservedWord] + +# 293| 2: [Integer] 200 +# 293| 3: [ReservedWord] end +# 294| 10: [ReservedWord] end +# 295| 3: [ReservedWord] end +# 301| 89: [Class] Class +# 301| 0: [ReservedWord] class +# 301| 1: [Constant] AnotherClass +# 302| 2: [Method] Method +# 302| 0: [ReservedWord] def +# 302| 1: [Identifier] another_method +# 303| 2: [Call] Call +# 303| 0: [Identifier] foo +# 303| 1: [ReservedWord] . +# 303| 2: [Identifier] super +# 304| 3: [Call] Call +# 304| 0: [Self] self +# 304| 1: [ReservedWord] . +# 304| 2: [Identifier] super +# 305| 4: [Call] Call +# 305| 0: [Super] super +# 305| 1: [ReservedWord] . +# 305| 2: [Identifier] super +# 306| 5: [ReservedWord] end +# 307| 3: [ReservedWord] end +# 310| 90: [Call] Call +# 310| 0: [Identifier] foo +# 310| 1: [ReservedWord] . +# 310| 2: [ArgumentList] ArgumentList +# 310| 0: [ReservedWord] ( +# 310| 1: [ReservedWord] ) +# 311| 91: [Call] Call +# 311| 0: [Identifier] foo +# 311| 1: [ReservedWord] . +# 311| 2: [ArgumentList] ArgumentList +# 311| 0: [ReservedWord] ( +# 311| 1: [Integer] 1 +# 311| 2: [ReservedWord] ) +# 314| 92: [Assignment] Assignment +# 314| 0: [Call] Call +# 314| 0: [Self] self +# 314| 1: [ReservedWord] . +# 314| 2: [Identifier] foo +# 314| 1: [ReservedWord] = +# 314| 2: [Integer] 10 +# 315| 93: [Assignment] Assignment +# 315| 0: [ElementReference] ElementReference +# 315| 0: [Identifier] foo +# 315| 1: [ReservedWord] [ +# 315| 2: [Integer] 0 +# 315| 3: [ReservedWord] ] +# 315| 1: [ReservedWord] = +# 315| 2: [Integer] 10 +# 316| 94: [Assignment] Assignment +# 316| 0: [LeftAssignmentList] LeftAssignmentList +# 316| 0: [Call] Call +# 316| 0: [Self] self +# 316| 1: [ReservedWord] . +# 316| 2: [Identifier] foo +# 316| 1: [ReservedWord] , +# 316| 2: [RestAssignment] RestAssignment +# 316| 0: [ReservedWord] * +# 316| 1: [Call] Call +# 316| 0: [Self] self +# 316| 1: [ReservedWord] . +# 316| 2: [Identifier] bar +# 316| 3: [ReservedWord] , +# 316| 4: [ElementReference] ElementReference +# 316| 0: [Identifier] foo +# 316| 1: [ReservedWord] [ +# 316| 2: [Integer] 4 +# 316| 3: [ReservedWord] ] +# 316| 1: [ReservedWord] = +# 316| 2: [Array] Array +# 316| 0: [ReservedWord] [ +# 316| 1: [Integer] 1 +# 316| 2: [ReservedWord] , +# 316| 3: [Integer] 2 +# 316| 4: [ReservedWord] , +# 316| 5: [Integer] 3 +# 316| 6: [ReservedWord] , +# 316| 7: [Integer] 4 +# 316| 8: [ReservedWord] ] +# 317| 95: [Assignment] Assignment +# 317| 0: [LeftAssignmentList] LeftAssignmentList +# 317| 0: [Identifier] a +# 317| 1: [ReservedWord] , +# 317| 2: [RestAssignment] RestAssignment +# 317| 0: [ReservedWord] * +# 317| 1: [ElementReference] ElementReference +# 317| 0: [Identifier] foo +# 317| 1: [ReservedWord] [ +# 317| 2: [Integer] 5 +# 317| 3: [ReservedWord] ] +# 317| 1: [ReservedWord] = +# 317| 2: [Array] Array +# 317| 0: [ReservedWord] [ +# 317| 1: [Integer] 1 +# 317| 2: [ReservedWord] , +# 317| 3: [Integer] 2 +# 317| 4: [ReservedWord] , +# 317| 5: [Integer] 3 +# 317| 6: [ReservedWord] ] +# 318| 96: [OperatorAssignment] OperatorAssignment +# 318| 0: [Call] Call +# 318| 0: [Self] self +# 318| 1: [ReservedWord] . +# 318| 2: [Identifier] count +# 318| 1: [ReservedWord] += +# 318| 2: [Integer] 1 +# 319| 97: [OperatorAssignment] OperatorAssignment +# 319| 0: [ElementReference] ElementReference +# 319| 0: [Identifier] foo +# 319| 1: [ReservedWord] [ +# 319| 2: [Integer] 0 +# 319| 3: [ReservedWord] ] +# 319| 1: [ReservedWord] += +# 319| 2: [Integer] 1 +# 320| 98: [OperatorAssignment] OperatorAssignment +# 320| 0: [ElementReference] ElementReference +# 320| 0: [Call] Call +# 320| 0: [Identifier] foo +# 320| 1: [ReservedWord] . +# 320| 2: [Identifier] bar +# 320| 1: [ReservedWord] [ +# 320| 2: [Integer] 0 +# 320| 3: [ReservedWord] , +# 320| 4: [Call] Call +# 320| 0: [Identifier] foo +# 320| 1: [ReservedWord] . +# 320| 2: [Identifier] baz +# 320| 5: [ReservedWord] , +# 320| 6: [Binary] Binary +# 320| 0: [Call] Call +# 320| 0: [Identifier] foo +# 320| 1: [ReservedWord] . +# 320| 2: [Identifier] boo +# 320| 1: [ReservedWord] + +# 320| 2: [Integer] 1 +# 320| 7: [ReservedWord] ] +# 320| 1: [ReservedWord] *= +# 320| 2: [Integer] 2 +# 323| 99: [Method] Method +# 323| 0: [ReservedWord] def +# 323| 1: [Identifier] foo +# 323| 2: [ReservedWord] = +# 323| 3: [Identifier] bar +# 324| 100: [Method] Method +# 324| 0: [ReservedWord] def +# 324| 1: [Identifier] foo +# 324| 2: [MethodParameters] MethodParameters +# 324| 0: [ReservedWord] ( +# 324| 1: [ReservedWord] ) +# 324| 3: [ReservedWord] = +# 324| 4: [Identifier] bar +# 325| 101: [Method] Method +# 325| 0: [ReservedWord] def +# 325| 1: [Identifier] foo +# 325| 2: [MethodParameters] MethodParameters +# 325| 0: [ReservedWord] ( +# 325| 1: [Identifier] x +# 325| 2: [ReservedWord] ) +# 325| 3: [ReservedWord] = +# 325| 4: [Identifier] bar +# 326| 102: [SingletonMethod] SingletonMethod +# 326| 0: [ReservedWord] def +# 326| 1: [Constant] Object +# 326| 2: [ReservedWord] . +# 326| 3: [Identifier] foo +# 326| 4: [ReservedWord] = +# 326| 5: [Identifier] bar +# 327| 103: [SingletonMethod] SingletonMethod +# 327| 0: [ReservedWord] def +# 327| 1: [Constant] Object +# 327| 2: [ReservedWord] . +# 327| 3: [Identifier] foo +# 327| 4: [MethodParameters] MethodParameters +# 327| 0: [ReservedWord] ( +# 327| 1: [Identifier] x +# 327| 2: [ReservedWord] ) +# 327| 5: [ReservedWord] = +# 327| 6: [Identifier] bar +# 328| 104: [Method] Method +# 328| 0: [ReservedWord] def +# 328| 1: [Identifier] foo +# 328| 2: [MethodParameters] MethodParameters +# 328| 0: [ReservedWord] ( +# 328| 1: [ReservedWord] ) +# 328| 3: [ReservedWord] = +# 328| 4: [RescueModifier] RescueModifier +# 328| 0: [Identifier] bar +# 328| 1: [ReservedWord] rescue +# 328| 2: [ParenthesizedStatements] ParenthesizedStatements +# 328| 0: [ReservedWord] ( +# 328| 1: [Call] Call +# 328| 0: [Identifier] print +# 328| 1: [ArgumentList] ArgumentList +# 328| 0: [String] String +# 328| 0: [ReservedWord] " +# 328| 1: [StringContent] error +# 328| 2: [ReservedWord] " +# 328| 2: [ReservedWord] ) +# 331| 105: [Method] Method +# 331| 0: [ReservedWord] def +# 331| 1: [Identifier] foo +# 331| 2: [MethodParameters] MethodParameters +# 331| 0: [ReservedWord] ( +# 331| 1: [ForwardParameter] ... +# 331| 0: [ReservedWord] ... +# 331| 2: [ReservedWord] ) +# 332| 3: [Call] Call +# 332| 0: [Super] super +# 332| 1: [ArgumentList] ArgumentList +# 332| 0: [ReservedWord] ( +# 332| 1: [ForwardArgument] ... +# 332| 0: [ReservedWord] ... +# 332| 2: [ReservedWord] ) +# 333| 4: [ReservedWord] end +# 335| 106: [Method] Method +# 335| 0: [ReservedWord] def +# 335| 1: [Identifier] foo +# 335| 2: [MethodParameters] MethodParameters +# 335| 0: [ReservedWord] ( +# 335| 1: [Identifier] a +# 335| 2: [ReservedWord] , +# 335| 3: [Identifier] b +# 335| 4: [ReservedWord] , +# 335| 5: [ForwardParameter] ... +# 335| 0: [ReservedWord] ... +# 335| 6: [ReservedWord] ) +# 336| 3: [Call] Call +# 336| 0: [Identifier] bar +# 336| 1: [ArgumentList] ArgumentList +# 336| 0: [ReservedWord] ( +# 336| 1: [Identifier] b +# 336| 2: [ReservedWord] , +# 336| 3: [ForwardArgument] ... +# 336| 0: [ReservedWord] ... +# 336| 4: [ReservedWord] ) +# 337| 4: [ReservedWord] end +# 340| 107: [For] For +# 340| 0: [ReservedWord] for +# 340| 1: [LeftAssignmentList] LeftAssignmentList +# 340| 0: [Identifier] x +# 340| 1: [ReservedWord] , +# 340| 2: [Identifier] y +# 340| 3: [ReservedWord] , +# 340| 4: [Identifier] z +# 340| 2: [In] In +# 340| 0: [ReservedWord] in +# 340| 1: [Array] Array +# 340| 0: [ReservedWord] [ +# 340| 1: [Array] Array +# 340| 0: [ReservedWord] [ +# 340| 1: [Integer] 1 +# 340| 2: [ReservedWord] , +# 340| 3: [Integer] 2 +# 340| 4: [ReservedWord] , +# 340| 5: [Integer] 3 +# 340| 6: [ReservedWord] ] +# 340| 2: [ReservedWord] , +# 340| 3: [Array] Array +# 340| 0: [ReservedWord] [ +# 340| 1: [Integer] 4 +# 340| 2: [ReservedWord] , +# 340| 3: [Integer] 5 +# 340| 4: [ReservedWord] , +# 340| 5: [Integer] 6 +# 340| 6: [ReservedWord] ] +# 340| 4: [ReservedWord] ] +# 340| 3: [Do] Do +# 341| 0: [Call] Call +# 341| 0: [Identifier] foo +# 341| 1: [ArgumentList] ArgumentList +# 341| 0: [Identifier] x +# 341| 1: [ReservedWord] , +# 341| 2: [Identifier] y +# 341| 3: [ReservedWord] , +# 341| 4: [Identifier] z +# 342| 1: [ReservedWord] end +# 344| 108: [Call] Call +# 344| 0: [Identifier] foo +# 344| 1: [ArgumentList] ArgumentList +# 344| 0: [ReservedWord] ( +# 344| 1: [Pair] Pair +# 344| 0: [HashKeySymbol] x +# 344| 1: [ReservedWord] : +# 344| 2: [Integer] 42 +# 344| 2: [ReservedWord] ) +# 345| 109: [Call] Call +# 345| 0: [Identifier] foo +# 345| 1: [ArgumentList] ArgumentList +# 345| 0: [ReservedWord] ( +# 345| 1: [Pair] Pair +# 345| 0: [HashKeySymbol] x +# 345| 1: [ReservedWord] : +# 345| 2: [ReservedWord] , +# 345| 3: [Pair] Pair +# 345| 0: [HashKeySymbol] novar +# 345| 1: [ReservedWord] : +# 345| 4: [ReservedWord] ) +# 346| 110: [Call] Call +# 346| 0: [Identifier] foo +# 346| 1: [ArgumentList] ArgumentList +# 346| 0: [ReservedWord] ( +# 346| 1: [Pair] Pair +# 346| 0: [HashKeySymbol] X +# 346| 1: [ReservedWord] : +# 346| 2: [Integer] 42 +# 346| 2: [ReservedWord] ) +# 347| 111: [Call] Call +# 347| 0: [Identifier] foo +# 347| 1: [ArgumentList] ArgumentList +# 347| 0: [ReservedWord] ( +# 347| 1: [Pair] Pair +# 347| 0: [HashKeySymbol] X +# 347| 1: [ReservedWord] : +# 347| 2: [ReservedWord] ) +# 350| 112: [Assignment] Assignment +# 350| 0: [Identifier] y +# 350| 1: [ReservedWord] = +# 350| 2: [Integer] 1 +# 351| 113: [Assignment] Assignment +# 351| 0: [Identifier] one +# 351| 1: [ReservedWord] = +# 351| 2: [Lambda] Lambda +# 351| 0: [ReservedWord] -> +# 351| 1: [LambdaParameters] LambdaParameters +# 351| 0: [ReservedWord] ( +# 351| 1: [Identifier] x +# 351| 2: [ReservedWord] ) +# 351| 2: [Block] Block +# 351| 0: [ReservedWord] { +# 351| 1: [Identifier] y +# 351| 2: [ReservedWord] } +# 352| 114: [Assignment] Assignment +# 352| 0: [Identifier] f +# 352| 1: [ReservedWord] = +# 352| 2: [Lambda] Lambda +# 352| 0: [ReservedWord] -> +# 352| 1: [LambdaParameters] LambdaParameters +# 352| 0: [ReservedWord] ( +# 352| 1: [Identifier] x +# 352| 2: [ReservedWord] ) +# 352| 2: [Block] Block +# 352| 0: [ReservedWord] { +# 352| 1: [Call] Call +# 352| 0: [Identifier] foo +# 352| 1: [ArgumentList] ArgumentList +# 352| 0: [Identifier] x +# 352| 2: [ReservedWord] } +# 353| 115: [Assignment] Assignment +# 353| 0: [Identifier] g +# 353| 1: [ReservedWord] = +# 353| 2: [Lambda] Lambda +# 353| 0: [ReservedWord] -> +# 353| 1: [LambdaParameters] LambdaParameters +# 353| 0: [ReservedWord] ( +# 353| 1: [Identifier] x +# 353| 2: [ReservedWord] ) +# 353| 2: [Block] Block +# 353| 0: [ReservedWord] { +# 353| 1: [Identifier] unknown_call +# 353| 2: [ReservedWord] } +# 354| 116: [Assignment] Assignment +# 354| 0: [Identifier] h +# 354| 1: [ReservedWord] = +# 354| 2: [Lambda] Lambda +# 354| 0: [ReservedWord] -> +# 354| 1: [LambdaParameters] LambdaParameters +# 354| 0: [ReservedWord] ( +# 354| 1: [Identifier] x +# 354| 2: [ReservedWord] ) +# 354| 2: [DoBlock] DoBlock +# 354| 0: [ReservedWord] do +# 355| 1: [Identifier] x +# 356| 2: [Identifier] y +# 357| 3: [Identifier] unknown_call +# 358| 4: [ReservedWord] end +# 1| [Comment] # call with no receiver, arguments, or block +# 4| [Comment] # call whose name is a scope resolution +# 7| [Comment] # call whose name is a global scope resolution +# 10| [Comment] # call with a receiver, no arguments or block +# 13| [Comment] # call with arguments +# 16| [Comment] # call with curly brace block +# 19| [Comment] # call with do block +# 24| [Comment] # call with receiver, arguments, and a block +# 29| [Comment] # a yield call +# 34| [Comment] # a yield call with arguments +# 39| [Comment] # ------------------------------------------------------------------------------ +# 40| [Comment] # Calls without parentheses or arguments are parsed by tree-sitter simply as +# 41| [Comment] # `identifier` nodes (or `scope_resolution` nodes whose `name` field is an +# 42| [Comment] # `identifier), so here we test that our AST library correctly represents them +# 43| [Comment] # as calls in all the following contexts. +# 45| [Comment] # root level (child of program) +# 49| [Comment] # in a parenthesized statement +# 53| [Comment] # in an argument list +# 57| [Comment] # in an array +# 61| [Comment] # RHS of an assignment +# 65| [Comment] # RHS an operator assignment +# 69| [Comment] # RHS assignment list +# 72| [Comment] # in a begin-end block +# 78| [Comment] # in a BEGIN block +# 81| [Comment] # in an END block +# 84| [Comment] # both operands of a binary operation +# 87| [Comment] # unary operand +# 91| [Comment] # in a curly brace block +# 94| [Comment] # in a do-end block +# 100| [Comment] # the receiver in a call can itself be a call +# 104| [Comment] # the value for a case expr +# 105| [Comment] # and the when pattern and body +# 115| [Comment] # in a class definition +# 121| [Comment] # in a superclass +# 127| [Comment] # in a singleton class value or body +# 135| [Comment] # in a method body +# 141| [Comment] # in a singleton method object or body +# 147| [Comment] # in the default value for a keyword parameter +# 153| [Comment] # in the default value for an optional parameter +# 159| [Comment] # in a module +# 165| [Comment] # ternary if: condition, consequence, and alternative can all be calls +# 169| [Comment] # if/elsif/else conditions and bodies +# 185| [Comment] # if-modifier condition/body +# 189| [Comment] # unless condition/body +# 197| [Comment] # unless-modifier condition/body +# 201| [Comment] # while loop condition/body +# 209| [Comment] # while-modifier loop condition/body +# 213| [Comment] # until loop condition/body +# 221| [Comment] # until-modifier loop condition/body +# 225| [Comment] # the collection being iterated over in a for loop, and the body +# 233| [Comment] # in an array indexing operation, both the object and the index can be calls +# 237| [Comment] # interpolation +# 240| [Comment] # the scope in a scope resolution +# 244| [Comment] # in a range +# 248| [Comment] # the key/value in a hash pair +# 251| [Comment] # rescue exceptions and ensure +# 261| [Comment] # rescue-modifier body and handler +# 265| [Comment] # block argument +# 269| [Comment] # splat argument +# 273| [Comment] # hash-splat argument +# 277| [Comment] # the value in a keyword argument +# 281| [Comment] # ------------------------------------------------------------------------------ +# 282| [Comment] # calls to `super` +# 297| [Comment] # ------------------------------------------------------------------------------ +# 298| [Comment] # calls to methods simply named `super`, i.e. *not* calls to the same method in +# 299| [Comment] # a parent classs, so these should be Call but not SuperCall +# 305| [Comment] # we expect the receiver to be a SuperCall, while the outer call should not (it's just a regular Call) +# 309| [Comment] # calls without method name +# 313| [Comment] # setter calls +# 322| [Comment] # endless method definitions +# 330| [Comment] # forward parameter and forwarded arguments +# 339| [Comment] # for loop over nested array +# 349| [Comment] # calls inside lambdas +constants/constants.rb: +# 1| [Program] Program +# 1| 0: [Module] Module +# 1| 0: [ReservedWord] module +# 1| 1: [Constant] ModuleA +# 2| 2: [Class] Class +# 2| 0: [ReservedWord] class +# 2| 1: [Constant] ClassA +# 3| 2: [Assignment] Assignment +# 3| 0: [Constant] CONST_A +# 3| 1: [ReservedWord] = +# 3| 2: [String] String +# 3| 0: [ReservedWord] " +# 3| 1: [StringContent] const_a +# 3| 2: [ReservedWord] " +# 4| 3: [ReservedWord] end +# 6| 3: [Assignment] Assignment +# 6| 0: [Constant] CONST_B +# 6| 1: [ReservedWord] = +# 6| 2: [String] String +# 6| 0: [ReservedWord] " +# 6| 1: [StringContent] const_b +# 6| 2: [ReservedWord] " +# 8| 4: [Module] Module +# 8| 0: [ReservedWord] module +# 8| 1: [Constant] ModuleB +# 9| 2: [Class] Class +# 9| 0: [ReservedWord] class +# 9| 1: [Constant] ClassB +# 9| 2: [Superclass] Superclass +# 9| 0: [ReservedWord] < +# 9| 1: [Constant] Base +# 10| 3: [ReservedWord] end +# 12| 3: [Class] Class +# 12| 0: [ReservedWord] class +# 12| 1: [Constant] ClassC +# 12| 2: [Superclass] Superclass +# 12| 0: [ReservedWord] < +# 12| 1: [ScopeResolution] ScopeResolution +# 12| 0: [ScopeResolution] ScopeResolution +# 12| 0: [Constant] X +# 12| 1: [ReservedWord] :: +# 12| 2: [Constant] Y +# 12| 1: [ReservedWord] :: +# 12| 2: [Constant] Z +# 13| 3: [ReservedWord] end +# 14| 4: [ReservedWord] end +# 15| 5: [ReservedWord] end +# 17| 1: [Assignment] Assignment +# 17| 0: [Constant] GREETING +# 17| 1: [ReservedWord] = +# 17| 2: [Binary] Binary +# 17| 0: [Binary] Binary +# 17| 0: [String] String +# 17| 0: [ReservedWord] ' +# 17| 1: [StringContent] Hello +# 17| 2: [ReservedWord] ' +# 17| 1: [ReservedWord] + +# 17| 2: [ScopeResolution] ScopeResolution +# 17| 0: [ScopeResolution] ScopeResolution +# 17| 0: [Constant] ModuleA +# 17| 1: [ReservedWord] :: +# 17| 2: [Constant] ClassA +# 17| 1: [ReservedWord] :: +# 17| 2: [Constant] CONST_A +# 17| 1: [ReservedWord] + +# 17| 2: [ScopeResolution] ScopeResolution +# 17| 0: [Constant] ModuleA +# 17| 1: [ReservedWord] :: +# 17| 2: [Constant] CONST_B +# 19| 2: [Method] Method +# 19| 0: [ReservedWord] def +# 19| 1: [Identifier] foo +# 20| 2: [Assignment] Assignment +# 20| 0: [Constant] Names +# 20| 1: [ReservedWord] = +# 20| 2: [Array] Array +# 20| 0: [ReservedWord] [ +# 20| 1: [String] String +# 20| 0: [ReservedWord] ' +# 20| 1: [StringContent] Vera +# 20| 2: [ReservedWord] ' +# 20| 2: [ReservedWord] , +# 20| 3: [String] String +# 20| 0: [ReservedWord] ' +# 20| 1: [StringContent] Chuck +# 20| 2: [ReservedWord] ' +# 20| 4: [ReservedWord] , +# 20| 5: [String] String +# 20| 0: [ReservedWord] ' +# 20| 1: [StringContent] Dave +# 20| 2: [ReservedWord] ' +# 20| 6: [ReservedWord] ] +# 22| 3: [Call] Call +# 22| 0: [Constant] Names +# 22| 1: [ReservedWord] . +# 22| 2: [Identifier] each +# 22| 3: [DoBlock] DoBlock +# 22| 0: [ReservedWord] do +# 22| 1: [BlockParameters] BlockParameters +# 22| 0: [ReservedWord] | +# 22| 1: [Identifier] name +# 22| 2: [ReservedWord] | +# 23| 2: [Call] Call +# 23| 0: [Identifier] puts +# 23| 1: [ArgumentList] ArgumentList +# 23| 0: [String] String +# 23| 0: [ReservedWord] " +# 23| 1: [Interpolation] Interpolation +# 23| 0: [ReservedWord] #{ +# 23| 1: [Constant] GREETING +# 23| 2: [ReservedWord] } +# 23| 2: [StringContent] +# 23| 3: [Interpolation] Interpolation +# 23| 0: [ReservedWord] #{ +# 23| 1: [Identifier] name +# 23| 2: [ReservedWord] } +# 23| 4: [ReservedWord] " +# 24| 3: [ReservedWord] end +# 28| 4: [Call] Call +# 28| 0: [Constant] Array +# 28| 1: [ArgumentList] ArgumentList +# 28| 0: [ReservedWord] ( +# 28| 1: [String] String +# 28| 0: [ReservedWord] ' +# 28| 1: [StringContent] foo +# 28| 2: [ReservedWord] ' +# 28| 2: [ReservedWord] ) +# 29| 5: [ReservedWord] end +# 31| 3: [Class] Class +# 31| 0: [ReservedWord] class +# 31| 1: [ScopeResolution] ScopeResolution +# 31| 0: [Constant] ModuleA +# 31| 1: [ReservedWord] :: +# 31| 2: [Constant] ClassD +# 31| 2: [Superclass] Superclass +# 31| 0: [ReservedWord] < +# 31| 1: [ScopeResolution] ScopeResolution +# 31| 0: [Constant] ModuleA +# 31| 1: [ReservedWord] :: +# 31| 2: [Constant] ClassA +# 32| 3: [Assignment] Assignment +# 32| 0: [Constant] FOURTY_TWO +# 32| 1: [ReservedWord] = +# 32| 2: [Integer] 42 +# 33| 4: [ReservedWord] end +# 35| 4: [Module] Module +# 35| 0: [ReservedWord] module +# 35| 1: [ScopeResolution] ScopeResolution +# 35| 0: [Constant] ModuleA +# 35| 1: [ReservedWord] :: +# 35| 2: [Constant] ModuleC +# 36| 2: [Assignment] Assignment +# 36| 0: [Constant] FOURTY_THREE +# 36| 1: [ReservedWord] = +# 36| 2: [Integer] 43 +# 37| 3: [ReservedWord] end +# 39| 5: [Assignment] Assignment +# 39| 0: [ScopeResolution] ScopeResolution +# 39| 0: [ScopeResolution] ScopeResolution +# 39| 0: [Constant] ModuleA +# 39| 1: [ReservedWord] :: +# 39| 2: [Constant] ModuleB +# 39| 1: [ReservedWord] :: +# 39| 2: [Constant] MAX_SIZE +# 39| 1: [ReservedWord] = +# 39| 2: [Integer] 1024 +# 41| 6: [Call] Call +# 41| 0: [Identifier] puts +# 41| 1: [ArgumentList] ArgumentList +# 41| 0: [ScopeResolution] ScopeResolution +# 41| 0: [ScopeResolution] ScopeResolution +# 41| 0: [Constant] ModuleA +# 41| 1: [ReservedWord] :: +# 41| 2: [Constant] ModuleB +# 41| 1: [ReservedWord] :: +# 41| 2: [Constant] MAX_SIZE +# 43| 7: [Call] Call +# 43| 0: [Identifier] puts +# 43| 1: [ArgumentList] ArgumentList +# 43| 0: [Constant] GREETING +# 44| 8: [Call] Call +# 44| 0: [Identifier] puts +# 44| 1: [ArgumentList] ArgumentList +# 44| 0: [ScopeResolution] ScopeResolution +# 44| 0: [ReservedWord] :: +# 44| 1: [Constant] GREETING +# 46| 9: [Module] Module +# 46| 0: [ReservedWord] module +# 46| 1: [ScopeResolution] ScopeResolution +# 46| 0: [Constant] ModuleA +# 46| 1: [ReservedWord] :: +# 46| 2: [Constant] ModuleB +# 47| 2: [Class] Class +# 47| 0: [ReservedWord] class +# 47| 1: [Constant] ClassB +# 47| 2: [Superclass] Superclass +# 47| 0: [ReservedWord] < +# 47| 1: [Constant] Base +# 48| 3: [Assignment] Assignment +# 48| 0: [Constant] FOURTY_ONE +# 48| 1: [ReservedWord] = +# 48| 2: [Integer] 41 +# 49| 4: [ReservedWord] end +# 50| 3: [ReservedWord] end +# 52| 10: [Module] Module +# 52| 0: [ReservedWord] module +# 52| 1: [Constant] ModuleA +# 53| 2: [Assignment] Assignment +# 53| 0: [Constant] FOURTY_FOUR +# 53| 1: [ReservedWord] = +# 53| 2: [String] String +# 53| 0: [ReservedWord] " +# 53| 1: [StringContent] fourty-four +# 53| 2: [ReservedWord] " +# 54| 3: [Class] Class +# 54| 0: [ReservedWord] class +# 54| 1: [ScopeResolution] ScopeResolution +# 54| 0: [Constant] ModuleB +# 54| 1: [ReservedWord] :: +# 54| 2: [Constant] ClassB +# 54| 2: [Superclass] Superclass +# 54| 0: [ReservedWord] < +# 54| 1: [Constant] Base +# 55| 3: [Assignment] Assignment +# 55| 0: [ClassVariable] @@fourty_four +# 55| 1: [ReservedWord] = +# 55| 2: [Constant] FOURTY_FOUR +# 56| 4: [Assignment] Assignment +# 56| 0: [Constant] FOURTY_FOUR +# 56| 1: [ReservedWord] = +# 56| 2: [Integer] 44 +# 57| 5: [Assignment] Assignment +# 57| 0: [ClassVariable] @@fourty_four +# 57| 1: [ReservedWord] = +# 57| 2: [Constant] FOURTY_FOUR +# 58| 6: [ReservedWord] end +# 59| 4: [ReservedWord] end +# 61| 11: [Module] Module +# 61| 0: [ReservedWord] module +# 61| 1: [Constant] Mod1 +# 62| 2: [Module] Module +# 62| 0: [ReservedWord] module +# 62| 1: [Constant] Mod3 +# 63| 2: [Assignment] Assignment +# 63| 0: [Constant] FOURTY_FIVE +# 63| 1: [ReservedWord] = +# 63| 2: [Integer] 45 +# 64| 3: [ReservedWord] end +# 65| 3: [Assignment] Assignment +# 65| 0: [ClassVariable] @@fourty_five +# 65| 1: [ReservedWord] = +# 65| 2: [ScopeResolution] ScopeResolution +# 65| 0: [Constant] Mod3 +# 65| 1: [ReservedWord] :: +# 65| 2: [Constant] FOURTY_FIVE +# 66| 4: [ReservedWord] end +# 68| 12: [Module] Module +# 68| 0: [ReservedWord] module +# 68| 1: [Constant] Mod4 +# 69| 2: [Call] Call +# 69| 0: [Identifier] include +# 69| 1: [ArgumentList] ArgumentList +# 69| 0: [Constant] Mod1 +# 70| 3: [Module] Module +# 70| 0: [ReservedWord] module +# 70| 1: [ScopeResolution] ScopeResolution +# 70| 0: [Constant] Mod3 +# 70| 1: [ReservedWord] :: +# 70| 2: [Constant] Mod5 +# 71| 2: [Assignment] Assignment +# 71| 0: [Constant] FOURTY_SIX +# 71| 1: [ReservedWord] = +# 71| 2: [Integer] 46 +# 72| 3: [ReservedWord] end +# 73| 4: [Assignment] Assignment +# 73| 0: [ClassVariable] @@fourty_six +# 73| 1: [ReservedWord] = +# 73| 2: [ScopeResolution] ScopeResolution +# 73| 0: [Constant] Mod3 +# 73| 1: [ReservedWord] :: +# 73| 2: [Constant] FOURTY_SIX +# 74| 5: [ReservedWord] end +# 26| [Comment] # A call to Kernel::Array; despite beginning with an upper-case character, +# 27| [Comment] # we don't consider this to be a constant access. +# 55| [Comment] # refers to ::ModuleA::FOURTY_FOUR +# 57| [Comment] # refers to ::ModuleA::ModuleB::ClassB::FOURTY_FOUR +control/cases.rb: +# 1| [Program] Program +# 2| 0: [Assignment] Assignment +# 2| 0: [Identifier] a +# 2| 1: [ReservedWord] = +# 2| 2: [Integer] 0 +# 3| 1: [Assignment] Assignment +# 3| 0: [Identifier] b +# 3| 1: [ReservedWord] = +# 3| 2: [Integer] 0 +# 4| 2: [Assignment] Assignment +# 4| 0: [Identifier] c +# 4| 1: [ReservedWord] = +# 4| 2: [Integer] 0 +# 5| 3: [Assignment] Assignment +# 5| 0: [Identifier] d +# 5| 1: [ReservedWord] = +# 5| 2: [Integer] 0 +# 8| 4: [Case] Case +# 8| 0: [ReservedWord] case +# 8| 1: [Identifier] a +# 9| 2: [When] When +# 9| 0: [ReservedWord] when +# 9| 1: [Pattern] Pattern +# 9| 0: [Identifier] b +# 9| 2: [Then] Then +# 10| 0: [Integer] 100 +# 11| 3: [When] When +# 11| 0: [ReservedWord] when +# 11| 1: [Pattern] Pattern +# 11| 0: [Identifier] c +# 11| 2: [ReservedWord] , +# 11| 3: [Pattern] Pattern +# 11| 0: [Identifier] d +# 11| 4: [Then] Then +# 12| 0: [Integer] 200 +# 13| 4: [Else] Else +# 13| 0: [ReservedWord] else +# 14| 1: [Integer] 300 +# 15| 5: [ReservedWord] end +# 18| 5: [Case] Case +# 18| 0: [ReservedWord] case +# 19| 1: [When] When +# 19| 0: [ReservedWord] when +# 19| 1: [Pattern] Pattern +# 19| 0: [Binary] Binary +# 19| 0: [Identifier] a +# 19| 1: [ReservedWord] > +# 19| 2: [Identifier] b +# 19| 2: [Then] Then +# 19| 0: [ReservedWord] then +# 19| 1: [Integer] 10 +# 20| 2: [When] When +# 20| 0: [ReservedWord] when +# 20| 1: [Pattern] Pattern +# 20| 0: [Binary] Binary +# 20| 0: [Identifier] a +# 20| 1: [ReservedWord] == +# 20| 2: [Identifier] b +# 20| 2: [Then] Then +# 20| 0: [ReservedWord] then +# 20| 1: [Integer] 20 +# 21| 3: [When] When +# 21| 0: [ReservedWord] when +# 21| 1: [Pattern] Pattern +# 21| 0: [Binary] Binary +# 21| 0: [Identifier] a +# 21| 1: [ReservedWord] < +# 21| 2: [Identifier] b +# 21| 2: [Then] Then +# 21| 0: [ReservedWord] then +# 21| 1: [Integer] 30 +# 22| 4: [ReservedWord] end +# 26| 6: [CaseMatch] CaseMatch +# 26| 0: [ReservedWord] case +# 26| 1: [Identifier] expr +# 27| 2: [InClause] InClause +# 27| 0: [ReservedWord] in +# 27| 1: [Integer] 5 +# 27| 2: [Then] Then +# 27| 0: [ReservedWord] then +# 27| 1: [True] true +# 28| 3: [Else] Else +# 28| 0: [ReservedWord] else +# 28| 1: [False] false +# 29| 4: [ReservedWord] end +# 31| 7: [CaseMatch] CaseMatch +# 31| 0: [ReservedWord] case +# 31| 1: [Identifier] expr +# 32| 2: [InClause] InClause +# 32| 0: [ReservedWord] in +# 32| 1: [Identifier] x +# 32| 2: [UnlessGuard] UnlessGuard +# 32| 0: [ReservedWord] unless +# 32| 1: [Binary] Binary +# 32| 0: [Identifier] x +# 32| 1: [ReservedWord] < +# 32| 2: [Integer] 0 +# 32| 3: [Then] Then +# 33| 0: [ReservedWord] then +# 33| 1: [True] true +# 34| 3: [InClause] InClause +# 34| 0: [ReservedWord] in +# 34| 1: [Identifier] x +# 34| 2: [IfGuard] IfGuard +# 34| 0: [ReservedWord] if +# 34| 1: [Binary] Binary +# 34| 0: [Identifier] x +# 34| 1: [ReservedWord] < +# 34| 2: [Integer] 0 +# 34| 3: [Then] Then +# 35| 0: [ReservedWord] then +# 35| 1: [True] true +# 36| 4: [Else] Else +# 36| 0: [ReservedWord] else +# 36| 1: [False] false +# 37| 5: [ReservedWord] end +# 39| 8: [CaseMatch] CaseMatch +# 39| 0: [ReservedWord] case +# 39| 1: [Identifier] expr +# 40| 2: [InClause] InClause +# 40| 0: [ReservedWord] in +# 40| 1: [Integer] 5 +# 41| 3: [InClause] InClause +# 41| 0: [ReservedWord] in +# 41| 1: [ArrayPattern] ArrayPattern +# 41| 0: [Integer] 5 +# 41| 1: [SplatParameter] SplatParameter +# 42| 4: [InClause] InClause +# 42| 0: [ReservedWord] in +# 42| 1: [ArrayPattern] ArrayPattern +# 42| 0: [Integer] 1 +# 42| 1: [ReservedWord] , +# 42| 2: [Integer] 2 +# 43| 5: [InClause] InClause +# 43| 0: [ReservedWord] in +# 43| 1: [ArrayPattern] ArrayPattern +# 43| 0: [Integer] 1 +# 43| 1: [ReservedWord] , +# 43| 2: [Integer] 2 +# 43| 3: [SplatParameter] SplatParameter +# 44| 6: [InClause] InClause +# 44| 0: [ReservedWord] in +# 44| 1: [ArrayPattern] ArrayPattern +# 44| 0: [Integer] 1 +# 44| 1: [ReservedWord] , +# 44| 2: [Integer] 2 +# 44| 3: [ReservedWord] , +# 44| 4: [Integer] 3 +# 45| 7: [InClause] InClause +# 45| 0: [ReservedWord] in +# 45| 1: [ArrayPattern] ArrayPattern +# 45| 0: [Integer] 1 +# 45| 1: [ReservedWord] , +# 45| 2: [Integer] 2 +# 45| 3: [ReservedWord] , +# 45| 4: [Integer] 3 +# 45| 5: [SplatParameter] SplatParameter +# 46| 8: [InClause] InClause +# 46| 0: [ReservedWord] in +# 46| 1: [ArrayPattern] ArrayPattern +# 46| 0: [Integer] 1 +# 46| 1: [ReservedWord] , +# 46| 2: [Integer] 2 +# 46| 3: [ReservedWord] , +# 46| 4: [Integer] 3 +# 46| 5: [ReservedWord] , +# 46| 6: [SplatParameter] SplatParameter +# 46| 0: [ReservedWord] * +# 47| 9: [InClause] InClause +# 47| 0: [ReservedWord] in +# 47| 1: [ArrayPattern] ArrayPattern +# 47| 0: [Integer] 1 +# 47| 1: [ReservedWord] , +# 47| 2: [SplatParameter] SplatParameter +# 47| 0: [ReservedWord] * +# 47| 1: [Identifier] x +# 47| 3: [ReservedWord] , +# 47| 4: [Integer] 3 +# 48| 10: [InClause] InClause +# 48| 0: [ReservedWord] in +# 48| 1: [ArrayPattern] ArrayPattern +# 48| 0: [SplatParameter] SplatParameter +# 48| 0: [ReservedWord] * +# 49| 11: [InClause] InClause +# 49| 0: [ReservedWord] in +# 49| 1: [ArrayPattern] ArrayPattern +# 49| 0: [SplatParameter] SplatParameter +# 49| 0: [ReservedWord] * +# 49| 1: [ReservedWord] , +# 49| 2: [Integer] 3 +# 49| 3: [ReservedWord] , +# 49| 4: [Integer] 4 +# 50| 12: [InClause] InClause +# 50| 0: [ReservedWord] in +# 50| 1: [FindPattern] FindPattern +# 50| 0: [SplatParameter] SplatParameter +# 50| 0: [ReservedWord] * +# 50| 1: [ReservedWord] , +# 50| 2: [Integer] 3 +# 50| 3: [ReservedWord] , +# 50| 4: [SplatParameter] SplatParameter +# 50| 0: [ReservedWord] * +# 51| 13: [InClause] InClause +# 51| 0: [ReservedWord] in +# 51| 1: [FindPattern] FindPattern +# 51| 0: [SplatParameter] SplatParameter +# 51| 0: [ReservedWord] * +# 51| 1: [Identifier] a +# 51| 1: [ReservedWord] , +# 51| 2: [Integer] 3 +# 51| 3: [ReservedWord] , +# 51| 4: [SplatParameter] SplatParameter +# 51| 0: [ReservedWord] * +# 51| 1: [Identifier] b +# 52| 14: [InClause] InClause +# 52| 0: [ReservedWord] in +# 52| 1: [HashPattern] HashPattern +# 52| 0: [KeywordPattern] KeywordPattern +# 52| 0: [HashKeySymbol] a +# 52| 1: [ReservedWord] : +# 53| 15: [InClause] InClause +# 53| 0: [ReservedWord] in +# 53| 1: [HashPattern] HashPattern +# 53| 0: [KeywordPattern] KeywordPattern +# 53| 0: [HashKeySymbol] a +# 53| 1: [ReservedWord] : +# 53| 2: [Integer] 5 +# 54| 16: [InClause] InClause +# 54| 0: [ReservedWord] in +# 54| 1: [HashPattern] HashPattern +# 54| 0: [KeywordPattern] KeywordPattern +# 54| 0: [HashKeySymbol] a +# 54| 1: [ReservedWord] : +# 54| 2: [Integer] 5 +# 54| 1: [ReservedWord] , +# 55| 17: [InClause] InClause +# 55| 0: [ReservedWord] in +# 55| 1: [HashPattern] HashPattern +# 55| 0: [KeywordPattern] KeywordPattern +# 55| 0: [HashKeySymbol] a +# 55| 1: [ReservedWord] : +# 55| 2: [Integer] 5 +# 55| 1: [ReservedWord] , +# 55| 2: [KeywordPattern] KeywordPattern +# 55| 0: [HashKeySymbol] b +# 55| 1: [ReservedWord] : +# 55| 3: [ReservedWord] , +# 55| 4: [HashSplatParameter] HashSplatParameter +# 55| 0: [ReservedWord] ** +# 56| 18: [InClause] InClause +# 56| 0: [ReservedWord] in +# 56| 1: [HashPattern] HashPattern +# 56| 0: [KeywordPattern] KeywordPattern +# 56| 0: [HashKeySymbol] a +# 56| 1: [ReservedWord] : +# 56| 2: [Integer] 5 +# 56| 1: [ReservedWord] , +# 56| 2: [KeywordPattern] KeywordPattern +# 56| 0: [HashKeySymbol] b +# 56| 1: [ReservedWord] : +# 56| 3: [ReservedWord] , +# 56| 4: [HashSplatParameter] HashSplatParameter +# 56| 0: [ReservedWord] ** +# 56| 1: [Identifier] map +# 57| 19: [InClause] InClause +# 57| 0: [ReservedWord] in +# 57| 1: [HashPattern] HashPattern +# 57| 0: [KeywordPattern] KeywordPattern +# 57| 0: [HashKeySymbol] a +# 57| 1: [ReservedWord] : +# 57| 2: [Integer] 5 +# 57| 1: [ReservedWord] , +# 57| 2: [KeywordPattern] KeywordPattern +# 57| 0: [HashKeySymbol] b +# 57| 1: [ReservedWord] : +# 57| 3: [ReservedWord] , +# 57| 4: [HashSplatNil] **nil +# 57| 0: [ReservedWord] ** +# 57| 1: [ReservedWord] nil +# 58| 20: [InClause] InClause +# 58| 0: [ReservedWord] in +# 58| 1: [HashPattern] HashPattern +# 58| 0: [HashSplatNil] **nil +# 58| 0: [ReservedWord] ** +# 58| 1: [ReservedWord] nil +# 59| 21: [InClause] InClause +# 59| 0: [ReservedWord] in +# 59| 1: [ArrayPattern] ArrayPattern +# 59| 0: [ReservedWord] [ +# 59| 1: [Integer] 5 +# 59| 2: [ReservedWord] ] +# 60| 22: [InClause] InClause +# 60| 0: [ReservedWord] in +# 60| 1: [ArrayPattern] ArrayPattern +# 60| 0: [ReservedWord] [ +# 60| 1: [Integer] 5 +# 60| 2: [SplatParameter] SplatParameter +# 60| 3: [ReservedWord] ] +# 61| 23: [InClause] InClause +# 61| 0: [ReservedWord] in +# 61| 1: [ArrayPattern] ArrayPattern +# 61| 0: [ReservedWord] [ +# 61| 1: [Integer] 1 +# 61| 2: [ReservedWord] , +# 61| 3: [Integer] 2 +# 61| 4: [ReservedWord] ] +# 62| 24: [InClause] InClause +# 62| 0: [ReservedWord] in +# 62| 1: [ArrayPattern] ArrayPattern +# 62| 0: [ReservedWord] [ +# 62| 1: [Integer] 1 +# 62| 2: [ReservedWord] , +# 62| 3: [Integer] 2 +# 62| 4: [SplatParameter] SplatParameter +# 62| 5: [ReservedWord] ] +# 63| 25: [InClause] InClause +# 63| 0: [ReservedWord] in +# 63| 1: [ArrayPattern] ArrayPattern +# 63| 0: [ReservedWord] [ +# 63| 1: [Integer] 1 +# 63| 2: [ReservedWord] , +# 63| 3: [Integer] 2 +# 63| 4: [ReservedWord] , +# 63| 5: [Integer] 3 +# 63| 6: [ReservedWord] ] +# 64| 26: [InClause] InClause +# 64| 0: [ReservedWord] in +# 64| 1: [ArrayPattern] ArrayPattern +# 64| 0: [ReservedWord] [ +# 64| 1: [Integer] 1 +# 64| 2: [ReservedWord] , +# 64| 3: [Integer] 2 +# 64| 4: [ReservedWord] , +# 64| 5: [Integer] 3 +# 64| 6: [SplatParameter] SplatParameter +# 64| 7: [ReservedWord] ] +# 65| 27: [InClause] InClause +# 65| 0: [ReservedWord] in +# 65| 1: [ArrayPattern] ArrayPattern +# 65| 0: [ReservedWord] [ +# 65| 1: [Integer] 1 +# 65| 2: [ReservedWord] , +# 65| 3: [Integer] 2 +# 65| 4: [ReservedWord] , +# 65| 5: [Integer] 3 +# 65| 6: [ReservedWord] , +# 65| 7: [SplatParameter] SplatParameter +# 65| 0: [ReservedWord] * +# 65| 8: [ReservedWord] ] +# 66| 28: [InClause] InClause +# 66| 0: [ReservedWord] in +# 66| 1: [ArrayPattern] ArrayPattern +# 66| 0: [ReservedWord] [ +# 66| 1: [Integer] 1 +# 66| 2: [ReservedWord] , +# 66| 3: [SplatParameter] SplatParameter +# 66| 0: [ReservedWord] * +# 66| 1: [Identifier] x +# 66| 4: [ReservedWord] , +# 66| 5: [Integer] 3 +# 66| 6: [ReservedWord] ] +# 67| 29: [InClause] InClause +# 67| 0: [ReservedWord] in +# 67| 1: [ArrayPattern] ArrayPattern +# 67| 0: [ReservedWord] [ +# 67| 1: [SplatParameter] SplatParameter +# 67| 0: [ReservedWord] * +# 67| 2: [ReservedWord] ] +# 68| 30: [InClause] InClause +# 68| 0: [ReservedWord] in +# 68| 1: [ArrayPattern] ArrayPattern +# 68| 0: [ReservedWord] [ +# 68| 1: [SplatParameter] SplatParameter +# 68| 0: [ReservedWord] * +# 68| 1: [Identifier] x +# 68| 2: [ReservedWord] , +# 68| 3: [Integer] 3 +# 68| 4: [ReservedWord] , +# 68| 5: [Integer] 4 +# 68| 6: [ReservedWord] ] +# 69| 31: [InClause] InClause +# 69| 0: [ReservedWord] in +# 69| 1: [FindPattern] FindPattern +# 69| 0: [ReservedWord] [ +# 69| 1: [SplatParameter] SplatParameter +# 69| 0: [ReservedWord] * +# 69| 2: [ReservedWord] , +# 69| 3: [Integer] 3 +# 69| 4: [ReservedWord] , +# 69| 5: [SplatParameter] SplatParameter +# 69| 0: [ReservedWord] * +# 69| 6: [ReservedWord] ] +# 70| 32: [InClause] InClause +# 70| 0: [ReservedWord] in +# 70| 1: [FindPattern] FindPattern +# 70| 0: [ReservedWord] [ +# 70| 1: [SplatParameter] SplatParameter +# 70| 0: [ReservedWord] * +# 70| 1: [Identifier] a +# 70| 2: [ReservedWord] , +# 70| 3: [Integer] 3 +# 70| 4: [ReservedWord] , +# 70| 5: [SplatParameter] SplatParameter +# 70| 0: [ReservedWord] * +# 70| 1: [Identifier] b +# 70| 6: [ReservedWord] ] +# 71| 33: [InClause] InClause +# 71| 0: [ReservedWord] in +# 71| 1: [HashPattern] HashPattern +# 71| 0: [ReservedWord] { +# 71| 1: [KeywordPattern] KeywordPattern +# 71| 0: [HashKeySymbol] a +# 71| 1: [ReservedWord] : +# 71| 2: [ReservedWord] } +# 72| 34: [InClause] InClause +# 72| 0: [ReservedWord] in +# 72| 1: [HashPattern] HashPattern +# 72| 0: [ReservedWord] { +# 72| 1: [KeywordPattern] KeywordPattern +# 72| 0: [HashKeySymbol] a +# 72| 1: [ReservedWord] : +# 72| 2: [Integer] 5 +# 72| 2: [ReservedWord] } +# 73| 35: [InClause] InClause +# 73| 0: [ReservedWord] in +# 73| 1: [HashPattern] HashPattern +# 73| 0: [ReservedWord] { +# 73| 1: [KeywordPattern] KeywordPattern +# 73| 0: [HashKeySymbol] a +# 73| 1: [ReservedWord] : +# 73| 2: [Integer] 5 +# 73| 2: [ReservedWord] , +# 73| 3: [ReservedWord] } +# 74| 36: [InClause] InClause +# 74| 0: [ReservedWord] in +# 74| 1: [HashPattern] HashPattern +# 74| 0: [ReservedWord] { +# 74| 1: [KeywordPattern] KeywordPattern +# 74| 0: [HashKeySymbol] a +# 74| 1: [ReservedWord] : +# 74| 2: [Integer] 5 +# 74| 2: [ReservedWord] , +# 74| 3: [KeywordPattern] KeywordPattern +# 74| 0: [HashKeySymbol] b +# 74| 1: [ReservedWord] : +# 74| 4: [ReservedWord] , +# 74| 5: [HashSplatParameter] HashSplatParameter +# 74| 0: [ReservedWord] ** +# 74| 6: [ReservedWord] } +# 75| 37: [InClause] InClause +# 75| 0: [ReservedWord] in +# 75| 1: [HashPattern] HashPattern +# 75| 0: [ReservedWord] { +# 75| 1: [KeywordPattern] KeywordPattern +# 75| 0: [HashKeySymbol] a +# 75| 1: [ReservedWord] : +# 75| 2: [Integer] 5 +# 75| 2: [ReservedWord] , +# 75| 3: [KeywordPattern] KeywordPattern +# 75| 0: [HashKeySymbol] b +# 75| 1: [ReservedWord] : +# 75| 4: [ReservedWord] , +# 75| 5: [HashSplatParameter] HashSplatParameter +# 75| 0: [ReservedWord] ** +# 75| 1: [Identifier] map +# 75| 6: [ReservedWord] } +# 76| 38: [InClause] InClause +# 76| 0: [ReservedWord] in +# 76| 1: [HashPattern] HashPattern +# 76| 0: [ReservedWord] { +# 76| 1: [KeywordPattern] KeywordPattern +# 76| 0: [HashKeySymbol] a +# 76| 1: [ReservedWord] : +# 76| 2: [Integer] 5 +# 76| 2: [ReservedWord] , +# 76| 3: [KeywordPattern] KeywordPattern +# 76| 0: [HashKeySymbol] b +# 76| 1: [ReservedWord] : +# 76| 4: [ReservedWord] , +# 76| 5: [HashSplatNil] **nil +# 76| 0: [ReservedWord] ** +# 76| 1: [ReservedWord] nil +# 76| 6: [ReservedWord] } +# 77| 39: [InClause] InClause +# 77| 0: [ReservedWord] in +# 77| 1: [HashPattern] HashPattern +# 77| 0: [ReservedWord] { +# 77| 1: [HashSplatNil] **nil +# 77| 0: [ReservedWord] ** +# 77| 1: [ReservedWord] nil +# 77| 2: [ReservedWord] } +# 78| 40: [InClause] InClause +# 78| 0: [ReservedWord] in +# 78| 1: [HashPattern] HashPattern +# 78| 0: [ReservedWord] { +# 78| 1: [ReservedWord] } +# 79| 41: [InClause] InClause +# 79| 0: [ReservedWord] in +# 79| 1: [ArrayPattern] ArrayPattern +# 79| 0: [ReservedWord] [ +# 79| 1: [ReservedWord] ] +# 80| 42: [ReservedWord] end +# 84| 9: [Assignment] Assignment +# 84| 0: [Identifier] foo +# 84| 1: [ReservedWord] = +# 84| 2: [Integer] 42 +# 86| 10: [CaseMatch] CaseMatch +# 86| 0: [ReservedWord] case +# 86| 1: [Identifier] expr +# 87| 2: [InClause] InClause +# 87| 0: [ReservedWord] in +# 87| 1: [Integer] 5 +# 88| 3: [InClause] InClause +# 88| 0: [ReservedWord] in +# 88| 1: [VariableReferencePattern] VariableReferencePattern +# 88| 0: [ReservedWord] ^ +# 88| 1: [Identifier] foo +# 89| 4: [InClause] InClause +# 89| 0: [ReservedWord] in +# 89| 1: [String] String +# 89| 0: [ReservedWord] " +# 89| 1: [StringContent] string +# 89| 2: [ReservedWord] " +# 90| 5: [InClause] InClause +# 90| 0: [ReservedWord] in +# 90| 1: [StringArray] StringArray +# 90| 0: [ReservedWord] %w( +# 90| 1: [BareString] BareString +# 90| 0: [StringContent] foo +# 90| 2: [BareString] BareString +# 90| 0: [StringContent] bar +# 90| 3: [ReservedWord] ) +# 91| 6: [InClause] InClause +# 91| 0: [ReservedWord] in +# 91| 1: [SymbolArray] SymbolArray +# 91| 0: [ReservedWord] %i( +# 91| 1: [BareSymbol] BareSymbol +# 91| 0: [StringContent] foo +# 91| 2: [BareSymbol] BareSymbol +# 91| 0: [StringContent] bar +# 91| 3: [ReservedWord] ) +# 92| 7: [InClause] InClause +# 92| 0: [ReservedWord] in +# 92| 1: [Regex] Regex +# 92| 0: [ReservedWord] / +# 92| 1: [StringContent] .*abc[0-9] +# 92| 2: [ReservedWord] / +# 93| 8: [InClause] InClause +# 93| 0: [ReservedWord] in +# 93| 1: [Range] Range +# 93| 0: [Integer] 5 +# 93| 1: [ReservedWord] .. +# 93| 2: [Integer] 10 +# 94| 9: [InClause] InClause +# 94| 0: [ReservedWord] in +# 94| 1: [Range] Range +# 94| 0: [ReservedWord] .. +# 94| 1: [Integer] 10 +# 95| 10: [InClause] InClause +# 95| 0: [ReservedWord] in +# 95| 1: [Range] Range +# 95| 0: [Integer] 5 +# 95| 1: [ReservedWord] .. +# 96| 11: [InClause] InClause +# 96| 0: [ReservedWord] in +# 96| 1: [AsPattern] AsPattern +# 96| 0: [Integer] 5 +# 96| 1: [ReservedWord] => +# 96| 2: [Identifier] x +# 97| 12: [InClause] InClause +# 97| 0: [ReservedWord] in +# 97| 1: [Constant] Foo +# 98| 13: [InClause] InClause +# 98| 0: [ReservedWord] in +# 98| 1: [ScopeResolution] ScopeResolution +# 98| 0: [Constant] Foo +# 98| 1: [ReservedWord] :: +# 98| 2: [Constant] Bar +# 99| 14: [InClause] InClause +# 99| 0: [ReservedWord] in +# 99| 1: [ScopeResolution] ScopeResolution +# 99| 0: [ScopeResolution] ScopeResolution +# 99| 0: [ReservedWord] :: +# 99| 1: [Constant] Foo +# 99| 1: [ReservedWord] :: +# 99| 2: [Constant] Bar +# 100| 15: [InClause] InClause +# 100| 0: [ReservedWord] in +# 100| 1: [AlternativePattern] AlternativePattern +# 100| 0: [Nil] nil +# 100| 1: [ReservedWord] | +# 100| 2: [Self] self +# 100| 3: [ReservedWord] | +# 100| 4: [True] true +# 100| 5: [ReservedWord] | +# 100| 6: [False] false +# 100| 7: [ReservedWord] | +# 100| 8: [Line] __LINE__ +# 100| 9: [ReservedWord] | +# 100| 10: [File] __FILE__ +# 100| 11: [ReservedWord] | +# 100| 12: [Encoding] __ENCODING__ +# 101| 16: [InClause] InClause +# 101| 0: [ReservedWord] in +# 101| 1: [Lambda] Lambda +# 101| 0: [ReservedWord] -> +# 101| 1: [LambdaParameters] LambdaParameters +# 101| 0: [Identifier] x +# 101| 2: [Block] Block +# 101| 0: [ReservedWord] { +# 101| 1: [Binary] Binary +# 101| 0: [Identifier] x +# 101| 1: [ReservedWord] == +# 101| 2: [Integer] 10 +# 101| 2: [ReservedWord] } +# 102| 17: [InClause] InClause +# 102| 0: [ReservedWord] in +# 102| 1: [SimpleSymbol] :foo +# 103| 18: [InClause] InClause +# 103| 0: [ReservedWord] in +# 103| 1: [DelimitedSymbol] DelimitedSymbol +# 103| 0: [ReservedWord] :" +# 103| 1: [StringContent] foo bar +# 103| 2: [ReservedWord] " +# 104| 19: [InClause] InClause +# 104| 0: [ReservedWord] in +# 104| 1: [AlternativePattern] AlternativePattern +# 104| 0: [Unary] Unary +# 104| 0: [ReservedWord] - +# 104| 1: [Integer] 5 +# 104| 1: [ReservedWord] | +# 104| 2: [Unary] Unary +# 104| 0: [ReservedWord] + +# 104| 1: [Integer] 10 +# 105| 20: [InClause] InClause +# 105| 0: [ReservedWord] in +# 105| 1: [ParenthesizedPattern] ParenthesizedPattern +# 105| 0: [ReservedWord] ( +# 105| 1: [Range] Range +# 105| 0: [Integer] 1 +# 105| 1: [ReservedWord] .. +# 105| 2: [ReservedWord] ) +# 106| 21: [InClause] InClause +# 106| 0: [ReservedWord] in +# 106| 1: [ParenthesizedPattern] ParenthesizedPattern +# 106| 0: [ReservedWord] ( +# 106| 1: [AlternativePattern] AlternativePattern +# 106| 0: [Integer] 0 +# 106| 1: [ReservedWord] | +# 106| 2: [String] String +# 106| 0: [ReservedWord] " +# 106| 1: [ReservedWord] " +# 106| 3: [ReservedWord] | +# 106| 4: [ArrayPattern] ArrayPattern +# 106| 0: [ReservedWord] [ +# 106| 1: [ReservedWord] ] +# 106| 5: [ReservedWord] | +# 106| 6: [HashPattern] HashPattern +# 106| 0: [ReservedWord] { +# 106| 1: [ReservedWord] } +# 106| 2: [ReservedWord] ) +# 107| 22: [InClause] InClause +# 107| 0: [ReservedWord] in +# 107| 1: [Identifier] var +# 108| 23: [ReservedWord] end +# 110| 11: [CaseMatch] CaseMatch +# 110| 0: [ReservedWord] case +# 110| 1: [Identifier] expr +# 111| 2: [InClause] InClause +# 111| 0: [ReservedWord] in +# 111| 1: [AlternativePattern] AlternativePattern +# 111| 0: [Integer] 5 +# 111| 1: [ReservedWord] | +# 111| 2: [VariableReferencePattern] VariableReferencePattern +# 111| 0: [ReservedWord] ^ +# 111| 1: [Identifier] foo +# 111| 3: [ReservedWord] | +# 111| 4: [String] String +# 111| 0: [ReservedWord] " +# 111| 1: [StringContent] string +# 111| 2: [ReservedWord] " +# 111| 5: [ReservedWord] | +# 111| 6: [Identifier] var +# 112| 3: [ReservedWord] end +# 116| 12: [CaseMatch] CaseMatch +# 116| 0: [ReservedWord] case +# 116| 1: [Identifier] expr +# 117| 2: [InClause] InClause +# 117| 0: [ReservedWord] in +# 117| 1: [ArrayPattern] ArrayPattern +# 117| 0: [ReservedWord] [ +# 117| 1: [ReservedWord] ] +# 117| 2: [ReservedWord] ; +# 118| 3: [InClause] InClause +# 118| 0: [ReservedWord] in +# 118| 1: [ArrayPattern] ArrayPattern +# 118| 0: [ReservedWord] [ +# 118| 1: [Identifier] x +# 118| 2: [ReservedWord] ] +# 118| 2: [ReservedWord] ; +# 119| 4: [InClause] InClause +# 119| 0: [ReservedWord] in +# 119| 1: [ArrayPattern] ArrayPattern +# 119| 0: [ReservedWord] [ +# 119| 1: [Identifier] x +# 119| 2: [SplatParameter] SplatParameter +# 119| 3: [ReservedWord] ] +# 119| 2: [ReservedWord] ; +# 120| 5: [InClause] InClause +# 120| 0: [ReservedWord] in +# 120| 1: [ArrayPattern] ArrayPattern +# 120| 0: [ScopeResolution] ScopeResolution +# 120| 0: [Constant] Foo +# 120| 1: [ReservedWord] :: +# 120| 2: [Constant] Bar +# 120| 1: [ReservedWord] [ +# 120| 2: [ReservedWord] ] +# 120| 2: [ReservedWord] ; +# 121| 6: [InClause] InClause +# 121| 0: [ReservedWord] in +# 121| 1: [ArrayPattern] ArrayPattern +# 121| 0: [Constant] Foo +# 121| 1: [ReservedWord] ( +# 121| 2: [ReservedWord] ) +# 121| 2: [ReservedWord] ; +# 122| 7: [InClause] InClause +# 122| 0: [ReservedWord] in +# 122| 1: [ArrayPattern] ArrayPattern +# 122| 0: [Constant] Bar +# 122| 1: [ReservedWord] ( +# 122| 2: [SplatParameter] SplatParameter +# 122| 0: [ReservedWord] * +# 122| 3: [ReservedWord] ) +# 122| 2: [ReservedWord] ; +# 123| 8: [InClause] InClause +# 123| 0: [ReservedWord] in +# 123| 1: [ArrayPattern] ArrayPattern +# 123| 0: [Constant] Bar +# 123| 1: [ReservedWord] ( +# 123| 2: [Identifier] a +# 123| 3: [ReservedWord] , +# 123| 4: [Identifier] b +# 123| 5: [ReservedWord] , +# 123| 6: [SplatParameter] SplatParameter +# 123| 0: [ReservedWord] * +# 123| 1: [Identifier] c +# 123| 7: [ReservedWord] , +# 123| 8: [Identifier] d +# 123| 9: [ReservedWord] , +# 123| 10: [Identifier] e +# 123| 11: [ReservedWord] ) +# 123| 2: [ReservedWord] ; +# 124| 9: [ReservedWord] end +# 128| 13: [CaseMatch] CaseMatch +# 128| 0: [ReservedWord] case +# 128| 1: [Identifier] expr +# 129| 2: [InClause] InClause +# 129| 0: [ReservedWord] in +# 129| 1: [FindPattern] FindPattern +# 129| 0: [ReservedWord] [ +# 129| 1: [SplatParameter] SplatParameter +# 129| 0: [ReservedWord] * +# 129| 2: [ReservedWord] , +# 129| 3: [Identifier] x +# 129| 4: [ReservedWord] , +# 129| 5: [SplatParameter] SplatParameter +# 129| 0: [ReservedWord] * +# 129| 6: [ReservedWord] ] +# 129| 2: [ReservedWord] ; +# 130| 3: [InClause] InClause +# 130| 0: [ReservedWord] in +# 130| 1: [FindPattern] FindPattern +# 130| 0: [ReservedWord] [ +# 130| 1: [SplatParameter] SplatParameter +# 130| 0: [ReservedWord] * +# 130| 1: [Identifier] x +# 130| 2: [ReservedWord] , +# 130| 3: [Integer] 1 +# 130| 4: [ReservedWord] , +# 130| 5: [Integer] 2 +# 130| 6: [ReservedWord] , +# 130| 7: [SplatParameter] SplatParameter +# 130| 0: [ReservedWord] * +# 130| 1: [Identifier] y +# 130| 8: [ReservedWord] ] +# 130| 2: [ReservedWord] ; +# 131| 4: [InClause] InClause +# 131| 0: [ReservedWord] in +# 131| 1: [FindPattern] FindPattern +# 131| 0: [ScopeResolution] ScopeResolution +# 131| 0: [Constant] Foo +# 131| 1: [ReservedWord] :: +# 131| 2: [Constant] Bar +# 131| 1: [ReservedWord] [ +# 131| 2: [SplatParameter] SplatParameter +# 131| 0: [ReservedWord] * +# 131| 3: [ReservedWord] , +# 131| 4: [Integer] 1 +# 131| 5: [ReservedWord] , +# 131| 6: [SplatParameter] SplatParameter +# 131| 0: [ReservedWord] * +# 131| 7: [ReservedWord] ] +# 131| 2: [ReservedWord] ; +# 132| 5: [InClause] InClause +# 132| 0: [ReservedWord] in +# 132| 1: [FindPattern] FindPattern +# 132| 0: [Constant] Foo +# 132| 1: [ReservedWord] ( +# 132| 2: [SplatParameter] SplatParameter +# 132| 0: [ReservedWord] * +# 132| 3: [ReservedWord] , +# 132| 4: [Constant] Bar +# 132| 5: [ReservedWord] , +# 132| 6: [SplatParameter] SplatParameter +# 132| 0: [ReservedWord] * +# 132| 7: [ReservedWord] ) +# 132| 2: [ReservedWord] ; +# 133| 6: [ReservedWord] end +# 137| 14: [CaseMatch] CaseMatch +# 137| 0: [ReservedWord] case +# 137| 1: [Identifier] expr +# 138| 2: [InClause] InClause +# 138| 0: [ReservedWord] in +# 138| 1: [HashPattern] HashPattern +# 138| 0: [ReservedWord] { +# 138| 1: [ReservedWord] } +# 138| 2: [ReservedWord] ; +# 139| 3: [InClause] InClause +# 139| 0: [ReservedWord] in +# 139| 1: [HashPattern] HashPattern +# 139| 0: [ReservedWord] { +# 139| 1: [KeywordPattern] KeywordPattern +# 139| 0: [HashKeySymbol] x +# 139| 1: [ReservedWord] : +# 139| 2: [ReservedWord] } +# 139| 2: [ReservedWord] ; +# 140| 4: [InClause] InClause +# 140| 0: [ReservedWord] in +# 140| 1: [HashPattern] HashPattern +# 140| 0: [ScopeResolution] ScopeResolution +# 140| 0: [Constant] Foo +# 140| 1: [ReservedWord] :: +# 140| 2: [Constant] Bar +# 140| 1: [ReservedWord] [ +# 140| 2: [KeywordPattern] KeywordPattern +# 140| 0: [HashKeySymbol] x +# 140| 1: [ReservedWord] : +# 140| 2: [Integer] 1 +# 140| 3: [ReservedWord] ] +# 140| 2: [ReservedWord] ; +# 141| 5: [InClause] InClause +# 141| 0: [ReservedWord] in +# 141| 1: [HashPattern] HashPattern +# 141| 0: [ScopeResolution] ScopeResolution +# 141| 0: [Constant] Foo +# 141| 1: [ReservedWord] :: +# 141| 2: [Constant] Bar +# 141| 1: [ReservedWord] [ +# 141| 2: [KeywordPattern] KeywordPattern +# 141| 0: [HashKeySymbol] x +# 141| 1: [ReservedWord] : +# 141| 2: [Integer] 1 +# 141| 3: [ReservedWord] , +# 141| 4: [KeywordPattern] KeywordPattern +# 141| 0: [HashKeySymbol] a +# 141| 1: [ReservedWord] : +# 141| 5: [ReservedWord] , +# 141| 6: [HashSplatParameter] HashSplatParameter +# 141| 0: [ReservedWord] ** +# 141| 1: [Identifier] rest +# 141| 7: [ReservedWord] ] +# 141| 2: [ReservedWord] ; +# 142| 6: [InClause] InClause +# 142| 0: [ReservedWord] in +# 142| 1: [HashPattern] HashPattern +# 142| 0: [Constant] Foo +# 142| 1: [ReservedWord] ( +# 142| 2: [KeywordPattern] KeywordPattern +# 142| 0: [HashKeySymbol] y +# 142| 1: [ReservedWord] : +# 142| 3: [ReservedWord] ) +# 142| 2: [ReservedWord] ; +# 143| 7: [InClause] InClause +# 143| 0: [ReservedWord] in +# 143| 1: [HashPattern] HashPattern +# 143| 0: [Constant] Bar +# 143| 1: [ReservedWord] ( +# 143| 2: [HashSplatParameter] HashSplatParameter +# 143| 0: [ReservedWord] ** +# 143| 3: [ReservedWord] ) +# 143| 2: [ReservedWord] ; +# 144| 8: [InClause] InClause +# 144| 0: [ReservedWord] in +# 144| 1: [HashPattern] HashPattern +# 144| 0: [Constant] Bar +# 144| 1: [ReservedWord] ( +# 144| 2: [KeywordPattern] KeywordPattern +# 144| 0: [HashKeySymbol] a +# 144| 1: [ReservedWord] : +# 144| 2: [Integer] 1 +# 144| 3: [ReservedWord] , +# 144| 4: [HashSplatNil] **nil +# 144| 0: [ReservedWord] ** +# 144| 1: [ReservedWord] nil +# 144| 5: [ReservedWord] ) +# 144| 2: [ReservedWord] ; +# 145| 9: [ReservedWord] end +# 147| 15: [CaseMatch] CaseMatch +# 147| 0: [ReservedWord] case +# 147| 1: [Identifier] expr +# 148| 2: [InClause] InClause +# 148| 0: [ReservedWord] in +# 148| 1: [VariableReferencePattern] VariableReferencePattern +# 148| 0: [ReservedWord] ^ +# 148| 1: [Identifier] foo +# 148| 2: [ReservedWord] ; +# 149| 3: [InClause] InClause +# 149| 0: [ReservedWord] in +# 149| 1: [VariableReferencePattern] VariableReferencePattern +# 149| 0: [ReservedWord] ^ +# 149| 1: [GlobalVariable] $foo +# 149| 2: [ReservedWord] ; +# 150| 4: [InClause] InClause +# 150| 0: [ReservedWord] in +# 150| 1: [VariableReferencePattern] VariableReferencePattern +# 150| 0: [ReservedWord] ^ +# 150| 1: [InstanceVariable] @foo +# 150| 2: [ReservedWord] ; +# 151| 5: [InClause] InClause +# 151| 0: [ReservedWord] in +# 151| 1: [VariableReferencePattern] VariableReferencePattern +# 151| 0: [ReservedWord] ^ +# 151| 1: [ClassVariable] @@foo +# 151| 2: [ReservedWord] ; +# 152| 6: [ReservedWord] end +# 154| 16: [CaseMatch] CaseMatch +# 154| 0: [ReservedWord] case +# 154| 1: [Identifier] expr +# 155| 2: [InClause] InClause +# 155| 0: [ReservedWord] in +# 155| 1: [ExpressionReferencePattern] ExpressionReferencePattern +# 155| 0: [ReservedWord] ^ +# 155| 1: [ReservedWord] ( +# 155| 2: [Identifier] foo +# 155| 3: [ReservedWord] ) +# 155| 2: [ReservedWord] ; +# 156| 3: [InClause] InClause +# 156| 0: [ReservedWord] in +# 156| 1: [ExpressionReferencePattern] ExpressionReferencePattern +# 156| 0: [ReservedWord] ^ +# 156| 1: [ReservedWord] ( +# 156| 2: [InstanceVariable] @foo +# 156| 3: [ReservedWord] ) +# 156| 2: [ReservedWord] ; +# 157| 4: [InClause] InClause +# 157| 0: [ReservedWord] in +# 157| 1: [ExpressionReferencePattern] ExpressionReferencePattern +# 157| 0: [ReservedWord] ^ +# 157| 1: [ReservedWord] ( +# 157| 2: [Binary] Binary +# 157| 0: [Integer] 1 +# 157| 1: [ReservedWord] + +# 157| 2: [Integer] 1 +# 157| 3: [ReservedWord] ) +# 157| 2: [ReservedWord] ; +# 158| 5: [ReservedWord] end +# 1| [Comment] # Define some variables used below +# 7| [Comment] # A case expr with a value and an else branch +# 17| [Comment] # A case expr without a value or else branch +# 24| [Comment] # pattern matching +# 82| [Comment] # more pattern matching +# 114| [Comment] # array patterns +# 126| [Comment] # find patterns +# 135| [Comment] # hash patterns +control/conditionals.rb: +# 1| [Program] Program +# 2| 0: [Assignment] Assignment +# 2| 0: [Identifier] a +# 2| 1: [ReservedWord] = +# 2| 2: [Integer] 0 +# 3| 1: [Assignment] Assignment +# 3| 0: [Identifier] b +# 3| 1: [ReservedWord] = +# 3| 2: [Integer] 0 +# 4| 2: [Assignment] Assignment +# 4| 0: [Identifier] c +# 4| 1: [ReservedWord] = +# 4| 2: [Integer] 0 +# 5| 3: [Assignment] Assignment +# 5| 0: [Identifier] d +# 5| 1: [ReservedWord] = +# 5| 2: [Integer] 0 +# 6| 4: [Assignment] Assignment +# 6| 0: [Identifier] e +# 6| 1: [ReservedWord] = +# 6| 2: [Integer] 0 +# 7| 5: [Assignment] Assignment +# 7| 0: [Identifier] f +# 7| 1: [ReservedWord] = +# 7| 2: [Integer] 0 +# 10| 6: [If] If +# 10| 0: [ReservedWord] if +# 10| 1: [Binary] Binary +# 10| 0: [Identifier] a +# 10| 1: [ReservedWord] > +# 10| 2: [Identifier] b +# 10| 2: [Then] Then +# 10| 0: [ReservedWord] then +# 11| 1: [Identifier] c +# 12| 3: [ReservedWord] end +# 15| 7: [If] If +# 15| 0: [ReservedWord] if +# 15| 1: [Binary] Binary +# 15| 0: [Identifier] a +# 15| 1: [ReservedWord] == +# 15| 2: [Identifier] b +# 15| 2: [Then] Then +# 16| 0: [Identifier] c +# 17| 3: [Else] Else +# 17| 0: [ReservedWord] else +# 18| 1: [Identifier] d +# 19| 4: [ReservedWord] end +# 22| 8: [If] If +# 22| 0: [ReservedWord] if +# 22| 1: [Binary] Binary +# 22| 0: [Identifier] a +# 22| 1: [ReservedWord] == +# 22| 2: [Integer] 0 +# 22| 2: [Then] Then +# 22| 0: [ReservedWord] then +# 23| 1: [Identifier] c +# 24| 3: [Elsif] Elsif +# 24| 0: [ReservedWord] elsif +# 24| 1: [Binary] Binary +# 24| 0: [Identifier] a +# 24| 1: [ReservedWord] == +# 24| 2: [Integer] 1 +# 24| 2: [Then] Then +# 24| 0: [ReservedWord] then +# 25| 1: [Identifier] d +# 26| 3: [Elsif] Elsif +# 26| 0: [ReservedWord] elsif +# 26| 1: [Binary] Binary +# 26| 0: [Identifier] a +# 26| 1: [ReservedWord] == +# 26| 2: [Integer] 2 +# 26| 2: [Then] Then +# 26| 0: [ReservedWord] then +# 27| 1: [Identifier] e +# 28| 3: [Else] Else +# 28| 0: [ReservedWord] else +# 29| 1: [Identifier] f +# 30| 4: [ReservedWord] end +# 33| 9: [If] If +# 33| 0: [ReservedWord] if +# 33| 1: [Binary] Binary +# 33| 0: [Identifier] a +# 33| 1: [ReservedWord] == +# 33| 2: [Integer] 0 +# 33| 2: [Then] Then +# 34| 0: [Identifier] b +# 35| 3: [Elsif] Elsif +# 35| 0: [ReservedWord] elsif +# 35| 1: [Binary] Binary +# 35| 0: [Identifier] a +# 35| 1: [ReservedWord] == +# 35| 2: [Integer] 1 +# 35| 2: [Then] Then +# 36| 0: [Identifier] c +# 37| 4: [ReservedWord] end +# 40| 10: [Unless] Unless +# 40| 0: [ReservedWord] unless +# 40| 1: [Binary] Binary +# 40| 0: [Identifier] a +# 40| 1: [ReservedWord] > +# 40| 2: [Identifier] b +# 40| 2: [Then] Then +# 40| 0: [ReservedWord] then +# 41| 1: [Identifier] c +# 42| 3: [ReservedWord] end +# 45| 11: [Unless] Unless +# 45| 0: [ReservedWord] unless +# 45| 1: [Binary] Binary +# 45| 0: [Identifier] a +# 45| 1: [ReservedWord] == +# 45| 2: [Identifier] b +# 45| 2: [Then] Then +# 46| 0: [Identifier] c +# 47| 3: [Else] Else +# 47| 0: [ReservedWord] else +# 48| 1: [Identifier] d +# 49| 4: [ReservedWord] end +# 52| 12: [IfModifier] IfModifier +# 52| 0: [Assignment] Assignment +# 52| 0: [Identifier] a +# 52| 1: [ReservedWord] = +# 52| 2: [Identifier] b +# 52| 1: [ReservedWord] if +# 52| 2: [Binary] Binary +# 52| 0: [Identifier] c +# 52| 1: [ReservedWord] > +# 52| 2: [Identifier] d +# 55| 13: [UnlessModifier] UnlessModifier +# 55| 0: [Assignment] Assignment +# 55| 0: [Identifier] a +# 55| 1: [ReservedWord] = +# 55| 2: [Identifier] b +# 55| 1: [ReservedWord] unless +# 55| 2: [Binary] Binary +# 55| 0: [Identifier] c +# 55| 1: [ReservedWord] < +# 55| 2: [Identifier] d +# 58| 14: [Assignment] Assignment +# 58| 0: [Identifier] a +# 58| 1: [ReservedWord] = +# 58| 2: [Conditional] Conditional +# 58| 0: [Binary] Binary +# 58| 0: [Identifier] b +# 58| 1: [ReservedWord] > +# 58| 2: [Identifier] c +# 58| 1: [ReservedWord] ? +# 58| 2: [Binary] Binary +# 58| 0: [Identifier] d +# 58| 1: [ReservedWord] + +# 58| 2: [Integer] 1 +# 58| 3: [ReservedWord] : +# 58| 4: [Binary] Binary +# 58| 0: [Identifier] e +# 58| 1: [ReservedWord] - +# 58| 2: [Integer] 2 +# 61| 15: [If] If +# 61| 0: [ReservedWord] if +# 61| 1: [Binary] Binary +# 61| 0: [Identifier] a +# 61| 1: [ReservedWord] > +# 61| 2: [Identifier] b +# 61| 2: [Then] Then +# 61| 0: [ReservedWord] then +# 62| 1: [Identifier] c +# 63| 3: [Else] Else +# 63| 0: [ReservedWord] else +# 64| 4: [ReservedWord] end +# 67| 16: [If] If +# 67| 0: [ReservedWord] if +# 67| 1: [Binary] Binary +# 67| 0: [Identifier] a +# 67| 1: [ReservedWord] > +# 67| 2: [Identifier] b +# 67| 2: [Then] Then +# 67| 0: [ReservedWord] then +# 68| 3: [Else] Else +# 68| 0: [ReservedWord] else +# 69| 1: [Identifier] c +# 70| 4: [ReservedWord] end +# 1| [Comment] # Define some variables used below +# 9| [Comment] # If expr with no else +# 14| [Comment] # If expr with single else +# 21| [Comment] # If expr with multiple nested elsif branches +# 32| [Comment] # If expr with elsif and then no else +# 39| [Comment] # Unless expr with no else +# 44| [Comment] # Unless expr with else +# 51| [Comment] # If-modified expr +# 54| [Comment] # Unless-modified expr +# 57| [Comment] # Ternary if expr +# 60| [Comment] # If expr with empty else (treated as no else) +# 66| [Comment] # If expr with empty then (treated as no then) +control/loops.rb: +# 1| [Program] Program +# 2| 0: [Assignment] Assignment +# 2| 0: [Identifier] foo +# 2| 1: [ReservedWord] = +# 2| 2: [Integer] 0 +# 3| 1: [Assignment] Assignment +# 3| 0: [Identifier] sum +# 3| 1: [ReservedWord] = +# 3| 2: [Integer] 0 +# 4| 2: [Assignment] Assignment +# 4| 0: [Identifier] x +# 4| 1: [ReservedWord] = +# 4| 2: [Integer] 0 +# 5| 3: [Assignment] Assignment +# 5| 0: [Identifier] y +# 5| 1: [ReservedWord] = +# 5| 2: [Integer] 0 +# 6| 4: [Assignment] Assignment +# 6| 0: [Identifier] z +# 6| 1: [ReservedWord] = +# 6| 2: [Integer] 0 +# 9| 5: [For] For +# 9| 0: [ReservedWord] for +# 9| 1: [Identifier] n +# 9| 2: [In] In +# 9| 0: [ReservedWord] in +# 9| 1: [Range] Range +# 9| 0: [Integer] 1 +# 9| 1: [ReservedWord] .. +# 9| 2: [Integer] 10 +# 9| 3: [Do] Do +# 10| 0: [OperatorAssignment] OperatorAssignment +# 10| 0: [Identifier] sum +# 10| 1: [ReservedWord] += +# 10| 2: [Identifier] n +# 11| 1: [Assignment] Assignment +# 11| 0: [Identifier] foo +# 11| 1: [ReservedWord] = +# 11| 2: [Identifier] n +# 12| 2: [ReservedWord] end +# 16| 6: [For] For +# 16| 0: [ReservedWord] for +# 16| 1: [Identifier] n +# 16| 2: [In] In +# 16| 0: [ReservedWord] in +# 16| 1: [Range] Range +# 16| 0: [Integer] 1 +# 16| 1: [ReservedWord] .. +# 16| 2: [Integer] 10 +# 16| 3: [Do] Do +# 17| 0: [OperatorAssignment] OperatorAssignment +# 17| 0: [Identifier] sum +# 17| 1: [ReservedWord] += +# 17| 2: [Identifier] n +# 18| 1: [OperatorAssignment] OperatorAssignment +# 18| 0: [Identifier] foo +# 18| 1: [ReservedWord] -= +# 18| 2: [Identifier] n +# 19| 2: [ReservedWord] end +# 22| 7: [For] For +# 22| 0: [ReservedWord] for +# 22| 1: [LeftAssignmentList] LeftAssignmentList +# 22| 0: [Identifier] key +# 22| 1: [ReservedWord] , +# 22| 2: [Identifier] value +# 22| 2: [In] In +# 22| 0: [ReservedWord] in +# 22| 1: [Hash] Hash +# 22| 0: [ReservedWord] { +# 22| 1: [Pair] Pair +# 22| 0: [HashKeySymbol] foo +# 22| 1: [ReservedWord] : +# 22| 2: [Integer] 0 +# 22| 2: [ReservedWord] , +# 22| 3: [Pair] Pair +# 22| 0: [HashKeySymbol] bar +# 22| 1: [ReservedWord] : +# 22| 2: [Integer] 1 +# 22| 4: [ReservedWord] } +# 22| 3: [Do] Do +# 23| 0: [OperatorAssignment] OperatorAssignment +# 23| 0: [Identifier] sum +# 23| 1: [ReservedWord] += +# 23| 2: [Identifier] value +# 24| 1: [OperatorAssignment] OperatorAssignment +# 24| 0: [Identifier] foo +# 24| 1: [ReservedWord] *= +# 24| 2: [Identifier] value +# 25| 2: [ReservedWord] end +# 28| 8: [For] For +# 28| 0: [ReservedWord] for +# 28| 1: [LeftAssignmentList] LeftAssignmentList +# 28| 0: [DestructuredLeftAssignment] DestructuredLeftAssignment +# 28| 0: [ReservedWord] ( +# 28| 1: [Identifier] key +# 28| 2: [ReservedWord] , +# 28| 3: [Identifier] value +# 28| 4: [ReservedWord] ) +# 28| 2: [In] In +# 28| 0: [ReservedWord] in +# 28| 1: [Hash] Hash +# 28| 0: [ReservedWord] { +# 28| 1: [Pair] Pair +# 28| 0: [HashKeySymbol] foo +# 28| 1: [ReservedWord] : +# 28| 2: [Integer] 0 +# 28| 2: [ReservedWord] , +# 28| 3: [Pair] Pair +# 28| 0: [HashKeySymbol] bar +# 28| 1: [ReservedWord] : +# 28| 2: [Integer] 1 +# 28| 4: [ReservedWord] } +# 28| 3: [Do] Do +# 29| 0: [OperatorAssignment] OperatorAssignment +# 29| 0: [Identifier] sum +# 29| 1: [ReservedWord] += +# 29| 2: [Identifier] value +# 30| 1: [OperatorAssignment] OperatorAssignment +# 30| 0: [Identifier] foo +# 30| 1: [ReservedWord] /= +# 30| 2: [Identifier] value +# 31| 2: [Break] Break +# 31| 0: [ReservedWord] break +# 32| 3: [ReservedWord] end +# 35| 9: [While] While +# 35| 0: [ReservedWord] while +# 35| 1: [Binary] Binary +# 35| 0: [Identifier] x +# 35| 1: [ReservedWord] < +# 35| 2: [Identifier] y +# 35| 2: [Do] Do +# 36| 0: [OperatorAssignment] OperatorAssignment +# 36| 0: [Identifier] x +# 36| 1: [ReservedWord] += +# 36| 2: [Integer] 1 +# 37| 1: [OperatorAssignment] OperatorAssignment +# 37| 0: [Identifier] z +# 37| 1: [ReservedWord] += +# 37| 2: [Integer] 1 +# 38| 2: [Next] Next +# 38| 0: [ReservedWord] next +# 39| 3: [ReservedWord] end +# 42| 10: [While] While +# 42| 0: [ReservedWord] while +# 42| 1: [Binary] Binary +# 42| 0: [Identifier] x +# 42| 1: [ReservedWord] < +# 42| 2: [Identifier] y +# 42| 2: [Do] Do +# 42| 0: [ReservedWord] do +# 43| 1: [OperatorAssignment] OperatorAssignment +# 43| 0: [Identifier] x +# 43| 1: [ReservedWord] += +# 43| 2: [Integer] 1 +# 44| 2: [OperatorAssignment] OperatorAssignment +# 44| 0: [Identifier] z +# 44| 1: [ReservedWord] += +# 44| 2: [Integer] 2 +# 45| 3: [ReservedWord] end +# 48| 11: [WhileModifier] WhileModifier +# 48| 0: [OperatorAssignment] OperatorAssignment +# 48| 0: [Identifier] x +# 48| 1: [ReservedWord] += +# 48| 2: [Integer] 1 +# 48| 1: [ReservedWord] while +# 48| 2: [Binary] Binary +# 48| 0: [Identifier] y +# 48| 1: [ReservedWord] >= +# 48| 2: [Identifier] x +# 51| 12: [Until] Until +# 51| 0: [ReservedWord] until +# 51| 1: [Binary] Binary +# 51| 0: [Identifier] x +# 51| 1: [ReservedWord] == +# 51| 2: [Identifier] y +# 51| 2: [Do] Do +# 52| 0: [OperatorAssignment] OperatorAssignment +# 52| 0: [Identifier] x +# 52| 1: [ReservedWord] += +# 52| 2: [Integer] 1 +# 53| 1: [OperatorAssignment] OperatorAssignment +# 53| 0: [Identifier] z +# 53| 1: [ReservedWord] -= +# 53| 2: [Integer] 1 +# 54| 2: [ReservedWord] end +# 57| 13: [Until] Until +# 57| 0: [ReservedWord] until +# 57| 1: [Binary] Binary +# 57| 0: [Identifier] x +# 57| 1: [ReservedWord] > +# 57| 2: [Identifier] y +# 57| 2: [Do] Do +# 57| 0: [ReservedWord] do +# 58| 1: [OperatorAssignment] OperatorAssignment +# 58| 0: [Identifier] x +# 58| 1: [ReservedWord] += +# 58| 2: [Integer] 1 +# 59| 2: [OperatorAssignment] OperatorAssignment +# 59| 0: [Identifier] z +# 59| 1: [ReservedWord] -= +# 59| 2: [Integer] 4 +# 60| 3: [ReservedWord] end +# 63| 14: [UntilModifier] UntilModifier +# 63| 0: [OperatorAssignment] OperatorAssignment +# 63| 0: [Identifier] x +# 63| 1: [ReservedWord] -= +# 63| 2: [Integer] 1 +# 63| 1: [ReservedWord] until +# 63| 2: [Binary] Binary +# 63| 0: [Identifier] x +# 63| 1: [ReservedWord] == +# 63| 2: [Integer] 0 +# 66| 15: [While] While +# 66| 0: [ReservedWord] while +# 66| 1: [Binary] Binary +# 66| 0: [Identifier] x +# 66| 1: [ReservedWord] < +# 66| 2: [Identifier] y +# 66| 2: [Do] Do +# 66| 0: [ReservedWord] do +# 67| 1: [ReservedWord] end +# 1| [Comment] # Define some variables used below. +# 8| [Comment] # For loop with a single variable as the iteration argument +# 14| [Comment] # For loop with a single variable and a trailing comma as the iteration +# 15| [Comment] # argument +# 21| [Comment] # For loop with a tuple pattern as the iteration argument +# 27| [Comment] # Same, but with parentheses around the pattern +# 34| [Comment] # While loop +# 41| [Comment] # While loop with `do` keyword +# 47| [Comment] # While-modified expression +# 50| [Comment] # Until loop +# 56| [Comment] # Until loop with `do` keyword +# 62| [Comment] # Until-modified expression +# 65| [Comment] # While loop with empty `do` block +erb/template.html.erb: +# 19| [Program] Program +# 19| 0: [String] String +# 19| 0: [ReservedWord] " +# 19| 1: [StringContent] hello world +# 19| 2: [ReservedWord] " +# 25| 1: [Assignment] Assignment +# 25| 0: [Identifier] xs +# 25| 1: [ReservedWord] = +# 25| 2: [String] String +# 25| 0: [ReservedWord] " +# 25| 1: [ReservedWord] " +# 27| 2: [For] For +# 27| 0: [ReservedWord] for +# 27| 1: [Identifier] x +# 27| 2: [In] In +# 27| 0: [ReservedWord] in +# 27| 1: [Array] Array +# 27| 0: [ReservedWord] [ +# 27| 1: [String] String +# 27| 0: [ReservedWord] " +# 27| 1: [StringContent] foo +# 27| 2: [ReservedWord] " +# 27| 2: [ReservedWord] , +# 27| 3: [String] String +# 27| 0: [ReservedWord] " +# 27| 1: [StringContent] bar +# 27| 2: [ReservedWord] " +# 27| 4: [ReservedWord] , +# 27| 5: [String] String +# 27| 0: [ReservedWord] " +# 27| 1: [StringContent] baz +# 27| 2: [ReservedWord] " +# 27| 6: [ReservedWord] ] +# 27| 3: [Do] Do +# 27| 0: [ReservedWord] do +# 28| 1: [OperatorAssignment] OperatorAssignment +# 28| 0: [Identifier] xs +# 28| 1: [ReservedWord] += +# 28| 2: [Identifier] x +# 29| 2: [Identifier] xs +# 31| 3: [ReservedWord] end +escape_sequences/escapes.rb: +# 1| [Program] Program +# 6| 0: [String] String +# 6| 0: [ReservedWord] ' +# 6| 1: [StringContent] \' +# 6| 2: [ReservedWord] ' +# 7| 1: [String] String +# 7| 0: [ReservedWord] ' +# 7| 1: [StringContent] \" +# 7| 2: [ReservedWord] ' +# 8| 2: [String] String +# 8| 0: [ReservedWord] ' +# 8| 1: [StringContent] \\ +# 8| 2: [ReservedWord] ' +# 9| 3: [String] String +# 9| 0: [ReservedWord] ' +# 9| 1: [StringContent] \1 +# 9| 2: [ReservedWord] ' +# 10| 4: [String] String +# 10| 0: [ReservedWord] ' +# 10| 1: [StringContent] \\1 +# 10| 2: [ReservedWord] ' +# 11| 5: [String] String +# 11| 0: [ReservedWord] ' +# 11| 1: [StringContent] \141 +# 11| 2: [ReservedWord] ' +# 12| 6: [String] String +# 12| 0: [ReservedWord] ' +# 12| 1: [StringContent] \n +# 12| 2: [ReservedWord] ' +# 15| 7: [String] String +# 15| 0: [ReservedWord] " +# 15| 1: [EscapeSequence] \' +# 15| 2: [ReservedWord] " +# 16| 8: [String] String +# 16| 0: [ReservedWord] " +# 16| 1: [EscapeSequence] \" +# 16| 2: [ReservedWord] " +# 17| 9: [String] String +# 17| 0: [ReservedWord] " +# 17| 1: [EscapeSequence] \\ +# 17| 2: [ReservedWord] " +# 18| 10: [String] String +# 18| 0: [ReservedWord] " +# 18| 1: [EscapeSequence] \1 +# 18| 2: [ReservedWord] " +# 19| 11: [String] String +# 19| 0: [ReservedWord] " +# 19| 1: [EscapeSequence] \\ +# 19| 2: [StringContent] 1 +# 19| 3: [ReservedWord] " +# 20| 12: [String] String +# 20| 0: [ReservedWord] " +# 20| 1: [EscapeSequence] \141 +# 20| 2: [ReservedWord] " +# 21| 13: [String] String +# 21| 0: [ReservedWord] " +# 21| 1: [EscapeSequence] \x6d +# 21| 2: [ReservedWord] " +# 22| 14: [String] String +# 22| 0: [ReservedWord] " +# 22| 1: [EscapeSequence] \x6E +# 22| 2: [ReservedWord] " +# 23| 15: [String] String +# 23| 0: [ReservedWord] " +# 23| 1: [EscapeSequence] \X +# 23| 2: [StringContent] 6d +# 23| 3: [ReservedWord] " +# 24| 16: [String] String +# 24| 0: [ReservedWord] " +# 24| 1: [EscapeSequence] \X +# 24| 2: [StringContent] 6E +# 24| 3: [ReservedWord] " +# 25| 17: [String] String +# 25| 0: [ReservedWord] " +# 25| 1: [EscapeSequence] \u203d +# 25| 2: [ReservedWord] " +# 26| 18: [String] String +# 26| 0: [ReservedWord] " +# 26| 1: [EscapeSequence] \u{62} +# 26| 2: [ReservedWord] " +# 27| 19: [String] String +# 27| 0: [ReservedWord] " +# 27| 1: [EscapeSequence] \u{1f60a} +# 27| 2: [ReservedWord] " +# 28| 20: [String] String +# 28| 0: [ReservedWord] " +# 28| 1: [EscapeSequence] \a +# 28| 2: [ReservedWord] " +# 29| 21: [String] String +# 29| 0: [ReservedWord] " +# 29| 1: [EscapeSequence] \b +# 29| 2: [ReservedWord] " +# 30| 22: [String] String +# 30| 0: [ReservedWord] " +# 30| 1: [EscapeSequence] \t +# 30| 2: [ReservedWord] " +# 31| 23: [String] String +# 31| 0: [ReservedWord] " +# 31| 1: [EscapeSequence] \n +# 31| 2: [ReservedWord] " +# 32| 24: [String] String +# 32| 0: [ReservedWord] " +# 32| 1: [EscapeSequence] \v +# 32| 2: [ReservedWord] " +# 33| 25: [String] String +# 33| 0: [ReservedWord] " +# 33| 1: [EscapeSequence] \f +# 33| 2: [ReservedWord] " +# 34| 26: [String] String +# 34| 0: [ReservedWord] " +# 34| 1: [EscapeSequence] \r +# 34| 2: [ReservedWord] " +# 35| 27: [String] String +# 35| 0: [ReservedWord] " +# 35| 1: [EscapeSequence] \e +# 35| 2: [ReservedWord] " +# 36| 28: [String] String +# 36| 0: [ReservedWord] " +# 36| 1: [EscapeSequence] \s +# 36| 2: [ReservedWord] " +# 37| 29: [String] String +# 37| 0: [ReservedWord] " +# 37| 1: [EscapeSequence] \c +# 37| 2: [StringContent] ? +# 37| 3: [ReservedWord] " +# 38| 30: [String] String +# 38| 0: [ReservedWord] " +# 38| 1: [EscapeSequence] \C +# 38| 2: [StringContent] -? +# 38| 3: [ReservedWord] " +# 43| 31: [Assignment] Assignment +# 43| 0: [Identifier] a +# 43| 1: [ReservedWord] = +# 43| 2: [String] String +# 43| 0: [ReservedWord] " +# 43| 1: [EscapeSequence] \\ +# 43| 2: [StringContent] . +# 43| 3: [ReservedWord] " +# 44| 32: [String] String +# 44| 0: [ReservedWord] " +# 44| 1: [Interpolation] Interpolation +# 44| 0: [ReservedWord] #{ +# 44| 1: [Identifier] a +# 44| 2: [ReservedWord] } +# 44| 2: [ReservedWord] " +# 48| 33: [Regex] Regex +# 48| 0: [ReservedWord] / +# 48| 1: [EscapeSequence] \n +# 48| 2: [ReservedWord] / +# 49| 34: [Regex] Regex +# 49| 0: [ReservedWord] / +# 49| 1: [EscapeSequence] \p +# 49| 2: [ReservedWord] / +# 50| 35: [Regex] Regex +# 50| 0: [ReservedWord] / +# 50| 1: [EscapeSequence] \u0061 +# 50| 2: [ReservedWord] / +# 53| 36: [Assignment] Assignment +# 53| 0: [Identifier] a +# 53| 1: [ReservedWord] = +# 53| 2: [String] String +# 53| 0: [ReservedWord] " +# 53| 1: [EscapeSequence] \\ +# 53| 2: [StringContent] . +# 53| 3: [ReservedWord] " +# 54| 37: [Assignment] Assignment +# 54| 0: [Identifier] b +# 54| 1: [ReservedWord] = +# 54| 2: [Regex] Regex +# 54| 0: [ReservedWord] / +# 54| 1: [EscapeSequence] \. +# 54| 2: [ReservedWord] / +# 55| 38: [Regex] Regex +# 55| 0: [ReservedWord] / +# 55| 1: [Interpolation] Interpolation +# 55| 0: [ReservedWord] #{ +# 55| 1: [Identifier] a +# 55| 2: [ReservedWord] } +# 55| 2: [Interpolation] Interpolation +# 55| 0: [ReservedWord] #{ +# 55| 1: [Identifier] b +# 55| 2: [ReservedWord] } +# 55| 3: [ReservedWord] / +# 58| 39: [StringArray] StringArray +# 58| 0: [ReservedWord] %w[ +# 58| 1: [BareString] BareString +# 58| 0: [StringContent] foo +# 58| 1: [EscapeSequence] \n +# 58| 2: [BareString] BareString +# 58| 0: [StringContent] bar +# 58| 3: [ReservedWord] ] +# 61| 40: [DelimitedSymbol] DelimitedSymbol +# 61| 0: [ReservedWord] :' +# 61| 1: [StringContent] \' +# 61| 2: [ReservedWord] ' +# 62| 41: [DelimitedSymbol] DelimitedSymbol +# 62| 0: [ReservedWord] :' +# 62| 1: [StringContent] \" +# 62| 2: [ReservedWord] ' +# 63| 42: [DelimitedSymbol] DelimitedSymbol +# 63| 0: [ReservedWord] :' +# 63| 1: [StringContent] \\ +# 63| 2: [ReservedWord] ' +# 64| 43: [DelimitedSymbol] DelimitedSymbol +# 64| 0: [ReservedWord] :' +# 64| 1: [StringContent] \1 +# 64| 2: [ReservedWord] ' +# 65| 44: [DelimitedSymbol] DelimitedSymbol +# 65| 0: [ReservedWord] :' +# 65| 1: [StringContent] \\1 +# 65| 2: [ReservedWord] ' +# 66| 45: [DelimitedSymbol] DelimitedSymbol +# 66| 0: [ReservedWord] :' +# 66| 1: [StringContent] \141 +# 66| 2: [ReservedWord] ' +# 67| 46: [DelimitedSymbol] DelimitedSymbol +# 67| 0: [ReservedWord] :' +# 67| 1: [StringContent] \n +# 67| 2: [ReservedWord] ' +# 70| 47: [DelimitedSymbol] DelimitedSymbol +# 70| 0: [ReservedWord] :" +# 70| 1: [EscapeSequence] \' +# 70| 2: [ReservedWord] " +# 71| 48: [DelimitedSymbol] DelimitedSymbol +# 71| 0: [ReservedWord] :" +# 71| 1: [EscapeSequence] \" +# 71| 2: [ReservedWord] " +# 72| 49: [DelimitedSymbol] DelimitedSymbol +# 72| 0: [ReservedWord] :" +# 72| 1: [EscapeSequence] \\ +# 72| 2: [ReservedWord] " +# 73| 50: [DelimitedSymbol] DelimitedSymbol +# 73| 0: [ReservedWord] :" +# 73| 1: [EscapeSequence] \1 +# 73| 2: [ReservedWord] " +# 74| 51: [DelimitedSymbol] DelimitedSymbol +# 74| 0: [ReservedWord] :" +# 74| 1: [EscapeSequence] \\ +# 74| 2: [StringContent] 1 +# 74| 3: [ReservedWord] " +# 75| 52: [DelimitedSymbol] DelimitedSymbol +# 75| 0: [ReservedWord] :" +# 75| 1: [EscapeSequence] \141 +# 75| 2: [ReservedWord] " +# 76| 53: [DelimitedSymbol] DelimitedSymbol +# 76| 0: [ReservedWord] :" +# 76| 1: [EscapeSequence] \x6d +# 76| 2: [ReservedWord] " +# 77| 54: [DelimitedSymbol] DelimitedSymbol +# 77| 0: [ReservedWord] :" +# 77| 1: [EscapeSequence] \x6E +# 77| 2: [ReservedWord] " +# 78| 55: [DelimitedSymbol] DelimitedSymbol +# 78| 0: [ReservedWord] :" +# 78| 1: [EscapeSequence] \X +# 78| 2: [StringContent] 6d +# 78| 3: [ReservedWord] " +# 79| 56: [DelimitedSymbol] DelimitedSymbol +# 79| 0: [ReservedWord] :" +# 79| 1: [EscapeSequence] \X +# 79| 2: [StringContent] 6E +# 79| 3: [ReservedWord] " +# 80| 57: [DelimitedSymbol] DelimitedSymbol +# 80| 0: [ReservedWord] :" +# 80| 1: [EscapeSequence] \u203d +# 80| 2: [ReservedWord] " +# 81| 58: [DelimitedSymbol] DelimitedSymbol +# 81| 0: [ReservedWord] :" +# 81| 1: [EscapeSequence] \u{62} +# 81| 2: [ReservedWord] " +# 82| 59: [DelimitedSymbol] DelimitedSymbol +# 82| 0: [ReservedWord] :" +# 82| 1: [EscapeSequence] \u{1f60a} +# 82| 2: [ReservedWord] " +# 83| 60: [DelimitedSymbol] DelimitedSymbol +# 83| 0: [ReservedWord] :" +# 83| 1: [EscapeSequence] \a +# 83| 2: [ReservedWord] " +# 84| 61: [DelimitedSymbol] DelimitedSymbol +# 84| 0: [ReservedWord] :" +# 84| 1: [EscapeSequence] \b +# 84| 2: [ReservedWord] " +# 85| 62: [DelimitedSymbol] DelimitedSymbol +# 85| 0: [ReservedWord] :" +# 85| 1: [EscapeSequence] \t +# 85| 2: [ReservedWord] " +# 86| 63: [DelimitedSymbol] DelimitedSymbol +# 86| 0: [ReservedWord] :" +# 86| 1: [EscapeSequence] \n +# 86| 2: [ReservedWord] " +# 87| 64: [DelimitedSymbol] DelimitedSymbol +# 87| 0: [ReservedWord] :" +# 87| 1: [EscapeSequence] \v +# 87| 2: [ReservedWord] " +# 88| 65: [DelimitedSymbol] DelimitedSymbol +# 88| 0: [ReservedWord] :" +# 88| 1: [EscapeSequence] \f +# 88| 2: [ReservedWord] " +# 89| 66: [DelimitedSymbol] DelimitedSymbol +# 89| 0: [ReservedWord] :" +# 89| 1: [EscapeSequence] \r +# 89| 2: [ReservedWord] " +# 90| 67: [DelimitedSymbol] DelimitedSymbol +# 90| 0: [ReservedWord] :" +# 90| 1: [EscapeSequence] \e +# 90| 2: [ReservedWord] " +# 91| 68: [DelimitedSymbol] DelimitedSymbol +# 91| 0: [ReservedWord] :" +# 91| 1: [EscapeSequence] \s +# 91| 2: [ReservedWord] " +# 92| 69: [DelimitedSymbol] DelimitedSymbol +# 92| 0: [ReservedWord] :" +# 92| 1: [EscapeSequence] \c +# 92| 2: [StringContent] ? +# 92| 3: [ReservedWord] " +# 93| 70: [DelimitedSymbol] DelimitedSymbol +# 93| 0: [ReservedWord] :" +# 93| 1: [EscapeSequence] \C +# 93| 2: [StringContent] -? +# 93| 3: [ReservedWord] " +# 1| [Comment] # Most comments indicate the contents of the string after MRI has parsed the +# 2| [Comment] # escape sequences (i.e. what gets printed by `puts`), and that's what we expect +# 3| [Comment] # `getConstantValue().getString()` to return. +# 5| [Comment] # The only escapes in single-quoted strings are backslash and single-quote. +# 6| [Comment] # ' +# 7| [Comment] # \" +# 8| [Comment] # \ +# 9| [Comment] # \1 +# 10| [Comment] # \1 +# 11| [Comment] # \141 +# 12| [Comment] # \n +# 14| [Comment] # Double-quoted strings +# 15| [Comment] # ' +# 16| [Comment] # " +# 17| [Comment] # \ +# 18| [Comment] # +# 19| [Comment] # \1 +# 20| [Comment] # a +# 21| [Comment] # m +# 22| [Comment] # n +# 23| [Comment] # X6d +# 24| [Comment] # X6E +# 25| [Comment] # ‽ +# 26| [Comment] # b +# 27| [Comment] # 😊 +# 28| [Comment] # +# 29| [Comment] # +# 30| [Comment] # +# 31| [Comment] # +# 32| [Comment] # +# 33| [Comment] #
    +# 34| [Comment] # +# 35| [Comment] # +# 36| [Comment] # +# 37| [Comment] # problem: only \c is parsed as part of the escape sequence +# 38| [Comment] # problem: only \C is parsed as part of the escape sequence +# 40| [Comment] # TODO: support/test more control characters: \M-..., \cx, \C-x, etc. +# 42| [Comment] # String interpolation +# 43| [Comment] # \. +# 44| [Comment] # \. +# 46| [Comment] # Regexps - escape sequences are handled by the regex parser, so their constant +# 47| [Comment] # value should be interpreted literally and not unescaped as in double-quoted strings +# 52| [Comment] # Regexp interpolation +# 53| [Comment] # \. +# 55| [Comment] # equivalent to /\.\./ +# 57| [Comment] # String arrays +# 58| [Comment] # should be equivalent to ["foo", "\\n", "bar"], but currently misparsed as ["foo \\n", "bar"] +# 60| [Comment] # Single-quoted symbols. Comments indicate the expected, unescaped string contents. +# 61| [Comment] # ' +# 62| [Comment] # \" +# 63| [Comment] # \ +# 64| [Comment] # \1 +# 65| [Comment] # \1 +# 66| [Comment] # \141 +# 67| [Comment] # \n +# 69| [Comment] # Double-quoted symbols. Comments indicate the expected, unescaped string contents. +# 70| [Comment] # ' +# 71| [Comment] # " +# 72| [Comment] # \ +# 73| [Comment] # +# 74| [Comment] # \1 +# 75| [Comment] # a +# 76| [Comment] # m +# 77| [Comment] # n +# 78| [Comment] # X6d +# 79| [Comment] # X6E +# 80| [Comment] # ‽ +# 81| [Comment] # b +# 82| [Comment] # 😊 +# 83| [Comment] # +# 84| [Comment] # +# 85| [Comment] # +# 86| [Comment] # +# 87| [Comment] # +# 88| [Comment] # +# 89| [Comment] # +# 90| [Comment] # +# 91| [Comment] # +# 92| [Comment] # problem: only \c is parsed as part of the escape sequence +# 93| [Comment] # problem: only \C is parsed as part of the escape sequence +gems/Gemfile: +# 1| [Program] Program +# 1| 0: [Call] Call +# 1| 0: [Identifier] source +# 1| 1: [ArgumentList] ArgumentList +# 1| 0: [String] String +# 1| 0: [ReservedWord] ' +# 1| 1: [StringContent] https://rubygems.org +# 1| 2: [ReservedWord] ' +# 3| 1: [Call] Call +# 3| 0: [Identifier] gem +# 3| 1: [ArgumentList] ArgumentList +# 3| 0: [String] String +# 3| 0: [ReservedWord] ' +# 3| 1: [StringContent] foo_gem +# 3| 2: [ReservedWord] ' +# 3| 1: [ReservedWord] , +# 3| 2: [String] String +# 3| 0: [ReservedWord] ' +# 3| 1: [StringContent] ~> 2.0 +# 3| 2: [ReservedWord] ' +# 5| 2: [Call] Call +# 5| 0: [Identifier] source +# 5| 1: [ArgumentList] ArgumentList +# 5| 0: [String] String +# 5| 0: [ReservedWord] ' +# 5| 1: [StringContent] https://gems.example.com +# 5| 2: [ReservedWord] ' +# 5| 2: [DoBlock] DoBlock +# 5| 0: [ReservedWord] do +# 6| 1: [Call] Call +# 6| 0: [Identifier] gem +# 6| 1: [ArgumentList] ArgumentList +# 6| 0: [String] String +# 6| 0: [ReservedWord] ' +# 6| 1: [StringContent] my_gem +# 6| 2: [ReservedWord] ' +# 6| 1: [ReservedWord] , +# 6| 2: [String] String +# 6| 0: [ReservedWord] ' +# 6| 1: [StringContent] 1.0 +# 6| 2: [ReservedWord] ' +# 7| 2: [Call] Call +# 7| 0: [Identifier] gem +# 7| 1: [ArgumentList] ArgumentList +# 7| 0: [String] String +# 7| 0: [ReservedWord] ' +# 7| 1: [StringContent] another_gem +# 7| 2: [ReservedWord] ' +# 7| 1: [ReservedWord] , +# 7| 2: [String] String +# 7| 0: [ReservedWord] ' +# 7| 1: [StringContent] 3.1.4 +# 7| 2: [ReservedWord] ' +# 8| 3: [ReservedWord] end +gems/lib/test.rb: +# 1| [Program] Program +# 1| 0: [Class] Class +# 1| 0: [ReservedWord] class +# 1| 1: [Constant] Foo +# 2| 2: [SingletonMethod] SingletonMethod +# 2| 0: [ReservedWord] def +# 2| 1: [Self] self +# 2| 2: [ReservedWord] . +# 2| 3: [Identifier] greet +# 3| 4: [Call] Call +# 3| 0: [Identifier] puts +# 3| 1: [ArgumentList] ArgumentList +# 3| 0: [String] String +# 3| 0: [ReservedWord] " +# 3| 1: [StringContent] Hello +# 3| 2: [ReservedWord] " +# 4| 5: [ReservedWord] end +# 5| 3: [ReservedWord] end +gems/test.gemspec: +# 1| [Program] Program +# 1| 0: [Call] Call +# 1| 0: [ScopeResolution] ScopeResolution +# 1| 0: [Constant] Gem +# 1| 1: [ReservedWord] :: +# 1| 2: [Constant] Specification +# 1| 1: [ReservedWord] . +# 1| 2: [Identifier] new +# 1| 3: [DoBlock] DoBlock +# 1| 0: [ReservedWord] do +# 1| 1: [BlockParameters] BlockParameters +# 1| 0: [ReservedWord] | +# 1| 1: [Identifier] s +# 1| 2: [ReservedWord] | +# 2| 2: [Assignment] Assignment +# 2| 0: [Call] Call +# 2| 0: [Identifier] s +# 2| 1: [ReservedWord] . +# 2| 2: [Identifier] name +# 2| 1: [ReservedWord] = +# 2| 2: [String] String +# 2| 0: [ReservedWord] ' +# 2| 1: [StringContent] test +# 2| 2: [ReservedWord] ' +# 3| 3: [Assignment] Assignment +# 3| 0: [Call] Call +# 3| 0: [Identifier] s +# 3| 1: [ReservedWord] . +# 3| 2: [Identifier] version +# 3| 1: [ReservedWord] = +# 3| 2: [String] String +# 3| 0: [ReservedWord] ' +# 3| 1: [StringContent] 0.0.0 +# 3| 2: [ReservedWord] ' +# 4| 4: [Assignment] Assignment +# 4| 0: [Call] Call +# 4| 0: [Identifier] s +# 4| 1: [ReservedWord] . +# 4| 2: [Identifier] summary +# 4| 1: [ReservedWord] = +# 4| 2: [String] String +# 4| 0: [ReservedWord] " +# 4| 1: [StringContent] foo! +# 4| 2: [ReservedWord] " +# 5| 5: [Assignment] Assignment +# 5| 0: [Call] Call +# 5| 0: [Identifier] s +# 5| 1: [ReservedWord] . +# 5| 2: [Identifier] description +# 5| 1: [ReservedWord] = +# 5| 2: [String] String +# 5| 0: [ReservedWord] " +# 5| 1: [StringContent] A test +# 5| 2: [ReservedWord] " +# 6| 6: [Assignment] Assignment +# 6| 0: [Call] Call +# 6| 0: [Identifier] s +# 6| 1: [ReservedWord] . +# 6| 2: [Identifier] authors +# 6| 1: [ReservedWord] = +# 6| 2: [Array] Array +# 6| 0: [ReservedWord] [ +# 6| 1: [String] String +# 6| 0: [ReservedWord] " +# 6| 1: [StringContent] Mona Lisa +# 6| 2: [ReservedWord] " +# 6| 2: [ReservedWord] ] +# 7| 7: [Assignment] Assignment +# 7| 0: [Call] Call +# 7| 0: [Identifier] s +# 7| 1: [ReservedWord] . +# 7| 2: [Identifier] email +# 7| 1: [ReservedWord] = +# 7| 2: [String] String +# 7| 0: [ReservedWord] ' +# 7| 1: [StringContent] mona@example.com +# 7| 2: [ReservedWord] ' +# 8| 8: [Assignment] Assignment +# 8| 0: [Call] Call +# 8| 0: [Identifier] s +# 8| 1: [ReservedWord] . +# 8| 2: [Identifier] files +# 8| 1: [ReservedWord] = +# 8| 2: [Array] Array +# 8| 0: [ReservedWord] [ +# 8| 1: [String] String +# 8| 0: [ReservedWord] " +# 8| 1: [StringContent] lib/test.rb +# 8| 2: [ReservedWord] " +# 8| 2: [ReservedWord] ] +# 9| 9: [Assignment] Assignment +# 9| 0: [Call] Call +# 9| 0: [Identifier] s +# 9| 1: [ReservedWord] . +# 9| 2: [Identifier] homepage +# 9| 1: [ReservedWord] = +# 9| 2: [String] String +# 9| 0: [ReservedWord] ' +# 9| 1: [StringContent] https://github.com/github/codeql-ruby +# 9| 2: [ReservedWord] ' +# 10| 10: [ReservedWord] end +literals/literals.rb: +# 1| [Program] Program +# 2| 0: [Nil] nil +# 3| 1: [Nil] NIL +# 4| 2: [False] false +# 5| 3: [False] FALSE +# 6| 4: [True] true +# 7| 5: [True] TRUE +# 10| 6: [Integer] 1234 +# 11| 7: [Integer] 5_678 +# 12| 8: [Integer] 0 +# 13| 9: [Integer] 0d900 +# 14| 10: [Integer] 2147483647 +# 15| 11: [Integer] 2147483648 +# 18| 12: [Integer] 0x1234 +# 19| 13: [Integer] 0xbeef +# 20| 14: [Integer] 0xF0_0D +# 21| 15: [Integer] 0x000000000000000000ff +# 22| 16: [Integer] 0x7FFF_FFFF +# 23| 17: [Integer] 0x80000000 +# 24| 18: [Integer] 0xdeadbeef +# 25| 19: [Integer] 0xF00D_face +# 28| 20: [Integer] 0123 +# 29| 21: [Integer] 0o234 +# 30| 22: [Integer] 0O45_6 +# 31| 23: [Integer] 0000000000000000000000000000010 +# 32| 24: [Integer] 017777777777 +# 33| 25: [Integer] 020000000000 +# 36| 26: [Integer] 0b10010100 +# 37| 27: [Integer] 0B011_01101 +# 38| 28: [Integer] 0b00000000000000000000000000000000000000011 +# 39| 29: [Integer] 0b01111111111111111111111111111111 +# 40| 30: [Integer] 0b10000000000000000000000000000000 +# 43| 31: [Float] 12.34 +# 44| 32: [Float] 1234e-2 +# 45| 33: [Float] 1.234E1 +# 48| 34: [Rational] Rational +# 48| 0: [Integer] 23 +# 48| 1: [ReservedWord] r +# 49| 35: [Rational] Rational +# 49| 0: [Float] 9.85 +# 49| 1: [ReservedWord] r +# 52| 36: [Complex] 2i +# 59| 37: [String] String +# 59| 0: [ReservedWord] " +# 59| 1: [ReservedWord] " +# 60| 38: [String] String +# 60| 0: [ReservedWord] ' +# 60| 1: [ReservedWord] ' +# 61| 39: [String] String +# 61| 0: [ReservedWord] " +# 61| 1: [StringContent] hello +# 61| 2: [ReservedWord] " +# 62| 40: [String] String +# 62| 0: [ReservedWord] ' +# 62| 1: [StringContent] goodbye +# 62| 2: [ReservedWord] ' +# 63| 41: [String] String +# 63| 0: [ReservedWord] " +# 63| 1: [StringContent] string with escaped +# 63| 2: [EscapeSequence] \" +# 63| 3: [StringContent] quote +# 63| 4: [ReservedWord] " +# 64| 42: [String] String +# 64| 0: [ReservedWord] ' +# 64| 1: [StringContent] string with " quote +# 64| 2: [ReservedWord] ' +# 65| 43: [String] String +# 65| 0: [ReservedWord] %( +# 65| 1: [StringContent] foo bar baz +# 65| 2: [ReservedWord] ) +# 66| 44: [String] String +# 66| 0: [ReservedWord] %q< +# 66| 1: [StringContent] foo bar baz +# 66| 2: [ReservedWord] > +# 67| 45: [String] String +# 67| 0: [ReservedWord] %q( +# 67| 1: [StringContent] foo ' bar " baz' +# 67| 2: [ReservedWord] ) +# 68| 46: [String] String +# 68| 0: [ReservedWord] %Q( +# 68| 1: [StringContent] FOO ' BAR " BAZ' +# 68| 2: [ReservedWord] ) +# 69| 47: [String] String +# 69| 0: [ReservedWord] %q( +# 69| 1: [StringContent] foo\ bar +# 69| 2: [ReservedWord] ) +# 70| 48: [String] String +# 70| 0: [ReservedWord] %Q( +# 70| 1: [StringContent] foo +# 70| 2: [EscapeSequence] \ +# 70| 3: [StringContent] bar +# 70| 4: [ReservedWord] ) +# 71| 49: [String] String +# 71| 0: [ReservedWord] " +# 71| 1: [StringContent] 2 + 2 = +# 71| 2: [Interpolation] Interpolation +# 71| 0: [ReservedWord] #{ +# 71| 1: [Binary] Binary +# 71| 0: [Integer] 2 +# 71| 1: [ReservedWord] + +# 71| 2: [Integer] 2 +# 71| 2: [ReservedWord] } +# 71| 3: [ReservedWord] " +# 72| 50: [String] String +# 72| 0: [ReservedWord] %Q( +# 72| 1: [StringContent] 3 + 4 = +# 72| 2: [Interpolation] Interpolation +# 72| 0: [ReservedWord] #{ +# 72| 1: [Binary] Binary +# 72| 0: [Integer] 3 +# 72| 1: [ReservedWord] + +# 72| 2: [Integer] 4 +# 72| 2: [ReservedWord] } +# 72| 3: [ReservedWord] ) +# 73| 51: [String] String +# 73| 0: [ReservedWord] ' +# 73| 1: [StringContent] 2 + 2 = #{ 2 + 2 } +# 73| 2: [ReservedWord] ' +# 74| 52: [String] String +# 74| 0: [ReservedWord] %q( +# 74| 1: [StringContent] 3 + 4 = #{ 3 + 4 } +# 74| 2: [ReservedWord] ) +# 75| 53: [ChainedString] ChainedString +# 75| 0: [String] String +# 75| 0: [ReservedWord] " +# 75| 1: [StringContent] foo +# 75| 2: [ReservedWord] " +# 75| 1: [String] String +# 75| 0: [ReservedWord] ' +# 75| 1: [StringContent] bar +# 75| 2: [ReservedWord] ' +# 75| 2: [String] String +# 75| 0: [ReservedWord] " +# 75| 1: [StringContent] baz +# 75| 2: [ReservedWord] " +# 76| 54: [ChainedString] ChainedString +# 76| 0: [String] String +# 76| 0: [ReservedWord] %q{ +# 76| 1: [StringContent] foo +# 76| 2: [ReservedWord] } +# 76| 1: [String] String +# 76| 0: [ReservedWord] " +# 76| 1: [StringContent] bar +# 76| 2: [ReservedWord] " +# 76| 2: [String] String +# 76| 0: [ReservedWord] ' +# 76| 1: [StringContent] baz +# 76| 2: [ReservedWord] ' +# 77| 55: [ChainedString] ChainedString +# 77| 0: [String] String +# 77| 0: [ReservedWord] " +# 77| 1: [StringContent] foo +# 77| 2: [ReservedWord] " +# 77| 1: [String] String +# 77| 0: [ReservedWord] " +# 77| 1: [StringContent] bar +# 77| 2: [Interpolation] Interpolation +# 77| 0: [ReservedWord] #{ +# 77| 1: [Binary] Binary +# 77| 0: [Integer] 1 +# 77| 1: [ReservedWord] * +# 77| 2: [Integer] 1 +# 77| 2: [ReservedWord] } +# 77| 3: [ReservedWord] " +# 77| 2: [String] String +# 77| 0: [ReservedWord] ' +# 77| 1: [StringContent] baz +# 77| 2: [ReservedWord] ' +# 78| 56: [String] String +# 78| 0: [ReservedWord] " +# 78| 1: [StringContent] foo +# 78| 2: [Interpolation] Interpolation +# 78| 0: [ReservedWord] #{ +# 78| 1: [String] String +# 78| 0: [ReservedWord] " +# 78| 1: [StringContent] bar +# 78| 2: [Interpolation] Interpolation +# 78| 0: [ReservedWord] #{ +# 78| 1: [Binary] Binary +# 78| 0: [Integer] 2 +# 78| 1: [ReservedWord] + +# 78| 2: [Integer] 3 +# 78| 2: [ReservedWord] } +# 78| 3: [StringContent] baz +# 78| 4: [ReservedWord] " +# 78| 2: [ReservedWord] } +# 78| 3: [StringContent] qux +# 78| 4: [ReservedWord] " +# 79| 57: [String] String +# 79| 0: [ReservedWord] " +# 79| 1: [StringContent] foo +# 79| 2: [Interpolation] Interpolation +# 79| 0: [ReservedWord] #{ +# 79| 1: [Call] Call +# 79| 0: [Identifier] blah +# 79| 1: [ArgumentList] ArgumentList +# 79| 0: [ReservedWord] ( +# 79| 1: [ReservedWord] ) +# 79| 2: [ReservedWord] ; +# 79| 3: [Binary] Binary +# 79| 0: [Integer] 1 +# 79| 1: [ReservedWord] + +# 79| 2: [Integer] 9 +# 79| 4: [ReservedWord] } +# 79| 3: [ReservedWord] " +# 80| 58: [Assignment] Assignment +# 80| 0: [Identifier] bar +# 80| 1: [ReservedWord] = +# 80| 2: [String] String +# 80| 0: [ReservedWord] " +# 80| 1: [StringContent] bar +# 80| 2: [ReservedWord] " +# 81| 59: [Assignment] Assignment +# 81| 0: [Constant] BAR +# 81| 1: [ReservedWord] = +# 81| 2: [String] String +# 81| 0: [ReservedWord] " +# 81| 1: [StringContent] bar +# 81| 2: [ReservedWord] " +# 82| 60: [String] String +# 82| 0: [ReservedWord] " +# 82| 1: [StringContent] foo +# 82| 2: [Interpolation] Interpolation +# 82| 0: [ReservedWord] #{ +# 82| 1: [Identifier] bar +# 82| 2: [ReservedWord] } +# 82| 3: [ReservedWord] " +# 83| 61: [String] String +# 83| 0: [ReservedWord] " +# 83| 1: [StringContent] foo +# 83| 2: [Interpolation] Interpolation +# 83| 0: [ReservedWord] #{ +# 83| 1: [Constant] BAR +# 83| 2: [ReservedWord] } +# 83| 3: [ReservedWord] " +# 86| 62: [Character] ?x +# 87| 63: [Character] ?\n +# 88| 64: [Character] ?\s +# 89| 65: [Character] ?\\ +# 90| 66: [Character] ?\u{58} +# 91| 67: [Character] ?\C-a +# 92| 68: [Character] ?\M-a +# 93| 69: [Character] ?\M-\C-a +# 94| 70: [Character] ?\C-\M-a +# 97| 71: [DelimitedSymbol] DelimitedSymbol +# 97| 0: [ReservedWord] :" +# 97| 1: [ReservedWord] " +# 98| 72: [SimpleSymbol] :hello +# 99| 73: [DelimitedSymbol] DelimitedSymbol +# 99| 0: [ReservedWord] :" +# 99| 1: [StringContent] foo bar +# 99| 2: [ReservedWord] " +# 100| 74: [DelimitedSymbol] DelimitedSymbol +# 100| 0: [ReservedWord] :' +# 100| 1: [StringContent] bar baz +# 100| 2: [ReservedWord] ' +# 101| 75: [Hash] Hash +# 101| 0: [ReservedWord] { +# 101| 1: [Pair] Pair +# 101| 0: [HashKeySymbol] foo +# 101| 1: [ReservedWord] : +# 101| 2: [String] String +# 101| 0: [ReservedWord] " +# 101| 1: [StringContent] bar +# 101| 2: [ReservedWord] " +# 101| 2: [ReservedWord] } +# 102| 76: [DelimitedSymbol] DelimitedSymbol +# 102| 0: [ReservedWord] %s( +# 102| 1: [StringContent] wibble +# 102| 2: [ReservedWord] ) +# 103| 77: [DelimitedSymbol] DelimitedSymbol +# 103| 0: [ReservedWord] %s[ +# 103| 1: [StringContent] wibble wobble +# 103| 2: [ReservedWord] ] +# 104| 78: [DelimitedSymbol] DelimitedSymbol +# 104| 0: [ReservedWord] :" +# 104| 1: [StringContent] foo_ +# 104| 2: [Interpolation] Interpolation +# 104| 0: [ReservedWord] #{ +# 104| 1: [Binary] Binary +# 104| 0: [Integer] 2 +# 104| 1: [ReservedWord] + +# 104| 2: [Integer] 2 +# 104| 2: [ReservedWord] } +# 104| 3: [StringContent] _ +# 104| 4: [Interpolation] Interpolation +# 104| 0: [ReservedWord] #{ +# 104| 1: [Identifier] bar +# 104| 2: [ReservedWord] } +# 104| 5: [StringContent] _ +# 104| 6: [Interpolation] Interpolation +# 104| 0: [ReservedWord] #{ +# 104| 1: [Constant] BAR +# 104| 2: [ReservedWord] } +# 104| 7: [ReservedWord] " +# 105| 79: [DelimitedSymbol] DelimitedSymbol +# 105| 0: [ReservedWord] :' +# 105| 1: [StringContent] foo_#{ 2 + 2}_#{bar}_#{BAR} +# 105| 2: [ReservedWord] ' +# 106| 80: [DelimitedSymbol] DelimitedSymbol +# 106| 0: [ReservedWord] %s( +# 106| 1: [StringContent] foo_#{ 3 - 2 } +# 106| 2: [ReservedWord] ) +# 109| 81: [Array] Array +# 109| 0: [ReservedWord] [ +# 109| 1: [ReservedWord] ] +# 110| 82: [Array] Array +# 110| 0: [ReservedWord] [ +# 110| 1: [Integer] 1 +# 110| 2: [ReservedWord] , +# 110| 3: [Integer] 2 +# 110| 4: [ReservedWord] , +# 110| 5: [Integer] 3 +# 110| 6: [ReservedWord] ] +# 111| 83: [Array] Array +# 111| 0: [ReservedWord] [ +# 111| 1: [Integer] 4 +# 111| 2: [ReservedWord] , +# 111| 3: [Integer] 5 +# 111| 4: [ReservedWord] , +# 111| 5: [Binary] Binary +# 111| 0: [Integer] 12 +# 111| 1: [ReservedWord] / +# 111| 2: [Integer] 2 +# 111| 6: [ReservedWord] ] +# 112| 84: [Array] Array +# 112| 0: [ReservedWord] [ +# 112| 1: [Integer] 7 +# 112| 2: [ReservedWord] , +# 112| 3: [Array] Array +# 112| 0: [ReservedWord] [ +# 112| 1: [Integer] 8 +# 112| 2: [ReservedWord] , +# 112| 3: [Integer] 9 +# 112| 4: [ReservedWord] ] +# 112| 4: [ReservedWord] ] +# 115| 85: [StringArray] StringArray +# 115| 0: [ReservedWord] %w( +# 115| 1: [ReservedWord] ) +# 116| 86: [StringArray] StringArray +# 116| 0: [ReservedWord] %w( +# 116| 1: [BareString] BareString +# 116| 0: [StringContent] foo +# 116| 2: [BareString] BareString +# 116| 0: [StringContent] bar +# 116| 3: [BareString] BareString +# 116| 0: [StringContent] baz +# 116| 4: [ReservedWord] ) +# 117| 87: [StringArray] StringArray +# 117| 0: [ReservedWord] %w! +# 117| 1: [BareString] BareString +# 117| 0: [StringContent] foo +# 117| 2: [BareString] BareString +# 117| 0: [StringContent] bar +# 117| 3: [BareString] BareString +# 117| 0: [StringContent] baz +# 117| 4: [ReservedWord] ! +# 118| 88: [StringArray] StringArray +# 118| 0: [ReservedWord] %W[ +# 118| 1: [BareString] BareString +# 118| 0: [StringContent] foo +# 118| 2: [BareString] BareString +# 118| 0: [StringContent] bar +# 118| 1: [Interpolation] Interpolation +# 118| 0: [ReservedWord] #{ +# 118| 1: [Binary] Binary +# 118| 0: [Integer] 1 +# 118| 1: [ReservedWord] + +# 118| 2: [Integer] 1 +# 118| 2: [ReservedWord] } +# 118| 3: [BareString] BareString +# 118| 0: [Interpolation] Interpolation +# 118| 0: [ReservedWord] #{ +# 118| 1: [Identifier] bar +# 118| 2: [ReservedWord] } +# 118| 4: [BareString] BareString +# 118| 0: [Interpolation] Interpolation +# 118| 0: [ReservedWord] #{ +# 118| 1: [Constant] BAR +# 118| 2: [ReservedWord] } +# 118| 5: [BareString] BareString +# 118| 0: [StringContent] baz +# 118| 6: [ReservedWord] ] +# 119| 89: [StringArray] StringArray +# 119| 0: [ReservedWord] %w[ +# 119| 1: [BareString] BareString +# 119| 0: [StringContent] foo +# 119| 2: [BareString] BareString +# 119| 0: [StringContent] bar#{1+1} +# 119| 3: [BareString] BareString +# 119| 0: [StringContent] #{bar} +# 119| 4: [BareString] BareString +# 119| 0: [StringContent] #{BAR} +# 119| 5: [BareString] BareString +# 119| 0: [StringContent] baz +# 119| 6: [ReservedWord] ] +# 122| 90: [SymbolArray] SymbolArray +# 122| 0: [ReservedWord] %i( +# 122| 1: [ReservedWord] ) +# 123| 91: [SymbolArray] SymbolArray +# 123| 0: [ReservedWord] %i( +# 123| 1: [BareSymbol] BareSymbol +# 123| 0: [StringContent] foo +# 123| 2: [BareSymbol] BareSymbol +# 123| 0: [StringContent] bar +# 123| 3: [BareSymbol] BareSymbol +# 123| 0: [StringContent] baz +# 123| 4: [ReservedWord] ) +# 124| 92: [SymbolArray] SymbolArray +# 124| 0: [ReservedWord] %i@ +# 124| 1: [BareSymbol] BareSymbol +# 124| 0: [StringContent] foo +# 124| 2: [BareSymbol] BareSymbol +# 124| 0: [StringContent] bar +# 124| 3: [BareSymbol] BareSymbol +# 124| 0: [StringContent] baz +# 124| 4: [ReservedWord] @ +# 125| 93: [SymbolArray] SymbolArray +# 125| 0: [ReservedWord] %I( +# 125| 1: [BareSymbol] BareSymbol +# 125| 0: [StringContent] foo +# 125| 2: [BareSymbol] BareSymbol +# 125| 0: [StringContent] bar +# 125| 1: [Interpolation] Interpolation +# 125| 0: [ReservedWord] #{ +# 125| 1: [Binary] Binary +# 125| 0: [Integer] 2 +# 125| 1: [ReservedWord] + +# 125| 2: [Integer] 4 +# 125| 2: [ReservedWord] } +# 125| 3: [BareSymbol] BareSymbol +# 125| 0: [Interpolation] Interpolation +# 125| 0: [ReservedWord] #{ +# 125| 1: [Identifier] bar +# 125| 2: [ReservedWord] } +# 125| 4: [BareSymbol] BareSymbol +# 125| 0: [Interpolation] Interpolation +# 125| 0: [ReservedWord] #{ +# 125| 1: [Constant] BAR +# 125| 2: [ReservedWord] } +# 125| 5: [BareSymbol] BareSymbol +# 125| 0: [StringContent] baz +# 125| 6: [ReservedWord] ) +# 126| 94: [SymbolArray] SymbolArray +# 126| 0: [ReservedWord] %i( +# 126| 1: [BareSymbol] BareSymbol +# 126| 0: [StringContent] foo +# 126| 2: [BareSymbol] BareSymbol +# 126| 0: [StringContent] bar#{ +# 126| 3: [BareSymbol] BareSymbol +# 126| 0: [StringContent] 2 +# 126| 4: [BareSymbol] BareSymbol +# 126| 0: [StringContent] + +# 126| 5: [BareSymbol] BareSymbol +# 126| 0: [StringContent] 4 +# 126| 6: [BareSymbol] BareSymbol +# 126| 0: [StringContent] } +# 126| 7: [BareSymbol] BareSymbol +# 126| 0: [StringContent] #{bar} +# 126| 8: [BareSymbol] BareSymbol +# 126| 0: [StringContent] #{BAR} +# 126| 9: [BareSymbol] BareSymbol +# 126| 0: [StringContent] baz +# 126| 10: [ReservedWord] ) +# 129| 95: [Hash] Hash +# 129| 0: [ReservedWord] { +# 129| 1: [ReservedWord] } +# 130| 96: [Hash] Hash +# 130| 0: [ReservedWord] { +# 130| 1: [Pair] Pair +# 130| 0: [HashKeySymbol] foo +# 130| 1: [ReservedWord] : +# 130| 2: [Integer] 1 +# 130| 2: [ReservedWord] , +# 130| 3: [Pair] Pair +# 130| 0: [SimpleSymbol] :bar +# 130| 1: [ReservedWord] => +# 130| 2: [Integer] 2 +# 130| 4: [ReservedWord] , +# 130| 5: [Pair] Pair +# 130| 0: [String] String +# 130| 0: [ReservedWord] ' +# 130| 1: [StringContent] baz +# 130| 2: [ReservedWord] ' +# 130| 1: [ReservedWord] => +# 130| 2: [Integer] 3 +# 130| 6: [ReservedWord] } +# 131| 97: [Hash] Hash +# 131| 0: [ReservedWord] { +# 131| 1: [Pair] Pair +# 131| 0: [HashKeySymbol] foo +# 131| 1: [ReservedWord] : +# 131| 2: [Integer] 7 +# 131| 2: [ReservedWord] , +# 131| 3: [HashSplatArgument] HashSplatArgument +# 131| 0: [ReservedWord] ** +# 131| 1: [Identifier] baz +# 131| 4: [ReservedWord] } +# 134| 98: [ParenthesizedStatements] ParenthesizedStatements +# 134| 0: [ReservedWord] ( +# 134| 1: [Range] Range +# 134| 0: [Integer] 1 +# 134| 1: [ReservedWord] .. +# 134| 2: [Integer] 10 +# 134| 2: [ReservedWord] ) +# 135| 99: [ParenthesizedStatements] ParenthesizedStatements +# 135| 0: [ReservedWord] ( +# 135| 1: [Range] Range +# 135| 0: [Integer] 1 +# 135| 1: [ReservedWord] ... +# 135| 2: [Integer] 10 +# 135| 2: [ReservedWord] ) +# 136| 100: [ParenthesizedStatements] ParenthesizedStatements +# 136| 0: [ReservedWord] ( +# 136| 1: [Range] Range +# 136| 0: [Integer] 1 +# 136| 1: [ReservedWord] .. +# 136| 2: [Integer] 0 +# 136| 2: [ReservedWord] ) +# 137| 101: [ParenthesizedStatements] ParenthesizedStatements +# 137| 0: [ReservedWord] ( +# 137| 1: [Range] Range +# 137| 0: [Identifier] start +# 137| 1: [ReservedWord] .. +# 137| 2: [Binary] Binary +# 137| 0: [Integer] 2 +# 137| 1: [ReservedWord] + +# 137| 2: [Integer] 3 +# 137| 2: [ReservedWord] ) +# 138| 102: [ParenthesizedStatements] ParenthesizedStatements +# 138| 0: [ReservedWord] ( +# 138| 1: [Range] Range +# 138| 0: [Integer] 1 +# 138| 1: [ReservedWord] .. +# 138| 2: [ReservedWord] ) +# 139| 103: [ParenthesizedStatements] ParenthesizedStatements +# 139| 0: [ReservedWord] ( +# 139| 1: [Range] Range +# 139| 0: [ReservedWord] .. +# 139| 1: [Integer] 1 +# 139| 2: [ReservedWord] ) +# 140| 104: [ParenthesizedStatements] ParenthesizedStatements +# 140| 0: [ReservedWord] ( +# 140| 1: [Binary] Binary +# 140| 0: [Range] Range +# 140| 0: [Integer] 0 +# 140| 1: [ReservedWord] .. +# 140| 1: [ReservedWord] - +# 140| 2: [Integer] 1 +# 140| 2: [ReservedWord] ) +# 143| 105: [Subshell] Subshell +# 143| 0: [ReservedWord] ` +# 143| 1: [StringContent] ls -l +# 143| 2: [ReservedWord] ` +# 144| 106: [Subshell] Subshell +# 144| 0: [ReservedWord] %x( +# 144| 1: [StringContent] ls -l +# 144| 2: [ReservedWord] ) +# 145| 107: [Subshell] Subshell +# 145| 0: [ReservedWord] ` +# 145| 1: [StringContent] du -d +# 145| 2: [Interpolation] Interpolation +# 145| 0: [ReservedWord] #{ +# 145| 1: [Binary] Binary +# 145| 0: [Integer] 1 +# 145| 1: [ReservedWord] + +# 145| 2: [Integer] 1 +# 145| 2: [ReservedWord] } +# 145| 3: [StringContent] +# 145| 4: [Interpolation] Interpolation +# 145| 0: [ReservedWord] #{ +# 145| 1: [Identifier] bar +# 145| 2: [ReservedWord] } +# 145| 5: [StringContent] +# 145| 6: [Interpolation] Interpolation +# 145| 0: [ReservedWord] #{ +# 145| 1: [Constant] BAR +# 145| 2: [ReservedWord] } +# 145| 7: [ReservedWord] ` +# 146| 108: [Subshell] Subshell +# 146| 0: [ReservedWord] %x@ +# 146| 1: [StringContent] du -d +# 146| 2: [Interpolation] Interpolation +# 146| 0: [ReservedWord] #{ +# 146| 1: [Binary] Binary +# 146| 0: [Integer] 5 +# 146| 1: [ReservedWord] - +# 146| 2: [Integer] 4 +# 146| 2: [ReservedWord] } +# 146| 3: [ReservedWord] @ +# 149| 109: [Regex] Regex +# 149| 0: [ReservedWord] / +# 149| 1: [ReservedWord] / +# 150| 110: [Regex] Regex +# 150| 0: [ReservedWord] / +# 150| 1: [StringContent] foo +# 150| 2: [ReservedWord] / +# 151| 111: [Regex] Regex +# 151| 0: [ReservedWord] / +# 151| 1: [StringContent] foo +# 151| 2: [ReservedWord] /i +# 152| 112: [Regex] Regex +# 152| 0: [ReservedWord] / +# 152| 1: [StringContent] foo+ +# 152| 2: [EscapeSequence] \s +# 152| 3: [StringContent] bar +# 152| 4: [EscapeSequence] \S +# 152| 5: [ReservedWord] / +# 153| 113: [Regex] Regex +# 153| 0: [ReservedWord] / +# 153| 1: [StringContent] foo +# 153| 2: [Interpolation] Interpolation +# 153| 0: [ReservedWord] #{ +# 153| 1: [Binary] Binary +# 153| 0: [Integer] 1 +# 153| 1: [ReservedWord] + +# 153| 2: [Integer] 1 +# 153| 2: [ReservedWord] } +# 153| 3: [StringContent] bar +# 153| 4: [Interpolation] Interpolation +# 153| 0: [ReservedWord] #{ +# 153| 1: [Identifier] bar +# 153| 2: [ReservedWord] } +# 153| 5: [Interpolation] Interpolation +# 153| 0: [ReservedWord] #{ +# 153| 1: [Constant] BAR +# 153| 2: [ReservedWord] } +# 153| 6: [ReservedWord] / +# 154| 114: [Regex] Regex +# 154| 0: [ReservedWord] / +# 154| 1: [StringContent] foo +# 154| 2: [ReservedWord] /oxm +# 155| 115: [Regex] Regex +# 155| 0: [ReservedWord] %r[ +# 155| 1: [ReservedWord] ] +# 156| 116: [Regex] Regex +# 156| 0: [ReservedWord] %r( +# 156| 1: [StringContent] foo +# 156| 2: [ReservedWord] ) +# 157| 117: [Regex] Regex +# 157| 0: [ReservedWord] %r: +# 157| 1: [StringContent] foo +# 157| 2: [ReservedWord] :i +# 158| 118: [Regex] Regex +# 158| 0: [ReservedWord] %r{ +# 158| 1: [StringContent] foo+ +# 158| 2: [EscapeSequence] \s +# 158| 3: [StringContent] bar +# 158| 4: [EscapeSequence] \S +# 158| 5: [ReservedWord] } +# 159| 119: [Regex] Regex +# 159| 0: [ReservedWord] %r{ +# 159| 1: [StringContent] foo +# 159| 2: [Interpolation] Interpolation +# 159| 0: [ReservedWord] #{ +# 159| 1: [Binary] Binary +# 159| 0: [Integer] 1 +# 159| 1: [ReservedWord] + +# 159| 2: [Integer] 1 +# 159| 2: [ReservedWord] } +# 159| 3: [StringContent] bar +# 159| 4: [Interpolation] Interpolation +# 159| 0: [ReservedWord] #{ +# 159| 1: [Identifier] bar +# 159| 2: [ReservedWord] } +# 159| 5: [Interpolation] Interpolation +# 159| 0: [ReservedWord] #{ +# 159| 1: [Constant] BAR +# 159| 2: [ReservedWord] } +# 159| 6: [ReservedWord] } +# 160| 120: [Regex] Regex +# 160| 0: [ReservedWord] %r: +# 160| 1: [StringContent] foo +# 160| 2: [ReservedWord] :mxo +# 163| 121: [String] String +# 163| 0: [ReservedWord] ' +# 163| 1: [StringContent] abcdefghijklmnopqrstuvwxyzabcdef +# 163| 2: [ReservedWord] ' +# 164| 122: [String] String +# 164| 0: [ReservedWord] ' +# 164| 1: [StringContent] foobarfoobarfoobarfoobarfoobarfoo +# 164| 2: [ReservedWord] ' +# 165| 123: [String] String +# 165| 0: [ReservedWord] " +# 165| 1: [StringContent] foobar +# 165| 2: [EscapeSequence] \\ +# 165| 3: [StringContent] foobar +# 165| 4: [EscapeSequence] \\ +# 165| 5: [StringContent] foobar +# 165| 6: [EscapeSequence] \\ +# 165| 7: [StringContent] foobar +# 165| 8: [EscapeSequence] \\ +# 165| 9: [StringContent] foobar +# 165| 10: [ReservedWord] " +# 168| 124: [Call] Call +# 168| 0: [Identifier] run_sql +# 168| 1: [ArgumentList] ArgumentList +# 168| 0: [ReservedWord] ( +# 168| 1: [HeredocBeginning] <> +# 47| 2: [Integer] 16 +# 48| 37: [Binary] Binary +# 48| 0: [Identifier] foo +# 48| 1: [ReservedWord] & +# 48| 2: [Integer] 0xff +# 49| 38: [Binary] Binary +# 49| 0: [Identifier] bar +# 49| 1: [ReservedWord] | +# 49| 2: [Integer] 0x02 +# 50| 39: [Binary] Binary +# 50| 0: [Identifier] baz +# 50| 1: [ReservedWord] ^ +# 50| 2: [Identifier] qux +# 53| 40: [Binary] Binary +# 53| 0: [Identifier] x +# 53| 1: [ReservedWord] == +# 53| 2: [Identifier] y +# 54| 41: [Binary] Binary +# 54| 0: [Identifier] a +# 54| 1: [ReservedWord] != +# 54| 2: [Integer] 123 +# 55| 42: [Binary] Binary +# 55| 0: [Identifier] m +# 55| 1: [ReservedWord] === +# 55| 2: [Identifier] n +# 58| 43: [Binary] Binary +# 58| 0: [Identifier] x +# 58| 1: [ReservedWord] > +# 58| 2: [Integer] 0 +# 59| 44: [Binary] Binary +# 59| 0: [Identifier] y +# 59| 1: [ReservedWord] >= +# 59| 2: [Integer] 100 +# 60| 45: [Binary] Binary +# 60| 0: [Identifier] a +# 60| 1: [ReservedWord] < +# 60| 2: [Identifier] b +# 61| 46: [Binary] Binary +# 61| 0: [Integer] 7 +# 61| 1: [ReservedWord] <= +# 61| 2: [Identifier] foo +# 64| 47: [Binary] Binary +# 64| 0: [Identifier] a +# 64| 1: [ReservedWord] <=> +# 64| 2: [Identifier] b +# 65| 48: [Binary] Binary +# 65| 0: [Identifier] name +# 65| 1: [ReservedWord] =~ +# 65| 2: [Regex] Regex +# 65| 0: [ReservedWord] / +# 65| 1: [StringContent] foo.* +# 65| 2: [ReservedWord] / +# 66| 49: [Binary] Binary +# 66| 0: [Identifier] handle +# 66| 1: [ReservedWord] !~ +# 66| 2: [Regex] Regex +# 66| 0: [ReservedWord] / +# 66| 1: [StringContent] .*bar +# 66| 2: [ReservedWord] / +# 69| 50: [OperatorAssignment] OperatorAssignment +# 69| 0: [Identifier] x +# 69| 1: [ReservedWord] += +# 69| 2: [Integer] 128 +# 70| 51: [OperatorAssignment] OperatorAssignment +# 70| 0: [Identifier] y +# 70| 1: [ReservedWord] -= +# 70| 2: [Integer] 32 +# 71| 52: [OperatorAssignment] OperatorAssignment +# 71| 0: [Identifier] a +# 71| 1: [ReservedWord] *= +# 71| 2: [Integer] 12 +# 72| 53: [OperatorAssignment] OperatorAssignment +# 72| 0: [Identifier] b +# 72| 1: [ReservedWord] /= +# 72| 2: [Integer] 4 +# 73| 54: [OperatorAssignment] OperatorAssignment +# 73| 0: [Identifier] z +# 73| 1: [ReservedWord] %= +# 73| 2: [Integer] 2 +# 74| 55: [OperatorAssignment] OperatorAssignment +# 74| 0: [Identifier] foo +# 74| 1: [ReservedWord] **= +# 74| 2: [Identifier] bar +# 77| 56: [OperatorAssignment] OperatorAssignment +# 77| 0: [Identifier] x +# 77| 1: [ReservedWord] &&= +# 77| 2: [Identifier] y +# 78| 57: [OperatorAssignment] OperatorAssignment +# 78| 0: [Identifier] a +# 78| 1: [ReservedWord] ||= +# 78| 2: [Identifier] b +# 81| 58: [OperatorAssignment] OperatorAssignment +# 81| 0: [Identifier] x +# 81| 1: [ReservedWord] <<= +# 81| 2: [Integer] 2 +# 82| 59: [OperatorAssignment] OperatorAssignment +# 82| 0: [Identifier] y +# 82| 1: [ReservedWord] >>= +# 82| 2: [Integer] 3 +# 83| 60: [OperatorAssignment] OperatorAssignment +# 83| 0: [Identifier] foo +# 83| 1: [ReservedWord] &= +# 83| 2: [Identifier] mask +# 84| 61: [OperatorAssignment] OperatorAssignment +# 84| 0: [Identifier] bar +# 84| 1: [ReservedWord] |= +# 84| 2: [Integer] 0x01 +# 85| 62: [OperatorAssignment] OperatorAssignment +# 85| 0: [Identifier] baz +# 85| 1: [ReservedWord] ^= +# 85| 2: [Identifier] qux +# 87| 63: [Class] Class +# 87| 0: [ReservedWord] class +# 87| 1: [Constant] X +# 88| 2: [Assignment] Assignment +# 88| 0: [InstanceVariable] @x +# 88| 1: [ReservedWord] = +# 88| 2: [Integer] 1 +# 89| 3: [OperatorAssignment] OperatorAssignment +# 89| 0: [InstanceVariable] @x +# 89| 1: [ReservedWord] += +# 89| 2: [Integer] 2 +# 91| 4: [Assignment] Assignment +# 91| 0: [ClassVariable] @@y +# 91| 1: [ReservedWord] = +# 91| 2: [Integer] 3 +# 92| 5: [OperatorAssignment] OperatorAssignment +# 92| 0: [ClassVariable] @@y +# 92| 1: [ReservedWord] /= +# 92| 2: [Integer] 4 +# 93| 6: [ReservedWord] end +# 95| 64: [Assignment] Assignment +# 95| 0: [GlobalVariable] $global_var +# 95| 1: [ReservedWord] = +# 95| 2: [Integer] 5 +# 96| 65: [OperatorAssignment] OperatorAssignment +# 96| 0: [GlobalVariable] $global_var +# 96| 1: [ReservedWord] *= +# 96| 2: [Integer] 6 +# 1| [Comment] # Start with assignments to all the identifiers used below, so that they are +# 2| [Comment] # interpreted as variables. +# 22| [Comment] # Unary operations +# 31| [Comment] # Binary arithmetic operations +# 39| [Comment] # Binary logical operations +# 45| [Comment] # Binary bitwise operations +# 52| [Comment] # Equality operations +# 57| [Comment] # Relational operations +# 63| [Comment] # Misc binary operations +# 68| [Comment] # Arithmetic assign operations +# 76| [Comment] # Logical assign operations +# 80| [Comment] # Bitwise assign operations +params/params.rb: +# 1| [Program] Program +# 4| 0: [Method] Method +# 4| 0: [ReservedWord] def +# 4| 1: [Identifier] identifier_method_params +# 4| 2: [MethodParameters] MethodParameters +# 4| 0: [ReservedWord] ( +# 4| 1: [Identifier] foo +# 4| 2: [ReservedWord] , +# 4| 3: [Identifier] bar +# 4| 4: [ReservedWord] , +# 4| 5: [Identifier] baz +# 4| 6: [ReservedWord] ) +# 5| 3: [ReservedWord] end +# 8| 1: [Assignment] Assignment +# 8| 0: [Identifier] hash +# 8| 1: [ReservedWord] = +# 8| 2: [Hash] Hash +# 8| 0: [ReservedWord] { +# 8| 1: [ReservedWord] } +# 9| 2: [Call] Call +# 9| 0: [Identifier] hash +# 9| 1: [ReservedWord] . +# 9| 2: [Identifier] each +# 9| 3: [DoBlock] DoBlock +# 9| 0: [ReservedWord] do +# 9| 1: [BlockParameters] BlockParameters +# 9| 0: [ReservedWord] | +# 9| 1: [Identifier] key +# 9| 2: [ReservedWord] , +# 9| 3: [Identifier] value +# 9| 4: [ReservedWord] | +# 10| 2: [Call] Call +# 10| 0: [Identifier] puts +# 10| 1: [ArgumentList] ArgumentList +# 10| 0: [String] String +# 10| 0: [ReservedWord] " +# 10| 1: [Interpolation] Interpolation +# 10| 0: [ReservedWord] #{ +# 10| 1: [Identifier] key +# 10| 2: [ReservedWord] } +# 10| 2: [StringContent] -> +# 10| 3: [Interpolation] Interpolation +# 10| 0: [ReservedWord] #{ +# 10| 1: [Identifier] value +# 10| 2: [ReservedWord] } +# 10| 4: [ReservedWord] " +# 11| 3: [ReservedWord] end +# 14| 3: [Assignment] Assignment +# 14| 0: [Identifier] sum +# 14| 1: [ReservedWord] = +# 14| 2: [Lambda] Lambda +# 14| 0: [ReservedWord] -> +# 14| 1: [LambdaParameters] LambdaParameters +# 14| 0: [ReservedWord] ( +# 14| 1: [Identifier] foo +# 14| 2: [ReservedWord] , +# 14| 3: [Identifier] bar +# 14| 4: [ReservedWord] ) +# 14| 2: [Block] Block +# 14| 0: [ReservedWord] { +# 14| 1: [Binary] Binary +# 14| 0: [Identifier] foo +# 14| 1: [ReservedWord] + +# 14| 2: [Identifier] bar +# 14| 2: [ReservedWord] } +# 17| 4: [Method] Method +# 17| 0: [ReservedWord] def +# 17| 1: [Identifier] destructured_method_param +# 17| 2: [MethodParameters] MethodParameters +# 17| 0: [ReservedWord] ( +# 17| 1: [DestructuredParameter] DestructuredParameter +# 17| 0: [ReservedWord] ( +# 17| 1: [Identifier] a +# 17| 2: [ReservedWord] , +# 17| 3: [Identifier] b +# 17| 4: [ReservedWord] , +# 17| 5: [Identifier] c +# 17| 6: [ReservedWord] ) +# 17| 2: [ReservedWord] ) +# 18| 3: [ReservedWord] end +# 21| 5: [Assignment] Assignment +# 21| 0: [Identifier] array +# 21| 1: [ReservedWord] = +# 21| 2: [Array] Array +# 21| 0: [ReservedWord] [ +# 21| 1: [ReservedWord] ] +# 22| 6: [Call] Call +# 22| 0: [Identifier] array +# 22| 1: [ReservedWord] . +# 22| 2: [Identifier] each +# 22| 3: [Block] Block +# 22| 0: [ReservedWord] { +# 22| 1: [BlockParameters] BlockParameters +# 22| 0: [ReservedWord] | +# 22| 1: [DestructuredParameter] DestructuredParameter +# 22| 0: [ReservedWord] ( +# 22| 1: [Identifier] a +# 22| 2: [ReservedWord] , +# 22| 3: [Identifier] b +# 22| 4: [ReservedWord] ) +# 22| 2: [ReservedWord] | +# 22| 2: [Call] Call +# 22| 0: [Identifier] puts +# 22| 1: [ArgumentList] ArgumentList +# 22| 0: [Binary] Binary +# 22| 0: [Identifier] a +# 22| 1: [ReservedWord] + +# 22| 2: [Identifier] b +# 22| 3: [ReservedWord] } +# 25| 7: [Assignment] Assignment +# 25| 0: [Identifier] sum_four_values +# 25| 1: [ReservedWord] = +# 25| 2: [Lambda] Lambda +# 25| 0: [ReservedWord] -> +# 25| 1: [LambdaParameters] LambdaParameters +# 25| 0: [ReservedWord] ( +# 25| 1: [DestructuredParameter] DestructuredParameter +# 25| 0: [ReservedWord] ( +# 25| 1: [Identifier] first +# 25| 2: [ReservedWord] , +# 25| 3: [Identifier] second +# 25| 4: [ReservedWord] ) +# 25| 2: [ReservedWord] , +# 25| 3: [DestructuredParameter] DestructuredParameter +# 25| 0: [ReservedWord] ( +# 25| 1: [Identifier] third +# 25| 2: [ReservedWord] , +# 25| 3: [Identifier] fourth +# 25| 4: [ReservedWord] ) +# 25| 4: [ReservedWord] ) +# 25| 2: [Block] Block +# 25| 0: [ReservedWord] { +# 26| 1: [Binary] Binary +# 26| 0: [Binary] Binary +# 26| 0: [Binary] Binary +# 26| 0: [Identifier] first +# 26| 1: [ReservedWord] + +# 26| 2: [Identifier] second +# 26| 1: [ReservedWord] + +# 26| 2: [Identifier] third +# 26| 1: [ReservedWord] + +# 26| 2: [Identifier] fourth +# 27| 2: [ReservedWord] } +# 30| 8: [Method] Method +# 30| 0: [ReservedWord] def +# 30| 1: [Identifier] method_with_splat +# 30| 2: [MethodParameters] MethodParameters +# 30| 0: [ReservedWord] ( +# 30| 1: [Identifier] wibble +# 30| 2: [ReservedWord] , +# 30| 3: [SplatParameter] SplatParameter +# 30| 0: [ReservedWord] * +# 30| 1: [Identifier] splat +# 30| 4: [ReservedWord] , +# 30| 5: [HashSplatParameter] HashSplatParameter +# 30| 0: [ReservedWord] ** +# 30| 1: [Identifier] double_splat +# 30| 6: [ReservedWord] ) +# 31| 3: [ReservedWord] end +# 34| 9: [Call] Call +# 34| 0: [Identifier] array +# 34| 1: [ReservedWord] . +# 34| 2: [Identifier] each +# 34| 3: [DoBlock] DoBlock +# 34| 0: [ReservedWord] do +# 34| 1: [BlockParameters] BlockParameters +# 34| 0: [ReservedWord] | +# 34| 1: [Identifier] val +# 34| 2: [ReservedWord] , +# 34| 3: [SplatParameter] SplatParameter +# 34| 0: [ReservedWord] * +# 34| 1: [Identifier] splat +# 34| 4: [ReservedWord] , +# 34| 5: [HashSplatParameter] HashSplatParameter +# 34| 0: [ReservedWord] ** +# 34| 1: [Identifier] double_splat +# 34| 6: [ReservedWord] | +# 35| 2: [ReservedWord] end +# 38| 10: [Assignment] Assignment +# 38| 0: [Identifier] lambda_with_splats +# 38| 1: [ReservedWord] = +# 38| 2: [Lambda] Lambda +# 38| 0: [ReservedWord] -> +# 38| 1: [LambdaParameters] LambdaParameters +# 38| 0: [ReservedWord] ( +# 38| 1: [Identifier] x +# 38| 2: [ReservedWord] , +# 38| 3: [SplatParameter] SplatParameter +# 38| 0: [ReservedWord] * +# 38| 1: [Identifier] blah +# 38| 4: [ReservedWord] , +# 38| 5: [HashSplatParameter] HashSplatParameter +# 38| 0: [ReservedWord] ** +# 38| 1: [Identifier] wibble +# 38| 6: [ReservedWord] ) +# 38| 2: [Block] Block +# 38| 0: [ReservedWord] { +# 38| 1: [ReservedWord] } +# 41| 11: [Method] Method +# 41| 0: [ReservedWord] def +# 41| 1: [Identifier] method_with_keyword_params +# 41| 2: [MethodParameters] MethodParameters +# 41| 0: [ReservedWord] ( +# 41| 1: [Identifier] x +# 41| 2: [ReservedWord] , +# 41| 3: [KeywordParameter] KeywordParameter +# 41| 0: [Identifier] foo +# 41| 1: [ReservedWord] : +# 41| 4: [ReservedWord] , +# 41| 5: [KeywordParameter] KeywordParameter +# 41| 0: [Identifier] bar +# 41| 1: [ReservedWord] : +# 41| 2: [Integer] 7 +# 41| 6: [ReservedWord] ) +# 42| 3: [Binary] Binary +# 42| 0: [Binary] Binary +# 42| 0: [Identifier] x +# 42| 1: [ReservedWord] + +# 42| 2: [Identifier] foo +# 42| 1: [ReservedWord] + +# 42| 2: [Identifier] bar +# 43| 4: [ReservedWord] end +# 46| 12: [Method] Method +# 46| 0: [ReservedWord] def +# 46| 1: [Identifier] use_block_with_keyword +# 46| 2: [MethodParameters] MethodParameters +# 46| 0: [ReservedWord] ( +# 46| 1: [BlockParameter] BlockParameter +# 46| 0: [ReservedWord] & +# 46| 1: [Identifier] block +# 46| 2: [ReservedWord] ) +# 47| 3: [Call] Call +# 47| 0: [Identifier] puts +# 47| 1: [ArgumentList] ArgumentList +# 47| 0: [ReservedWord] ( +# 47| 1: [Call] Call +# 47| 0: [Identifier] block +# 47| 1: [ReservedWord] . +# 47| 2: [Identifier] call +# 47| 3: [ArgumentList] ArgumentList +# 47| 0: [Pair] Pair +# 47| 0: [HashKeySymbol] bar +# 47| 1: [ReservedWord] : +# 47| 2: [Integer] 2 +# 47| 1: [ReservedWord] , +# 47| 2: [Pair] Pair +# 47| 0: [HashKeySymbol] foo +# 47| 1: [ReservedWord] : +# 47| 2: [Integer] 3 +# 47| 2: [ReservedWord] ) +# 48| 4: [ReservedWord] end +# 49| 13: [Call] Call +# 49| 0: [Identifier] use_block_with_keyword +# 49| 1: [DoBlock] DoBlock +# 49| 0: [ReservedWord] do +# 49| 1: [BlockParameters] BlockParameters +# 49| 0: [ReservedWord] | +# 49| 1: [KeywordParameter] KeywordParameter +# 49| 0: [Identifier] xx +# 49| 1: [ReservedWord] : +# 49| 2: [ReservedWord] , +# 49| 3: [KeywordParameter] KeywordParameter +# 49| 0: [Identifier] yy +# 49| 1: [ReservedWord] : +# 49| 2: [Integer] 100 +# 49| 4: [ReservedWord] | +# 50| 2: [Binary] Binary +# 50| 0: [Identifier] xx +# 50| 1: [ReservedWord] + +# 50| 2: [Identifier] yy +# 51| 3: [ReservedWord] end +# 53| 14: [Assignment] Assignment +# 53| 0: [Identifier] lambda_with_keyword_params +# 53| 1: [ReservedWord] = +# 53| 2: [Lambda] Lambda +# 53| 0: [ReservedWord] -> +# 53| 1: [LambdaParameters] LambdaParameters +# 53| 0: [ReservedWord] ( +# 53| 1: [Identifier] x +# 53| 2: [ReservedWord] , +# 53| 3: [KeywordParameter] KeywordParameter +# 53| 0: [Identifier] y +# 53| 1: [ReservedWord] : +# 53| 4: [ReservedWord] , +# 53| 5: [KeywordParameter] KeywordParameter +# 53| 0: [Identifier] z +# 53| 1: [ReservedWord] : +# 53| 2: [Integer] 3 +# 53| 6: [ReservedWord] ) +# 53| 2: [Block] Block +# 53| 0: [ReservedWord] { +# 54| 1: [Binary] Binary +# 54| 0: [Binary] Binary +# 54| 0: [Identifier] x +# 54| 1: [ReservedWord] + +# 54| 2: [Identifier] y +# 54| 1: [ReservedWord] + +# 54| 2: [Identifier] z +# 55| 2: [ReservedWord] } +# 58| 15: [Method] Method +# 58| 0: [ReservedWord] def +# 58| 1: [Identifier] method_with_optional_params +# 58| 2: [MethodParameters] MethodParameters +# 58| 0: [ReservedWord] ( +# 58| 1: [Identifier] val1 +# 58| 2: [ReservedWord] , +# 58| 3: [OptionalParameter] OptionalParameter +# 58| 0: [Identifier] val2 +# 58| 1: [ReservedWord] = +# 58| 2: [Integer] 0 +# 58| 4: [ReservedWord] , +# 58| 5: [OptionalParameter] OptionalParameter +# 58| 0: [Identifier] val3 +# 58| 1: [ReservedWord] = +# 58| 2: [Integer] 100 +# 58| 6: [ReservedWord] ) +# 59| 3: [ReservedWord] end +# 62| 16: [Method] Method +# 62| 0: [ReservedWord] def +# 62| 1: [Identifier] use_block_with_optional +# 62| 2: [MethodParameters] MethodParameters +# 62| 0: [ReservedWord] ( +# 62| 1: [BlockParameter] BlockParameter +# 62| 0: [ReservedWord] & +# 62| 1: [Identifier] block +# 62| 2: [ReservedWord] ) +# 63| 3: [Call] Call +# 63| 0: [Identifier] block +# 63| 1: [ReservedWord] . +# 63| 2: [Identifier] call +# 63| 3: [ArgumentList] ArgumentList +# 63| 0: [String] String +# 63| 0: [ReservedWord] ' +# 63| 1: [StringContent] Zeus +# 63| 2: [ReservedWord] ' +# 64| 4: [ReservedWord] end +# 65| 17: [Call] Call +# 65| 0: [Identifier] use_block_with_optional +# 65| 1: [DoBlock] DoBlock +# 65| 0: [ReservedWord] do +# 65| 1: [BlockParameters] BlockParameters +# 65| 0: [ReservedWord] | +# 65| 1: [Identifier] name +# 65| 2: [ReservedWord] , +# 65| 3: [OptionalParameter] OptionalParameter +# 65| 0: [Identifier] age +# 65| 1: [ReservedWord] = +# 65| 2: [Integer] 99 +# 65| 4: [ReservedWord] | +# 66| 2: [Call] Call +# 66| 0: [Identifier] puts +# 66| 1: [ArgumentList] ArgumentList +# 66| 0: [String] String +# 66| 0: [ReservedWord] " +# 66| 1: [Interpolation] Interpolation +# 66| 0: [ReservedWord] #{ +# 66| 1: [Identifier] name +# 66| 2: [ReservedWord] } +# 66| 2: [StringContent] is +# 66| 3: [Interpolation] Interpolation +# 66| 0: [ReservedWord] #{ +# 66| 1: [Identifier] age +# 66| 2: [ReservedWord] } +# 66| 4: [StringContent] years old +# 66| 5: [ReservedWord] " +# 67| 3: [ReservedWord] end +# 70| 18: [Assignment] Assignment +# 70| 0: [Identifier] lambda_with_optional_params +# 70| 1: [ReservedWord] = +# 70| 2: [Lambda] Lambda +# 70| 0: [ReservedWord] -> +# 70| 1: [LambdaParameters] LambdaParameters +# 70| 0: [ReservedWord] ( +# 70| 1: [Identifier] a +# 70| 2: [ReservedWord] , +# 70| 3: [OptionalParameter] OptionalParameter +# 70| 0: [Identifier] b +# 70| 1: [ReservedWord] = +# 70| 2: [Integer] 1000 +# 70| 4: [ReservedWord] , +# 70| 5: [OptionalParameter] OptionalParameter +# 70| 0: [Identifier] c +# 70| 1: [ReservedWord] = +# 70| 2: [Integer] 20 +# 70| 6: [ReservedWord] ) +# 70| 2: [Block] Block +# 70| 0: [ReservedWord] { +# 70| 1: [Binary] Binary +# 70| 0: [Binary] Binary +# 70| 0: [Identifier] a +# 70| 1: [ReservedWord] + +# 70| 2: [Identifier] b +# 70| 1: [ReservedWord] + +# 70| 2: [Identifier] c +# 70| 2: [ReservedWord] } +# 73| 19: [Method] Method +# 73| 0: [ReservedWord] def +# 73| 1: [Identifier] method_with_nil_splat +# 73| 2: [MethodParameters] MethodParameters +# 73| 0: [ReservedWord] ( +# 73| 1: [Identifier] wibble +# 73| 2: [ReservedWord] , +# 73| 3: [HashSplatNil] **nil +# 73| 0: [ReservedWord] ** +# 73| 1: [ReservedWord] nil +# 73| 4: [ReservedWord] ) +# 74| 3: [ReservedWord] end +# 77| 20: [Call] Call +# 77| 0: [Identifier] array +# 77| 1: [ReservedWord] . +# 77| 2: [Identifier] each +# 77| 3: [DoBlock] DoBlock +# 77| 0: [ReservedWord] do +# 77| 1: [BlockParameters] BlockParameters +# 77| 0: [ReservedWord] | +# 77| 1: [Identifier] val +# 77| 2: [ReservedWord] , +# 77| 3: [HashSplatNil] **nil +# 77| 0: [ReservedWord] ** +# 77| 1: [ReservedWord] nil +# 77| 4: [ReservedWord] | +# 78| 2: [ReservedWord] end +# 81| 21: [Method] Method +# 81| 0: [ReservedWord] def +# 81| 1: [Identifier] anonymous_block_parameter +# 81| 2: [MethodParameters] MethodParameters +# 81| 0: [ReservedWord] ( +# 81| 1: [Identifier] array +# 81| 2: [ReservedWord] , +# 81| 3: [BlockParameter] BlockParameter +# 81| 0: [ReservedWord] & +# 81| 4: [ReservedWord] ) +# 82| 3: [Call] Call +# 82| 0: [Identifier] proc +# 82| 1: [ArgumentList] ArgumentList +# 82| 0: [ReservedWord] ( +# 82| 1: [BlockArgument] BlockArgument +# 82| 0: [ReservedWord] & +# 82| 2: [ReservedWord] ) +# 83| 4: [Call] Call +# 83| 0: [Identifier] array +# 83| 1: [ReservedWord] . +# 83| 2: [Identifier] each +# 83| 3: [ArgumentList] ArgumentList +# 83| 0: [ReservedWord] ( +# 83| 1: [BlockArgument] BlockArgument +# 83| 0: [ReservedWord] & +# 83| 2: [ReservedWord] ) +# 84| 5: [ReservedWord] end +# 1| [Comment] # Tests for the different kinds and contexts of parameters. +# 3| [Comment] # Method containing identifier parameters +# 7| [Comment] # Block containing identifier parameters +# 13| [Comment] # Lambda containing identifier parameters +# 16| [Comment] # Method containing destructured parameters +# 20| [Comment] # Block containing destructured parameters +# 24| [Comment] # Lambda containing destructured parameters +# 29| [Comment] # Method containing splat and hash-splat params +# 33| [Comment] # Block with splat and hash-splat parameter +# 37| [Comment] # Lambda with splat and hash-splat +# 40| [Comment] # Method containing keyword parameters +# 45| [Comment] # Block with keyword parameters +# 57| [Comment] # Method containing optional parameters +# 61| [Comment] # Block containing optional parameter +# 69| [Comment] # Lambda containing optional parameters +# 72| [Comment] # Method containing nil hash-splat params +# 76| [Comment] # Block with nil hash-splat parameter +# 80| [Comment] # Anonymous block parameter diff --git a/ruby/ql/test/library-tests/ast/TreeSitter.ql b/ruby/ql/test/library-tests/ast/TreeSitter.ql new file mode 100644 index 00000000000..19ef2794188 --- /dev/null +++ b/ruby/ql/test/library-tests/ast/TreeSitter.ql @@ -0,0 +1,31 @@ +/** + * @kind graph + */ + +import codeql.ruby.ast.internal.TreeSitter::Ruby + +/** + * Holds if `node` belongs to the output tree, and its property `key` has the + * given `value`. + */ +query predicate nodes(AstNode node, string key, string value) { + key = "semmle.label" and + value = "[" + node.getPrimaryQlClasses() + "] " + node.toString() +} + +/** + * Holds if `target` is a child of `source` in the AST, and property `key` of + * the edge has the given `value`. + */ +query predicate edges(AstNode source, AstNode target, string key, string value) { + source = target.getParent() and + key = ["semmle.label", "semmle.order"] and + value = target.getParentIndex().toString() +} + +/** + * Holds if property `key` of the graph has the given `value`. + */ +query predicate graphProperties(string key, string value) { + key = "semmle.graphKind" and value = "tree" +} From 0d9354322e320eb1f29bbb25bfd38de969cc40c9 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 26 Apr 2022 10:55:36 +0200 Subject: [PATCH 0182/1618] Update tree-sitter-ruby --- ruby/Cargo.lock | Bin 15116 -> 15116 bytes ruby/extractor/Cargo.toml | 2 +- ruby/generator/Cargo.toml | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ruby/Cargo.lock b/ruby/Cargo.lock index dafdc4137e110de9d85e05a538e9500f950a6126..75db597d564cb83e29377d0002720a98508a3f0c 100644 GIT binary patch delta 101 zcmeAv>nYn{Y8H@aY-wzkXl!a?nrx7iVrgt*l4y{WW@%xZmY9}oo@!`rVq%nYn{Y8H^1l$MfYWMN@pVw94YYMN+iWNe&jWNKiUXlQI|X<}($WSo*>VWezG Uq{7LGYNC_pn(AymX6D8M0QPMiJpcdz diff --git a/ruby/extractor/Cargo.toml b/ruby/extractor/Cargo.toml index aa3d7de36cf..56afbacc031 100644 --- a/ruby/extractor/Cargo.toml +++ b/ruby/extractor/Cargo.toml @@ -11,7 +11,7 @@ flate2 = "1.0" node-types = { path = "../node-types" } tree-sitter = "0.19" tree-sitter-embedded-template = "0.19" -tree-sitter-ruby = { git = "https://github.com/tree-sitter/tree-sitter-ruby.git", rev = "1ebfdb288842dae5a9233e2509a135949023dd82" } +tree-sitter-ruby = { git = "https://github.com/tree-sitter/tree-sitter-ruby.git", rev = "1a3936a3545c0bd9344a0bf983fafc7e17443e39" } clap = "3.0" tracing = "0.1" tracing-subscriber = { version = "0.3.3", features = ["env-filter"] } diff --git a/ruby/generator/Cargo.toml b/ruby/generator/Cargo.toml index ff67ec7df64..4f7824e22ea 100644 --- a/ruby/generator/Cargo.toml +++ b/ruby/generator/Cargo.toml @@ -12,4 +12,4 @@ node-types = { path = "../node-types" } tracing = "0.1" tracing-subscriber = { version = "0.3.3", features = ["env-filter"] } tree-sitter-embedded-template = "0.19" -tree-sitter-ruby = { git = "https://github.com/tree-sitter/tree-sitter-ruby.git", rev = "1ebfdb288842dae5a9233e2509a135949023dd82" } +tree-sitter-ruby = { git = "https://github.com/tree-sitter/tree-sitter-ruby.git", rev = "1a3936a3545c0bd9344a0bf983fafc7e17443e39" } From a848929069e1d07714e2bd346d6187c1ff90e15c Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 26 Apr 2022 10:57:26 +0200 Subject: [PATCH 0183/1618] Regenerate QLL library --- .../codeql/ruby/ast/internal/TreeSitter.qll | 35 ++++-- ruby/ql/lib/ruby.dbscheme | 110 +++++++++++------- 2 files changed, 93 insertions(+), 52 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll b/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll index 6151dcf67a8..51f18440a0b 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/TreeSitter.qll @@ -50,6 +50,8 @@ module Ruby { class UnderscoreArg extends @ruby_underscore_arg, AstNode { } + class UnderscoreCallOperator extends @ruby_underscore_call_operator, AstNode { } + class UnderscoreExpression extends @ruby_underscore_expression, AstNode { } class UnderscoreLhs extends @ruby_underscore_lhs, AstNode { } @@ -238,7 +240,7 @@ module Ruby { final override string getAPrimaryQlClass() { result = "Binary" } /** Gets the node corresponding to the field `left`. */ - final UnderscoreExpression getLeft() { ruby_binary_def(this, result, _, _) } + final AstNode getLeft() { ruby_binary_def(this, result, _, _) } /** Gets the node corresponding to the field `operator`. */ final string getOperator() { @@ -350,11 +352,16 @@ module Ruby { /** Gets the name of the primary QL class for this element. */ final override string getAPrimaryQlClass() { result = "BlockParameters" } + /** Gets the node corresponding to the field `locals`. */ + final Identifier getLocals(int i) { ruby_block_parameters_locals(this, i, result) } + /** Gets the `i`th child of this node. */ final AstNode getChild(int i) { ruby_block_parameters_child(this, i, result) } /** Gets a field or child node of this node. */ - final override AstNode getAFieldOrChild() { ruby_block_parameters_child(this, _, result) } + final override AstNode getAFieldOrChild() { + ruby_block_parameters_locals(this, _, result) or ruby_block_parameters_child(this, _, result) + } } /** A class representing `break` nodes. */ @@ -381,16 +388,20 @@ module Ruby { final AstNode getBlock() { ruby_call_block(this, result) } /** Gets the node corresponding to the field `method`. */ - final AstNode getMethod() { ruby_call_def(this, result) } + final AstNode getMethod() { ruby_call_method(this, result) } + + /** Gets the node corresponding to the field `operator`. */ + final UnderscoreCallOperator getOperator() { ruby_call_operator(this, result) } /** Gets the node corresponding to the field `receiver`. */ - final AstNode getReceiver() { ruby_call_receiver(this, result) } + final UnderscorePrimary getReceiver() { ruby_call_receiver(this, result) } /** Gets a field or child node of this node. */ final override AstNode getAFieldOrChild() { ruby_call_arguments(this, result) or ruby_call_block(this, result) or - ruby_call_def(this, result) or + ruby_call_method(this, result) or + ruby_call_operator(this, result) or ruby_call_receiver(this, result) } } @@ -486,10 +497,16 @@ module Ruby { final override string getAPrimaryQlClass() { result = "Comment" } } - /** A class representing `complex` tokens. */ - class Complex extends @ruby_token_complex, Token { + /** A class representing `complex` nodes. */ + class Complex extends @ruby_complex, AstNode { /** Gets the name of the primary QL class for this element. */ final override string getAPrimaryQlClass() { result = "Complex" } + + /** Gets the child of this node. */ + final AstNode getChild() { ruby_complex_def(this, result) } + + /** Gets a field or child node of this node. */ + final override AstNode getAFieldOrChild() { ruby_complex_def(this, result) } } /** A class representing `conditional` nodes. */ @@ -1199,7 +1216,7 @@ module Ruby { } /** Gets the node corresponding to the field `right`. */ - final UnderscoreExpression getRight() { ruby_operator_assignment_def(this, _, _, result) } + final AstNode getRight() { ruby_operator_assignment_def(this, _, _, result) } /** Gets a field or child node of this node. */ final override AstNode getAFieldOrChild() { @@ -1447,7 +1464,7 @@ module Ruby { final override string getAPrimaryQlClass() { result = "ScopeResolution" } /** Gets the node corresponding to the field `name`. */ - final AstNode getName() { ruby_scope_resolution_def(this, result) } + final Constant getName() { ruby_scope_resolution_def(this, result) } /** Gets the node corresponding to the field `scope`. */ final AstNode getScope() { ruby_scope_resolution_scope(this, result) } diff --git a/ruby/ql/lib/ruby.dbscheme b/ruby/ql/lib/ruby.dbscheme index 9fdd1d40fd3..1199e154f5e 100644 --- a/ruby/ql/lib/ruby.dbscheme +++ b/ruby/ql/lib/ruby.dbscheme @@ -52,6 +52,8 @@ case @diagnostic.severity of @ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary +@ruby_underscore_call_operator = @ruby_reserved_word + @ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_unary | @ruby_underscore_arg | @ruby_yield @ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable @@ -66,13 +68,13 @@ case @diagnostic.severity of @ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern -@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric @ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr -@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield -@ruby_underscore_simple_numeric = @ruby_rational | @ruby_token_complex | @ruby_token_float | @ruby_token_integer +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer @ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier @@ -147,7 +149,7 @@ ruby_as_pattern_def( @ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs -@ruby_assignment_right_type = @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression ruby_assignment_def( unique int id: @ruby_assignment, @@ -207,6 +209,8 @@ ruby_begin_block_def( unique int id: @ruby_begin_block ); +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + case @ruby_binary.operator of 0 = @ruby_binary_bangequal | 1 = @ruby_binary_bangtilde @@ -238,7 +242,7 @@ case @ruby_binary.operator of ruby_binary_def( unique int id: @ruby_binary, - int left: @ruby_underscore_expression ref, + int left: @ruby_binary_left_type ref, int operator: int ref, int right: @ruby_underscore_expression ref ); @@ -279,6 +283,13 @@ ruby_block_parameter_def( unique int id: @ruby_block_parameter ); +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + @ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier #keyset[ruby_block_parameters, index] @@ -313,18 +324,25 @@ ruby_call_block( unique int block: @ruby_call_block_type ref ); -@ruby_call_method_type = @ruby_argument_list | @ruby_scope_resolution | @ruby_token_operator | @ruby_underscore_variable +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable -@ruby_call_receiver_type = @ruby_call | @ruby_underscore_primary +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); ruby_call_receiver( unique int ruby_call: @ruby_call ref, - unique int receiver: @ruby_call_receiver_type ref + unique int receiver: @ruby_underscore_primary ref ); ruby_call_def( - unique int id: @ruby_call, - int method: @ruby_call_method_type ref + unique int id: @ruby_call ); ruby_case_value( @@ -394,6 +412,13 @@ ruby_class_def( int name: @ruby_class_name_type ref ); +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + ruby_conditional_def( unique int id: @ruby_conditional, int alternative: @ruby_underscore_arg ref, @@ -846,11 +871,13 @@ case @ruby_operator_assignment.operator of ; +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + ruby_operator_assignment_def( unique int id: @ruby_operator_assignment, int left: @ruby_underscore_lhs ref, int operator: int ref, - int right: @ruby_underscore_expression ref + int right: @ruby_operator_assignment_right_type ref ); ruby_optional_parameter_def( @@ -1030,8 +1057,6 @@ ruby_right_assignment_list_def( unique int id: @ruby_right_assignment_list ); -@ruby_scope_resolution_name_type = @ruby_token_constant | @ruby_token_identifier - @ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary ruby_scope_resolution_scope( @@ -1041,7 +1066,7 @@ ruby_scope_resolution_scope( ruby_scope_resolution_def( unique int id: @ruby_scope_resolution, - int name: @ruby_scope_resolution_name_type ref + int name: @ruby_token_constant ref ); ruby_setter_def( @@ -1289,38 +1314,37 @@ case @ruby_token.kind of | 1 = @ruby_token_character | 2 = @ruby_token_class_variable | 3 = @ruby_token_comment -| 4 = @ruby_token_complex -| 5 = @ruby_token_constant -| 6 = @ruby_token_empty_statement -| 7 = @ruby_token_encoding -| 8 = @ruby_token_escape_sequence -| 9 = @ruby_token_false -| 10 = @ruby_token_file -| 11 = @ruby_token_float -| 12 = @ruby_token_forward_argument -| 13 = @ruby_token_forward_parameter -| 14 = @ruby_token_global_variable -| 15 = @ruby_token_hash_key_symbol -| 16 = @ruby_token_hash_splat_nil -| 17 = @ruby_token_heredoc_beginning -| 18 = @ruby_token_heredoc_content -| 19 = @ruby_token_heredoc_end -| 20 = @ruby_token_identifier -| 21 = @ruby_token_instance_variable -| 22 = @ruby_token_integer -| 23 = @ruby_token_line -| 24 = @ruby_token_nil -| 25 = @ruby_token_operator -| 26 = @ruby_token_self -| 27 = @ruby_token_simple_symbol -| 28 = @ruby_token_string_content -| 29 = @ruby_token_super -| 30 = @ruby_token_true -| 31 = @ruby_token_uninterpreted +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted ; -@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_parameter | @ruby_block_parameters | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_parameter | @ruby_block_parameters | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield @ruby_ast_node_parent = @file | @ruby_ast_node From 65989ae564a82d73e269e7c16b33d4ba9bc90a1b Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Wed, 27 Apr 2022 21:27:45 +0200 Subject: [PATCH 0184/1618] Update dbscheme stats --- ruby/ql/lib/ruby.dbscheme.stats | 6547 ++++++++++++++++--------------- 1 file changed, 3332 insertions(+), 3215 deletions(-) diff --git a/ruby/ql/lib/ruby.dbscheme.stats b/ruby/ql/lib/ruby.dbscheme.stats index 4ee465bdb28..782ae4db56b 100644 --- a/ruby/ql/lib/ruby.dbscheme.stats +++ b/ruby/ql/lib/ruby.dbscheme.stats @@ -5,7 +5,7 @@ @diagnostic_error - 129 + 155 @diagnostic_info @@ -21,7 +21,7 @@ @erb_directive - 1449 + 1414 @erb_graphql_directive @@ -29,19 +29,19 @@ @erb_output_directive - 3895 + 3806 @erb_reserved_word - 10689 + 10441 @erb_template - 1562 + 1563 @erb_token_code - 5344 + 5220 @erb_token_comment @@ -49,23 +49,23 @@ @erb_token_content - 3816 + 3761 @file - 16948 + 17168 @folder - 4774 + 4792 @location_default - 8504708 + 8508604 - + @ruby_alias - 1256 + 1244 @ruby_alternative_pattern @@ -73,11 +73,11 @@ @ruby_argument_list - 663118 + 664517 @ruby_array - 245466 + 245561 @ruby_array_pattern @@ -89,19 +89,19 @@ @ruby_assignment - 130604 + 130246 @ruby_bare_string - 11474 + 11487 @ruby_bare_symbol - 2137 + 2106 @ruby_begin - 2533 + 2523 @ruby_begin_block @@ -113,19 +113,19 @@ @ruby_binary_ampersandampersand - 8822 + 8700 @ruby_binary_and - 1355 + 1348 @ruby_binary_bangequal - 1585 + 1586 @ruby_binary_bangtilde - 177 + 178 @ruby_binary_caret @@ -133,7 +133,7 @@ @ruby_binary_equalequal - 31084 + 31159 @ruby_binary_equalequalequal @@ -141,15 +141,15 @@ @ruby_binary_equaltilde - 1822 + 1820 @ruby_binary_langle - 1343 + 1334 @ruby_binary_langleequal - 369 + 368 @ruby_binary_langleequalrangle @@ -157,43 +157,43 @@ @ruby_binary_langlelangle - 10484 + 10368 @ruby_binary_minus - 2883 + 2381 @ruby_binary_or - 673 + 665 @ruby_binary_percent - 1014 + 1009 @ruby_binary_pipe - 981 + 968 @ruby_binary_pipepipe - 8088 + 8001 @ruby_binary_plus - 6102 + 6116 @ruby_binary_rangle - 2431 + 2400 @ruby_binary_rangleequal - 556 + 558 @ruby_binary_ranglerangle - 230 + 231 @ruby_binary_slash @@ -201,19 +201,19 @@ @ruby_binary_star - 3119 + 3286 @ruby_binary_starstar - 1291 + 1316 @ruby_block - 96904 + 97359 @ruby_block_argument - 6048 + 6050 @ruby_block_parameter @@ -221,15 +221,15 @@ @ruby_block_parameters - 23501 + 23336 @ruby_break - 3343 + 3338 @ruby_call - 961220 + 965401 @ruby_case__ @@ -237,23 +237,27 @@ @ruby_case_match - 2 + 0 @ruby_chained_string - 894 + 885 @ruby_class - 16778 + 16841 + + + @ruby_complex + 53 @ruby_conditional - 3556 + 3464 @ruby_delimited_symbol - 1216 + 1257 @ruby_destructured_left_assignment @@ -265,23 +269,23 @@ @ruby_do - 1621 + 1610 @ruby_do_block - 136559 + 137435 @ruby_element_reference - 82281 + 82234 @ruby_else - 6946 + 6933 @ruby_elsif - 1606 + 1595 @ruby_end_block @@ -289,15 +293,15 @@ @ruby_ensure - 3786 + 3718 @ruby_exception_variable - 1021 + 1001 @ruby_exceptions - 1641 + 1639 @ruby_expression_reference_pattern @@ -309,11 +313,11 @@ @ruby_for - 163 + 162 @ruby_hash - 39344 + 39413 @ruby_hash_pattern @@ -321,19 +325,19 @@ @ruby_hash_splat_argument - 1813 + 1856 @ruby_hash_splat_parameter - 1351 + 1355 @ruby_heredoc_body - 5577 + 5575 @ruby_if - 18504 + 18392 @ruby_if_guard @@ -341,23 +345,23 @@ @ruby_if_modifier - 13763 + 13620 @ruby_in - 163 + 162 @ruby_in_clause - 2 + 0 @ruby_interpolation - 38383 + 38208 @ruby_keyword_parameter - 3777 + 3794 @ruby_keyword_pattern @@ -365,39 +369,39 @@ @ruby_lambda - 7499 + 7472 @ruby_lambda_parameters - 1659 + 1664 @ruby_left_assignment_list - 2887 + 2873 @ruby_method - 98643 + 98356 @ruby_method_parameters - 28992 + 28861 @ruby_module - 21140 + 21557 @ruby_next - 2070 + 2005 @ruby_operator_assignment_ampersandampersandequal - 90 + 88 @ruby_operator_assignment_ampersandequal - 15 + 16 @ruby_operator_assignment_caretequal @@ -409,7 +413,7 @@ @ruby_operator_assignment_minusequal - 294 + 292 @ruby_operator_assignment_percentequal @@ -421,11 +425,11 @@ @ruby_operator_assignment_pipepipeequal - 4638 + 4611 @ruby_operator_assignment_plusequal - 1752 + 1759 @ruby_operator_assignment_ranglerangleequal @@ -445,11 +449,11 @@ @ruby_optional_parameter - 6527 + 6435 @ruby_pair - 235172 + 235158 @ruby_parenthesized_pattern @@ -457,23 +461,23 @@ @ruby_parenthesized_statements - 10153 + 10247 @ruby_pattern - 3878 + 3895 @ruby_program - 16935 + 17142 @ruby_range_dotdot - 2750 + 2831 @ruby_range_dotdotdot - 1544 + 1356 @ruby_rational @@ -485,19 +489,19 @@ @ruby_regex - 12828 + 12854 @ruby_rescue - 2085 + 2061 @ruby_rescue_modifier - 551 + 525 @ruby_reserved_word - 3653831 + 3667249 @ruby_rest_assignment @@ -509,15 +513,15 @@ @ruby_return - 8521 + 8495 @ruby_right_assignment_list - 1376 + 1288 @ruby_scope_resolution - 80201 + 80009 @ruby_setter @@ -525,63 +529,59 @@ @ruby_singleton_class - 626 + 620 @ruby_singleton_method - 6563 + 6539 @ruby_splat_argument - 3179 + 3046 @ruby_splat_parameter - 2936 + 2905 @ruby_string__ - 474637 + 473533 @ruby_string_array - 3868 + 3840 @ruby_subshell - 409 + 403 @ruby_superclass - 13262 + 13318 @ruby_symbol_array - 457 + 463 @ruby_then - 24592 + 24329 @ruby_token_character - 416 + 437 @ruby_token_class_variable - 776 + 857 @ruby_token_comment - 179885 - - - @ruby_token_complex - 36 + 180978 @ruby_token_constant - 284770 + 283898 @ruby_token_empty_statement @@ -593,11 +593,11 @@ @ruby_token_escape_sequence - 75435 + 75715 @ruby_token_false - 16937 + 16909 @ruby_token_file @@ -605,23 +605,23 @@ @ruby_token_float - 7814 + 7830 @ruby_token_forward_argument - 66 + 72 @ruby_token_forward_parameter - 75 + 94 @ruby_token_global_variable - 7078 + 7057 @ruby_token_hash_key_symbol - 228521 + 228509 @ruby_token_hash_splat_nil @@ -629,27 +629,27 @@ @ruby_token_heredoc_beginning - 5603 + 5600 @ruby_token_heredoc_content - 12423 + 12542 @ruby_token_heredoc_end - 5577 + 5575 @ruby_token_identifier - 1482144 + 1483080 @ruby_token_instance_variable - 81594 + 81049 @ruby_token_integer - 298439 + 298658 @ruby_token_line @@ -657,31 +657,31 @@ @ruby_token_nil - 17874 + 17920 @ruby_token_operator - 782 + 781 @ruby_token_self - 13136 + 12958 @ruby_token_simple_symbol - 249753 + 249119 @ruby_token_string_content - 488998 + 488016 @ruby_token_super - 5009 + 5058 @ruby_token_true - 23064 + 23298 @ruby_token_uninterpreted @@ -689,23 +689,23 @@ @ruby_unary_bang - 5738 + 5788 @ruby_unary_definedquestion - 1311 + 1312 @ruby_unary_minus - 8570 + 9122 @ruby_unary_not - 237 + 236 @ruby_unary_plus - 1389 + 1386 @ruby_unary_tilde @@ -717,7 +717,7 @@ @ruby_unless - 2568 + 2578 @ruby_unless_guard @@ -725,15 +725,15 @@ @ruby_unless_modifier - 4341 + 4207 @ruby_until - 114 + 113 @ruby_until_modifier - 218 + 206 @ruby_variable_reference_pattern @@ -741,32 +741,32 @@ @ruby_when - 3229 + 3239 @ruby_while - 1344 + 1335 @ruby_while_modifier - 184 + 179 @ruby_yield - 2406 + 2385 containerparent - 21696 + 21934 parent - 4774 + 4792 child - 21696 + 21934 @@ -780,37 +780,37 @@ 1 2 - 2134 + 2142 2 3 - 905 + 909 3 4 - 439 + 441 4 5 - 297 + 298 5 7 - 375 + 376 7 13 - 388 + 389 13 - 120 - 232 + 124 + 233 @@ -826,7 +826,7 @@ 1 2 - 21696 + 21934 @@ -836,11 +836,11 @@ diagnostics - 129 + 155 id - 129 + 155 severity @@ -856,11 +856,11 @@ full_error_message - 103 + 129 location - 129 + 155 @@ -874,7 +874,7 @@ 1 2 - 129 + 155 @@ -890,7 +890,7 @@ 1 2 - 129 + 155 @@ -906,7 +906,7 @@ 1 2 - 129 + 155 @@ -922,7 +922,7 @@ 1 2 - 129 + 155 @@ -938,7 +938,7 @@ 1 2 - 129 + 155 @@ -952,8 +952,8 @@ 12 - 10 - 11 + 12 + 13 12 @@ -1000,8 +1000,8 @@ 12 - 8 - 9 + 10 + 11 12 @@ -1016,8 +1016,8 @@ 12 - 10 - 11 + 12 + 13 12 @@ -1032,8 +1032,8 @@ 12 - 10 - 11 + 12 + 13 12 @@ -1080,8 +1080,8 @@ 12 - 8 - 9 + 10 + 11 12 @@ -1096,8 +1096,8 @@ 12 - 10 - 11 + 12 + 13 12 @@ -1107,6 +1107,59 @@ error_message id + + + 12 + + + 1 + 2 + 12 + + + 11 + 12 + 12 + + + + + + + error_message + severity + + + 12 + + + 1 + 2 + 25 + + + + + + + error_message + error_tag + + + 12 + + + 1 + 2 + 25 + + + + + + + error_message + full_error_message 12 @@ -1125,59 +1178,6 @@ - - error_message - severity - - - 12 - - - 1 - 2 - 25 - - - - - - - error_message - error_tag - - - 12 - - - 1 - 2 - 25 - - - - - - - error_message - full_error_message - - - 12 - - - 1 - 2 - 12 - - - 7 - 8 - 12 - - - - - error_message location @@ -1191,8 +1191,8 @@ 12 - 9 - 10 + 11 + 12 12 @@ -1209,7 +1209,7 @@ 1 2 - 77 + 103 2 @@ -1230,7 +1230,7 @@ 1 2 - 103 + 129 @@ -1246,7 +1246,7 @@ 1 2 - 103 + 129 @@ -1262,7 +1262,7 @@ 1 2 - 103 + 129 @@ -1278,7 +1278,7 @@ 1 2 - 77 + 103 2 @@ -1299,7 +1299,7 @@ 1 2 - 129 + 155 @@ -1315,7 +1315,7 @@ 1 2 - 129 + 155 @@ -1331,7 +1331,7 @@ 1 2 - 129 + 155 @@ -1347,7 +1347,7 @@ 1 2 - 129 + 155 @@ -1363,7 +1363,7 @@ 1 2 - 129 + 155 @@ -1373,23 +1373,23 @@ erb_ast_node_info - 25623 + 25078 node - 25623 + 25078 parent - 6199 + 6088 parent_index - 754 + 668 loc - 25620 + 25075 @@ -1403,7 +1403,7 @@ 1 2 - 25623 + 25078 @@ -1419,7 +1419,7 @@ 1 2 - 25623 + 25078 @@ -1435,7 +1435,7 @@ 1 2 - 25623 + 25078 @@ -1451,17 +1451,17 @@ 1 3 - 454 + 460 3 4 - 5487 + 5360 4 - 250 - 257 + 226 + 267 @@ -1477,17 +1477,17 @@ 1 3 - 454 + 460 3 4 - 5487 + 5360 4 - 250 - 257 + 226 + 267 @@ -1503,17 +1503,17 @@ 1 3 - 454 + 460 3 4 - 5487 + 5360 4 - 250 - 257 + 226 + 267 @@ -1529,52 +1529,57 @@ 1 2 - 160 + 86 2 3 - 115 + 106 3 4 - 97 + 121 4 5 - 21 + 5 5 6 - 72 + 65 6 - 8 - 60 + 7 + 50 - 8 - 13 - 60 + 7 + 11 + 50 - 14 - 24 - 60 + 11 + 19 + 53 - 24 - 45 - 57 + 19 + 38 + 53 - 48 - 2046 - 48 + 39 + 72 + 50 + + + 74 + 2050 + 23 @@ -1590,52 +1595,57 @@ 1 2 - 160 + 86 2 3 - 115 + 106 3 4 - 97 + 121 4 5 - 21 + 5 5 6 - 72 + 65 6 - 8 - 60 + 7 + 50 - 8 - 13 - 60 + 7 + 11 + 50 - 14 - 24 - 60 + 11 + 19 + 53 - 24 - 45 - 57 + 19 + 38 + 53 - 48 - 2046 - 48 + 39 + 72 + 50 + + + 74 + 2050 + 23 @@ -1651,52 +1661,57 @@ 1 2 - 160 + 86 2 3 - 115 + 106 3 4 - 97 + 121 4 5 - 21 + 5 5 6 - 72 + 65 6 - 8 - 60 + 7 + 50 - 8 - 13 - 60 + 7 + 11 + 50 - 14 - 24 - 60 + 11 + 19 + 53 - 24 - 45 - 57 + 19 + 38 + 53 - 48 - 2045 - 48 + 39 + 72 + 50 + + + 74 + 2049 + 23 @@ -1712,12 +1727,12 @@ 1 2 - 25617 + 25072 2 3 - 3 + 2 @@ -1733,12 +1748,12 @@ 1 2 - 25617 + 25072 2 3 - 3 + 2 @@ -1754,7 +1769,7 @@ 1 2 - 25620 + 25075 @@ -1812,15 +1827,15 @@ erb_directive_def - 1449 + 1414 id - 1449 + 1414 child - 1449 + 1414 @@ -1834,7 +1849,7 @@ 1 2 - 1449 + 1414 @@ -1850,7 +1865,7 @@ 1 2 - 1449 + 1414 @@ -1882,7 +1897,7 @@ 1 2 - 3 + 2 @@ -1902,15 +1917,15 @@ erb_output_directive_def - 3895 + 3806 id - 3895 + 3806 child - 3895 + 3806 @@ -1924,7 +1939,7 @@ 1 2 - 3895 + 3806 @@ -1940,7 +1955,7 @@ 1 2 - 3895 + 3806 @@ -1950,19 +1965,19 @@ erb_template_child - 9161 + 8982 erb_template - 427 + 433 index - 754 + 668 child - 9161 + 8982 @@ -1976,52 +1991,52 @@ 1 3 - 27 + 26 3 4 - 142 + 139 4 7 - 24 + 26 7 9 - 30 + 29 9 - 13 - 36 + 12 + 35 - 13 + 12 17 - 33 + 38 17 - 30 - 36 + 29 + 32 - 30 - 43 - 36 + 29 + 35 + 35 - 43 - 72 - 33 + 35 + 56 + 35 - 74 - 250 - 27 + 61 + 226 + 32 @@ -2037,52 +2052,52 @@ 1 3 - 27 + 26 3 4 - 142 + 139 4 7 - 24 + 26 7 9 - 30 + 29 9 - 13 - 36 + 12 + 35 - 13 + 12 17 - 33 + 38 17 - 30 - 36 + 29 + 32 - 30 - 43 - 36 + 29 + 35 + 35 - 43 - 72 - 33 + 35 + 56 + 35 - 74 - 250 - 27 + 61 + 226 + 32 @@ -2098,52 +2113,57 @@ 1 2 - 160 + 86 2 3 - 115 + 106 3 4 - 97 + 121 4 5 - 21 + 5 5 6 - 72 + 65 6 - 8 - 60 + 7 + 50 - 8 - 13 - 60 + 7 + 11 + 50 - 14 - 24 - 60 + 11 + 19 + 53 - 24 - 45 - 57 + 19 + 38 + 53 - 48 - 142 - 48 + 39 + 72 + 50 + + + 74 + 147 + 23 @@ -2159,52 +2179,57 @@ 1 2 - 160 + 86 2 3 - 115 + 106 3 4 - 97 + 121 4 5 - 21 + 5 5 6 - 72 + 65 6 - 8 - 60 + 7 + 50 - 8 - 13 - 60 + 7 + 11 + 50 - 14 - 24 - 60 + 11 + 19 + 53 - 24 - 45 - 57 + 19 + 38 + 53 - 48 - 142 - 48 + 39 + 72 + 50 + + + 74 + 147 + 23 @@ -2220,7 +2245,7 @@ 1 2 - 9161 + 8982 @@ -2236,7 +2261,7 @@ 1 2 - 9161 + 8982 @@ -2246,30 +2271,30 @@ erb_template_def - 1562 + 1563 id - 1562 + 1563 erb_tokeninfo - 19851 + 19423 id - 19851 + 19423 kind - 9 + 8 value - 5875 + 5800 @@ -2283,7 +2308,7 @@ 1 2 - 19851 + 19423 @@ -2299,7 +2324,7 @@ 1 2 - 19851 + 19423 @@ -2313,19 +2338,19 @@ 12 - 1259 - 1260 - 3 + 1266 + 1267 + 2 - 1763 - 1764 - 3 + 1757 + 1758 + 2 - 3526 - 3527 - 3 + 3514 + 3515 + 2 @@ -2341,17 +2366,17 @@ 52 53 - 3 + 2 - 873 - 874 - 3 + 884 + 885 + 2 - 1013 - 1014 - 3 + 1016 + 1017 + 2 @@ -2367,22 +2392,22 @@ 1 2 - 4689 + 4662 2 3 - 691 + 659 3 - 20 - 445 + 23 + 436 - 20 - 1697 - 48 + 32 + 1696 + 41 @@ -2398,7 +2423,7 @@ 1 2 - 5875 + 5800 @@ -2408,15 +2433,15 @@ files - 16948 + 17168 id - 16948 + 17168 name - 16948 + 17168 @@ -2430,7 +2455,7 @@ 1 2 - 16948 + 17168 @@ -2446,7 +2471,7 @@ 1 2 - 16948 + 17168 @@ -2456,15 +2481,15 @@ folders - 4774 + 4792 id - 4774 + 4792 name - 4774 + 4792 @@ -2478,7 +2503,7 @@ 1 2 - 4774 + 4792 @@ -2494,7 +2519,7 @@ 1 2 - 4774 + 4792 @@ -2504,31 +2529,31 @@ locations_default - 8504708 + 8508604 id - 8504708 + 8508604 file - 16948 + 17168 start_line - 30559 + 30674 start_column - 5045 + 5064 end_line - 30559 + 30674 end_column - 5110 + 5129 @@ -2542,7 +2567,7 @@ 1 2 - 8504708 + 8508604 @@ -2558,7 +2583,7 @@ 1 2 - 8504708 + 8508604 @@ -2574,7 +2599,7 @@ 1 2 - 8504708 + 8508604 @@ -2590,7 +2615,7 @@ 1 2 - 8504708 + 8508604 @@ -2606,7 +2631,7 @@ 1 2 - 8504708 + 8508604 @@ -2621,73 +2646,68 @@ 1 - 34 - 1397 + 32 + 1337 - 34 - 52 - 1280 + 32 + 48 + 1311 - 52 - 73 - 1345 + 48 + 72 + 1376 - 73 + 72 94 - 1319 + 1493 94 127 - 1280 + 1298 127 - 168 - 1293 + 169 + 1311 - 168 - 215 - 1306 + 169 + 216 + 1298 - 215 - 269 - 1280 + 216 + 271 + 1298 - 269 - 350 - 1293 + 271 + 353 + 1311 - 350 - 471 - 1293 + 353 + 475 + 1298 - 474 - 717 - 1280 + 476 + 721 + 1298 - 718 - 1367 - 1280 + 724 + 1480 + 1298 - 1390 - 15687 - 1280 - - - 22816 + 1481 22817 - 12 + 1233 @@ -2702,68 +2722,68 @@ 1 - 8 - 1500 + 7 + 1116 - 8 - 11 - 1371 + 7 + 10 + 1545 - 11 - 14 - 1487 + 10 + 13 + 1389 - 14 - 17 - 1423 + 13 + 16 + 1493 - 17 - 21 - 1436 + 16 + 20 + 1571 - 21 - 26 - 1371 + 20 + 25 + 1363 - 26 - 32 - 1345 + 25 + 31 + 1441 - 32 - 39 - 1397 + 31 + 38 + 1350 - 39 - 51 - 1384 + 38 + 49 + 1441 - 51 - 75 - 1293 + 49 + 69 + 1324 - 75 - 125 - 1280 + 69 + 117 + 1298 - 125 - 313 - 1280 + 119 + 257 + 1298 - 323 + 260 2337 - 375 + 532 @@ -2779,67 +2799,67 @@ 1 16 - 1280 + 1415 16 25 - 1410 + 1428 25 32 - 1358 + 1363 32 41 - 1358 + 1376 41 47 - 1500 + 1506 47 54 - 1526 + 1532 54 62 - 1332 + 1363 62 - 68 - 1293 + 69 + 1402 - 68 - 76 - 1371 + 69 + 77 + 1428 - 76 - 85 - 1280 + 77 + 87 + 1350 - 85 - 97 - 1293 + 87 + 101 + 1324 - 97 - 119 - 1293 + 101 + 130 + 1298 - 119 + 130 357 - 646 + 376 @@ -2855,67 +2875,67 @@ 1 8 - 1461 + 1558 8 11 - 1397 + 1467 11 14 - 1487 + 1506 14 17 - 1410 + 1415 17 21 - 1461 + 1467 21 26 - 1371 + 1337 26 32 - 1345 + 1363 32 39 - 1397 + 1415 39 51 - 1384 + 1402 51 75 - 1293 + 1298 75 - 125 - 1280 + 126 + 1311 - 125 - 313 - 1280 + 126 + 343 + 1298 - 323 + 354 2337 - 375 + 324 @@ -2931,67 +2951,67 @@ 1 20 - 1306 + 1441 20 28 - 1280 + 1298 28 36 - 1371 + 1389 36 45 - 1358 + 1363 45 50 - 1306 + 1311 50 57 - 1345 + 1350 57 64 - 1371 + 1376 64 71 - 1280 + 1298 71 78 - 1397 + 1376 78 87 - 1384 + 1428 87 - 98 - 1280 + 99 + 1402 - 98 - 116 - 1293 + 99 + 120 + 1363 - 116 + 120 367 - 970 + 766 @@ -3007,72 +3027,67 @@ 1 2 - 1513 + 1519 2 - 5 - 1759 + 4 + 1753 5 6 - 3532 + 3545 6 10 - 2445 + 2454 10 - 16 - 2302 + 17 + 2805 - 16 - 21 - 2419 + 17 + 24 + 2441 - 21 - 37 - 2367 + 24 + 42 + 2350 - 37 - 70 - 2315 + 42 + 78 + 2337 - 70 - 113 - 2328 + 78 + 119 + 2311 - 113 - 163 - 2302 + 119 + 173 + 2324 - 163 - 256 - 2315 + 173 + 279 + 2311 - 257 - 673 - 2302 + 281 + 866 + 2311 - 678 - 4748 - 2302 - - - 4761 - 9964 - 349 + 866 + 10012 + 2207 @@ -3088,47 +3103,47 @@ 1 2 - 10699 + 10713 2 3 - 4787 + 4753 3 6 - 2328 + 2337 6 - 10 - 2729 + 9 + 2363 - 10 - 15 - 2393 + 9 + 14 + 2792 - 15 - 24 - 2445 + 14 + 22 + 2324 - 24 - 64 - 2302 + 22 + 57 + 2311 - 64 - 378 - 2302 + 57 + 287 + 2311 - 393 - 1310 - 569 + 291 + 1322 + 766 @@ -3144,72 +3159,72 @@ 1 2 - 1513 + 1519 2 3 - 1578 + 1584 3 4 - 2548 + 2558 4 6 - 2445 + 2441 6 8 - 1578 + 1584 8 - 12 - 2302 + 13 + 2818 - 12 - 16 - 2535 + 13 + 18 + 2610 - 16 - 26 - 2406 + 18 + 30 + 2506 - 26 - 41 - 2406 + 30 + 43 + 2363 - 41 - 54 - 2380 + 43 + 57 + 2428 - 54 - 68 - 2458 + 57 + 70 + 2324 - 68 - 85 - 2419 + 70 + 89 + 2350 - 85 - 111 - 2367 + 89 + 116 + 2311 - 111 + 116 203 - 1617 + 1272 @@ -3225,41 +3240,41 @@ 1 2 - 12588 + 12648 2 3 - 6675 + 6714 3 4 - 2225 + 2363 4 5 - 1746 + 1792 5 7 - 2419 + 2324 7 12 - 2419 + 2337 12 34 - 2302 + 2311 40 - 240 + 241 181 @@ -3276,67 +3291,67 @@ 1 2 - 1513 + 1519 2 4 - 1759 + 1766 4 5 - 3635 + 3636 5 8 - 2652 + 2662 8 - 12 - 2225 + 13 + 2792 - 12 - 16 - 2561 + 13 + 17 + 2311 - 16 - 26 - 2367 + 17 + 28 + 2376 - 26 - 41 - 2367 + 28 + 42 + 2428 - 41 - 56 - 2471 + 42 + 57 + 2415 - 56 - 70 - 2406 + 57 + 71 + 2389 - 70 - 86 - 2354 + 71 + 88 + 2363 - 86 - 110 - 2341 + 88 + 113 + 2311 - 110 + 113 203 - 1901 + 1701 @@ -3352,71 +3367,71 @@ 1 2 - 439 + 441 2 3 - 621 + 623 3 4 - 232 + 233 4 5 - 271 + 272 5 6 - 245 + 246 6 9 - 465 + 467 9 16 - 414 + 415 16 41 - 388 + 389 - 45 - 173 - 388 + 46 + 172 + 389 - 179 + 181 773 - 388 + 389 - 795 - 2929 - 388 + 791 + 2919 + 389 - 2936 - 8174 - 388 + 2920 + 8125 + 389 - 8240 - 26107 - 388 + 8227 + 25706 + 389 - 33980 - 35323 + 33875 + 34983 25 @@ -3433,52 +3448,52 @@ 1 2 - 1500 + 1506 2 3 - 543 + 545 3 4 - 426 + 428 4 10 - 388 + 389 10 39 - 388 + 389 39 139 - 388 + 389 - 146 + 147 387 - 388 + 389 - 399 - 749 - 388 + 397 + 748 + 389 - 765 - 964 - 388 + 769 + 963 + 389 964 - 1310 - 245 + 1322 + 246 @@ -3494,62 +3509,62 @@ 1 2 - 543 + 545 2 3 - 672 + 675 3 4 - 336 + 337 4 6 - 401 + 402 6 9 - 465 + 467 9 19 - 388 + 389 19 - 63 - 388 + 64 + 389 66 - 183 - 388 + 184 + 402 - 183 - 380 - 388 + 201 + 390 + 389 - 392 - 736 - 388 + 418 + 742 + 389 - 750 - 1013 - 388 + 752 + 1025 + 389 1028 - 1385 - 297 + 1382 + 285 @@ -3565,62 +3580,62 @@ 1 2 - 543 + 545 2 3 - 672 + 675 3 4 - 336 + 337 4 6 - 401 + 402 6 9 - 465 + 467 9 19 - 388 + 389 19 64 - 388 + 389 66 184 - 401 + 389 - 205 - 400 - 388 + 184 + 381 + 389 - 431 + 396 752 - 388 + 389 - 761 - 1038 - 388 + 753 + 1034 + 402 - 1048 - 1390 - 284 + 1050 + 1386 + 285 @@ -3636,52 +3651,52 @@ 1 2 - 1280 + 1285 2 3 - 724 + 727 3 4 - 439 + 441 4 6 - 414 + 415 6 16 - 388 + 389 16 37 - 401 + 389 37 67 - 388 + 402 67 103 - 388 + 389 - 103 - 126 - 388 + 104 + 127 + 402 - 126 + 127 177 - 232 + 220 @@ -3697,72 +3712,72 @@ 1 2 - 310 + 311 3 4 - 3519 + 3532 4 6 - 2639 + 2636 6 9 - 2393 + 2415 9 14 - 2380 + 2350 14 21 - 2497 + 2467 21 34 - 2328 + 2324 34 - 66 - 2341 + 64 + 2311 - 66 - 107 - 2315 + 64 + 103 + 2337 - 107 - 158 - 2328 + 103 + 152 + 2311 - 158 - 243 - 2302 + 152 + 230 + 2311 - 243 - 574 - 2302 + 230 + 525 + 2311 - 580 - 2918 - 2302 + 528 + 2539 + 2311 - 2988 - 9852 - 595 + 2543 + 9864 + 740 @@ -3778,47 +3793,47 @@ 1 2 - 10699 + 10713 2 3 - 4787 + 4753 3 6 - 2328 + 2337 6 - 10 - 2729 + 9 + 2363 - 10 - 15 - 2393 + 9 + 14 + 2792 - 15 - 24 - 2445 + 14 + 22 + 2324 - 24 - 64 - 2302 + 22 + 57 + 2311 - 64 - 378 - 2302 + 57 + 287 + 2311 - 393 - 1294 - 569 + 291 + 1306 + 766 @@ -3834,42 +3849,42 @@ 1 2 - 12510 + 12428 2 3 - 6287 + 6532 3 4 - 2458 + 2532 4 5 - 1668 + 1753 5 7 - 2341 + 2207 7 12 - 2471 + 2441 12 27 - 2406 + 2363 27 - 35 - 414 + 36 + 415 @@ -3885,67 +3900,67 @@ 1 3 - 1513 + 1519 3 4 - 3674 + 3688 4 6 - 2716 + 2714 6 8 - 1643 + 1649 8 - 12 - 2367 + 13 + 2766 - 12 - 16 - 2406 + 13 + 17 + 2363 - 16 - 26 - 2484 + 17 + 28 + 2415 - 26 - 41 - 2341 + 28 + 42 + 2415 - 41 - 54 - 2419 + 42 + 55 + 2337 - 54 - 68 - 2419 + 55 + 69 + 2441 - 68 - 84 - 2393 + 69 + 86 + 2415 - 84 - 108 - 2393 + 86 + 112 + 2376 - 108 + 112 200 - 1785 + 1571 @@ -3961,72 +3976,72 @@ 1 2 - 1500 + 1506 2 3 - 1617 + 1623 3 4 - 2548 + 2558 4 6 - 2406 + 2402 6 8 - 1643 + 1649 8 13 - 2768 + 2688 13 18 - 2574 + 2636 18 30 - 2341 + 2402 30 - 45 - 2471 + 44 + 2389 - 45 - 60 - 2484 + 44 + 58 + 2337 - 60 - 75 - 2354 + 58 + 72 + 2324 - 75 - 94 - 2367 + 72 + 90 + 2389 - 94 - 121 - 2367 + 90 + 117 + 2311 - 121 + 117 202 - 1112 + 1454 @@ -4042,17 +4057,17 @@ 1 2 - 349 + 350 2 3 - 478 + 480 3 5 - 401 + 402 5 @@ -4062,51 +4077,51 @@ 6 8 - 465 + 467 8 14 - 388 + 389 14 28 - 388 + 389 28 - 66 - 388 + 68 + 389 69 - 262 - 388 + 258 + 389 - 268 - 1065 - 388 + 264 + 1063 + 389 - 1106 - 3376 - 388 + 1113 + 3378 + 389 - 3708 - 8055 - 388 + 3687 + 8035 + 389 - 8112 - 10395 - 388 + 8096 + 10367 + 389 - 10483 - 18241 + 10416 + 17990 116 @@ -4123,52 +4138,52 @@ 1 2 - 1436 + 1441 2 3 - 608 + 610 3 4 - 426 + 428 4 9 - 401 + 402 9 - 40 - 388 + 41 + 389 - 41 - 121 - 388 + 42 + 123 + 389 143 - 410 - 401 + 406 + 389 - 419 - 772 - 388 + 406 + 760 + 389 - 794 - 1007 - 388 + 771 + 994 + 389 - 1008 - 1277 - 284 + 1006 + 1289 + 298 @@ -4184,67 +4199,67 @@ 1 2 - 517 + 519 2 3 - 672 + 675 3 4 - 297 + 298 4 6 - 401 + 402 6 9 - 452 + 454 9 16 - 414 + 415 16 - 38 - 388 + 39 + 389 39 136 - 401 + 389 - 139 - 357 - 388 + 136 + 344 + 389 - 359 - 676 - 388 + 353 + 637 + 389 - 687 - 1018 - 388 + 675 + 1011 + 389 - 1020 - 1286 - 388 + 1011 + 1272 + 389 - 1386 + 1284 1387 - 12 + 25 @@ -4260,62 +4275,62 @@ 1 2 - 892 + 896 2 3 - 310 + 311 3 4 - 504 + 506 4 5 - 349 + 350 5 8 - 439 + 441 8 18 - 388 + 389 19 33 - 388 + 389 33 49 - 388 + 389 49 64 - 388 + 402 64 - 81 - 388 + 82 + 428 - 81 - 94 - 414 + 82 + 95 + 402 - 94 + 95 112 - 258 + 220 @@ -4331,67 +4346,67 @@ 1 2 - 517 + 519 2 3 - 672 + 675 3 4 - 297 + 298 4 6 - 401 + 402 6 9 - 452 + 454 9 16 - 414 + 415 16 - 38 - 388 + 39 + 402 - 38 - 137 - 388 + 48 + 141 + 389 - 139 - 346 - 388 + 142 + 352 + 389 - 354 + 359 637 - 388 + 389 - 641 - 995 - 388 + 674 + 999 + 389 - 997 - 1231 - 388 + 1010 + 1283 + 389 - 1283 + 1381 1382 - 25 + 12 @@ -4401,19 +4416,19 @@ ruby_alias_def - 1256 + 1244 id - 1256 + 1244 alias - 1256 + 1244 name - 1256 + 1244 @@ -4427,7 +4442,7 @@ 1 2 - 1256 + 1244 @@ -4443,7 +4458,7 @@ 1 2 - 1256 + 1244 @@ -4459,7 +4474,7 @@ 1 2 - 1256 + 1244 @@ -4475,7 +4490,7 @@ 1 2 - 1256 + 1244 @@ -4491,7 +4506,7 @@ 1 2 - 1256 + 1244 @@ -4507,7 +4522,7 @@ 1 2 - 1256 + 1244 @@ -4583,7 +4598,7 @@ 1 2 - 3 + 2 @@ -4599,7 +4614,7 @@ 1 2 - 3 + 2 @@ -4620,19 +4635,19 @@ ruby_argument_list_child - 822785 + 823783 ruby_argument_list - 662859 + 664257 index - 426 + 428 child - 822785 + 823783 @@ -4646,17 +4661,17 @@ 1 2 - 561206 + 562976 2 3 - 64469 + 64088 3 34 - 37183 + 37193 @@ -4672,17 +4687,17 @@ 1 2 - 561206 + 562976 2 3 - 64469 + 64088 3 34 - 37183 + 37193 @@ -4717,27 +4732,27 @@ 11 - 21 + 20 38 22 - 43 + 42 38 - 56 - 375 + 55 + 372 38 - 903 - 7858 + 900 + 7800 38 - 51234 - 51235 + 51150 + 51151 12 @@ -4773,27 +4788,27 @@ 11 - 21 + 20 38 22 - 43 + 42 38 - 56 - 375 + 55 + 372 38 - 903 - 7858 + 900 + 7800 38 - 51234 - 51235 + 51150 + 51151 12 @@ -4810,7 +4825,7 @@ 1 2 - 822785 + 823783 @@ -4826,7 +4841,7 @@ 1 2 - 822785 + 823783 @@ -4836,22 +4851,22 @@ ruby_argument_list_def - 663118 + 664517 id - 663118 + 664517 ruby_array_child - 698871 + 699082 ruby_array - 237321 + 237416 index @@ -4859,7 +4874,7 @@ child - 698871 + 699082 @@ -4873,17 +4888,17 @@ 1 2 - 11990 + 11987 2 3 - 212002 + 212081 3 63361 - 13329 + 13348 @@ -4899,17 +4914,17 @@ 1 2 - 11990 + 11987 2 3 - 212002 + 212081 3 63361 - 13329 + 13348 @@ -4949,7 +4964,7 @@ 11 - 237322 + 237417 1294 @@ -4990,7 +5005,7 @@ 11 - 237322 + 237417 1294 @@ -5007,7 +5022,7 @@ 1 2 - 698871 + 699082 @@ -5023,7 +5038,7 @@ 1 2 - 698871 + 699082 @@ -5033,11 +5048,11 @@ ruby_array_def - 245466 + 245561 id - 245466 + 245561 @@ -5110,7 +5125,7 @@ 1 2 - 3 + 2 @@ -5126,7 +5141,7 @@ 1 2 - 3 + 2 @@ -5158,7 +5173,7 @@ 1 2 - 3 + 2 @@ -5174,7 +5189,7 @@ 1 2 - 3 + 2 @@ -5221,7 +5236,7 @@ 1 2 - 3 + 2 @@ -5237,7 +5252,7 @@ 1 2 - 3 + 2 @@ -5287,19 +5302,19 @@ ruby_assignment_def - 130604 + 130246 id - 130604 + 130246 left - 130604 + 130246 right - 130604 + 130246 @@ -5313,7 +5328,7 @@ 1 2 - 130604 + 130246 @@ -5329,7 +5344,7 @@ 1 2 - 130604 + 130246 @@ -5345,7 +5360,7 @@ 1 2 - 130604 + 130246 @@ -5361,7 +5376,7 @@ 1 2 - 130604 + 130246 @@ -5377,7 +5392,7 @@ 1 2 - 130604 + 130246 @@ -5393,7 +5408,7 @@ 1 2 - 130604 + 130246 @@ -5403,23 +5418,23 @@ ruby_ast_node_info - 8775135 + 8791047 node - 8775135 + 8791047 parent - 2870167 + 2884450 parent_index - 2781 + 2792 loc - 8492468 + 8496293 @@ -5433,7 +5448,7 @@ 1 2 - 8775135 + 8791047 @@ -5449,7 +5464,7 @@ 1 2 - 8775135 + 8791047 @@ -5465,7 +5480,7 @@ 1 2 - 8775135 + 8791047 @@ -5481,27 +5496,27 @@ 1 2 - 312864 + 325272 2 3 - 393001 + 393074 3 4 - 1606523 + 1608542 4 5 - 344781 + 344466 5 216 - 212996 + 213094 @@ -5517,27 +5532,27 @@ 1 2 - 312864 + 325272 2 3 - 393001 + 393074 3 4 - 1606523 + 1608542 4 5 - 344781 + 344466 5 216 - 212996 + 213094 @@ -5553,27 +5568,27 @@ 1 2 - 312864 + 325272 2 3 - 393001 + 393074 3 4 - 1606523 + 1608542 4 5 - 344781 + 344466 5 216 - 212996 + 213094 @@ -5589,56 +5604,51 @@ 1 2 - 401 + 649 2 3 - 245 + 389 3 - 4 - 388 + 5 + 233 - 4 + 5 6 - 232 + 233 6 - 7 - 232 + 9 + 233 - 7 - 10 - 232 + 9 + 21 + 246 - 10 - 22 - 245 + 21 + 48 + 220 - 22 - 50 - 219 + 48 + 127 + 220 - 50 - 129 - 219 + 130 + 946 + 220 - 132 - 949 - 219 - - - 1419 - 221843 + 1416 + 222113 142 @@ -5655,56 +5665,51 @@ 1 2 - 401 + 649 2 3 - 245 + 389 3 - 4 - 388 + 5 + 233 - 4 + 5 6 - 232 + 233 6 - 7 - 232 + 9 + 233 - 7 - 10 - 232 + 9 + 21 + 246 - 10 - 22 - 245 + 21 + 48 + 220 - 22 - 50 - 219 + 48 + 127 + 220 - 50 - 129 - 219 + 130 + 946 + 220 - 132 - 949 - 219 - - - 1419 - 221843 + 1416 + 222113 142 @@ -5721,56 +5726,51 @@ 1 2 - 401 + 649 2 3 - 245 + 389 3 - 4 - 388 + 5 + 233 - 4 + 5 6 - 232 + 233 6 - 7 - 232 + 9 + 233 - 7 - 10 - 232 + 9 + 21 + 246 - 10 - 22 - 245 + 21 + 48 + 220 - 22 - 50 - 219 + 48 + 127 + 220 - 50 - 129 - 219 + 130 + 946 + 220 - 132 - 949 - 219 - - - 1419 - 221660 + 1416 + 221838 142 @@ -5787,12 +5787,12 @@ 1 2 - 8209814 + 8202149 2 4 - 282654 + 294143 @@ -5808,12 +5808,12 @@ 1 2 - 8209814 + 8202149 2 4 - 282654 + 294143 @@ -5829,12 +5829,12 @@ 1 2 - 8212169 + 8205110 2 3 - 280299 + 291182 @@ -5844,11 +5844,11 @@ ruby_bare_string_child - 14923 + 14936 ruby_bare_string - 11474 + 11487 index @@ -5856,7 +5856,7 @@ child - 14923 + 14936 @@ -5870,7 +5870,7 @@ 1 2 - 11146 + 11159 2 @@ -5891,7 +5891,7 @@ 1 2 - 11146 + 11159 2 @@ -5926,7 +5926,7 @@ 4 - 11475 + 11488 19 @@ -5957,7 +5957,7 @@ 4 - 11475 + 11488 19 @@ -5974,7 +5974,7 @@ 1 2 - 14923 + 14936 @@ -5990,7 +5990,7 @@ 1 2 - 14923 + 14936 @@ -6000,30 +6000,30 @@ ruby_bare_string_def - 11474 + 11487 id - 11474 + 11487 ruby_bare_symbol_child - 2137 + 2106 ruby_bare_symbol - 2137 + 2106 index - 3 + 2 child - 2137 + 2106 @@ -6037,7 +6037,7 @@ 1 2 - 2137 + 2106 @@ -6053,7 +6053,7 @@ 1 2 - 2137 + 2106 @@ -6067,9 +6067,9 @@ 12 - 705 - 706 - 3 + 709 + 710 + 2 @@ -6083,9 +6083,9 @@ 12 - 705 - 706 - 3 + 709 + 710 + 2 @@ -6101,7 +6101,7 @@ 1 2 - 2137 + 2106 @@ -6117,7 +6117,7 @@ 1 2 - 2137 + 2106 @@ -6127,11 +6127,11 @@ ruby_bare_symbol_def - 2137 + 2106 id - 2137 + 2106 @@ -6365,11 +6365,11 @@ ruby_begin_child - 7555 + 7535 ruby_begin - 2533 + 2523 index @@ -6377,7 +6377,7 @@ child - 7555 + 7535 @@ -6396,22 +6396,22 @@ 2 3 - 1325 + 1317 3 4 - 518 + 516 4 5 - 211 + 212 5 8 - 231 + 230 8 @@ -6437,22 +6437,22 @@ 2 3 - 1325 + 1317 3 4 - 518 + 516 4 5 - 211 + 212 5 8 - 231 + 230 8 @@ -6512,17 +6512,17 @@ 84 - 183 + 185 3 - 315 - 1045 + 314 + 1043 3 - 2369 - 2534 + 2359 + 2524 2 @@ -6578,17 +6578,17 @@ 84 - 183 + 185 3 - 315 - 1045 + 314 + 1043 3 - 2369 - 2534 + 2359 + 2524 2 @@ -6605,7 +6605,7 @@ 1 2 - 7555 + 7535 @@ -6621,7 +6621,7 @@ 1 2 - 7555 + 7535 @@ -6631,26 +6631,26 @@ ruby_begin_def - 2533 + 2523 id - 2533 + 2523 ruby_binary_def - 67989 + 67730 id - 67989 + 67730 left - 67989 + 67730 operator @@ -6658,7 +6658,7 @@ right - 67989 + 67730 @@ -6672,7 +6672,7 @@ 1 2 - 67989 + 67730 @@ -6688,7 +6688,7 @@ 1 2 - 67989 + 67730 @@ -6704,7 +6704,7 @@ 1 2 - 67989 + 67730 @@ -6720,7 +6720,7 @@ 1 2 - 67989 + 67730 @@ -6736,7 +6736,7 @@ 1 2 - 67989 + 67730 @@ -6752,7 +6752,7 @@ 1 2 - 67989 + 67730 @@ -6767,67 +6767,67 @@ 155 - 178 + 179 2 - 230 - 370 + 231 + 369 2 474 - 557 + 559 2 603 - 674 + 666 2 749 - 808 + 813 2 - 950 - 982 + 949 + 969 2 - 996 - 1015 + 1000 + 1010 2 1248 - 1292 + 1317 2 - 1355 - 1621 + 1348 + 1633 2 - 1822 - 1978 + 1820 + 1968 2 - 2883 - 3120 + 2381 + 3287 2 - 6102 - 6755 + 6116 + 6739 2 - 31084 - 31085 + 31159 + 31160 1 @@ -6843,67 +6843,67 @@ 155 - 178 + 179 2 - 230 - 370 + 231 + 369 2 474 - 557 + 559 2 603 - 674 + 666 2 749 - 808 + 813 2 - 950 - 982 + 949 + 969 2 - 996 - 1015 + 1000 + 1010 2 1248 - 1292 + 1317 2 - 1355 - 1621 + 1348 + 1633 2 - 1822 - 1978 + 1820 + 1968 2 - 2883 - 3120 + 2381 + 3287 2 - 6102 - 6755 + 6116 + 6739 2 - 31084 - 31085 + 31159 + 31160 1 @@ -6919,67 +6919,67 @@ 155 - 178 + 179 2 - 230 - 370 + 231 + 369 2 474 - 557 + 559 2 603 - 674 + 666 2 749 - 808 + 813 2 - 950 - 982 + 949 + 969 2 - 996 - 1015 + 1000 + 1010 2 1248 - 1292 + 1317 2 - 1355 - 1621 + 1348 + 1633 2 - 1822 - 1978 + 1820 + 1968 2 - 2883 - 3120 + 2381 + 3287 2 - 6102 - 6755 + 6116 + 6739 2 - 31084 - 31085 + 31159 + 31160 1 @@ -6996,7 +6996,7 @@ 1 2 - 67989 + 67730 @@ -7012,7 +7012,7 @@ 1 2 - 67989 + 67730 @@ -7028,7 +7028,7 @@ 1 2 - 67989 + 67730 @@ -7038,15 +7038,15 @@ ruby_block_argument_child - 6048 + 6050 ruby_block_argument - 6048 + 6050 child - 6048 + 6050 @@ -7060,7 +7060,7 @@ 1 2 - 6048 + 6050 @@ -7076,7 +7076,7 @@ 1 2 - 6048 + 6050 @@ -7086,22 +7086,22 @@ ruby_block_argument_def - 6048 + 6050 id - 6048 + 6050 ruby_block_child - 96749 + 97203 ruby_block - 96607 + 97060 index @@ -7109,7 +7109,7 @@ child - 96749 + 97203 @@ -7123,7 +7123,7 @@ 1 2 - 96516 + 96969 2 @@ -7144,7 +7144,7 @@ 1 2 - 96516 + 96969 2 @@ -7173,8 +7173,8 @@ 12 - 7467 - 7468 + 7474 + 7475 12 @@ -7199,8 +7199,8 @@ 12 - 7467 - 7468 + 7474 + 7475 12 @@ -7217,7 +7217,7 @@ 1 2 - 96749 + 97203 @@ -7233,7 +7233,7 @@ 1 2 - 96749 + 97203 @@ -7243,11 +7243,11 @@ ruby_block_def - 96904 + 97359 id - 96904 + 97359 @@ -7313,15 +7313,15 @@ ruby_block_parameters - 10443 + 10459 ruby_block - 10443 + 10459 parameters - 10443 + 10459 @@ -7335,7 +7335,7 @@ 1 2 - 10443 + 10459 @@ -7351,7 +7351,7 @@ 1 2 - 10443 + 10459 @@ -7361,11 +7361,11 @@ ruby_block_parameters_child - 27363 + 27190 ruby_block_parameters - 23501 + 23336 index @@ -7373,7 +7373,7 @@ child - 27363 + 27190 @@ -7387,12 +7387,12 @@ 1 2 - 20121 + 19964 2 3 - 3030 + 3022 3 @@ -7413,12 +7413,12 @@ 1 2 - 20121 + 19964 2 3 - 3030 + 3022 3 @@ -7452,13 +7452,13 @@ 3 - 1073 - 1074 + 1070 + 1071 3 - 7460 - 7461 + 7405 + 7406 3 @@ -7488,13 +7488,13 @@ 3 - 1073 - 1074 + 1070 + 1071 3 - 7460 - 7461 + 7405 + 7406 3 @@ -7511,7 +7511,7 @@ 1 2 - 27363 + 27190 @@ -7527,7 +7527,7 @@ 1 2 - 27363 + 27190 @@ -7537,26 +7537,162 @@ ruby_block_parameters_def - 23501 + 23336 id - 23501 + 23336 + + ruby_block_parameters_locals + 16 + + + ruby_block_parameters + 12 + + + index + 2 + + + locals + 16 + + + + + ruby_block_parameters + index + + + 12 + + + 1 + 2 + 8 + + + 2 + 3 + 4 + + + + + + + ruby_block_parameters + locals + + + 12 + + + 1 + 2 + 8 + + + 2 + 3 + 4 + + + + + + + index + ruby_block_parameters + + + 12 + + + 4 + 5 + 1 + + + 12 + 13 + 1 + + + + + + + index + locals + + + 12 + + + 4 + 5 + 1 + + + 12 + 13 + 1 + + + + + + + locals + ruby_block_parameters + + + 12 + + + 1 + 2 + 16 + + + + + + + locals + index + + + 12 + + + 1 + 2 + 16 + + + + + + + ruby_break_child - 349 + 350 ruby_break - 349 + 350 child - 349 + 350 @@ -7570,7 +7706,7 @@ 1 2 - 349 + 350 @@ -7586,7 +7722,7 @@ 1 2 - 349 + 350 @@ -7596,26 +7732,26 @@ ruby_break_def - 3343 + 3338 id - 3343 + 3338 ruby_call_arguments - 660078 + 661504 ruby_call - 660078 + 661504 arguments - 660078 + 661504 @@ -7629,7 +7765,7 @@ 1 2 - 660078 + 661504 @@ -7645,7 +7781,7 @@ 1 2 - 660078 + 661504 @@ -7655,15 +7791,15 @@ ruby_call_block - 230967 + 232457 ruby_call - 230967 + 232457 block - 230967 + 232457 @@ -7677,7 +7813,7 @@ 1 2 - 230967 + 232457 @@ -7693,7 +7829,7 @@ 1 2 - 230967 + 232457 @@ -7703,20 +7839,31 @@ ruby_call_def - 961220 + 965401 id - 961220 + 965401 + + + + + + ruby_call_method + 965401 + + + ruby_call + 965401 method - 961220 + 965401 - id + ruby_call method @@ -7725,7 +7872,7 @@ 1 2 - 961220 + 965401 @@ -7733,7 +7880,7 @@ method - id + ruby_call 12 @@ -7741,7 +7888,55 @@ 1 2 - 961220 + 965401 + + + + + + + + + ruby_call_operator + 540944 + + + ruby_call + 540944 + + + operator + 540944 + + + + + ruby_call + operator + + + 12 + + + 1 + 2 + 540944 + + + + + + + operator + ruby_call + + + 12 + + + 1 + 2 + 540944 @@ -7751,15 +7946,15 @@ ruby_call_receiver - 538536 + 540944 ruby_call - 538536 + 540944 receiver - 538536 + 540944 @@ -7773,7 +7968,7 @@ 1 2 - 538536 + 540944 @@ -7789,7 +7984,7 @@ 1 2 - 538536 + 540944 @@ -7799,7 +7994,7 @@ ruby_case_child - 4123 + 4141 ruby_case__ @@ -7811,7 +8006,7 @@ child - 4123 + 4141 @@ -7830,17 +8025,17 @@ 2 3 - 324 + 315 3 4 - 497 + 504 4 5 - 185 + 189 5 @@ -7871,17 +8066,17 @@ 2 3 - 324 + 315 3 4 - 497 + 504 4 5 - 185 + 189 5 @@ -7930,13 +8125,13 @@ 6 - 31 + 32 56 6 - 114 - 273 + 115 + 276 6 @@ -7981,13 +8176,13 @@ 6 - 31 + 32 56 6 - 114 - 273 + 115 + 276 6 @@ -8009,7 +8204,7 @@ 1 2 - 4123 + 4141 @@ -8025,7 +8220,7 @@ 1 2 - 4123 + 4141 @@ -8046,19 +8241,19 @@ ruby_case_match_clauses - 2 + 0 ruby_case_match - 2 + 0 index - 1 + 0 clauses - 2 + 0 @@ -8068,13 +8263,7 @@ 12 - - - 1 - 2 - 2 - - + @@ -8084,13 +8273,7 @@ 12 - - - 1 - 2 - 2 - - + @@ -8100,13 +8283,7 @@ 12 - - - 2 - 3 - 1 - - + @@ -8116,13 +8293,7 @@ 12 - - - 2 - 3 - 1 - - + @@ -8162,15 +8333,15 @@ ruby_case_match_def - 2 + 0 id - 2 + 0 value - 2 + 0 @@ -8196,13 +8367,7 @@ 12 - - - 1 - 2 - 2 - - + @@ -8232,7 +8397,7 @@ 1 2 - 3 + 2 @@ -8248,7 +8413,7 @@ 1 2 - 3 + 2 @@ -8306,11 +8471,11 @@ ruby_chained_string_child - 3380 + 3353 ruby_chained_string - 894 + 885 index @@ -8318,7 +8483,7 @@ child - 3380 + 3353 @@ -8332,7 +8497,7 @@ 2 3 - 308 + 302 3 @@ -8347,7 +8512,7 @@ 5 6 - 126 + 122 6 @@ -8373,7 +8538,7 @@ 2 3 - 308 + 302 3 @@ -8388,7 +8553,7 @@ 5 6 - 126 + 122 6 @@ -8447,23 +8612,23 @@ 3 - 81 - 82 + 80 + 81 3 - 124 - 125 + 123 + 124 3 - 186 - 187 + 185 + 186 3 - 284 - 285 + 281 + 282 6 @@ -8513,23 +8678,23 @@ 3 - 81 - 82 + 80 + 81 3 - 124 - 125 + 123 + 124 3 - 186 - 187 + 185 + 186 3 - 284 - 285 + 281 + 282 6 @@ -8546,7 +8711,7 @@ 1 2 - 3380 + 3353 @@ -8562,7 +8727,7 @@ 1 2 - 3380 + 3353 @@ -8572,30 +8737,30 @@ ruby_chained_string_def - 894 + 885 id - 894 + 885 ruby_class_child - 131549 + 130958 ruby_class - 15128 + 15183 index - 1045 + 1055 child - 131549 + 130958 @@ -8609,57 +8774,57 @@ 1 2 - 3260 + 3290 2 3 - 2362 + 2407 3 4 - 1559 + 1556 4 5 - 1250 + 1263 5 6 - 957 + 961 6 7 - 831 + 838 7 9 - 1127 + 1118 9 13 - 1269 + 1266 13 21 - 1184 + 1169 21 - 76 - 1137 + 84 + 1143 - 77 - 333 - 185 + 85 + 336 + 167 @@ -8675,57 +8840,57 @@ 1 2 - 3260 + 3290 2 3 - 2362 + 2407 3 4 - 1559 + 1556 4 5 - 1250 + 1263 5 6 - 957 + 961 6 7 - 831 + 838 7 9 - 1127 + 1118 9 13 - 1269 + 1266 13 21 - 1184 + 1169 21 - 76 - 1137 + 84 + 1143 - 77 - 333 - 185 + 85 + 336 + 167 @@ -8741,72 +8906,72 @@ 1 2 - 88 + 37 2 3 - 3 + 63 3 4 - 94 + 81 4 5 - 103 + 113 5 7 - 75 + 81 7 9 - 85 + 81 9 12 - 91 + 88 12 - 20 + 19 85 - 20 - 30 - 78 + 19 + 29 + 81 - 31 - 52 - 78 + 30 + 56 + 81 - 53 - 89 - 78 + 56 + 94 + 81 - 90 - 208 - 78 + 96 + 228 + 81 - 214 - 1200 - 78 + 237 + 2116 + 81 - 1372 - 4803 - 25 + 2516 + 4819 + 12 @@ -8822,72 +8987,72 @@ 1 2 - 88 + 37 2 3 - 3 + 63 3 4 - 94 + 81 4 5 - 103 + 113 5 7 - 75 + 81 7 9 - 85 + 81 9 12 - 91 + 88 12 - 20 + 19 85 - 20 - 30 - 78 + 19 + 29 + 81 - 31 - 52 - 78 + 30 + 56 + 81 - 53 - 89 - 78 + 56 + 94 + 81 - 90 - 208 - 78 + 96 + 228 + 81 - 214 - 1200 - 78 + 237 + 2116 + 81 - 1372 - 4803 - 25 + 2516 + 4819 + 12 @@ -8903,7 +9068,7 @@ 1 2 - 131549 + 130958 @@ -8919,7 +9084,7 @@ 1 2 - 131549 + 130958 @@ -8929,15 +9094,15 @@ ruby_class_def - 16778 + 16841 id - 16778 + 16841 name - 16778 + 16841 @@ -8951,7 +9116,7 @@ 1 2 - 16778 + 16841 @@ -8967,7 +9132,7 @@ 1 2 - 16778 + 16841 @@ -8977,15 +9142,15 @@ ruby_class_superclass - 13262 + 13314 ruby_class - 13262 + 13314 superclass - 13262 + 13314 @@ -8999,7 +9164,7 @@ 1 2 - 13262 + 13314 @@ -9015,7 +9180,55 @@ 1 2 - 13262 + 13314 + + + + + + + + + ruby_complex_def + 53 + + + id + 53 + + + child + 53 + + + + + id + child + + + 12 + + + 1 + 2 + 53 + + + + + + + child + id + + + 12 + + + 1 + 2 + 53 @@ -9025,23 +9238,23 @@ ruby_conditional_def - 3556 + 3464 id - 3556 + 3464 alternative - 3556 + 3464 condition - 3556 + 3464 consequence - 3556 + 3464 @@ -9055,7 +9268,7 @@ 1 2 - 3556 + 3464 @@ -9071,7 +9284,7 @@ 1 2 - 3556 + 3464 @@ -9087,7 +9300,7 @@ 1 2 - 3556 + 3464 @@ -9103,7 +9316,7 @@ 1 2 - 3556 + 3464 @@ -9119,7 +9332,7 @@ 1 2 - 3556 + 3464 @@ -9135,7 +9348,7 @@ 1 2 - 3556 + 3464 @@ -9151,7 +9364,7 @@ 1 2 - 3556 + 3464 @@ -9167,7 +9380,7 @@ 1 2 - 3556 + 3464 @@ -9183,7 +9396,7 @@ 1 2 - 3556 + 3464 @@ -9199,7 +9412,7 @@ 1 2 - 3556 + 3464 @@ -9215,7 +9428,7 @@ 1 2 - 3556 + 3464 @@ -9231,7 +9444,7 @@ 1 2 - 3556 + 3464 @@ -9241,11 +9454,11 @@ ruby_delimited_symbol_child - 1679 + 1739 ruby_delimited_symbol - 1216 + 1257 index @@ -9253,7 +9466,7 @@ child - 1679 + 1739 @@ -9267,12 +9480,12 @@ 1 2 - 916 + 939 2 3 - 226 + 245 3 @@ -9293,12 +9506,12 @@ 1 2 - 916 + 939 2 3 - 226 + 245 3 @@ -9347,13 +9560,13 @@ 3 - 95 - 96 + 101 + 102 3 - 386 - 387 + 399 + 400 3 @@ -9398,13 +9611,13 @@ 3 - 95 - 96 + 101 + 102 3 - 386 - 387 + 399 + 400 3 @@ -9421,7 +9634,7 @@ 1 2 - 1679 + 1739 @@ -9437,7 +9650,7 @@ 1 2 - 1679 + 1739 @@ -9447,11 +9660,11 @@ ruby_delimited_symbol_def - 1216 + 1257 id - 1216 + 1257 @@ -9822,19 +10035,19 @@ ruby_do_block_child - 392587 + 395009 ruby_do_block - 136404 + 137279 index - 931 + 935 child - 392587 + 395009 @@ -9848,32 +10061,32 @@ 1 2 - 47663 + 48036 2 3 - 36523 + 36712 3 4 - 21515 + 21583 4 5 - 10389 + 10506 5 7 - 10518 + 10583 7 73 - 9793 + 9856 @@ -9889,32 +10102,32 @@ 1 2 - 47663 + 48036 2 3 - 36523 + 36712 3 4 - 21515 + 21583 4 5 - 10389 + 10506 5 7 - 10518 + 10583 7 73 - 9793 + 9856 @@ -9935,7 +10148,7 @@ 2 3 - 219 + 220 4 @@ -9973,18 +10186,18 @@ 77 - 174 + 175 592 77 - 757 - 6860 + 759 + 6873 77 - 10543 - 10544 + 10571 + 10572 12 @@ -10006,7 +10219,7 @@ 2 3 - 219 + 220 4 @@ -10044,18 +10257,18 @@ 77 - 174 + 175 592 77 - 757 - 6860 + 759 + 6873 77 - 10543 - 10544 + 10571 + 10572 12 @@ -10072,7 +10285,7 @@ 1 2 - 392587 + 395009 @@ -10088,7 +10301,7 @@ 1 2 - 392587 + 395009 @@ -10098,26 +10311,26 @@ ruby_do_block_def - 136559 + 137435 id - 136559 + 137435 ruby_do_block_parameters - 15052 + 15073 ruby_do_block - 15052 + 15073 parameters - 15052 + 15073 @@ -10131,7 +10344,7 @@ 1 2 - 15052 + 15073 @@ -10147,7 +10360,7 @@ 1 2 - 15052 + 15073 @@ -10157,11 +10370,11 @@ ruby_do_child - 9209 + 9177 ruby_do - 1598 + 1588 index @@ -10169,7 +10382,7 @@ child - 9209 + 9177 @@ -10183,17 +10396,17 @@ 1 2 - 329 + 324 2 3 - 274 + 273 3 4 - 193 + 191 4 @@ -10203,7 +10416,7 @@ 5 7 - 105 + 104 7 @@ -10218,7 +10431,7 @@ 9 14 - 118 + 117 14 @@ -10244,17 +10457,17 @@ 1 2 - 329 + 324 2 3 - 274 + 273 3 4 - 193 + 191 4 @@ -10264,7 +10477,7 @@ 5 7 - 105 + 104 7 @@ -10279,7 +10492,7 @@ 9 14 - 118 + 117 14 @@ -10329,7 +10542,7 @@ 112 - 1599 + 1589 15 @@ -10370,7 +10583,7 @@ 112 - 1599 + 1589 15 @@ -10387,7 +10600,7 @@ 1 2 - 9209 + 9177 @@ -10403,7 +10616,7 @@ 1 2 - 9209 + 9177 @@ -10413,30 +10626,30 @@ ruby_do_def - 1621 + 1610 id - 1621 + 1610 ruby_element_reference_child - 82444 + 82398 ruby_element_reference - 82275 + 82228 index - 6 + 5 child - 82444 + 82398 @@ -10450,7 +10663,7 @@ 1 2 - 82105 + 82059 2 @@ -10471,7 +10684,7 @@ 1 2 - 82105 + 82059 2 @@ -10490,14 +10703,14 @@ 12 - 56 - 57 - 3 + 57 + 58 + 2 - 27139 - 27140 - 3 + 27674 + 27675 + 2 @@ -10511,14 +10724,14 @@ 12 - 56 - 57 - 3 + 57 + 58 + 2 - 27139 - 27140 - 3 + 27674 + 27675 + 2 @@ -10534,7 +10747,7 @@ 1 2 - 82444 + 82398 @@ -10550,7 +10763,7 @@ 1 2 - 82444 + 82398 @@ -10560,15 +10773,15 @@ ruby_element_reference_def - 82281 + 82234 id - 82281 + 82234 object - 82281 + 82234 @@ -10582,7 +10795,7 @@ 1 2 - 82281 + 82234 @@ -10598,7 +10811,7 @@ 1 2 - 82281 + 82234 @@ -10608,11 +10821,11 @@ ruby_else_child - 8817 + 8802 ruby_else - 6937 + 6923 index @@ -10620,7 +10833,7 @@ child - 8817 + 8802 @@ -10634,12 +10847,12 @@ 1 2 - 5847 + 5833 2 3 - 686 + 687 3 @@ -10660,12 +10873,12 @@ 1 2 - 5847 + 5833 2 3 - 686 + 687 3 @@ -10719,8 +10932,8 @@ 3 - 56 - 57 + 55 + 56 3 @@ -10734,8 +10947,8 @@ 3 - 2202 - 2203 + 2197 + 2198 3 @@ -10785,8 +10998,8 @@ 3 - 56 - 57 + 55 + 56 3 @@ -10800,8 +11013,8 @@ 3 - 2202 - 2203 + 2197 + 2198 3 @@ -10818,7 +11031,7 @@ 1 2 - 8817 + 8802 @@ -10834,7 +11047,7 @@ 1 2 - 8817 + 8802 @@ -10844,26 +11057,26 @@ ruby_else_def - 6946 + 6933 id - 6946 + 6933 ruby_elsif_alternative - 897 + 903 ruby_elsif - 897 + 903 alternative - 897 + 903 @@ -10877,7 +11090,7 @@ 1 2 - 897 + 903 @@ -10893,7 +11106,7 @@ 1 2 - 897 + 903 @@ -10903,15 +11116,15 @@ ruby_elsif_consequence - 1603 + 1589 ruby_elsif - 1603 + 1589 consequence - 1603 + 1589 @@ -10925,7 +11138,7 @@ 1 2 - 1603 + 1589 @@ -10941,7 +11154,7 @@ 1 2 - 1603 + 1589 @@ -10951,15 +11164,15 @@ ruby_elsif_def - 1606 + 1595 id - 1606 + 1595 condition - 1606 + 1595 @@ -10973,7 +11186,7 @@ 1 2 - 1606 + 1595 @@ -10989,7 +11202,7 @@ 1 2 - 1606 + 1595 @@ -11186,11 +11399,11 @@ ruby_ensure_child - 5078 + 4834 ruby_ensure - 3786 + 3718 index @@ -11198,7 +11411,7 @@ child - 5078 + 4834 @@ -11212,22 +11425,17 @@ 1 2 - 2958 + 2956 2 3 - 535 + 516 3 - 9 - 286 - - - 16 17 - 6 + 245 @@ -11243,22 +11451,17 @@ 1 2 - 2958 + 2956 2 3 - 535 + 516 3 - 9 - 286 - - - 16 17 - 6 + 245 @@ -11272,38 +11475,38 @@ 12 - 2 - 3 + 1 + 2 25 - 5 - 6 + 3 + 4 6 - 6 - 7 + 4 + 5 6 - 16 - 17 + 12 + 13 3 - 93 - 94 + 78 + 79 3 - 263 - 264 + 242 + 243 3 - 1202 - 1203 + 1180 + 1181 3 @@ -11318,38 +11521,38 @@ 12 - 2 - 3 + 1 + 2 25 - 5 - 6 + 3 + 4 6 - 6 - 7 + 4 + 5 6 - 16 - 17 + 12 + 13 3 - 93 - 94 + 78 + 79 3 - 263 - 264 + 242 + 243 3 - 1202 - 1203 + 1180 + 1181 3 @@ -11366,7 +11569,7 @@ 1 2 - 5078 + 4834 @@ -11382,7 +11585,7 @@ 1 2 - 5078 + 4834 @@ -11392,26 +11595,26 @@ ruby_ensure_def - 3786 + 3718 id - 3786 + 3718 ruby_exception_variable_def - 1021 + 1001 id - 1021 + 1001 child - 1021 + 1001 @@ -11425,7 +11628,7 @@ 1 2 - 1021 + 1001 @@ -11441,7 +11644,7 @@ 1 2 - 1021 + 1001 @@ -11451,11 +11654,11 @@ ruby_exceptions_child - 1852 + 1849 ruby_exceptions - 1641 + 1639 index @@ -11463,7 +11666,7 @@ child - 1852 + 1849 @@ -11477,12 +11680,12 @@ 1 2 - 1498 + 1497 2 4 - 130 + 129 4 @@ -11503,12 +11706,12 @@ 1 2 - 1498 + 1497 2 4 - 130 + 129 4 @@ -11557,13 +11760,13 @@ 1 - 143 - 144 + 142 + 143 1 - 1641 - 1642 + 1639 + 1640 1 @@ -11608,13 +11811,13 @@ 1 - 143 - 144 + 142 + 143 1 - 1641 - 1642 + 1639 + 1640 1 @@ -11631,7 +11834,7 @@ 1 2 - 1852 + 1849 @@ -11647,7 +11850,7 @@ 1 2 - 1852 + 1849 @@ -11657,11 +11860,11 @@ ruby_exceptions_def - 1641 + 1639 id - 1641 + 1639 @@ -11690,7 +11893,7 @@ 1 2 - 3 + 2 @@ -11776,7 +11979,7 @@ 1 2 - 3 + 2 @@ -11792,7 +11995,7 @@ 1 2 - 3 + 2 @@ -11824,7 +12027,7 @@ 1 2 - 3 + 2 @@ -11840,7 +12043,7 @@ 1 2 - 3 + 2 @@ -11861,23 +12064,23 @@ ruby_for_def - 163 + 162 id - 163 + 162 body - 163 + 162 pattern - 163 + 162 value - 163 + 162 @@ -11891,7 +12094,7 @@ 1 2 - 163 + 162 @@ -11907,7 +12110,7 @@ 1 2 - 163 + 162 @@ -11923,7 +12126,7 @@ 1 2 - 163 + 162 @@ -11939,7 +12142,7 @@ 1 2 - 163 + 162 @@ -11955,7 +12158,7 @@ 1 2 - 163 + 162 @@ -11971,7 +12174,7 @@ 1 2 - 163 + 162 @@ -11987,7 +12190,7 @@ 1 2 - 163 + 162 @@ -12003,7 +12206,7 @@ 1 2 - 163 + 162 @@ -12019,7 +12222,7 @@ 1 2 - 163 + 162 @@ -12035,7 +12238,7 @@ 1 2 - 163 + 162 @@ -12051,7 +12254,7 @@ 1 2 - 163 + 162 @@ -12067,7 +12270,7 @@ 1 2 - 163 + 162 @@ -12077,19 +12280,19 @@ ruby_hash_child - 88753 + 88983 ruby_hash - 35630 + 35712 index - 1384 + 1389 child - 88753 + 88983 @@ -12103,27 +12306,27 @@ 1 2 - 14762 + 14778 2 3 - 9897 + 9960 3 4 - 3971 + 3960 4 5 - 4140 + 4142 5 19 - 2678 + 2688 19 @@ -12144,27 +12347,27 @@ 1 2 - 14762 + 14778 2 3 - 9897 + 9960 3 4 - 3971 + 3960 4 5 - 4140 + 4142 5 19 - 2678 + 2688 19 @@ -12185,28 +12388,33 @@ 1 2 - 918 + 922 3 - 5 - 116 + 4 + 103 5 - 15 + 11 116 - 15 - 58 + 14 + 51 116 - 71 - 2755 + 57 + 1613 116 + + 2750 + 2751 + 12 + @@ -12221,28 +12429,33 @@ 1 2 - 918 + 922 3 - 5 - 116 + 4 + 103 5 - 15 + 11 116 - 15 - 58 + 14 + 51 116 - 71 - 2755 + 57 + 1613 116 + + 2750 + 2751 + 12 + @@ -12257,7 +12470,7 @@ 1 2 - 88753 + 88983 @@ -12273,7 +12486,7 @@ 1 2 - 88753 + 88983 @@ -12283,11 +12496,11 @@ ruby_hash_def - 39344 + 39413 id - 39344 + 39413 @@ -12360,7 +12573,7 @@ 1 2 - 3 + 2 @@ -12376,7 +12589,7 @@ 1 2 - 3 + 2 @@ -12408,7 +12621,7 @@ 1 2 - 3 + 2 @@ -12424,7 +12637,7 @@ 1 2 - 3 + 2 @@ -12445,15 +12658,15 @@ ruby_hash_splat_argument_def - 1813 + 1856 id - 1813 + 1856 child - 1813 + 1856 @@ -12467,7 +12680,7 @@ 1 2 - 1813 + 1856 @@ -12483,7 +12696,7 @@ 1 2 - 1813 + 1856 @@ -12493,26 +12706,26 @@ ruby_hash_splat_parameter_def - 1351 + 1355 id - 1351 + 1355 ruby_hash_splat_parameter_name - 1130 + 1134 ruby_hash_splat_parameter - 1130 + 1134 name - 1130 + 1134 @@ -12526,7 +12739,7 @@ 1 2 - 1130 + 1134 @@ -12542,7 +12755,7 @@ 1 2 - 1130 + 1134 @@ -12552,19 +12765,19 @@ ruby_heredoc_body_child - 25086 + 25318 ruby_heredoc_body - 5332 + 5363 index - 218 + 264 child - 25086 + 25318 @@ -12578,27 +12791,27 @@ 2 3 - 2907 + 2929 4 5 - 682 + 692 5 6 - 3 + 2 6 7 - 788 + 781 7 9 - 339 + 341 10 @@ -12607,8 +12820,8 @@ 16 - 73 - 190 + 90 + 193 @@ -12624,27 +12837,27 @@ 2 3 - 2907 + 2929 4 5 - 682 + 692 5 6 - 3 + 2 6 7 - 788 + 781 7 9 - 339 + 341 10 @@ -12653,8 +12866,8 @@ 16 - 73 - 190 + 90 + 193 @@ -12670,57 +12883,42 @@ 1 2 - 57 + 50 2 3 - 27 + 83 4 - 5 - 12 - - - 5 - 8 - 15 + 6 + 23 8 - 9 - 9 + 12 + 23 - 10 - 13 - 18 + 12 + 26 + 23 - 15 - 25 - 18 + 30 + 94 + 20 - 29 - 64 - 18 + 96 + 323 + 20 - 91 - 203 - 18 - - - 309 - 801 - 18 - - - 1759 - 1760 - 6 + 585 + 1806 + 17 @@ -12736,57 +12934,42 @@ 1 2 - 57 + 50 2 3 - 27 + 83 4 - 5 - 12 - - - 5 - 8 - 15 + 6 + 23 8 - 9 - 9 + 12 + 23 - 10 - 13 - 18 + 12 + 26 + 23 - 15 - 25 - 18 + 30 + 94 + 20 - 29 - 64 - 18 + 96 + 323 + 20 - 91 - 203 - 18 - - - 309 - 801 - 18 - - - 1759 - 1760 - 6 + 585 + 1806 + 17 @@ -12802,7 +12985,7 @@ 1 2 - 25086 + 25318 @@ -12818,7 +13001,7 @@ 1 2 - 25086 + 25318 @@ -12828,26 +13011,26 @@ ruby_heredoc_body_def - 5577 + 5575 id - 5577 + 5575 ruby_if_alternative - 6461 + 6454 ruby_if - 6461 + 6454 alternative - 6461 + 6454 @@ -12861,7 +13044,7 @@ 1 2 - 6461 + 6454 @@ -12877,7 +13060,7 @@ 1 2 - 6461 + 6454 @@ -12887,15 +13070,15 @@ ruby_if_consequence - 18444 + 18324 ruby_if - 18444 + 18324 consequence - 18444 + 18324 @@ -12909,7 +13092,7 @@ 1 2 - 18444 + 18324 @@ -12925,7 +13108,7 @@ 1 2 - 18444 + 18324 @@ -12935,15 +13118,15 @@ ruby_if_def - 18504 + 18392 id - 18504 + 18392 condition - 18504 + 18392 @@ -12957,7 +13140,7 @@ 1 2 - 18504 + 18392 @@ -12973,7 +13156,7 @@ 1 2 - 18504 + 18392 @@ -13005,7 +13188,7 @@ 1 2 - 3 + 2 @@ -13025,19 +13208,19 @@ ruby_if_modifier_def - 13763 + 13620 id - 13763 + 13620 body - 13763 + 13620 condition - 13763 + 13620 @@ -13051,7 +13234,7 @@ 1 2 - 13763 + 13620 @@ -13067,7 +13250,7 @@ 1 2 - 13763 + 13620 @@ -13083,7 +13266,7 @@ 1 2 - 13763 + 13620 @@ -13099,7 +13282,7 @@ 1 2 - 13763 + 13620 @@ -13115,7 +13298,7 @@ 1 2 - 13763 + 13620 @@ -13131,7 +13314,7 @@ 1 2 - 13763 + 13620 @@ -13141,15 +13324,15 @@ ruby_in_clause_body - 2 + 0 ruby_in_clause - 2 + 0 body - 2 + 0 @@ -13189,15 +13372,15 @@ ruby_in_clause_def - 2 + 0 id - 2 + 0 pattern - 2 + 0 @@ -13223,13 +13406,7 @@ 12 - - - 1 - 2 - 2 - - + @@ -13259,7 +13436,7 @@ 1 2 - 3 + 2 @@ -13275,7 +13452,7 @@ 1 2 - 3 + 2 @@ -13285,15 +13462,15 @@ ruby_in_def - 163 + 162 id - 163 + 162 child - 163 + 162 @@ -13307,7 +13484,7 @@ 1 2 - 163 + 162 @@ -13323,7 +13500,7 @@ 1 2 - 163 + 162 @@ -13333,19 +13510,19 @@ ruby_interpolation_child - 38383 + 38208 ruby_interpolation - 38383 + 38208 index - 3 + 2 child - 38383 + 38208 @@ -13359,7 +13536,7 @@ 1 2 - 38383 + 38208 @@ -13375,7 +13552,7 @@ 1 2 - 38383 + 38208 @@ -13389,9 +13566,9 @@ 12 - 12661 - 12662 - 3 + 12859 + 12860 + 2 @@ -13405,9 +13582,9 @@ 12 - 12661 - 12662 - 3 + 12859 + 12860 + 2 @@ -13423,7 +13600,7 @@ 1 2 - 38383 + 38208 @@ -13439,7 +13616,7 @@ 1 2 - 38383 + 38208 @@ -13449,26 +13626,26 @@ ruby_interpolation_def - 38383 + 38208 id - 38383 + 38208 ruby_keyword_parameter_def - 3777 + 3794 id - 3777 + 3794 name - 3777 + 3794 @@ -13482,7 +13659,7 @@ 1 2 - 3777 + 3794 @@ -13498,7 +13675,7 @@ 1 2 - 3777 + 3794 @@ -13508,15 +13685,15 @@ ruby_keyword_parameter_value - 2832 + 2874 ruby_keyword_parameter - 2832 + 2874 value - 2832 + 2874 @@ -13530,7 +13707,7 @@ 1 2 - 2832 + 2874 @@ -13546,7 +13723,7 @@ 1 2 - 2832 + 2874 @@ -13578,7 +13755,7 @@ 1 2 - 3 + 2 @@ -13620,7 +13797,7 @@ 1 2 - 3 + 2 @@ -13636,7 +13813,7 @@ 1 2 - 3 + 2 @@ -13646,15 +13823,15 @@ ruby_lambda_def - 7499 + 7472 id - 7499 + 7472 body - 7499 + 7472 @@ -13668,7 +13845,7 @@ 1 2 - 7499 + 7472 @@ -13684,7 +13861,7 @@ 1 2 - 7499 + 7472 @@ -13694,15 +13871,15 @@ ruby_lambda_parameters - 1659 + 1664 ruby_lambda - 1659 + 1664 parameters - 1659 + 1664 @@ -13716,7 +13893,7 @@ 1 2 - 1659 + 1664 @@ -13732,7 +13909,7 @@ 1 2 - 1659 + 1664 @@ -13742,11 +13919,11 @@ ruby_lambda_parameters_child - 1898 + 1905 ruby_lambda_parameters - 1650 + 1655 index @@ -13754,7 +13931,7 @@ child - 1898 + 1905 @@ -13768,12 +13945,12 @@ 1 2 - 1469 + 1472 2 3 - 142 + 144 3 @@ -13794,12 +13971,12 @@ 1 2 - 1469 + 1472 2 3 - 142 + 144 3 @@ -13843,13 +14020,13 @@ 1 - 181 - 182 + 183 + 184 1 - 1650 - 1651 + 1655 + 1656 1 @@ -13889,13 +14066,13 @@ 1 - 181 - 182 + 183 + 184 1 - 1650 - 1651 + 1655 + 1656 1 @@ -13912,7 +14089,7 @@ 1 2 - 1898 + 1905 @@ -13928,7 +14105,7 @@ 1 2 - 1898 + 1905 @@ -13938,22 +14115,22 @@ ruby_lambda_parameters_def - 1659 + 1664 id - 1659 + 1664 ruby_left_assignment_list_child - 6390 + 6358 ruby_left_assignment_list - 2887 + 2873 index @@ -13961,7 +14138,7 @@ child - 6390 + 6358 @@ -13975,17 +14152,17 @@ 1 2 - 359 + 360 2 3 - 1873 + 1861 3 4 - 492 + 489 4 @@ -14006,17 +14183,17 @@ 1 2 - 359 + 360 2 3 - 1873 + 1861 3 4 - 492 + 489 4 @@ -14080,18 +14257,18 @@ 1 - 655 - 656 + 652 + 653 1 - 2528 - 2529 + 2513 + 2514 1 - 2887 - 2888 + 2873 + 2874 1 @@ -14151,18 +14328,18 @@ 1 - 655 - 656 + 652 + 653 1 - 2528 - 2529 + 2513 + 2514 1 - 2887 - 2888 + 2873 + 2874 1 @@ -14179,7 +14356,7 @@ 1 2 - 6390 + 6358 @@ -14195,7 +14372,7 @@ 1 2 - 6390 + 6358 @@ -14205,22 +14382,22 @@ ruby_left_assignment_list_def - 2887 + 2873 id - 2887 + 2873 ruby_method_child - 265363 + 264218 ruby_method - 97610 + 97351 index @@ -14228,7 +14405,7 @@ child - 265363 + 264218 @@ -14242,32 +14419,32 @@ 1 2 - 43881 + 43682 2 3 - 17963 + 18007 3 4 - 12762 + 12772 4 5 - 7819 + 7790 5 7 - 8115 + 8159 7 77 - 7069 + 6939 @@ -14283,32 +14460,32 @@ 1 2 - 43881 + 43682 2 3 - 17963 + 18007 3 4 - 12762 + 12772 4 5 - 7819 + 7790 5 7 - 8115 + 8159 7 77 - 7069 + 6939 @@ -14344,41 +14521,41 @@ 6 7 - 25 - - - 8 - 12 - 12 - - - 13 - 19 18 - 20 - 38 + 7 + 13 18 - 46 - 116 + 14 + 20 18 - 151 - 407 + 21 + 41 18 - 521 - 2245 + 49 + 115 18 - 3247 - 30985 + 150 + 400 + 18 + + + 511 + 2203 + 18 + + + 3217 + 30892 18 @@ -14415,41 +14592,41 @@ 6 7 - 25 - - - 8 - 12 - 12 - - - 13 - 19 18 - 20 - 38 + 7 + 13 18 - 46 - 116 + 14 + 20 18 - 151 - 407 + 21 + 41 18 - 521 - 2245 + 49 + 115 18 - 3247 - 30985 + 150 + 400 + 18 + + + 511 + 2203 + 18 + + + 3217 + 30892 18 @@ -14466,7 +14643,7 @@ 1 2 - 265363 + 264218 @@ -14482,7 +14659,7 @@ 1 2 - 265363 + 264218 @@ -14492,15 +14669,15 @@ ruby_method_def - 98643 + 98356 id - 98643 + 98356 name - 98643 + 98356 @@ -14514,7 +14691,7 @@ 1 2 - 98643 + 98356 @@ -14530,7 +14707,7 @@ 1 2 - 98643 + 98356 @@ -14540,15 +14717,15 @@ ruby_method_parameters - 27323 + 27238 ruby_method - 27323 + 27238 parameters - 27323 + 27238 @@ -14562,7 +14739,7 @@ 1 2 - 27323 + 27238 @@ -14578,7 +14755,7 @@ 1 2 - 27323 + 27238 @@ -14588,11 +14765,11 @@ ruby_method_parameters_child - 47661 + 47287 ruby_method_parameters - 28778 + 28643 index @@ -14600,7 +14777,7 @@ child - 47661 + 47287 @@ -14614,22 +14791,22 @@ 1 2 - 17326 + 17310 2 3 - 7059 + 7021 3 4 - 2740 + 2678 4 12 - 1650 + 1632 @@ -14645,22 +14822,22 @@ 1 2 - 17326 + 17310 2 3 - 7059 + 7021 3 4 - 2740 + 2678 4 12 - 1650 + 1632 @@ -14694,38 +14871,38 @@ 3 - 49 - 50 + 48 + 49 3 - 116 - 117 + 115 + 116 3 - 231 - 232 + 226 + 227 3 - 524 - 525 + 518 + 519 3 - 1394 - 1395 + 1368 + 1369 3 - 3635 - 3636 + 3596 + 3597 3 - 9135 - 9136 + 9089 + 9090 3 @@ -14760,38 +14937,38 @@ 3 - 49 - 50 + 48 + 49 3 - 116 - 117 + 115 + 116 3 - 231 - 232 + 226 + 227 3 - 524 - 525 + 518 + 519 3 - 1394 - 1395 + 1368 + 1369 3 - 3635 - 3636 + 3596 + 3597 3 - 9135 - 9136 + 9089 + 9090 3 @@ -14808,7 +14985,7 @@ 1 2 - 47661 + 47287 @@ -14824,7 +15001,7 @@ 1 2 - 47661 + 47287 @@ -14834,22 +15011,22 @@ ruby_method_parameters_def - 28992 + 28861 id - 28992 + 28861 ruby_module_child - 31229 + 31303 ruby_module - 10544 + 10513 index @@ -14857,7 +15034,7 @@ child - 31229 + 31303 @@ -14871,27 +15048,27 @@ 1 2 - 7466 + 7443 2 3 - 885 + 863 3 5 - 762 + 772 5 - 11 - 853 + 10 + 794 - 11 + 10 126 - 576 + 639 @@ -14907,27 +15084,27 @@ 1 2 - 7466 + 7443 2 3 - 885 + 863 3 5 - 762 + 772 5 - 11 - 853 + 10 + 794 - 11 + 10 126 - 576 + 639 @@ -14943,26 +15120,26 @@ 1 2 - 37 + 31 2 3 - 31 + 37 3 4 - 3 + 9 4 5 - 78 + 72 5 - 7 + 8 31 @@ -14972,32 +15149,32 @@ 10 - 16 + 17 34 - 16 + 17 25 34 - 28 - 46 + 27 + 49 31 - 51 - 108 + 52 + 109 31 - 123 - 374 + 122 + 376 31 - 454 - 3348 + 455 + 3337 15 @@ -15014,26 +15191,26 @@ 1 2 - 37 + 31 2 3 - 31 + 37 3 4 - 3 + 9 4 5 - 78 + 72 5 - 7 + 8 31 @@ -15043,32 +15220,32 @@ 10 - 16 + 17 34 - 16 + 17 25 34 - 28 - 46 + 27 + 49 31 - 51 - 108 + 52 + 109 31 - 123 - 374 + 122 + 376 31 - 454 - 3348 + 455 + 3337 15 @@ -15085,7 +15262,7 @@ 1 2 - 31229 + 31303 @@ -15101,7 +15278,7 @@ 1 2 - 31229 + 31303 @@ -15111,15 +15288,15 @@ ruby_module_def - 21140 + 21557 id - 21140 + 21557 name - 21140 + 21557 @@ -15133,7 +15310,7 @@ 1 2 - 21140 + 21557 @@ -15149,7 +15326,7 @@ 1 2 - 21140 + 21557 @@ -15207,34 +15384,34 @@ ruby_next_def - 2070 + 2005 id - 2070 + 2005 ruby_operator_assignment_def - 6618 + 6596 id - 6618 + 6596 left - 6618 + 6596 operator - 18 + 17 right - 6618 + 6596 @@ -15248,7 +15425,7 @@ 1 2 - 6618 + 6596 @@ -15264,7 +15441,7 @@ 1 2 - 6618 + 6596 @@ -15280,7 +15457,7 @@ 1 2 - 6618 + 6596 @@ -15296,7 +15473,7 @@ 1 2 - 6618 + 6596 @@ -15312,7 +15489,7 @@ 1 2 - 6618 + 6596 @@ -15328,7 +15505,7 @@ 1 2 - 6618 + 6596 @@ -15344,32 +15521,32 @@ 1 2 - 3 + 2 5 6 - 3 + 2 9 10 - 3 + 2 - 60 - 61 - 3 + 61 + 62 + 2 - 578 - 579 - 3 + 592 + 593 + 2 - 1530 - 1531 - 3 + 1552 + 1553 + 2 @@ -15385,32 +15562,32 @@ 1 2 - 3 + 2 5 6 - 3 + 2 9 10 - 3 + 2 - 60 - 61 - 3 + 61 + 62 + 2 - 578 - 579 - 3 + 592 + 593 + 2 - 1530 - 1531 - 3 + 1552 + 1553 + 2 @@ -15426,32 +15603,32 @@ 1 2 - 3 + 2 5 6 - 3 + 2 9 10 - 3 + 2 - 60 - 61 - 3 + 61 + 62 + 2 - 578 - 579 - 3 + 592 + 593 + 2 - 1530 - 1531 - 3 + 1552 + 1553 + 2 @@ -15467,7 +15644,7 @@ 1 2 - 6618 + 6596 @@ -15483,7 +15660,7 @@ 1 2 - 6618 + 6596 @@ -15499,7 +15676,7 @@ 1 2 - 6618 + 6596 @@ -15509,19 +15686,19 @@ ruby_optional_parameter_def - 6527 + 6435 id - 6527 + 6435 name - 6527 + 6435 value - 6527 + 6435 @@ -15535,7 +15712,7 @@ 1 2 - 6527 + 6435 @@ -15551,7 +15728,7 @@ 1 2 - 6527 + 6435 @@ -15567,7 +15744,7 @@ 1 2 - 6527 + 6435 @@ -15583,7 +15760,7 @@ 1 2 - 6527 + 6435 @@ -15599,7 +15776,7 @@ 1 2 - 6527 + 6435 @@ -15615,7 +15792,7 @@ 1 2 - 6527 + 6435 @@ -15625,15 +15802,15 @@ ruby_pair_def - 235172 + 235158 id - 235172 + 235158 key__ - 235172 + 235158 @@ -15647,7 +15824,7 @@ 1 2 - 235172 + 235158 @@ -15663,7 +15840,7 @@ 1 2 - 235172 + 235158 @@ -15673,15 +15850,15 @@ ruby_pair_value - 235172 + 235158 ruby_pair - 235172 + 235158 value - 235172 + 235158 @@ -15695,7 +15872,7 @@ 1 2 - 235172 + 235158 @@ -15711,7 +15888,7 @@ 1 2 - 235172 + 235158 @@ -15743,7 +15920,7 @@ 1 2 - 3 + 2 @@ -15763,11 +15940,11 @@ ruby_parenthesized_statements_child - 10178 + 10272 ruby_parenthesized_statements - 10114 + 10208 index @@ -15775,7 +15952,7 @@ child - 10178 + 10272 @@ -15789,7 +15966,7 @@ 1 2 - 10058 + 10152 2 @@ -15810,7 +15987,7 @@ 1 2 - 10058 + 10152 2 @@ -15844,8 +16021,8 @@ 1 - 10114 - 10115 + 10208 + 10209 1 @@ -15875,8 +16052,8 @@ 1 - 10114 - 10115 + 10208 + 10209 1 @@ -15893,7 +16070,7 @@ 1 2 - 10178 + 10272 @@ -15909,7 +16086,7 @@ 1 2 - 10178 + 10272 @@ -15919,26 +16096,26 @@ ruby_parenthesized_statements_def - 10153 + 10247 id - 10153 + 10247 ruby_pattern_def - 3878 + 3895 id - 3878 + 3895 child - 3878 + 3895 @@ -15952,7 +16129,7 @@ 1 2 - 3878 + 3895 @@ -15968,7 +16145,7 @@ 1 2 - 3878 + 3895 @@ -15978,19 +16155,19 @@ ruby_program_child - 33094 + 33147 ruby_program - 10452 + 10456 index - 239 + 236 child - 33094 + 33147 @@ -16004,32 +16181,32 @@ 1 2 - 3865 + 3857 2 3 - 2526 + 2527 3 4 - 1650 + 1660 4 5 - 778 + 791 5 8 - 916 + 910 8 - 77 - 715 + 76 + 709 @@ -16045,32 +16222,32 @@ 1 2 - 3865 + 3857 2 3 - 2526 + 2527 3 4 - 1650 + 1660 4 5 - 778 + 791 5 8 - 916 + 910 8 - 77 - 715 + 76 + 709 @@ -16086,7 +16263,7 @@ 1 2 - 53 + 50 2 @@ -16105,27 +16282,27 @@ 15 - 22 + 23 18 - 25 + 26 37 18 38 - 62 + 63 18 - 67 - 138 + 68 + 139 18 - 161 - 519 + 157 + 515 18 @@ -16147,7 +16324,7 @@ 1 2 - 53 + 50 2 @@ -16166,27 +16343,27 @@ 15 - 22 + 23 18 - 25 + 26 37 18 38 - 62 + 63 18 - 67 - 138 + 68 + 139 18 - 161 - 519 + 157 + 515 18 @@ -16208,7 +16385,7 @@ 1 2 - 33094 + 33147 @@ -16224,7 +16401,7 @@ 1 2 - 33094 + 33147 @@ -16234,26 +16411,26 @@ ruby_program_def - 16935 + 17142 id - 16935 + 17142 ruby_range_begin - 4241 + 3997 ruby_range - 4241 + 3997 begin - 4241 + 3997 @@ -16267,7 +16444,7 @@ 1 2 - 4241 + 3997 @@ -16283,7 +16460,7 @@ 1 2 - 4241 + 3997 @@ -16293,11 +16470,11 @@ ruby_range_def - 4294 + 4187 id - 4294 + 4187 operator @@ -16315,7 +16492,7 @@ 1 2 - 4294 + 4187 @@ -16329,13 +16506,13 @@ 12 - 1544 - 1545 + 1356 + 1357 1 - 2750 - 2751 + 2831 + 2832 1 @@ -16346,15 +16523,15 @@ ruby_range_end - 3671 + 4070 ruby_range - 3671 + 4070 end - 3671 + 4070 @@ -16368,7 +16545,7 @@ 1 2 - 3671 + 4070 @@ -16384,7 +16561,7 @@ 1 2 - 3671 + 4070 @@ -16464,7 +16641,7 @@ 1 2 - 3 + 2 @@ -16480,7 +16657,7 @@ 1 2 - 3 + 2 @@ -16501,19 +16678,19 @@ ruby_regex_child - 42882 + 43301 ruby_regex - 12812 + 12839 index - 135 + 154 child - 42882 + 43301 @@ -16532,37 +16709,37 @@ 2 3 - 721 + 696 3 4 - 1688 + 1723 4 5 - 500 + 466 5 6 - 1086 + 1087 6 8 - 982 + 1002 8 - 16 - 1023 + 15 + 986 - 16 - 44 - 229 + 15 + 50 + 299 @@ -16583,37 +16760,37 @@ 2 3 - 721 + 696 3 4 - 1688 + 1723 4 5 - 500 + 466 5 6 - 1086 + 1087 6 8 - 982 + 1002 8 - 16 - 1023 + 15 + 986 - 16 - 44 - 229 + 15 + 50 + 299 @@ -16627,85 +16804,70 @@ 12 - 2 - 3 - 12 + 1 + 2 + 18 4 5 + 12 + + + 6 + 7 3 - - 5 - 6 - 9 - 7 - 10 - 9 + 8 + 12 - 10 + 8 15 - 6 + 12 15 - 16 - 6 + 18 + 12 - 17 - 19 - 9 - - - 20 + 18 22 - 6 + 9 22 - 28 - 9 + 30 + 12 - 29 - 37 - 9 + 31 + 73 + 12 - 54 - 95 - 9 - - - 106 + 95 165 - 9 + 12 - 227 - 336 - 9 + 230 + 409 + 12 - 398 - 711 - 9 + 645 + 1220 + 12 - 1055 - 1751 + 1766 + 4075 9 - - 1979 - 4068 - 6 - @@ -16718,85 +16880,70 @@ 12 - 2 - 3 - 12 + 1 + 2 + 18 4 5 + 12 + + + 6 + 7 3 - - 5 - 6 - 9 - 7 - 10 - 9 + 8 + 12 - 10 + 8 15 - 6 + 12 15 - 16 - 6 + 18 + 12 - 17 - 19 - 9 - - - 20 + 18 22 - 6 + 9 22 - 28 - 9 + 30 + 12 - 29 - 37 - 9 + 31 + 73 + 12 - 54 - 95 - 9 - - - 106 + 95 165 - 9 + 12 - 227 - 336 - 9 + 230 + 409 + 12 - 398 - 711 - 9 + 645 + 1220 + 12 - 1055 - 1751 + 1766 + 4075 9 - - 1979 - 4068 - 6 - @@ -16811,7 +16958,7 @@ 1 2 - 42882 + 43301 @@ -16827,7 +16974,7 @@ 1 2 - 42882 + 43301 @@ -16837,26 +16984,26 @@ ruby_regex_def - 12828 + 12854 id - 12828 + 12854 ruby_rescue_body - 1794 + 1767 ruby_rescue - 1794 + 1767 body - 1794 + 1767 @@ -16870,7 +17017,7 @@ 1 2 - 1794 + 1767 @@ -16886,7 +17033,7 @@ 1 2 - 1794 + 1767 @@ -16896,26 +17043,26 @@ ruby_rescue_def - 2085 + 2061 id - 2085 + 2061 ruby_rescue_exceptions - 1641 + 1639 ruby_rescue - 1641 + 1639 exceptions - 1641 + 1639 @@ -16929,7 +17076,7 @@ 1 2 - 1641 + 1639 @@ -16945,7 +17092,7 @@ 1 2 - 1641 + 1639 @@ -16955,19 +17102,19 @@ ruby_rescue_modifier_def - 551 + 525 id - 551 + 525 body - 551 + 525 handler - 551 + 525 @@ -16981,7 +17128,7 @@ 1 2 - 551 + 525 @@ -16997,7 +17144,7 @@ 1 2 - 551 + 525 @@ -17013,7 +17160,7 @@ 1 2 - 551 + 525 @@ -17029,7 +17176,7 @@ 1 2 - 551 + 525 @@ -17045,7 +17192,7 @@ 1 2 - 551 + 525 @@ -17061,7 +17208,7 @@ 1 2 - 551 + 525 @@ -17071,15 +17218,15 @@ ruby_rescue_variable - 1021 + 1001 ruby_rescue - 1021 + 1001 variable - 1021 + 1001 @@ -17093,7 +17240,7 @@ 1 2 - 1021 + 1001 @@ -17109,7 +17256,7 @@ 1 2 - 1021 + 1001 @@ -17200,7 +17347,7 @@ 1 2 - 3 + 2 @@ -17216,7 +17363,7 @@ 1 2 - 3 + 2 @@ -17237,15 +17384,15 @@ ruby_return_child - 5359 + 5336 ruby_return - 5359 + 5336 child - 5359 + 5336 @@ -17259,7 +17406,7 @@ 1 2 - 5359 + 5336 @@ -17275,7 +17422,7 @@ 1 2 - 5359 + 5336 @@ -17285,22 +17432,22 @@ ruby_return_def - 8521 + 8495 id - 8521 + 8495 ruby_right_assignment_list_child - 2932 + 2757 ruby_right_assignment_list - 1376 + 1288 index @@ -17308,7 +17455,7 @@ child - 2932 + 2757 @@ -17322,7 +17469,7 @@ 2 3 - 1234 + 1147 3 @@ -17348,7 +17495,7 @@ 2 3 - 1234 + 1147 3 @@ -17387,8 +17534,8 @@ 3 - 437 - 438 + 409 + 410 6 @@ -17418,8 +17565,8 @@ 3 - 437 - 438 + 409 + 410 6 @@ -17436,7 +17583,7 @@ 1 2 - 2932 + 2757 @@ -17452,7 +17599,7 @@ 1 2 - 2932 + 2757 @@ -17462,26 +17609,26 @@ ruby_right_assignment_list_def - 1376 + 1288 id - 1376 + 1288 ruby_scope_resolution_def - 80201 + 80009 id - 80201 + 80009 name - 80201 + 80009 @@ -17495,7 +17642,7 @@ 1 2 - 80201 + 80009 @@ -17511,7 +17658,7 @@ 1 2 - 80201 + 80009 @@ -17521,15 +17668,15 @@ ruby_scope_resolution_scope - 78442 + 78256 ruby_scope_resolution - 78442 + 78256 scope - 78442 + 78256 @@ -17543,7 +17690,7 @@ 1 2 - 78442 + 78256 @@ -17559,7 +17706,7 @@ 1 2 - 78442 + 78256 @@ -17617,19 +17764,19 @@ ruby_singleton_class_child - 2422 + 2322 ruby_singleton_class - 626 + 620 index - 75 + 72 child - 2422 + 2322 @@ -17653,17 +17800,17 @@ 3 4 - 37 + 40 4 5 - 44 + 40 5 6 - 37 + 40 6 @@ -17672,18 +17819,13 @@ 8 - 12 - 47 + 13 + 53 - 12 + 13 24 - 47 - - - 24 - 25 - 3 + 34 @@ -17709,17 +17851,17 @@ 3 4 - 37 + 40 4 5 - 44 + 40 5 6 - 37 + 40 6 @@ -17728,18 +17870,13 @@ 8 - 12 - 47 + 13 + 53 - 12 + 13 24 - 47 - - - 24 - 25 - 3 + 34 @@ -17754,8 +17891,13 @@ 1 + 2 + 3 + + + 2 3 - 6 + 9 3 @@ -17763,18 +17905,13 @@ 9 - 4 - 5 - 9 - - - 7 - 9 + 6 + 8 6 - 10 - 13 + 9 + 12 6 @@ -17783,28 +17920,28 @@ 6 - 20 - 24 + 21 + 23 6 - 31 - 36 + 28 + 33 6 - 45 - 58 + 42 + 56 6 - 71 - 84 + 68 + 82 6 - 109 - 200 + 107 + 198 6 @@ -17820,8 +17957,13 @@ 1 + 2 + 3 + + + 2 3 - 6 + 9 3 @@ -17829,18 +17971,13 @@ 9 - 4 - 5 - 9 - - - 7 - 9 + 6 + 8 6 - 10 - 13 + 9 + 12 6 @@ -17849,28 +17986,28 @@ 6 - 20 - 24 + 21 + 23 6 - 31 - 36 + 28 + 33 6 - 45 - 58 + 42 + 56 6 - 71 - 84 + 68 + 82 6 - 109 - 200 + 107 + 198 6 @@ -17887,7 +18024,7 @@ 1 2 - 2422 + 2322 @@ -17903,7 +18040,7 @@ 1 2 - 2422 + 2322 @@ -17913,15 +18050,15 @@ ruby_singleton_class_def - 626 + 620 id - 626 + 620 value - 626 + 620 @@ -17935,7 +18072,7 @@ 1 2 - 626 + 620 @@ -17951,7 +18088,7 @@ 1 2 - 626 + 620 @@ -17961,19 +18098,19 @@ ruby_singleton_method_child - 16000 + 16018 ruby_singleton_method - 6563 + 6539 index - 84 + 89 child - 16000 + 16018 @@ -17987,32 +18124,32 @@ 1 2 - 3713 + 3714 2 3 - 985 + 965 3 4 - 588 + 612 4 5 - 403 + 374 5 8 - 518 + 505 8 - 29 - 354 + 31 + 368 @@ -18028,32 +18165,32 @@ 1 2 - 3713 + 3714 2 3 - 985 + 965 3 4 - 588 + 612 4 5 - 403 + 374 5 8 - 518 + 505 8 - 29 - 354 + 31 + 368 @@ -18069,72 +18206,77 @@ 1 2 - 3 + 2 2 3 - 6 + 11 3 4 - 6 + 5 + + + 4 + 5 + 2 5 6 - 12 + 8 - 7 - 9 - 6 + 9 + 10 + 5 - 10 - 15 - 6 + 12 + 17 + 5 - 22 - 27 - 6 + 23 + 28 + 5 - 30 - 38 - 6 + 32 + 41 + 5 - 49 - 63 - 6 + 51 + 66 + 5 - 87 - 118 - 6 + 93 + 125 + 5 - 148 - 202 - 6 + 155 + 210 + 5 - 288 - 422 - 6 + 294 + 421 + 5 - 615 - 941 - 6 + 626 + 952 + 5 - 2165 - 2166 - 3 + 2201 + 2202 + 2 @@ -18150,72 +18292,77 @@ 1 2 - 3 + 2 2 3 - 6 + 11 3 4 - 6 + 5 + + + 4 + 5 + 2 5 6 - 12 + 8 - 7 - 9 - 6 + 9 + 10 + 5 - 10 - 15 - 6 + 12 + 17 + 5 - 22 - 27 - 6 + 23 + 28 + 5 - 30 - 38 - 6 + 32 + 41 + 5 - 49 - 63 - 6 + 51 + 66 + 5 - 87 - 118 - 6 + 93 + 125 + 5 - 148 - 202 - 6 + 155 + 210 + 5 - 288 - 422 - 6 + 294 + 421 + 5 - 615 - 941 - 6 + 626 + 952 + 5 - 2165 - 2166 - 3 + 2201 + 2202 + 2 @@ -18231,7 +18378,7 @@ 1 2 - 16000 + 16018 @@ -18247,7 +18394,7 @@ 1 2 - 16000 + 16018 @@ -18257,19 +18404,19 @@ ruby_singleton_method_def - 6563 + 6539 id - 6563 + 6539 name - 6563 + 6539 object - 6563 + 6539 @@ -18283,7 +18430,7 @@ 1 2 - 6563 + 6539 @@ -18299,7 +18446,7 @@ 1 2 - 6563 + 6539 @@ -18315,7 +18462,7 @@ 1 2 - 6563 + 6539 @@ -18331,7 +18478,7 @@ 1 2 - 6563 + 6539 @@ -18347,7 +18494,7 @@ 1 2 - 6563 + 6539 @@ -18363,7 +18510,7 @@ 1 2 - 6563 + 6539 @@ -18373,15 +18520,15 @@ ruby_singleton_method_parameters - 4135 + 4082 ruby_singleton_method - 4135 + 4082 parameters - 4135 + 4082 @@ -18395,7 +18542,7 @@ 1 2 - 4135 + 4082 @@ -18411,7 +18558,7 @@ 1 2 - 4135 + 4082 @@ -18421,15 +18568,15 @@ ruby_splat_argument_def - 3179 + 3046 id - 3179 + 3046 child - 3179 + 3046 @@ -18443,7 +18590,7 @@ 1 2 - 3179 + 3046 @@ -18459,7 +18606,7 @@ 1 2 - 3179 + 3046 @@ -18469,26 +18616,26 @@ ruby_splat_parameter_def - 2936 + 2905 id - 2936 + 2905 ruby_splat_parameter_name - 2369 + 2354 ruby_splat_parameter - 2369 + 2354 name - 2369 + 2354 @@ -18502,7 +18649,7 @@ 1 2 - 2369 + 2354 @@ -18518,7 +18665,7 @@ 1 2 - 2369 + 2354 @@ -18528,11 +18675,11 @@ ruby_string_array_child - 11474 + 11487 ruby_string_array - 3716 + 3704 index @@ -18540,7 +18687,7 @@ child - 11474 + 11487 @@ -18554,32 +18701,32 @@ 1 2 - 1205 + 1200 2 3 - 1226 + 1218 3 4 - 579 + 576 4 5 - 290 + 294 5 10 - 283 + 282 10 461 - 133 + 134 @@ -18595,32 +18742,32 @@ 1 2 - 1205 + 1200 2 3 - 1226 + 1218 3 4 - 579 + 576 4 5 - 290 + 294 5 10 - 283 + 282 10 461 - 133 + 134 @@ -18649,8 +18796,8 @@ 35 - 706 - 3717 + 710 + 3705 4 @@ -18680,8 +18827,8 @@ 35 - 706 - 3717 + 710 + 3705 4 @@ -18698,7 +18845,7 @@ 1 2 - 11474 + 11487 @@ -18714,7 +18861,7 @@ 1 2 - 11474 + 11487 @@ -18724,22 +18871,22 @@ ruby_string_array_def - 3868 + 3840 id - 3868 + 3840 ruby_string_child - 535162 + 534498 ruby_string__ - 467438 + 466613 index @@ -18747,7 +18894,7 @@ child - 535162 + 534498 @@ -18761,12 +18908,12 @@ 1 2 - 440917 + 439982 2 282 - 26521 + 26631 @@ -18782,12 +18929,12 @@ 1 2 - 440917 + 439982 2 282 - 26521 + 26631 @@ -18827,7 +18974,7 @@ 102 - 467439 + 466614 22 @@ -18868,7 +19015,7 @@ 102 - 467439 + 466614 22 @@ -18885,7 +19032,7 @@ 1 2 - 535162 + 534498 @@ -18901,7 +19048,7 @@ 1 2 - 535162 + 534498 @@ -18911,22 +19058,22 @@ ruby_string_def - 474637 + 473533 id - 474637 + 473533 ruby_subshell_child - 645 + 620 ruby_subshell - 409 + 403 index @@ -18934,7 +19081,7 @@ child - 645 + 620 @@ -18948,22 +19095,22 @@ 1 2 - 308 + 296 2 3 - 53 + 59 3 - 6 - 28 + 4 + 18 - 6 + 4 12 - 18 + 28 @@ -18979,22 +19126,22 @@ 1 2 - 308 + 296 2 3 - 53 + 59 3 - 6 - 28 + 4 + 18 - 6 + 4 12 - 18 + 28 @@ -19015,16 +19162,11 @@ 2 3 - 3 + 6 - 6 - 7 - 3 - - - 7 - 8 + 3 + 4 3 @@ -19038,13 +19180,13 @@ 3 - 32 - 33 + 34 + 35 3 - 130 - 131 + 128 + 129 3 @@ -19066,16 +19208,11 @@ 2 3 - 3 + 6 - 6 - 7 - 3 - - - 7 - 8 + 3 + 4 3 @@ -19089,13 +19226,13 @@ 3 - 32 - 33 + 34 + 35 3 - 130 - 131 + 128 + 129 3 @@ -19112,7 +19249,7 @@ 1 2 - 645 + 620 @@ -19128,7 +19265,7 @@ 1 2 - 645 + 620 @@ -19138,26 +19275,26 @@ ruby_subshell_def - 409 + 403 id - 409 + 403 ruby_superclass_def - 13262 + 13318 id - 13262 + 13318 child - 13262 + 13318 @@ -19171,7 +19308,7 @@ 1 2 - 13262 + 13318 @@ -19187,7 +19324,7 @@ 1 2 - 13262 + 13318 @@ -19197,19 +19334,19 @@ ruby_symbol_array_child - 2137 + 2106 ruby_symbol_array - 457 + 463 index - 100 + 98 child - 2137 + 2106 @@ -19223,42 +19360,42 @@ 1 2 - 175 + 184 2 3 - 93 + 92 3 4 - 39 + 38 4 6 - 21 + 26 6 8 - 39 + 35 8 13 - 36 + 38 13 - 21 - 36 + 22 + 38 - 21 + 27 34 - 15 + 8 @@ -19274,42 +19411,42 @@ 1 2 - 175 + 184 2 3 - 93 + 92 3 4 - 39 + 38 4 6 - 21 + 26 6 8 - 39 + 35 8 13 - 36 + 38 13 - 21 - 36 + 22 + 38 - 21 + 27 34 - 15 + 8 @@ -19325,52 +19462,52 @@ 1 2 - 12 + 11 2 3 - 15 + 5 3 4 - 9 + 17 5 7 - 9 + 8 7 11 - 9 + 8 13 - 18 - 9 + 17 + 8 - 19 - 23 - 9 + 18 + 24 + 8 - 27 - 35 - 9 + 26 + 34 + 8 - 42 - 50 - 9 + 41 + 51 + 8 - 62 - 152 - 9 + 63 + 157 + 8 @@ -19386,52 +19523,52 @@ 1 2 - 12 + 11 2 3 - 15 + 5 3 4 - 9 + 17 5 7 - 9 + 8 7 11 - 9 + 8 13 - 18 - 9 + 17 + 8 - 19 - 23 - 9 + 18 + 24 + 8 - 27 - 35 - 9 + 26 + 34 + 8 - 42 - 50 - 9 + 41 + 51 + 8 - 62 - 152 - 9 + 63 + 157 + 8 @@ -19447,7 +19584,7 @@ 1 2 - 2137 + 2106 @@ -19463,7 +19600,7 @@ 1 2 - 2137 + 2106 @@ -19473,30 +19610,30 @@ ruby_symbol_array_def - 457 + 463 id - 457 + 463 ruby_then_child - 41524 + 41375 ruby_then - 24592 + 24329 index - 106 + 288 child - 41524 + 41375 @@ -19510,22 +19647,22 @@ 1 2 - 15349 + 15210 2 3 - 5541 + 5479 3 4 - 2031 + 2011 4 - 36 - 1670 + 98 + 1628 @@ -19541,22 +19678,22 @@ 1 2 - 15349 + 15210 2 3 - 5541 + 5479 3 4 - 2031 + 2011 4 - 36 - 1670 + 98 + 1628 @@ -19572,42 +19709,32 @@ 1 2 - 36 + 184 2 - 3 - 6 + 4 + 20 4 - 5 - 18 + 7 + 20 - 6 - 10 - 9 + 7 + 12 + 23 - 11 - 29 - 9 + 12 + 157 + 23 - 42 - 92 - 9 - - - 157 - 552 - 9 - - - 1221 - 8113 - 9 + 292 + 8189 + 14 @@ -19623,42 +19750,32 @@ 1 2 - 36 + 184 2 - 3 - 6 + 4 + 20 4 - 5 - 18 + 7 + 20 - 6 - 10 - 9 + 7 + 12 + 23 - 11 - 29 - 9 + 12 + 157 + 23 - 42 - 92 - 9 - - - 157 - 552 - 9 - - - 1221 - 8113 - 9 + 292 + 8189 + 14 @@ -19674,7 +19791,7 @@ 1 2 - 41524 + 41375 @@ -19690,7 +19807,7 @@ 1 2 - 41524 + 41375 @@ -19700,30 +19817,30 @@ ruby_then_def - 24592 + 24329 id - 24592 + 24329 ruby_tokeninfo - 5922021 + 5932219 id - 5922021 + 5932219 kind - 69 + 65 value - 270444 + 268924 @@ -19737,7 +19854,7 @@ 1 2 - 5922021 + 5932219 @@ -19753,7 +19870,7 @@ 1 2 - 5922021 + 5932219 @@ -19767,64 +19884,64 @@ 12 - 1 - 35 - 6 + 36 + 154 + 5 - 149 - 216 - 6 + 218 + 427 + 5 - 426 - 1594 - 6 + 1610 + 1611 + 2 - 1759 - 1760 - 6 + 1805 + 1806 + 5 - 3972 - 4099 - 6 + 3990 + 4222 + 5 - 4151 - 5588 - 6 + 4225 + 5692 + 5 - 7608 - 9506 - 6 + 7841 + 9805 + 5 - 13384 - 17043 - 6 + 13552 + 17172 + 5 - 24845 - 53463 - 6 + 25328 + 54391 + 5 - 54287 - 77797 - 6 + 55573 + 79435 + 5 - 93626 - 488897 - 6 + 95059 + 499129 + 5 - 1089226 - 1089227 - 3 + 1115017 + 1115018 + 2 @@ -19840,52 +19957,52 @@ 1 2 - 18 + 14 5 - 26 - 6 + 22 + 5 - 46 - 57 - 6 + 25 + 30 + 5 - 66 - 121 - 6 + 69 + 123 + 5 123 - 147 - 6 + 148 + 5 - 1472 - 1747 - 6 + 1480 + 1754 + 5 - 3017 - 3685 - 6 + 3052 + 3730 + 5 - 4567 - 7583 - 6 + 4632 + 7672 + 5 - 9961 - 18415 - 6 + 10019 + 18637 + 5 - 43711 - 43712 - 3 + 44586 + 44587 + 2 @@ -19901,32 +20018,32 @@ 1 2 - 160511 + 159668 2 3 - 39768 + 39566 3 4 - 19017 + 18844 4 7 - 22464 + 22228 7 27 - 20427 + 20374 27 - 178897 - 8255 + 183191 + 8242 @@ -19942,12 +20059,12 @@ 1 2 - 257002 + 255594 2 5 - 13442 + 13329 @@ -19957,15 +20074,15 @@ ruby_unary_def - 12512 + 13057 id - 12512 + 13057 operand - 12512 + 13057 operator @@ -19983,7 +20100,7 @@ 1 2 - 12512 + 13057 @@ -19999,7 +20116,7 @@ 1 2 - 12512 + 13057 @@ -20015,7 +20132,7 @@ 1 2 - 12512 + 13057 @@ -20031,7 +20148,7 @@ 1 2 - 12512 + 13057 @@ -20050,28 +20167,28 @@ 1 - 237 - 238 + 236 + 237 1 - 559 - 560 + 557 + 558 1 - 1311 - 1312 + 1312 + 1313 1 - 1747 - 1748 + 1742 + 1743 1 - 8570 - 8571 + 9122 + 9123 1 @@ -20091,28 +20208,28 @@ 1 - 237 - 238 + 236 + 237 1 - 559 - 560 + 557 + 558 1 - 1311 - 1312 + 1312 + 1313 1 - 1747 - 1748 + 1742 + 1743 1 - 8570 - 8571 + 9122 + 9123 1 @@ -20318,15 +20435,15 @@ ruby_unless_consequence - 2567 + 2575 ruby_unless - 2567 + 2575 consequence - 2567 + 2575 @@ -20340,7 +20457,7 @@ 1 2 - 2567 + 2575 @@ -20356,7 +20473,7 @@ 1 2 - 2567 + 2575 @@ -20366,15 +20483,15 @@ ruby_unless_def - 2568 + 2578 id - 2568 + 2578 condition - 2568 + 2578 @@ -20388,7 +20505,7 @@ 1 2 - 2568 + 2578 @@ -20404,7 +20521,7 @@ 1 2 - 2568 + 2578 @@ -20436,7 +20553,7 @@ 1 2 - 3 + 2 @@ -20456,19 +20573,19 @@ ruby_unless_modifier_def - 4341 + 4207 id - 4341 + 4207 body - 4341 + 4207 condition - 4341 + 4207 @@ -20482,7 +20599,7 @@ 1 2 - 4341 + 4207 @@ -20498,7 +20615,7 @@ 1 2 - 4341 + 4207 @@ -20514,7 +20631,7 @@ 1 2 - 4341 + 4207 @@ -20530,7 +20647,7 @@ 1 2 - 4341 + 4207 @@ -20546,7 +20663,7 @@ 1 2 - 4341 + 4207 @@ -20562,7 +20679,7 @@ 1 2 - 4341 + 4207 @@ -20572,19 +20689,19 @@ ruby_until_def - 114 + 113 id - 114 + 113 body - 114 + 113 condition - 114 + 113 @@ -20598,7 +20715,7 @@ 1 2 - 114 + 113 @@ -20614,7 +20731,7 @@ 1 2 - 114 + 113 @@ -20630,7 +20747,7 @@ 1 2 - 114 + 113 @@ -20646,7 +20763,7 @@ 1 2 - 114 + 113 @@ -20662,7 +20779,7 @@ 1 2 - 114 + 113 @@ -20678,7 +20795,7 @@ 1 2 - 114 + 113 @@ -20688,19 +20805,19 @@ ruby_until_modifier_def - 218 + 206 id - 218 + 206 body - 218 + 206 condition - 218 + 206 @@ -20714,7 +20831,7 @@ 1 2 - 218 + 206 @@ -20730,7 +20847,7 @@ 1 2 - 218 + 206 @@ -20746,7 +20863,7 @@ 1 2 - 218 + 206 @@ -20762,7 +20879,7 @@ 1 2 - 218 + 206 @@ -20778,7 +20895,7 @@ 1 2 - 218 + 206 @@ -20794,7 +20911,7 @@ 1 2 - 218 + 206 @@ -20826,7 +20943,7 @@ 1 2 - 3 + 2 @@ -20846,15 +20963,15 @@ ruby_when_body - 3194 + 3208 ruby_when - 3194 + 3208 body - 3194 + 3208 @@ -20868,7 +20985,7 @@ 1 2 - 3194 + 3208 @@ -20884,7 +21001,7 @@ 1 2 - 3194 + 3208 @@ -20894,22 +21011,22 @@ ruby_when_def - 3229 + 3239 id - 3229 + 3239 ruby_when_pattern - 3878 + 3895 ruby_when - 3229 + 3239 index @@ -20917,7 +21034,7 @@ pattern - 3878 + 3895 @@ -20931,7 +21048,7 @@ 1 2 - 2822 + 2830 2 @@ -20941,7 +21058,7 @@ 3 15 - 100 + 103 @@ -20957,7 +21074,7 @@ 1 2 - 2822 + 2830 2 @@ -20967,7 +21084,7 @@ 3 15 - 100 + 103 @@ -21006,18 +21123,18 @@ 3 - 32 - 33 + 33 + 34 3 - 129 - 130 + 130 + 131 3 - 1025 - 1026 + 1028 + 1029 3 @@ -21057,18 +21174,18 @@ 3 - 32 - 33 + 33 + 34 3 - 129 - 130 + 130 + 131 3 - 1025 - 1026 + 1028 + 1029 3 @@ -21085,7 +21202,7 @@ 1 2 - 3878 + 3895 @@ -21101,7 +21218,7 @@ 1 2 - 3878 + 3895 @@ -21111,19 +21228,19 @@ ruby_while_def - 1344 + 1335 id - 1344 + 1335 body - 1344 + 1335 condition - 1344 + 1335 @@ -21137,7 +21254,7 @@ 1 2 - 1344 + 1335 @@ -21153,7 +21270,7 @@ 1 2 - 1344 + 1335 @@ -21169,7 +21286,7 @@ 1 2 - 1344 + 1335 @@ -21185,7 +21302,7 @@ 1 2 - 1344 + 1335 @@ -21201,7 +21318,7 @@ 1 2 - 1344 + 1335 @@ -21217,7 +21334,7 @@ 1 2 - 1344 + 1335 @@ -21227,19 +21344,19 @@ ruby_while_modifier_def - 184 + 179 id - 184 + 179 body - 184 + 179 condition - 184 + 179 @@ -21253,7 +21370,7 @@ 1 2 - 184 + 179 @@ -21269,7 +21386,7 @@ 1 2 - 184 + 179 @@ -21285,7 +21402,7 @@ 1 2 - 184 + 179 @@ -21301,7 +21418,7 @@ 1 2 - 184 + 179 @@ -21317,7 +21434,7 @@ 1 2 - 184 + 179 @@ -21333,7 +21450,7 @@ 1 2 - 184 + 179 @@ -21343,15 +21460,15 @@ ruby_yield_child - 1115 + 1112 ruby_yield - 1115 + 1112 child - 1115 + 1112 @@ -21365,7 +21482,7 @@ 1 2 - 1115 + 1112 @@ -21381,7 +21498,7 @@ 1 2 - 1115 + 1112 @@ -21391,11 +21508,11 @@ ruby_yield_def - 2406 + 2385 id - 2406 + 2385 From 20a3e3a8aead302867988f7d49bc7d21a696e6ee Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 26 Apr 2022 15:26:13 +0200 Subject: [PATCH 0185/1618] Update library --- ruby/ql/lib/codeql/ruby/ast/Method.qll | 18 +++++++++ ruby/ql/lib/codeql/ruby/ast/internal/AST.qll | 36 ++++++++--------- ruby/ql/lib/codeql/ruby/ast/internal/Call.qll | 40 ++----------------- .../lib/codeql/ruby/ast/internal/Literal.qll | 11 +++-- .../lib/codeql/ruby/ast/internal/Method.qll | 4 ++ .../codeql/ruby/ast/internal/Synthesis.qll | 7 +--- .../lib/codeql/ruby/ast/internal/Variable.qll | 5 ++- .../internal/ControlFlowGraphImpl.qll | 14 ++++++- 8 files changed, 68 insertions(+), 67 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/ast/Method.qll b/ruby/ql/lib/codeql/ruby/ast/Method.qll index 824a0b6954a..8e4ea870e03 100644 --- a/ruby/ql/lib/codeql/ruby/ast/Method.qll +++ b/ruby/ql/lib/codeql/ruby/ast/Method.qll @@ -252,10 +252,24 @@ class Lambda extends Callable, BodyStmt, TLambda { /** A block. */ class Block extends Callable, StmtSequence, Scope, TBlock { + /** + * Get a local variable declared by this block. + * For example `local` in `{ | param; local| puts param }`. + */ + LocalVariableWriteAccess getALocalVariable() { result = this.getLocalVariable(_) } + + /** + * Gets the `n`th local variable declared by this block. + * For example `local` in `{ | param; local| puts param }`. + */ + LocalVariableWriteAccess getLocalVariable(int n) { none() } + override AstNode getAChild(string pred) { result = Callable.super.getAChild(pred) or result = StmtSequence.super.getAChild(pred) + or + pred = "getLocalVariable" and result = this.getLocalVariable(_) } } @@ -265,6 +279,10 @@ class DoBlock extends Block, BodyStmt, TDoBlock { DoBlock() { this = TDoBlock(g) } + final override LocalVariableWriteAccess getLocalVariable(int n) { + toGenerated(result) = g.getParameters().getLocals(n) + } + final override Parameter getParameter(int n) { toGenerated(result) = g.getParameters().getChild(n) } diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/AST.qll b/ruby/ql/lib/codeql/ruby/ast/internal/AST.qll index 5a59b56bcf5..11499454a75 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/AST.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/AST.qll @@ -138,7 +138,9 @@ private module Cached { TFalseLiteral(Ruby::False g) or TFile(Ruby::File g) or TFindPattern(Ruby::FindPattern g) or - TFloatLiteral(Ruby::Float g) { not any(Ruby::Rational r).getChild() = g } or + TFloatLiteral(Ruby::Float g) { + not any(Ruby::Complex r).getChild() = g and not any(Ruby::Rational r).getChild() = g + } or TForExpr(Ruby::For g) or TForwardParameter(Ruby::ForwardParameter g) or TForwardArgument(Ruby::ForwardArgument g) or @@ -169,7 +171,9 @@ private module Cached { TInstanceVariableAccessSynth(AST::AstNode parent, int i, AST::InstanceVariable v) { mkSynthChild(InstanceVariableAccessKind(v), parent, i) } or - TIntegerLiteralReal(Ruby::Integer g) { not any(Ruby::Rational r).getChild() = g } or + TIntegerLiteralReal(Ruby::Integer g) { + not any(Ruby::Complex r).getChild() = g and not any(Ruby::Rational r).getChild() = g + } or TIntegerLiteralSynth(AST::AstNode parent, int i, int value) { mkSynthChild(IntegerLiteralKind(value), parent, i) } or @@ -223,7 +227,7 @@ private module Cached { TRangeLiteralSynth(AST::AstNode parent, int i, boolean inclusive) { mkSynthChild(RangeLiteralKind(inclusive), parent, i) } or - TRationalLiteral(Ruby::Rational g) or + TRationalLiteral(Ruby::Rational g) { not any(Ruby::Complex r).getChild() = g } or TRedoStmt(Ruby::Redo g) or TRegExpLiteral(Ruby::Regex g) or TRegExpMatchExpr(Ruby::Binary g) { g instanceof @ruby_binary_equaltilde } or @@ -248,9 +252,6 @@ private module Cached { casePattern(g) ) } or - TScopeResolutionMethodCall(Ruby::ScopeResolution g, Ruby::Identifier i) { - isScopeResolutionMethodCall(g, i) - } or TSelfReal(Ruby::Self g) or TSelfSynth(AST::AstNode parent, int i, AST::SelfVariable v) { mkSynthChild(SelfKind(v), parent, i) @@ -356,15 +357,15 @@ private module Cached { TRShiftExprReal or TRangeLiteralReal or TRationalLiteral or TRedoStmt or TRegExpLiteral or TRegExpMatchExpr or TRegularArrayLiteral or TRegularMethodCall or TRegularStringLiteral or TRegularSuperCall or TRescueClause or TRescueModifierExpr or TRetryStmt or TReturnStmt or - TScopeResolutionConstantAccess or TScopeResolutionMethodCall or TSelfReal or - TSimpleParameterReal or TSimpleSymbolLiteral or TSingletonClass or TSingletonMethod or - TSpaceshipExpr or TSplatExprReal or TSplatParameter or TStringArrayLiteral or - TStringConcatenation or TStringEscapeSequenceComponent or TStringInterpolationComponent or - TStringTextComponent or TSubExprReal or TSubshellLiteral or TSymbolArrayLiteral or - TTernaryIfExpr or TThen or TTokenConstantAccess or TTokenMethodName or TTokenSuperCall or - TToplevel or TTrueLiteral or TUnaryMinusExpr or TUnaryPlusExpr or TUndefStmt or - TUnlessExpr or TUnlessModifierExpr or TUntilExpr or TUntilModifierExpr or - TReferencePattern or TWhenClause or TWhileExpr or TWhileModifierExpr or TYieldCall; + TScopeResolutionConstantAccess or TSelfReal or TSimpleParameterReal or + TSimpleSymbolLiteral or TSingletonClass or TSingletonMethod or TSpaceshipExpr or + TSplatExprReal or TSplatParameter or TStringArrayLiteral or TStringConcatenation or + TStringEscapeSequenceComponent or TStringInterpolationComponent or TStringTextComponent or + TSubExprReal or TSubshellLiteral or TSymbolArrayLiteral or TTernaryIfExpr or TThen or + TTokenConstantAccess or TTokenMethodName or TTokenSuperCall or TToplevel or TTrueLiteral or + TUnaryMinusExpr or TUnaryPlusExpr or TUndefStmt or TUnlessExpr or TUnlessModifierExpr or + TUntilExpr or TUntilModifierExpr or TReferencePattern or TWhenClause or TWhileExpr or + TWhileModifierExpr or TYieldCall; class TAstNodeSynth = TAddExprSynth or TAssignExprSynth or TBitwiseAndExprSynth or TBitwiseOrExprSynth or @@ -498,7 +499,6 @@ private module Cached { n = TReturnStmt(result) or n = TRShiftExprReal(result) or n = TScopeResolutionConstantAccess(result, _) or - n = TScopeResolutionMethodCall(result, _) or n = TSelfReal(result) or n = TSimpleParameterReal(result) or n = TSimpleSymbolLiteral(result) or @@ -659,8 +659,8 @@ class TCall = TMethodCall or TYieldCall; class TCase = TCaseExpr or TCaseMatch; class TMethodCall = - TMethodCallSynth or TIdentifierMethodCall or TScopeResolutionMethodCall or TRegularMethodCall or - TElementReference or TSuperCall or TUnaryOperation or TBinaryOperation; + TMethodCallSynth or TIdentifierMethodCall or TRegularMethodCall or TElementReference or + TSuperCall or TUnaryOperation or TBinaryOperation; class TSuperCall = TTokenSuperCall or TRegularSuperCall; diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Call.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Call.qll index 58e9f912091..25f2e2a305a 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Call.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Call.qll @@ -7,11 +7,6 @@ predicate isIdentifierMethodCall(Ruby::Identifier g) { vcall(g) and not access(g predicate isRegularMethodCall(Ruby::Call g) { not g.getMethod() instanceof Ruby::Super } -predicate isScopeResolutionMethodCall(Ruby::ScopeResolution g, Ruby::Identifier i) { - i = g.getName() and - not exists(Ruby::Call c | c.getMethod() = g) -} - abstract class CallImpl extends Expr, TCall { abstract AstNode getArgumentImpl(int n); @@ -69,23 +64,6 @@ class IdentifierMethodCall extends MethodCallImpl, TIdentifierMethodCall { final override Block getBlockImpl() { none() } } -class ScopeResolutionMethodCall extends MethodCallImpl, TScopeResolutionMethodCall { - private Ruby::ScopeResolution g; - private Ruby::Identifier i; - - ScopeResolutionMethodCall() { this = TScopeResolutionMethodCall(g, i) } - - final override string getMethodNameImpl() { result = i.getValue() } - - final override Expr getReceiverImpl() { toGenerated(result) = g.getScope() } - - final override Expr getArgumentImpl(int n) { none() } - - final override int getNumberOfArgumentsImpl() { result = 0 } - - final override Block getBlockImpl() { none() } -} - class RegularMethodCall extends MethodCallImpl, TRegularMethodCall { private Ruby::Call g; @@ -94,33 +72,21 @@ class RegularMethodCall extends MethodCallImpl, TRegularMethodCall { final override Expr getReceiverImpl() { toGenerated(result) = g.getReceiver() or - not exists(g.getReceiver()) and - toGenerated(result) = g.getMethod().(Ruby::ScopeResolution).getScope() - or result = TSelfSynth(this, 0, _) } final override string getMethodNameImpl() { isRegularMethodCall(g) and ( - result = "call" and g.getMethod() instanceof Ruby::ArgumentList + result = "call" and not exists(g.getMethod()) or result = g.getMethod().(Ruby::Token).getValue() - or - result = g.getMethod().(Ruby::ScopeResolution).getName().(Ruby::Token).getValue() ) } - final override Expr getArgumentImpl(int n) { - toGenerated(result) = g.getArguments().getChild(n) - or - toGenerated(result) = g.getMethod().(Ruby::ArgumentList).getChild(n) - } + final override Expr getArgumentImpl(int n) { toGenerated(result) = g.getArguments().getChild(n) } - final override int getNumberOfArgumentsImpl() { - result = - count(g.getArguments().getChild(_)) + count(g.getMethod().(Ruby::ArgumentList).getChild(_)) - } + final override int getNumberOfArgumentsImpl() { result = count(g.getArguments().getChild(_)) } final override Block getBlockImpl() { toGenerated(result) = g.getBlock() } } diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll index 78dadd5315e..cbdd65a19ca 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Literal.qll @@ -88,9 +88,11 @@ class RationalLiteralImpl extends Expr, TRationalLiteral { } float getComplexValue(Ruby::Complex c) { + exists(int n, int d | isRationalValue(c.getChild(), n, d) and result = n.(float) / d.(float)) + or exists(string s | - s = c.getValue() and - result = s.prefix(s.length() - 1).toFloat() + s = c.getChild().(Ruby::Token).getValue() and + result = s.prefix(s.length()).toFloat() ) } @@ -103,7 +105,10 @@ class ComplexLiteralImpl extends Expr, TComplexLiteral { real = 0 and imaginary = getComplexValue(g) } - final override string toString() { result = g.getValue() } + final override string toString() { + result = g.getChild().(Ruby::Token).getValue() + "i" or + result = g.getChild().(Ruby::Rational).getChild().(Ruby::Token).getValue() + "ri" + } } class NilLiteralImpl extends Expr, TNilLiteral { diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Method.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Method.qll index 09a16350096..0b923056441 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Method.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Method.qll @@ -7,6 +7,10 @@ class BraceBlockReal extends BraceBlock, TBraceBlockReal { BraceBlockReal() { this = TBraceBlockReal(g) } + final override LocalVariableWriteAccess getLocalVariable(int n) { + toGenerated(result) = g.getParameters().getLocals(n) + } + final override Parameter getParameter(int n) { toGenerated(result) = g.getParameters().getChild(n) } diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll index f3e3c479fb0..7b83965b03e 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Synthesis.qll @@ -197,11 +197,8 @@ private module ImplicitSelfSynthesis { private predicate regularMethodCallSelfSynthesis(TRegularMethodCall mc, int i, Child child) { exists(Ruby::AstNode g | mc = TRegularMethodCall(g) and - // If there's no explicit receiver (or scope resolution that acts like a - // receiver), then the receiver is implicitly `self`. N.B. `::Foo()` is - // not valid Ruby. - not exists(g.(Ruby::Call).getReceiver()) and - not exists(g.(Ruby::Call).getMethod().(Ruby::ScopeResolution).getScope()) + // If there's no explicit receiver, then the receiver is implicitly `self`. + not exists(g.(Ruby::Call).getReceiver()) ) and child = SynthChild(SelfKind(TSelfVariable(scopeOf(toGenerated(mc)).getEnclosingSelfScope()))) and i = 0 diff --git a/ruby/ql/lib/codeql/ruby/ast/internal/Variable.qll b/ruby/ql/lib/codeql/ruby/ast/internal/Variable.qll index a5e977bb1cb..64fcdbd669a 100644 --- a/ruby/ql/lib/codeql/ruby/ast/internal/Variable.qll +++ b/ruby/ql/lib/codeql/ruby/ast/internal/Variable.qll @@ -50,8 +50,9 @@ predicate implicitAssignmentNode(Ruby::AstNode n) { /** Holds if `n` is inside a parameter. */ predicate implicitParameterAssignmentNode(Ruby::AstNode n, Callable::Range c) { - n = c.getParameter(_) - or + n = c.getParameter(_) or + n = c.(Ruby::Block).getParameters().getLocals(_) or + n = c.(Ruby::DoBlock).getParameters().getLocals(_) or implicitParameterAssignmentNode(n.getParent().(Ruby::DestructuredParameter), c) } diff --git a/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll b/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll index 641c78e3dee..435097900f8 100644 --- a/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll +++ b/ruby/ql/lib/codeql/ruby/controlflow/internal/ControlFlowGraphImpl.qll @@ -347,7 +347,12 @@ module Trees { final override AstNode getBodyChild(int i, boolean rescuable) { result = this.getParameter(i) and rescuable = false or - result = StmtSequenceTree.super.getBodyChild(i - this.getNumberOfParameters(), rescuable) + result = this.getLocalVariable(i - this.getNumberOfParameters()) and rescuable = false + or + result = + StmtSequenceTree.super + .getBodyChild(i - this.getNumberOfParameters() - count(this.getALocalVariable()), + rescuable) } override predicate first(AstNode first) { first = this } @@ -959,7 +964,12 @@ module Trees { final override AstNode getBodyChild(int i, boolean rescuable) { result = this.getParameter(i) and rescuable = false or - result = BodyStmtTree.super.getBodyChild(i - this.getNumberOfParameters(), rescuable) + result = this.getLocalVariable(i - this.getNumberOfParameters()) and rescuable = false + or + result = + BodyStmtTree.super + .getBodyChild(i - this.getNumberOfParameters() - count(this.getALocalVariable()), + rescuable) } override predicate propagatesAbnormal(AstNode child) { none() } From d055f9a1861e016206c45de70021efffc7a00511 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 26 Apr 2022 18:51:55 +0200 Subject: [PATCH 0186/1618] Update tests --- ruby/ql/test/library-tests/ast/Ast.expected | 26 +- .../library-tests/ast/TreeSitter.expected | 388 +++++++++--------- .../test/library-tests/ast/ValueText.expected | 12 +- .../library-tests/ast/calls/calls.expected | 2 +- .../ast/literals/literals.expected | 15 +- .../library-tests/ast/literals/literals.rb | 6 +- .../library-tests/ast/params/params.expected | 3 + .../test/library-tests/ast/params/params.rb | 2 + .../controlflow/graph/Cfg.expected | 76 +++- .../controlflow/graph/Nodes.expected | 5 + .../library-tests/controlflow/graph/cfg.rb | 4 + .../variables/parameter.expected | 2 - 12 files changed, 330 insertions(+), 211 deletions(-) diff --git a/ruby/ql/test/library-tests/ast/Ast.expected b/ruby/ql/test/library-tests/ast/Ast.expected index adb3f41dec6..a8e67da4ec6 100644 --- a/ruby/ql/test/library-tests/ast/Ast.expected +++ b/ruby/ql/test/library-tests/ast/Ast.expected @@ -1716,11 +1716,11 @@ escape_sequences/escapes.rb: literals/literals.rb: # 1| [Toplevel] literals.rb # 2| getStmt: [NilLiteral] nil -# 3| getStmt: [NilLiteral] NIL +# 3| getStmt: [ConstantReadAccess] NIL # 4| getStmt: [BooleanLiteral] false -# 5| getStmt: [BooleanLiteral] FALSE +# 5| getStmt: [ConstantReadAccess] FALSE # 6| getStmt: [BooleanLiteral] true -# 7| getStmt: [BooleanLiteral] TRUE +# 7| getStmt: [ConstantReadAccess] TRUE # 10| getStmt: [IntegerLiteral] 1234 # 11| getStmt: [IntegerLiteral] 5_678 # 12| getStmt: [IntegerLiteral] 0 @@ -1752,6 +1752,8 @@ literals/literals.rb: # 48| getStmt: [RationalLiteral] 23r # 49| getStmt: [RationalLiteral] 9.85r # 52| getStmt: [ComplexLiteral] 2i +# 53| getStmt: [ComplexLiteral] 3.14i +# 56| getStmt: [ComplexLiteral] 1.2ri # 59| getStmt: [StringLiteral] "" # 60| getStmt: [StringLiteral] "" # 61| getStmt: [StringLiteral] "hello" @@ -2054,10 +2056,10 @@ literals/literals.rb: # 139| getStmt: [RangeLiteral] _ .. _ # 139| getEnd: [IntegerLiteral] 1 # 140| getStmt: [ParenthesizedExpr] ( ... ) -# 140| getStmt: [SubExpr] ... - ... -# 140| getAnOperand/getLeftOperand/getReceiver: [RangeLiteral] _ .. _ -# 140| getBegin: [IntegerLiteral] 0 -# 140| getAnOperand/getArgument/getRightOperand: [IntegerLiteral] 1 +# 140| getStmt: [RangeLiteral] _ .. _ +# 140| getBegin: [IntegerLiteral] 0 +# 140| getEnd: [UnaryMinusExpr] - ... +# 140| getAnOperand/getOperand/getReceiver: [IntegerLiteral] 1 # 143| getStmt: [SubshellLiteral] `ls -l` # 143| getComponent: [StringTextComponent] ls -l # 144| getStmt: [SubshellLiteral] `ls -l` @@ -2990,6 +2992,16 @@ params/params.rb: # 83| getReceiver: [LocalVariableAccess] array # 83| getArgument: [BlockArgument] &... # 83| getValue: [LocalVariableAccess] __synth__0 +# 86| getStmt: [MethodCall] call to run_block +# 86| getReceiver: [SelfVariableAccess] self +# 86| getBlock: [BraceBlock] { ... } +# 86| getParameter: [SimpleParameter] x +# 86| getDefiningAccess: [LocalVariableAccess] x +# 86| getLocalVariable: [LocalVariableAccess] y +# 86| getLocalVariable: [LocalVariableAccess] z +# 86| getStmt: [MethodCall] call to puts +# 86| getReceiver: [SelfVariableAccess] self +# 86| getArgument: [LocalVariableAccess] x erb/template.html.erb: # 19| [Toplevel] template.html.erb # 19| getStmt: [StringLiteral] "hello world" diff --git a/ruby/ql/test/library-tests/ast/TreeSitter.expected b/ruby/ql/test/library-tests/ast/TreeSitter.expected index ecf00e54895..64cdabc5a46 100644 --- a/ruby/ql/test/library-tests/ast/TreeSitter.expected +++ b/ruby/ql/test/library-tests/ast/TreeSitter.expected @@ -6,17 +6,14 @@ calls/calls.rb: # 2| 0: [ReservedWord] ( # 2| 1: [ReservedWord] ) # 5| 1: [Call] Call -# 5| 0: [ScopeResolution] ScopeResolution -# 5| 0: [Constant] Foo -# 5| 1: [ReservedWord] :: -# 5| 2: [Identifier] bar -# 5| 1: [ArgumentList] ArgumentList +# 5| 0: [Constant] Foo +# 5| 1: [ReservedWord] :: +# 5| 2: [Identifier] bar +# 5| 3: [ArgumentList] ArgumentList # 5| 0: [ReservedWord] ( # 5| 1: [ReservedWord] ) # 8| 2: [Call] Call -# 8| 0: [ScopeResolution] ScopeResolution -# 8| 0: [ReservedWord] :: -# 8| 1: [Identifier] bar +# 8| 0: [Identifier] bar # 8| 1: [ArgumentList] ArgumentList # 8| 0: [ReservedWord] ( # 8| 1: [ReservedWord] ) @@ -97,7 +94,7 @@ calls/calls.rb: # 36| 2: [Integer] 200 # 37| 3: [ReservedWord] end # 46| 10: [Identifier] foo -# 47| 11: [ScopeResolution] ScopeResolution +# 47| 11: [Call] Call # 47| 0: [Constant] X # 47| 1: [ReservedWord] :: # 47| 2: [Identifier] foo @@ -107,7 +104,7 @@ calls/calls.rb: # 50| 2: [ReservedWord] ) # 51| 13: [ParenthesizedStatements] ParenthesizedStatements # 51| 0: [ReservedWord] ( -# 51| 1: [ScopeResolution] ScopeResolution +# 51| 1: [Call] Call # 51| 0: [Constant] X # 51| 1: [ReservedWord] :: # 51| 2: [Identifier] foo @@ -122,7 +119,7 @@ calls/calls.rb: # 55| 0: [Identifier] some_func # 55| 1: [ArgumentList] ArgumentList # 55| 0: [ReservedWord] ( -# 55| 1: [ScopeResolution] ScopeResolution +# 55| 1: [Call] Call # 55| 0: [Constant] X # 55| 1: [ReservedWord] :: # 55| 2: [Identifier] foo @@ -133,7 +130,7 @@ calls/calls.rb: # 58| 2: [ReservedWord] ] # 59| 17: [Array] Array # 59| 0: [ReservedWord] [ -# 59| 1: [ScopeResolution] ScopeResolution +# 59| 1: [Call] Call # 59| 0: [Constant] X # 59| 1: [ReservedWord] :: # 59| 2: [Identifier] foo @@ -145,7 +142,7 @@ calls/calls.rb: # 63| 19: [Assignment] Assignment # 63| 0: [Identifier] var1 # 63| 1: [ReservedWord] = -# 63| 2: [ScopeResolution] ScopeResolution +# 63| 2: [Call] Call # 63| 0: [Constant] X # 63| 1: [ReservedWord] :: # 63| 2: [Identifier] foo @@ -156,7 +153,7 @@ calls/calls.rb: # 67| 21: [OperatorAssignment] OperatorAssignment # 67| 0: [Identifier] var1 # 67| 1: [ReservedWord] += -# 67| 2: [ScopeResolution] ScopeResolution +# 67| 2: [Call] Call # 67| 0: [Constant] X # 67| 1: [ReservedWord] :: # 67| 2: [Identifier] bar @@ -166,14 +163,14 @@ calls/calls.rb: # 70| 2: [RightAssignmentList] RightAssignmentList # 70| 0: [Identifier] foo # 70| 1: [ReservedWord] , -# 70| 2: [ScopeResolution] ScopeResolution +# 70| 2: [Call] Call # 70| 0: [Constant] X # 70| 1: [ReservedWord] :: # 70| 2: [Identifier] bar # 73| 23: [Begin] Begin # 73| 0: [ReservedWord] begin # 74| 1: [Identifier] foo -# 75| 2: [ScopeResolution] ScopeResolution +# 75| 2: [Call] Call # 75| 0: [Constant] X # 75| 1: [ReservedWord] :: # 75| 2: [Identifier] foo @@ -183,7 +180,7 @@ calls/calls.rb: # 79| 1: [ReservedWord] { # 79| 2: [Identifier] foo # 79| 3: [ReservedWord] ; -# 79| 4: [ScopeResolution] ScopeResolution +# 79| 4: [Call] Call # 79| 0: [Constant] X # 79| 1: [ReservedWord] :: # 79| 2: [Identifier] bar @@ -193,7 +190,7 @@ calls/calls.rb: # 82| 1: [ReservedWord] { # 82| 2: [Identifier] foo # 82| 3: [ReservedWord] ; -# 82| 4: [ScopeResolution] ScopeResolution +# 82| 4: [Call] Call # 82| 0: [Constant] X # 82| 1: [ReservedWord] :: # 82| 2: [Identifier] bar @@ -201,7 +198,7 @@ calls/calls.rb: # 85| 26: [Binary] Binary # 85| 0: [Identifier] foo # 85| 1: [ReservedWord] + -# 85| 2: [ScopeResolution] ScopeResolution +# 85| 2: [Call] Call # 85| 0: [Constant] X # 85| 1: [ReservedWord] :: # 85| 2: [Identifier] bar @@ -210,7 +207,7 @@ calls/calls.rb: # 88| 1: [Identifier] foo # 89| 28: [Unary] Unary # 89| 0: [ReservedWord] ~ -# 89| 1: [ScopeResolution] ScopeResolution +# 89| 1: [Call] Call # 89| 0: [Constant] X # 89| 1: [ReservedWord] :: # 89| 2: [Identifier] bar @@ -223,7 +220,7 @@ calls/calls.rb: # 92| 0: [ReservedWord] { # 92| 1: [Identifier] bar # 92| 2: [ReservedWord] ; -# 92| 3: [ScopeResolution] ScopeResolution +# 92| 3: [Call] Call # 92| 0: [Constant] X # 92| 1: [ReservedWord] :: # 92| 2: [Identifier] baz @@ -236,7 +233,7 @@ calls/calls.rb: # 95| 2: [DoBlock] DoBlock # 95| 0: [ReservedWord] do # 96| 1: [Identifier] bar -# 97| 2: [ScopeResolution] ScopeResolution +# 97| 2: [Call] Call # 97| 0: [Constant] X # 97| 1: [ReservedWord] :: # 97| 2: [Identifier] baz @@ -267,19 +264,19 @@ calls/calls.rb: # 109| 3: [ReservedWord] end # 110| 34: [Case] Case # 110| 0: [ReservedWord] case -# 110| 1: [ScopeResolution] ScopeResolution +# 110| 1: [Call] Call # 110| 0: [Constant] X # 110| 1: [ReservedWord] :: # 110| 2: [Identifier] foo # 111| 2: [When] When # 111| 0: [ReservedWord] when # 111| 1: [Pattern] Pattern -# 111| 0: [ScopeResolution] ScopeResolution +# 111| 0: [Call] Call # 111| 0: [Constant] X # 111| 1: [ReservedWord] :: # 111| 2: [Identifier] bar # 111| 2: [Then] Then -# 112| 0: [ScopeResolution] ScopeResolution +# 112| 0: [Call] Call # 112| 0: [Constant] X # 112| 1: [ReservedWord] :: # 112| 2: [Identifier] baz @@ -288,7 +285,7 @@ calls/calls.rb: # 116| 0: [ReservedWord] class # 116| 1: [Constant] MyClass # 117| 2: [Identifier] foo -# 118| 3: [ScopeResolution] ScopeResolution +# 118| 3: [Call] Call # 118| 0: [Constant] X # 118| 1: [ReservedWord] :: # 118| 2: [Identifier] bar @@ -305,7 +302,7 @@ calls/calls.rb: # 124| 1: [Constant] MyClass2 # 124| 2: [Superclass] Superclass # 124| 0: [ReservedWord] < -# 124| 1: [ScopeResolution] ScopeResolution +# 124| 1: [Call] Call # 124| 0: [Constant] X # 124| 1: [ReservedWord] :: # 124| 2: [Identifier] foo @@ -319,11 +316,11 @@ calls/calls.rb: # 131| 39: [SingletonClass] SingletonClass # 131| 0: [ReservedWord] class # 131| 1: [ReservedWord] << -# 131| 2: [ScopeResolution] ScopeResolution +# 131| 2: [Call] Call # 131| 0: [Constant] X # 131| 1: [ReservedWord] :: # 131| 2: [Identifier] foo -# 132| 3: [ScopeResolution] ScopeResolution +# 132| 3: [Call] Call # 132| 0: [Constant] X # 132| 1: [ReservedWord] :: # 132| 2: [Identifier] bar @@ -332,7 +329,7 @@ calls/calls.rb: # 136| 0: [ReservedWord] def # 136| 1: [Identifier] some_method # 137| 2: [Identifier] foo -# 138| 3: [ScopeResolution] ScopeResolution +# 138| 3: [Call] Call # 138| 0: [Constant] X # 138| 1: [ReservedWord] :: # 138| 2: [Identifier] bar @@ -343,7 +340,7 @@ calls/calls.rb: # 142| 2: [ReservedWord] . # 142| 3: [Identifier] some_method # 143| 4: [Identifier] bar -# 144| 5: [ScopeResolution] ScopeResolution +# 144| 5: [Call] Call # 144| 0: [Constant] X # 144| 1: [ReservedWord] :: # 144| 2: [Identifier] baz @@ -367,7 +364,7 @@ calls/calls.rb: # 150| 1: [KeywordParameter] KeywordParameter # 150| 0: [Identifier] keyword # 150| 1: [ReservedWord] : -# 150| 2: [ScopeResolution] ScopeResolution +# 150| 2: [Call] Call # 150| 0: [Constant] X # 150| 1: [ReservedWord] :: # 150| 2: [Identifier] foo @@ -392,7 +389,7 @@ calls/calls.rb: # 156| 1: [OptionalParameter] OptionalParameter # 156| 0: [Identifier] param # 156| 1: [ReservedWord] = -# 156| 2: [ScopeResolution] ScopeResolution +# 156| 2: [Call] Call # 156| 0: [Constant] X # 156| 1: [ReservedWord] :: # 156| 2: [Identifier] foo @@ -402,7 +399,7 @@ calls/calls.rb: # 160| 0: [ReservedWord] module # 160| 1: [Constant] SomeModule # 161| 2: [Identifier] foo -# 162| 3: [ScopeResolution] ScopeResolution +# 162| 3: [Call] Call # 162| 0: [Constant] X # 162| 1: [ReservedWord] :: # 162| 2: [Identifier] bar @@ -414,17 +411,17 @@ calls/calls.rb: # 166| 3: [ReservedWord] : # 166| 4: [Identifier] baz # 167| 48: [Conditional] Conditional -# 167| 0: [ScopeResolution] ScopeResolution +# 167| 0: [Call] Call # 167| 0: [Constant] X # 167| 1: [ReservedWord] :: # 167| 2: [Identifier] foo # 167| 1: [ReservedWord] ? -# 167| 2: [ScopeResolution] ScopeResolution +# 167| 2: [Call] Call # 167| 0: [Constant] X # 167| 1: [ReservedWord] :: # 167| 2: [Identifier] bar # 167| 3: [ReservedWord] : -# 167| 4: [ScopeResolution] ScopeResolution +# 167| 4: [Call] Call # 167| 0: [Constant] X # 167| 1: [ReservedWord] :: # 167| 2: [Identifier] baz @@ -444,29 +441,29 @@ calls/calls.rb: # 176| 4: [ReservedWord] end # 177| 50: [If] If # 177| 0: [ReservedWord] if -# 177| 1: [ScopeResolution] ScopeResolution +# 177| 1: [Call] Call # 177| 0: [Constant] X # 177| 1: [ReservedWord] :: # 177| 2: [Identifier] foo # 177| 2: [Then] Then -# 178| 0: [ScopeResolution] ScopeResolution +# 178| 0: [Call] Call # 178| 0: [Constant] X # 178| 1: [ReservedWord] :: # 178| 2: [Identifier] wibble # 179| 3: [Elsif] Elsif # 179| 0: [ReservedWord] elsif -# 179| 1: [ScopeResolution] ScopeResolution +# 179| 1: [Call] Call # 179| 0: [Constant] X # 179| 1: [ReservedWord] :: # 179| 2: [Identifier] bar # 179| 2: [Then] Then -# 180| 0: [ScopeResolution] ScopeResolution +# 180| 0: [Call] Call # 180| 0: [Constant] X # 180| 1: [ReservedWord] :: # 180| 2: [Identifier] wobble # 181| 3: [Else] Else # 181| 0: [ReservedWord] else -# 182| 1: [ScopeResolution] ScopeResolution +# 182| 1: [Call] Call # 182| 0: [Constant] X # 182| 1: [ReservedWord] :: # 182| 2: [Identifier] wabble @@ -476,12 +473,12 @@ calls/calls.rb: # 186| 1: [ReservedWord] if # 186| 2: [Identifier] foo # 187| 52: [IfModifier] IfModifier -# 187| 0: [ScopeResolution] ScopeResolution +# 187| 0: [Call] Call # 187| 0: [Constant] X # 187| 1: [ReservedWord] :: # 187| 2: [Identifier] bar # 187| 1: [ReservedWord] if -# 187| 2: [ScopeResolution] ScopeResolution +# 187| 2: [Call] Call # 187| 0: [Constant] X # 187| 1: [ReservedWord] :: # 187| 2: [Identifier] foo @@ -493,12 +490,12 @@ calls/calls.rb: # 192| 3: [ReservedWord] end # 193| 54: [Unless] Unless # 193| 0: [ReservedWord] unless -# 193| 1: [ScopeResolution] ScopeResolution +# 193| 1: [Call] Call # 193| 0: [Constant] X # 193| 1: [ReservedWord] :: # 193| 2: [Identifier] foo # 193| 2: [Then] Then -# 194| 0: [ScopeResolution] ScopeResolution +# 194| 0: [Call] Call # 194| 0: [Constant] X # 194| 1: [ReservedWord] :: # 194| 2: [Identifier] bar @@ -508,12 +505,12 @@ calls/calls.rb: # 198| 1: [ReservedWord] unless # 198| 2: [Identifier] foo # 199| 56: [UnlessModifier] UnlessModifier -# 199| 0: [ScopeResolution] ScopeResolution +# 199| 0: [Call] Call # 199| 0: [Constant] X # 199| 1: [ReservedWord] :: # 199| 2: [Identifier] bar # 199| 1: [ReservedWord] unless -# 199| 2: [ScopeResolution] ScopeResolution +# 199| 2: [Call] Call # 199| 0: [Constant] X # 199| 1: [ReservedWord] :: # 199| 2: [Identifier] foo @@ -526,13 +523,13 @@ calls/calls.rb: # 204| 2: [ReservedWord] end # 205| 58: [While] While # 205| 0: [ReservedWord] while -# 205| 1: [ScopeResolution] ScopeResolution +# 205| 1: [Call] Call # 205| 0: [Constant] X # 205| 1: [ReservedWord] :: # 205| 2: [Identifier] foo # 205| 2: [Do] Do # 205| 0: [ReservedWord] do -# 206| 1: [ScopeResolution] ScopeResolution +# 206| 1: [Call] Call # 206| 0: [Constant] X # 206| 1: [ReservedWord] :: # 206| 2: [Identifier] bar @@ -542,12 +539,12 @@ calls/calls.rb: # 210| 1: [ReservedWord] while # 210| 2: [Identifier] foo # 211| 60: [WhileModifier] WhileModifier -# 211| 0: [ScopeResolution] ScopeResolution +# 211| 0: [Call] Call # 211| 0: [Constant] X # 211| 1: [ReservedWord] :: # 211| 2: [Identifier] bar # 211| 1: [ReservedWord] while -# 211| 2: [ScopeResolution] ScopeResolution +# 211| 2: [Call] Call # 211| 0: [Constant] X # 211| 1: [ReservedWord] :: # 211| 2: [Identifier] foo @@ -560,13 +557,13 @@ calls/calls.rb: # 216| 2: [ReservedWord] end # 217| 62: [Until] Until # 217| 0: [ReservedWord] until -# 217| 1: [ScopeResolution] ScopeResolution +# 217| 1: [Call] Call # 217| 0: [Constant] X # 217| 1: [ReservedWord] :: # 217| 2: [Identifier] foo # 217| 2: [Do] Do # 217| 0: [ReservedWord] do -# 218| 1: [ScopeResolution] ScopeResolution +# 218| 1: [Call] Call # 218| 0: [Constant] X # 218| 1: [ReservedWord] :: # 218| 2: [Identifier] bar @@ -576,12 +573,12 @@ calls/calls.rb: # 222| 1: [ReservedWord] until # 222| 2: [Identifier] foo # 223| 64: [UntilModifier] UntilModifier -# 223| 0: [ScopeResolution] ScopeResolution +# 223| 0: [Call] Call # 223| 0: [Constant] X # 223| 1: [ReservedWord] :: # 223| 2: [Identifier] bar # 223| 1: [ReservedWord] until -# 223| 2: [ScopeResolution] ScopeResolution +# 223| 2: [Call] Call # 223| 0: [Constant] X # 223| 1: [ReservedWord] :: # 223| 2: [Identifier] foo @@ -599,12 +596,12 @@ calls/calls.rb: # 229| 1: [Identifier] x # 229| 2: [In] In # 229| 0: [ReservedWord] in -# 229| 1: [ScopeResolution] ScopeResolution +# 229| 1: [Call] Call # 229| 0: [Constant] X # 229| 1: [ReservedWord] :: # 229| 2: [Identifier] bar # 229| 3: [Do] Do -# 230| 0: [ScopeResolution] ScopeResolution +# 230| 0: [Call] Call # 230| 0: [Constant] X # 230| 1: [ReservedWord] :: # 230| 2: [Identifier] baz @@ -615,12 +612,12 @@ calls/calls.rb: # 234| 2: [Identifier] bar # 234| 3: [ReservedWord] ] # 235| 68: [ElementReference] ElementReference -# 235| 0: [ScopeResolution] ScopeResolution +# 235| 0: [Call] Call # 235| 0: [Constant] X # 235| 1: [ReservedWord] :: # 235| 2: [Identifier] foo # 235| 1: [ReservedWord] [ -# 235| 2: [ScopeResolution] ScopeResolution +# 235| 2: [Call] Call # 235| 0: [Constant] X # 235| 1: [ReservedWord] :: # 235| 2: [Identifier] bar @@ -635,7 +632,7 @@ calls/calls.rb: # 238| 3: [StringContent] - # 238| 4: [Interpolation] Interpolation # 238| 0: [ReservedWord] #{ -# 238| 1: [ScopeResolution] ScopeResolution +# 238| 1: [Call] Call # 238| 0: [Constant] X # 238| 1: [ReservedWord] :: # 238| 2: [Identifier] baz @@ -646,7 +643,7 @@ calls/calls.rb: # 241| 1: [ReservedWord] :: # 241| 2: [Constant] Bar # 242| 71: [ScopeResolution] ScopeResolution -# 242| 0: [ScopeResolution] ScopeResolution +# 242| 0: [Call] Call # 242| 0: [Constant] X # 242| 1: [ReservedWord] :: # 242| 2: [Identifier] foo @@ -657,12 +654,12 @@ calls/calls.rb: # 245| 1: [ReservedWord] .. # 245| 2: [Identifier] bar # 246| 73: [Range] Range -# 246| 0: [ScopeResolution] ScopeResolution +# 246| 0: [Call] Call # 246| 0: [Constant] X # 246| 1: [ReservedWord] :: # 246| 2: [Identifier] foo # 246| 1: [ReservedWord] .. -# 246| 2: [ScopeResolution] ScopeResolution +# 246| 2: [Call] Call # 246| 0: [Constant] X # 246| 1: [ReservedWord] :: # 246| 2: [Identifier] bar @@ -674,12 +671,12 @@ calls/calls.rb: # 249| 2: [Identifier] bar # 249| 2: [ReservedWord] , # 249| 3: [Pair] Pair -# 249| 0: [ScopeResolution] ScopeResolution +# 249| 0: [Call] Call # 249| 0: [Constant] X # 249| 1: [ReservedWord] :: # 249| 2: [Identifier] foo # 249| 1: [ReservedWord] => -# 249| 2: [ScopeResolution] ScopeResolution +# 249| 2: [Call] Call # 249| 0: [Constant] X # 249| 1: [ReservedWord] :: # 249| 2: [Identifier] bar @@ -699,13 +696,13 @@ calls/calls.rb: # 257| 1: [Rescue] Rescue # 257| 0: [ReservedWord] rescue # 257| 1: [Exceptions] Exceptions -# 257| 0: [ScopeResolution] ScopeResolution +# 257| 0: [Call] Call # 257| 0: [Constant] X # 257| 1: [ReservedWord] :: # 257| 2: [Identifier] foo # 258| 2: [Ensure] Ensure # 258| 0: [ReservedWord] ensure -# 258| 1: [ScopeResolution] ScopeResolution +# 258| 1: [Call] Call # 258| 0: [Constant] X # 258| 1: [ReservedWord] :: # 258| 2: [Identifier] bar @@ -715,12 +712,12 @@ calls/calls.rb: # 262| 1: [ReservedWord] rescue # 262| 2: [Identifier] bar # 263| 78: [RescueModifier] RescueModifier -# 263| 0: [ScopeResolution] ScopeResolution +# 263| 0: [Call] Call # 263| 0: [Constant] X # 263| 1: [ReservedWord] :: # 263| 2: [Identifier] foo # 263| 1: [ReservedWord] rescue -# 263| 2: [ScopeResolution] ScopeResolution +# 263| 2: [Call] Call # 263| 0: [Constant] X # 263| 1: [ReservedWord] :: # 263| 2: [Identifier] bar @@ -738,7 +735,7 @@ calls/calls.rb: # 267| 0: [ReservedWord] ( # 267| 1: [BlockArgument] BlockArgument # 267| 0: [ReservedWord] & -# 267| 1: [ScopeResolution] ScopeResolution +# 267| 1: [Call] Call # 267| 0: [Constant] X # 267| 1: [ReservedWord] :: # 267| 2: [Identifier] bar @@ -764,7 +761,7 @@ calls/calls.rb: # 271| 0: [ReservedWord] ( # 271| 1: [SplatArgument] SplatArgument # 271| 0: [ReservedWord] * -# 271| 1: [ScopeResolution] ScopeResolution +# 271| 1: [Call] Call # 271| 0: [Constant] X # 271| 1: [ReservedWord] :: # 271| 2: [Identifier] bar @@ -783,7 +780,7 @@ calls/calls.rb: # 275| 0: [ReservedWord] ( # 275| 1: [HashSplatArgument] HashSplatArgument # 275| 0: [ReservedWord] ** -# 275| 1: [ScopeResolution] ScopeResolution +# 275| 1: [Call] Call # 275| 0: [Constant] X # 275| 1: [ReservedWord] :: # 275| 2: [Identifier] bar @@ -804,7 +801,7 @@ calls/calls.rb: # 279| 1: [Pair] Pair # 279| 0: [HashKeySymbol] blah # 279| 1: [ReservedWord] : -# 279| 2: [ScopeResolution] ScopeResolution +# 279| 2: [Call] Call # 279| 0: [Constant] X # 279| 1: [ReservedWord] :: # 279| 2: [Identifier] bar @@ -2223,6 +2220,7 @@ control/cases.rb: # 100| 0: [ReservedWord] in # 100| 1: [AlternativePattern] AlternativePattern # 100| 0: [Nil] nil +# 100| 0: [ReservedWord] nil # 100| 1: [ReservedWord] | # 100| 2: [Self] self # 100| 3: [ReservedWord] | @@ -3656,11 +3654,12 @@ gems/test.gemspec: literals/literals.rb: # 1| [Program] Program # 2| 0: [Nil] nil -# 3| 1: [Nil] NIL +# 2| 0: [ReservedWord] nil +# 3| 1: [Constant] NIL # 4| 2: [False] false -# 5| 3: [False] FALSE +# 5| 3: [Constant] FALSE # 6| 4: [True] true -# 7| 5: [True] TRUE +# 7| 5: [Constant] TRUE # 10| 6: [Integer] 1234 # 11| 7: [Integer] 5_678 # 12| 8: [Integer] 0 @@ -3695,58 +3694,67 @@ literals/literals.rb: # 49| 35: [Rational] Rational # 49| 0: [Float] 9.85 # 49| 1: [ReservedWord] r -# 52| 36: [Complex] 2i -# 59| 37: [String] String +# 52| 36: [Complex] Complex +# 52| 0: [Integer] 2 +# 52| 1: [ReservedWord] i +# 53| 37: [Complex] Complex +# 53| 0: [Float] 3.14 +# 53| 1: [ReservedWord] i +# 56| 38: [Complex] Complex +# 56| 0: [Rational] Rational +# 56| 0: [Float] 1.2 +# 56| 1: [ReservedWord] ri +# 59| 39: [String] String # 59| 0: [ReservedWord] " # 59| 1: [ReservedWord] " -# 60| 38: [String] String +# 60| 40: [String] String # 60| 0: [ReservedWord] ' # 60| 1: [ReservedWord] ' -# 61| 39: [String] String +# 61| 41: [String] String # 61| 0: [ReservedWord] " # 61| 1: [StringContent] hello # 61| 2: [ReservedWord] " -# 62| 40: [String] String +# 62| 42: [String] String # 62| 0: [ReservedWord] ' # 62| 1: [StringContent] goodbye # 62| 2: [ReservedWord] ' -# 63| 41: [String] String +# 63| 43: [String] String # 63| 0: [ReservedWord] " # 63| 1: [StringContent] string with escaped # 63| 2: [EscapeSequence] \" # 63| 3: [StringContent] quote # 63| 4: [ReservedWord] " -# 64| 42: [String] String +# 64| 44: [String] String # 64| 0: [ReservedWord] ' # 64| 1: [StringContent] string with " quote # 64| 2: [ReservedWord] ' -# 65| 43: [String] String +# 65| 45: [String] String # 65| 0: [ReservedWord] %( # 65| 1: [StringContent] foo bar baz # 65| 2: [ReservedWord] ) -# 66| 44: [String] String +# 66| 46: [String] String # 66| 0: [ReservedWord] %q< # 66| 1: [StringContent] foo bar baz # 66| 2: [ReservedWord] > -# 67| 45: [String] String +# 67| 47: [String] String # 67| 0: [ReservedWord] %q( # 67| 1: [StringContent] foo ' bar " baz' # 67| 2: [ReservedWord] ) -# 68| 46: [String] String +# 68| 48: [String] String # 68| 0: [ReservedWord] %Q( # 68| 1: [StringContent] FOO ' BAR " BAZ' # 68| 2: [ReservedWord] ) -# 69| 47: [String] String +# 69| 49: [String] String # 69| 0: [ReservedWord] %q( # 69| 1: [StringContent] foo\ bar # 69| 2: [ReservedWord] ) -# 70| 48: [String] String +# 70| 50: [String] String # 70| 0: [ReservedWord] %Q( # 70| 1: [StringContent] foo # 70| 2: [EscapeSequence] \ # 70| 3: [StringContent] bar # 70| 4: [ReservedWord] ) -# 71| 49: [String] String +# 71| 51: [String] String # 71| 0: [ReservedWord] " # 71| 1: [StringContent] 2 + 2 = # 71| 2: [Interpolation] Interpolation @@ -3757,7 +3765,7 @@ literals/literals.rb: # 71| 2: [Integer] 2 # 71| 2: [ReservedWord] } # 71| 3: [ReservedWord] " -# 72| 50: [String] String +# 72| 52: [String] String # 72| 0: [ReservedWord] %Q( # 72| 1: [StringContent] 3 + 4 = # 72| 2: [Interpolation] Interpolation @@ -3768,15 +3776,15 @@ literals/literals.rb: # 72| 2: [Integer] 4 # 72| 2: [ReservedWord] } # 72| 3: [ReservedWord] ) -# 73| 51: [String] String +# 73| 53: [String] String # 73| 0: [ReservedWord] ' # 73| 1: [StringContent] 2 + 2 = #{ 2 + 2 } # 73| 2: [ReservedWord] ' -# 74| 52: [String] String +# 74| 54: [String] String # 74| 0: [ReservedWord] %q( # 74| 1: [StringContent] 3 + 4 = #{ 3 + 4 } # 74| 2: [ReservedWord] ) -# 75| 53: [ChainedString] ChainedString +# 75| 55: [ChainedString] ChainedString # 75| 0: [String] String # 75| 0: [ReservedWord] " # 75| 1: [StringContent] foo @@ -3789,7 +3797,7 @@ literals/literals.rb: # 75| 0: [ReservedWord] " # 75| 1: [StringContent] baz # 75| 2: [ReservedWord] " -# 76| 54: [ChainedString] ChainedString +# 76| 56: [ChainedString] ChainedString # 76| 0: [String] String # 76| 0: [ReservedWord] %q{ # 76| 1: [StringContent] foo @@ -3802,7 +3810,7 @@ literals/literals.rb: # 76| 0: [ReservedWord] ' # 76| 1: [StringContent] baz # 76| 2: [ReservedWord] ' -# 77| 55: [ChainedString] ChainedString +# 77| 57: [ChainedString] ChainedString # 77| 0: [String] String # 77| 0: [ReservedWord] " # 77| 1: [StringContent] foo @@ -3822,7 +3830,7 @@ literals/literals.rb: # 77| 0: [ReservedWord] ' # 77| 1: [StringContent] baz # 77| 2: [ReservedWord] ' -# 78| 56: [String] String +# 78| 58: [String] String # 78| 0: [ReservedWord] " # 78| 1: [StringContent] foo # 78| 2: [Interpolation] Interpolation @@ -3842,7 +3850,7 @@ literals/literals.rb: # 78| 2: [ReservedWord] } # 78| 3: [StringContent] qux # 78| 4: [ReservedWord] " -# 79| 57: [String] String +# 79| 59: [String] String # 79| 0: [ReservedWord] " # 79| 1: [StringContent] foo # 79| 2: [Interpolation] Interpolation @@ -3859,21 +3867,21 @@ literals/literals.rb: # 79| 2: [Integer] 9 # 79| 4: [ReservedWord] } # 79| 3: [ReservedWord] " -# 80| 58: [Assignment] Assignment +# 80| 60: [Assignment] Assignment # 80| 0: [Identifier] bar # 80| 1: [ReservedWord] = # 80| 2: [String] String # 80| 0: [ReservedWord] " # 80| 1: [StringContent] bar # 80| 2: [ReservedWord] " -# 81| 59: [Assignment] Assignment +# 81| 61: [Assignment] Assignment # 81| 0: [Constant] BAR # 81| 1: [ReservedWord] = # 81| 2: [String] String # 81| 0: [ReservedWord] " # 81| 1: [StringContent] bar # 81| 2: [ReservedWord] " -# 82| 60: [String] String +# 82| 62: [String] String # 82| 0: [ReservedWord] " # 82| 1: [StringContent] foo # 82| 2: [Interpolation] Interpolation @@ -3881,7 +3889,7 @@ literals/literals.rb: # 82| 1: [Identifier] bar # 82| 2: [ReservedWord] } # 82| 3: [ReservedWord] " -# 83| 61: [String] String +# 83| 63: [String] String # 83| 0: [ReservedWord] " # 83| 1: [StringContent] foo # 83| 2: [Interpolation] Interpolation @@ -3889,28 +3897,28 @@ literals/literals.rb: # 83| 1: [Constant] BAR # 83| 2: [ReservedWord] } # 83| 3: [ReservedWord] " -# 86| 62: [Character] ?x -# 87| 63: [Character] ?\n -# 88| 64: [Character] ?\s -# 89| 65: [Character] ?\\ -# 90| 66: [Character] ?\u{58} -# 91| 67: [Character] ?\C-a -# 92| 68: [Character] ?\M-a -# 93| 69: [Character] ?\M-\C-a -# 94| 70: [Character] ?\C-\M-a -# 97| 71: [DelimitedSymbol] DelimitedSymbol +# 86| 64: [Character] ?x +# 87| 65: [Character] ?\n +# 88| 66: [Character] ?\s +# 89| 67: [Character] ?\\ +# 90| 68: [Character] ?\u{58} +# 91| 69: [Character] ?\C-a +# 92| 70: [Character] ?\M-a +# 93| 71: [Character] ?\M-\C-a +# 94| 72: [Character] ?\C-\M-a +# 97| 73: [DelimitedSymbol] DelimitedSymbol # 97| 0: [ReservedWord] :" # 97| 1: [ReservedWord] " -# 98| 72: [SimpleSymbol] :hello -# 99| 73: [DelimitedSymbol] DelimitedSymbol +# 98| 74: [SimpleSymbol] :hello +# 99| 75: [DelimitedSymbol] DelimitedSymbol # 99| 0: [ReservedWord] :" # 99| 1: [StringContent] foo bar # 99| 2: [ReservedWord] " -# 100| 74: [DelimitedSymbol] DelimitedSymbol +# 100| 76: [DelimitedSymbol] DelimitedSymbol # 100| 0: [ReservedWord] :' # 100| 1: [StringContent] bar baz # 100| 2: [ReservedWord] ' -# 101| 75: [Hash] Hash +# 101| 77: [Hash] Hash # 101| 0: [ReservedWord] { # 101| 1: [Pair] Pair # 101| 0: [HashKeySymbol] foo @@ -3920,15 +3928,15 @@ literals/literals.rb: # 101| 1: [StringContent] bar # 101| 2: [ReservedWord] " # 101| 2: [ReservedWord] } -# 102| 76: [DelimitedSymbol] DelimitedSymbol +# 102| 78: [DelimitedSymbol] DelimitedSymbol # 102| 0: [ReservedWord] %s( # 102| 1: [StringContent] wibble # 102| 2: [ReservedWord] ) -# 103| 77: [DelimitedSymbol] DelimitedSymbol +# 103| 79: [DelimitedSymbol] DelimitedSymbol # 103| 0: [ReservedWord] %s[ # 103| 1: [StringContent] wibble wobble # 103| 2: [ReservedWord] ] -# 104| 78: [DelimitedSymbol] DelimitedSymbol +# 104| 80: [DelimitedSymbol] DelimitedSymbol # 104| 0: [ReservedWord] :" # 104| 1: [StringContent] foo_ # 104| 2: [Interpolation] Interpolation @@ -3949,18 +3957,18 @@ literals/literals.rb: # 104| 1: [Constant] BAR # 104| 2: [ReservedWord] } # 104| 7: [ReservedWord] " -# 105| 79: [DelimitedSymbol] DelimitedSymbol +# 105| 81: [DelimitedSymbol] DelimitedSymbol # 105| 0: [ReservedWord] :' # 105| 1: [StringContent] foo_#{ 2 + 2}_#{bar}_#{BAR} # 105| 2: [ReservedWord] ' -# 106| 80: [DelimitedSymbol] DelimitedSymbol +# 106| 82: [DelimitedSymbol] DelimitedSymbol # 106| 0: [ReservedWord] %s( # 106| 1: [StringContent] foo_#{ 3 - 2 } # 106| 2: [ReservedWord] ) -# 109| 81: [Array] Array +# 109| 83: [Array] Array # 109| 0: [ReservedWord] [ # 109| 1: [ReservedWord] ] -# 110| 82: [Array] Array +# 110| 84: [Array] Array # 110| 0: [ReservedWord] [ # 110| 1: [Integer] 1 # 110| 2: [ReservedWord] , @@ -3968,7 +3976,7 @@ literals/literals.rb: # 110| 4: [ReservedWord] , # 110| 5: [Integer] 3 # 110| 6: [ReservedWord] ] -# 111| 83: [Array] Array +# 111| 85: [Array] Array # 111| 0: [ReservedWord] [ # 111| 1: [Integer] 4 # 111| 2: [ReservedWord] , @@ -3979,7 +3987,7 @@ literals/literals.rb: # 111| 1: [ReservedWord] / # 111| 2: [Integer] 2 # 111| 6: [ReservedWord] ] -# 112| 84: [Array] Array +# 112| 86: [Array] Array # 112| 0: [ReservedWord] [ # 112| 1: [Integer] 7 # 112| 2: [ReservedWord] , @@ -3990,10 +3998,10 @@ literals/literals.rb: # 112| 3: [Integer] 9 # 112| 4: [ReservedWord] ] # 112| 4: [ReservedWord] ] -# 115| 85: [StringArray] StringArray +# 115| 87: [StringArray] StringArray # 115| 0: [ReservedWord] %w( # 115| 1: [ReservedWord] ) -# 116| 86: [StringArray] StringArray +# 116| 88: [StringArray] StringArray # 116| 0: [ReservedWord] %w( # 116| 1: [BareString] BareString # 116| 0: [StringContent] foo @@ -4002,7 +4010,7 @@ literals/literals.rb: # 116| 3: [BareString] BareString # 116| 0: [StringContent] baz # 116| 4: [ReservedWord] ) -# 117| 87: [StringArray] StringArray +# 117| 89: [StringArray] StringArray # 117| 0: [ReservedWord] %w! # 117| 1: [BareString] BareString # 117| 0: [StringContent] foo @@ -4011,7 +4019,7 @@ literals/literals.rb: # 117| 3: [BareString] BareString # 117| 0: [StringContent] baz # 117| 4: [ReservedWord] ! -# 118| 88: [StringArray] StringArray +# 118| 90: [StringArray] StringArray # 118| 0: [ReservedWord] %W[ # 118| 1: [BareString] BareString # 118| 0: [StringContent] foo @@ -4037,7 +4045,7 @@ literals/literals.rb: # 118| 5: [BareString] BareString # 118| 0: [StringContent] baz # 118| 6: [ReservedWord] ] -# 119| 89: [StringArray] StringArray +# 119| 91: [StringArray] StringArray # 119| 0: [ReservedWord] %w[ # 119| 1: [BareString] BareString # 119| 0: [StringContent] foo @@ -4050,10 +4058,10 @@ literals/literals.rb: # 119| 5: [BareString] BareString # 119| 0: [StringContent] baz # 119| 6: [ReservedWord] ] -# 122| 90: [SymbolArray] SymbolArray +# 122| 92: [SymbolArray] SymbolArray # 122| 0: [ReservedWord] %i( # 122| 1: [ReservedWord] ) -# 123| 91: [SymbolArray] SymbolArray +# 123| 93: [SymbolArray] SymbolArray # 123| 0: [ReservedWord] %i( # 123| 1: [BareSymbol] BareSymbol # 123| 0: [StringContent] foo @@ -4062,7 +4070,7 @@ literals/literals.rb: # 123| 3: [BareSymbol] BareSymbol # 123| 0: [StringContent] baz # 123| 4: [ReservedWord] ) -# 124| 92: [SymbolArray] SymbolArray +# 124| 94: [SymbolArray] SymbolArray # 124| 0: [ReservedWord] %i@ # 124| 1: [BareSymbol] BareSymbol # 124| 0: [StringContent] foo @@ -4071,7 +4079,7 @@ literals/literals.rb: # 124| 3: [BareSymbol] BareSymbol # 124| 0: [StringContent] baz # 124| 4: [ReservedWord] @ -# 125| 93: [SymbolArray] SymbolArray +# 125| 95: [SymbolArray] SymbolArray # 125| 0: [ReservedWord] %I( # 125| 1: [BareSymbol] BareSymbol # 125| 0: [StringContent] foo @@ -4097,7 +4105,7 @@ literals/literals.rb: # 125| 5: [BareSymbol] BareSymbol # 125| 0: [StringContent] baz # 125| 6: [ReservedWord] ) -# 126| 94: [SymbolArray] SymbolArray +# 126| 96: [SymbolArray] SymbolArray # 126| 0: [ReservedWord] %i( # 126| 1: [BareSymbol] BareSymbol # 126| 0: [StringContent] foo @@ -4118,10 +4126,10 @@ literals/literals.rb: # 126| 9: [BareSymbol] BareSymbol # 126| 0: [StringContent] baz # 126| 10: [ReservedWord] ) -# 129| 95: [Hash] Hash +# 129| 97: [Hash] Hash # 129| 0: [ReservedWord] { # 129| 1: [ReservedWord] } -# 130| 96: [Hash] Hash +# 130| 98: [Hash] Hash # 130| 0: [ReservedWord] { # 130| 1: [Pair] Pair # 130| 0: [HashKeySymbol] foo @@ -4141,7 +4149,7 @@ literals/literals.rb: # 130| 1: [ReservedWord] => # 130| 2: [Integer] 3 # 130| 6: [ReservedWord] } -# 131| 97: [Hash] Hash +# 131| 99: [Hash] Hash # 131| 0: [ReservedWord] { # 131| 1: [Pair] Pair # 131| 0: [HashKeySymbol] foo @@ -4152,28 +4160,28 @@ literals/literals.rb: # 131| 0: [ReservedWord] ** # 131| 1: [Identifier] baz # 131| 4: [ReservedWord] } -# 134| 98: [ParenthesizedStatements] ParenthesizedStatements +# 134| 100: [ParenthesizedStatements] ParenthesizedStatements # 134| 0: [ReservedWord] ( # 134| 1: [Range] Range # 134| 0: [Integer] 1 # 134| 1: [ReservedWord] .. # 134| 2: [Integer] 10 # 134| 2: [ReservedWord] ) -# 135| 99: [ParenthesizedStatements] ParenthesizedStatements +# 135| 101: [ParenthesizedStatements] ParenthesizedStatements # 135| 0: [ReservedWord] ( # 135| 1: [Range] Range # 135| 0: [Integer] 1 # 135| 1: [ReservedWord] ... # 135| 2: [Integer] 10 # 135| 2: [ReservedWord] ) -# 136| 100: [ParenthesizedStatements] ParenthesizedStatements +# 136| 102: [ParenthesizedStatements] ParenthesizedStatements # 136| 0: [ReservedWord] ( # 136| 1: [Range] Range # 136| 0: [Integer] 1 # 136| 1: [ReservedWord] .. # 136| 2: [Integer] 0 # 136| 2: [ReservedWord] ) -# 137| 101: [ParenthesizedStatements] ParenthesizedStatements +# 137| 103: [ParenthesizedStatements] ParenthesizedStatements # 137| 0: [ReservedWord] ( # 137| 1: [Range] Range # 137| 0: [Identifier] start @@ -4183,36 +4191,36 @@ literals/literals.rb: # 137| 1: [ReservedWord] + # 137| 2: [Integer] 3 # 137| 2: [ReservedWord] ) -# 138| 102: [ParenthesizedStatements] ParenthesizedStatements +# 138| 104: [ParenthesizedStatements] ParenthesizedStatements # 138| 0: [ReservedWord] ( # 138| 1: [Range] Range # 138| 0: [Integer] 1 # 138| 1: [ReservedWord] .. # 138| 2: [ReservedWord] ) -# 139| 103: [ParenthesizedStatements] ParenthesizedStatements +# 139| 105: [ParenthesizedStatements] ParenthesizedStatements # 139| 0: [ReservedWord] ( # 139| 1: [Range] Range # 139| 0: [ReservedWord] .. # 139| 1: [Integer] 1 # 139| 2: [ReservedWord] ) -# 140| 104: [ParenthesizedStatements] ParenthesizedStatements +# 140| 106: [ParenthesizedStatements] ParenthesizedStatements # 140| 0: [ReservedWord] ( -# 140| 1: [Binary] Binary -# 140| 0: [Range] Range -# 140| 0: [Integer] 0 -# 140| 1: [ReservedWord] .. -# 140| 1: [ReservedWord] - -# 140| 2: [Integer] 1 +# 140| 1: [Range] Range +# 140| 0: [Integer] 0 +# 140| 1: [ReservedWord] .. +# 140| 2: [Unary] Unary +# 140| 0: [ReservedWord] - +# 140| 1: [Integer] 1 # 140| 2: [ReservedWord] ) -# 143| 105: [Subshell] Subshell +# 143| 107: [Subshell] Subshell # 143| 0: [ReservedWord] ` # 143| 1: [StringContent] ls -l # 143| 2: [ReservedWord] ` -# 144| 106: [Subshell] Subshell +# 144| 108: [Subshell] Subshell # 144| 0: [ReservedWord] %x( # 144| 1: [StringContent] ls -l # 144| 2: [ReservedWord] ) -# 145| 107: [Subshell] Subshell +# 145| 109: [Subshell] Subshell # 145| 0: [ReservedWord] ` # 145| 1: [StringContent] du -d # 145| 2: [Interpolation] Interpolation @@ -4233,7 +4241,7 @@ literals/literals.rb: # 145| 1: [Constant] BAR # 145| 2: [ReservedWord] } # 145| 7: [ReservedWord] ` -# 146| 108: [Subshell] Subshell +# 146| 110: [Subshell] Subshell # 146| 0: [ReservedWord] %x@ # 146| 1: [StringContent] du -d # 146| 2: [Interpolation] Interpolation @@ -4244,25 +4252,25 @@ literals/literals.rb: # 146| 2: [Integer] 4 # 146| 2: [ReservedWord] } # 146| 3: [ReservedWord] @ -# 149| 109: [Regex] Regex +# 149| 111: [Regex] Regex # 149| 0: [ReservedWord] / # 149| 1: [ReservedWord] / -# 150| 110: [Regex] Regex +# 150| 112: [Regex] Regex # 150| 0: [ReservedWord] / # 150| 1: [StringContent] foo # 150| 2: [ReservedWord] / -# 151| 111: [Regex] Regex +# 151| 113: [Regex] Regex # 151| 0: [ReservedWord] / # 151| 1: [StringContent] foo # 151| 2: [ReservedWord] /i -# 152| 112: [Regex] Regex +# 152| 114: [Regex] Regex # 152| 0: [ReservedWord] / # 152| 1: [StringContent] foo+ # 152| 2: [EscapeSequence] \s # 152| 3: [StringContent] bar # 152| 4: [EscapeSequence] \S # 152| 5: [ReservedWord] / -# 153| 113: [Regex] Regex +# 153| 115: [Regex] Regex # 153| 0: [ReservedWord] / # 153| 1: [StringContent] foo # 153| 2: [Interpolation] Interpolation @@ -4282,29 +4290,29 @@ literals/literals.rb: # 153| 1: [Constant] BAR # 153| 2: [ReservedWord] } # 153| 6: [ReservedWord] / -# 154| 114: [Regex] Regex +# 154| 116: [Regex] Regex # 154| 0: [ReservedWord] / # 154| 1: [StringContent] foo # 154| 2: [ReservedWord] /oxm -# 155| 115: [Regex] Regex +# 155| 117: [Regex] Regex # 155| 0: [ReservedWord] %r[ # 155| 1: [ReservedWord] ] -# 156| 116: [Regex] Regex +# 156| 118: [Regex] Regex # 156| 0: [ReservedWord] %r( # 156| 1: [StringContent] foo # 156| 2: [ReservedWord] ) -# 157| 117: [Regex] Regex +# 157| 119: [Regex] Regex # 157| 0: [ReservedWord] %r: # 157| 1: [StringContent] foo # 157| 2: [ReservedWord] :i -# 158| 118: [Regex] Regex +# 158| 120: [Regex] Regex # 158| 0: [ReservedWord] %r{ # 158| 1: [StringContent] foo+ # 158| 2: [EscapeSequence] \s # 158| 3: [StringContent] bar # 158| 4: [EscapeSequence] \S # 158| 5: [ReservedWord] } -# 159| 119: [Regex] Regex +# 159| 121: [Regex] Regex # 159| 0: [ReservedWord] %r{ # 159| 1: [StringContent] foo # 159| 2: [Interpolation] Interpolation @@ -4324,19 +4332,19 @@ literals/literals.rb: # 159| 1: [Constant] BAR # 159| 2: [ReservedWord] } # 159| 6: [ReservedWord] } -# 160| 120: [Regex] Regex +# 160| 122: [Regex] Regex # 160| 0: [ReservedWord] %r: # 160| 1: [StringContent] foo # 160| 2: [ReservedWord] :mxo -# 163| 121: [String] String +# 163| 123: [String] String # 163| 0: [ReservedWord] ' # 163| 1: [StringContent] abcdefghijklmnopqrstuvwxyzabcdef # 163| 2: [ReservedWord] ' -# 164| 122: [String] String +# 164| 124: [String] String # 164| 0: [ReservedWord] ' # 164| 1: [StringContent] foobarfoobarfoobarfoobarfoobarfoo # 164| 2: [ReservedWord] ' -# 165| 123: [String] String +# 165| 125: [String] String # 165| 0: [ReservedWord] " # 165| 1: [StringContent] foobar # 165| 2: [EscapeSequence] \\ @@ -4348,7 +4356,7 @@ literals/literals.rb: # 165| 8: [EscapeSequence] \\ # 165| 9: [StringContent] foobar # 165| 10: [ReservedWord] " -# 168| 124: [Call] Call +# 168| 126: [Call] Call # 168| 0: [Identifier] run_sql # 168| 1: [ArgumentList] ArgumentList # 168| 0: [ReservedWord] ( @@ -4356,7 +4364,7 @@ literals/literals.rb: # 168| 2: [ReservedWord] , # 168| 3: [HeredocBeginning] < | | literals.rb:139:4:139:4 | 1 | IntegerLiteral | 1 | | literals.rb:140:2:140:2 | 0 | IntegerLiteral | 0 | -| literals.rb:140:2:140:4 | _ .. _ | RangeLiteral | | +| literals.rb:140:2:140:6 | _ .. _ | RangeLiteral | | | literals.rb:140:6:140:6 | 1 | IntegerLiteral | 1 | | literals.rb:143:1:143:7 | `ls -l` | SubshellLiteral | ls -l | | literals.rb:144:1:144:9 | `ls -l` | SubshellLiteral | ls -l | @@ -767,18 +766,18 @@ finiteRangeLiterals | literals.rb:135:2:135:7 | _ ... _ | literals.rb:135:2:135:2 | 1 | literals.rb:135:6:135:7 | 10 | | literals.rb:136:2:136:7 | _ .. _ | literals.rb:136:2:136:2 | 1 | literals.rb:136:7:136:7 | 0 | | literals.rb:137:2:137:11 | _ .. _ | literals.rb:137:2:137:6 | call to start | literals.rb:137:9:137:11 | ... + ... | +| literals.rb:140:2:140:6 | _ .. _ | literals.rb:140:2:140:2 | 0 | literals.rb:140:5:140:6 | - ... | beginlessRangeLiterals | literals.rb:139:2:139:4 | _ .. _ | literals.rb:139:4:139:4 | 1 | endlessRangeLiterals | literals.rb:138:2:138:4 | _ .. _ | literals.rb:138:2:138:2 | 1 | -| literals.rb:140:2:140:4 | _ .. _ | literals.rb:140:2:140:2 | 0 | inclusiveRangeLiterals | literals.rb:134:2:134:6 | _ .. _ | | literals.rb:136:2:136:7 | _ .. _ | | literals.rb:137:2:137:11 | _ .. _ | | literals.rb:138:2:138:4 | _ .. _ | | literals.rb:139:2:139:4 | _ .. _ | -| literals.rb:140:2:140:4 | _ .. _ | +| literals.rb:140:2:140:6 | _ .. _ | exclusiveRangeLiterals | literals.rb:135:2:135:7 | _ ... _ | numericLiterals @@ -813,6 +812,8 @@ numericLiterals | literals.rb:48:1:48:3 | 23r | RationalLiteral | 23/1 | | literals.rb:49:1:49:5 | 9.85r | RationalLiteral | 985/100 | | literals.rb:52:1:52:2 | 2i | ComplexLiteral | 0+2i | +| literals.rb:53:1:53:5 | 3.14i | ComplexLiteral | 0+3.14i | +| literals.rb:56:1:56:5 | 1.2ri | ComplexLiteral | 0+1.2i | | literals.rb:71:13:71:13 | 2 | IntegerLiteral | 2 | | literals.rb:71:17:71:17 | 2 | IntegerLiteral | 2 | | literals.rb:72:15:72:15 | 3 | IntegerLiteral | 3 | @@ -952,3 +953,5 @@ rationalLiterals | literals.rb:49:1:49:5 | 9.85r | RationalLiteral | 985/100 | complexLiterals | literals.rb:52:1:52:2 | 2i | ComplexLiteral | 0+2i | +| literals.rb:53:1:53:5 | 3.14i | ComplexLiteral | 0+3.14i | +| literals.rb:56:1:56:5 | 1.2ri | ComplexLiteral | 0+1.2i | diff --git a/ruby/ql/test/library-tests/ast/literals/literals.rb b/ruby/ql/test/library-tests/ast/literals/literals.rb index 10c28de265f..6ddfc74e88f 100644 --- a/ruby/ql/test/library-tests/ast/literals/literals.rb +++ b/ruby/ql/test/library-tests/ast/literals/literals.rb @@ -50,10 +50,10 @@ TRUE # imaginary/complex numbers 2i -#3.14i # BAD: parse error +3.14i # imaginary & rational -#1.2ri # BAD: parse error +1.2ri # strings "" @@ -137,7 +137,7 @@ BAR = "bar" (start..2+3) (1..) # 1 to infinity (..1) # -infinity to 1 -(0..-1) # BAD: parsed as binary with minus endless range on the LHS +(0..-1) # subshell `ls -l` diff --git a/ruby/ql/test/library-tests/ast/params/params.expected b/ruby/ql/test/library-tests/ast/params/params.expected index afe41ce9cb8..a04d4393e40 100644 --- a/ruby/ql/test/library-tests/ast/params/params.expected +++ b/ruby/ql/test/library-tests/ast/params/params.expected @@ -36,6 +36,7 @@ idParams | params.rb:73:27:73:32 | wibble | wibble | | params.rb:77:16:77:18 | val | val | | params.rb:81:31:81:35 | array | array | +| params.rb:86:14:86:14 | x | x | blockParams | params.rb:46:28:46:33 | &block | block | | params.rb:62:29:62:34 | &block | block | @@ -103,6 +104,7 @@ paramsInBlocks | params.rb:65:25:67:3 | do ... end | 1 | params.rb:65:35:65:37 | age | OptionalParameter | | params.rb:77:12:78:3 | do ... end | 0 | params.rb:77:16:77:18 | val | SimpleParameter | | params.rb:77:12:78:3 | do ... end | 1 | params.rb:77:21:77:25 | **nil | HashSplatNilParameter | +| params.rb:86:11:86:31 | { ... } | 0 | params.rb:86:14:86:14 | x | SimpleParameter | paramsInLambdas | params.rb:14:7:14:33 | -> { ... } | 0 | params.rb:14:11:14:13 | foo | SimpleParameter | | params.rb:14:7:14:33 | -> { ... } | 1 | params.rb:14:16:14:18 | bar | SimpleParameter | @@ -162,3 +164,4 @@ params | params.rb:77:21:77:25 | **nil | 1 | HashSplatNilParameter | | params.rb:81:31:81:35 | array | 0 | SimpleParameter | | params.rb:81:38:81:38 | & | 1 | BlockParameter | +| params.rb:86:14:86:14 | x | 0 | SimpleParameter | diff --git a/ruby/ql/test/library-tests/ast/params/params.rb b/ruby/ql/test/library-tests/ast/params/params.rb index 2ba6b4aafda..c406d01009a 100644 --- a/ruby/ql/test/library-tests/ast/params/params.rb +++ b/ruby/ql/test/library-tests/ast/params/params.rb @@ -82,3 +82,5 @@ def anonymous_block_parameter(array, &) proc(&) array.each(&) end + +run_block { |x; y, z | puts x } diff --git a/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected b/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected index 0d18855a66c..fd7921fbd35 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/Cfg.expected @@ -2010,14 +2010,20 @@ cfg.rb: #-----| -> complex # 59| complex -#-----| -> 10-2i +#-----| -> 10 # 59| ... = ... #-----| -> conditional -# 59| 10-2i +# 59| 10 +#-----| -> 2i + +# 59| ... - ... #-----| -> ... = ... +# 59| 2i +#-----| -> ... - ... + # 60| conditional #-----| -> self @@ -3528,7 +3534,7 @@ cfg.rb: #-----| -> exit forward_param # 196| forward_param -#-----| -> exit cfg.rb (normal) +#-----| -> 1 # 196| a #-----| -> b @@ -3551,6 +3557,70 @@ cfg.rb: # 197| ... #-----| -> call to bar +# 200| 1 +#-----| -> { ... } + +# 200| call to times +#-----| -> 2 + +# 200| enter { ... } +#-----| -> a + +# 200| exit { ... } + +# 200| exit { ... } (normal) +#-----| -> exit { ... } + +# 200| { ... } +#-----| -> call to times + +# 200| a +#-----| -> b + +# 200| b +#-----| -> Kernel + +# 200| Kernel +#-----| -> a + +# 200| call to puts +#-----| -> exit { ... } (normal) + +# 200| a +#-----| -> call to puts + +# 202| 2 +#-----| -> do ... end + +# 202| call to times +#-----| -> exit cfg.rb (normal) + +# 202| do ... end +#-----| -> call to times + +# 202| enter do ... end +#-----| -> c + +# 202| exit do ... end + +# 202| exit do ... end (normal) +#-----| -> exit do ... end + +# 202| c +#-----| -> d + +# 202| d +#-----| -> Kernel + +# 202| Kernel +#-----| -> c + +# 202| call to puts +#-----| -> exit do ... end (normal) + +# 202| c +#-----| -> call to puts + desugar.rb: # 1| enter m1 #-----| -> x diff --git a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected index 0aa6e18b345..73dfb482093 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected +++ b/ruby/ql/test/library-tests/controlflow/graph/Nodes.expected @@ -39,6 +39,8 @@ callsWithNoArguments | cfg.rb:167:5:167:10 | ! ... | | cfg.rb:168:5:168:8 | - ... | | cfg.rb:194:1:194:23 | call to run_block | +| cfg.rb:200:1:200:32 | call to times | +| cfg.rb:202:1:202:35 | call to times | | desugar.rb:6:3:6:7 | call to foo | | desugar.rb:10:3:10:7 | call to foo | | desugar.rb:14:3:14:7 | call to foo | @@ -122,6 +124,7 @@ positionalArguments | cfg.rb:49:8:49:13 | ... == ... | cfg.rb:49:13:49:13 | 0 | | cfg.rb:49:16:49:20 | ... > ... | cfg.rb:49:20:49:20 | 1 | | cfg.rb:49:27:49:37 | call to puts | cfg.rb:49:32:49:37 | "some" | +| cfg.rb:59:13:59:17 | ... - ... | cfg.rb:59:16:59:17 | 2i | | cfg.rb:60:17:60:22 | ... < ... | cfg.rb:60:21:60:22 | 10 | | cfg.rb:62:4:62:4 | call to [] | cfg.rb:62:4:62:4 | 0 | | cfg.rb:62:7:62:12 | call to [] | cfg.rb:62:7:62:12 | 1 | @@ -198,6 +201,8 @@ positionalArguments | cfg.rb:194:16:194:21 | call to puts | cfg.rb:194:21:194:21 | x | | cfg.rb:197:3:197:13 | call to bar | cfg.rb:197:7:197:7 | b | | cfg.rb:197:3:197:13 | call to bar | cfg.rb:197:10:197:12 | ... | +| cfg.rb:200:18:200:30 | call to puts | cfg.rb:200:30:200:30 | a | +| cfg.rb:202:19:202:31 | call to puts | cfg.rb:202:31:202:31 | c | | desugar.rb:2:5:2:6 | ... + ... | desugar.rb:2:8:2:8 | 1 | | desugar.rb:6:3:6:13 | call to count= | desugar.rb:6:17:6:17 | ... = ... | | desugar.rb:10:3:10:10 | call to []= | desugar.rb:10:9:10:9 | 0 | diff --git a/ruby/ql/test/library-tests/controlflow/graph/cfg.rb b/ruby/ql/test/library-tests/controlflow/graph/cfg.rb index 9876c735955..28cda8bc4ed 100644 --- a/ruby/ql/test/library-tests/controlflow/graph/cfg.rb +++ b/ruby/ql/test/library-tests/controlflow/graph/cfg.rb @@ -197,6 +197,10 @@ def forward_param(a, b, ...) bar(b, ...) end +1.times { |a; b| Kernel.puts a } + +2.times do |c; d| Kernel.puts c end + __END__ Some ignored nonsense diff --git a/ruby/ql/test/library-tests/variables/parameter.expected b/ruby/ql/test/library-tests/variables/parameter.expected index cd3a257a821..292ae665964 100644 --- a/ruby/ql/test/library-tests/variables/parameter.expected +++ b/ruby/ql/test/library-tests/variables/parameter.expected @@ -1,11 +1,9 @@ parameterVariable | nested_scopes.rb:15:23:15:23 | a | nested_scopes.rb:15:23:15:23 | a | | nested_scopes.rb:16:26:16:26 | x | nested_scopes.rb:16:26:16:26 | x | -| nested_scopes.rb:16:29:16:29 | a | nested_scopes.rb:16:29:16:29 | a | | nested_scopes.rb:18:26:18:26 | x | nested_scopes.rb:18:26:18:26 | x | | nested_scopes.rb:22:21:22:21 | a | nested_scopes.rb:22:21:22:21 | a | | parameters.rb:1:14:1:14 | x | parameters.rb:1:14:1:14 | x | -| parameters.rb:1:18:1:18 | y | parameters.rb:1:18:1:18 | y | | parameters.rb:7:17:7:22 | client | parameters.rb:7:17:7:22 | client | | parameters.rb:7:25:7:31 | *pizzas | parameters.rb:7:26:7:31 | pizzas | | parameters.rb:15:15:15:19 | **map | parameters.rb:15:17:15:19 | map | From ccc18640dbb320f9872b0214270696178102001d Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 26 Apr 2022 11:04:26 +0200 Subject: [PATCH 0187/1618] Ruby: add upgrade and downgrade scripts --- .../old.dbscheme | 1417 +++++++++++++++++ .../ruby.dbscheme | 1393 ++++++++++++++++ .../ruby_block_parameters_child.ql | 14 + .../ruby_call_def.ql | 14 + .../ruby_rational_def.ql | 7 + .../ruby_tokeninfo.ql | 37 + .../upgrade.properties | 12 + .../old.dbscheme | 1393 ++++++++++++++++ .../ruby.dbscheme | 1417 +++++++++++++++++ .../ruby_ast_node_info.ql | 45 + .../ruby_block_parameters_child.ql | 29 + .../ruby_block_parameters_locals.ql | 23 + .../ruby_call_arguments.ql | 43 + .../ruby_call_def.ql | 27 + .../ruby_call_method.ql | 52 + .../ruby_call_operator.ql | 45 + .../ruby_call_receiver.ql | 43 + .../ruby_scope_resolution_def.ql | 16 + .../ruby_tokeninfo.ql | 20 + .../upgrade.properties | 12 + 20 files changed, 6059 insertions(+) create mode 100644 ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/old.dbscheme create mode 100644 ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby.dbscheme create mode 100644 ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_block_parameters_child.ql create mode 100644 ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_call_def.ql create mode 100644 ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_rational_def.ql create mode 100644 ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_tokeninfo.ql create mode 100644 ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/upgrade.properties create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/old.dbscheme create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby.dbscheme create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_ast_node_info.ql create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_block_parameters_child.ql create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_block_parameters_locals.ql create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_arguments.ql create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_def.ql create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_method.ql create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_operator.ql create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_receiver.ql create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_scope_resolution_def.ql create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_tokeninfo.ql create mode 100644 ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/upgrade.properties diff --git a/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/old.dbscheme b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/old.dbscheme new file mode 100644 index 00000000000..1199e154f5e --- /dev/null +++ b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/old.dbscheme @@ -0,0 +1,1417 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +@location = @location_default + +locations_default( + unique int id: @location_default, + int file: @file ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +sourceLocationPrefix( + string prefix: string ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + + +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +@ruby_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block, index] +ruby_block_child( + int ruby_block: @ruby_block ref, + int index: int ref, + unique int child: @ruby_block_child_type ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +@ruby_class_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_class, index] +ruby_class_child( + int ruby_class: @ruby_class ref, + int index: int ref, + unique int child: @ruby_class_child_type ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +@ruby_do_block_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do_block, index] +ruby_do_block_child( + int ruby_do_block: @ruby_do_block ref, + int index: int ref, + unique int child: @ruby_do_block_child_type ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument, + int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +@ruby_method_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_arg | @ruby_underscore_statement + +#keyset[ruby_method, index] +ruby_method_child( + int ruby_method: @ruby_method ref, + int index: int ref, + unique int child: @ruby_method_child_type ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +@ruby_module_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_module, index] +ruby_module_child( + int ruby_module: @ruby_module ref, + int index: int ref, + unique int child: @ruby_module_child_type ref +); + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +@ruby_singleton_class_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_singleton_class, index] +ruby_singleton_class_child( + int ruby_singleton_class: @ruby_singleton_class ref, + int index: int ref, + unique int child: @ruby_singleton_class_child_type ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +@ruby_singleton_method_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_arg | @ruby_underscore_statement + +#keyset[ruby_singleton_method, index] +ruby_singleton_method_child( + int ruby_singleton_method: @ruby_singleton_method ref, + int index: int ref, + unique int child: @ruby_singleton_method_child_type ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument, + int child: @ruby_underscore_arg ref +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_parameter | @ruby_block_parameters | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +@ruby_ast_node_parent = @file | @ruby_ast_node + +#keyset[parent, parent_index] +ruby_ast_node_info( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node_parent ref, + int parent_index: int ref, + int loc: @location ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive, + int child: @erb_token_comment ref +); + +erb_directive_def( + unique int id: @erb_directive, + int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive, + int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive, + int child: @erb_token_code ref +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +@erb_ast_node_parent = @erb_ast_node | @file + +#keyset[parent, parent_index] +erb_ast_node_info( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node_parent ref, + int parent_index: int ref, + int loc: @location ref +); + diff --git a/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby.dbscheme b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby.dbscheme new file mode 100644 index 00000000000..9fdd1d40fd3 --- /dev/null +++ b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby.dbscheme @@ -0,0 +1,1393 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +@location = @location_default + +locations_default( + unique int id: @location_default, + int file: @file ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +sourceLocationPrefix( + string prefix: string ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + + +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_rational | @ruby_token_complex | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_underscore_expression ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +@ruby_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block, index] +ruby_block_child( + int ruby_block: @ruby_block ref, + int index: int ref, + unique int child: @ruby_block_child_type ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_argument_list | @ruby_scope_resolution | @ruby_token_operator | @ruby_underscore_variable + +@ruby_call_receiver_type = @ruby_call | @ruby_underscore_primary + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_call_receiver_type ref +); + +ruby_call_def( + unique int id: @ruby_call, + int method: @ruby_call_method_type ref +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +@ruby_class_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_class, index] +ruby_class_child( + int ruby_class: @ruby_class ref, + int index: int ref, + unique int child: @ruby_class_child_type ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +@ruby_do_block_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do_block, index] +ruby_do_block_child( + int ruby_do_block: @ruby_do_block ref, + int index: int ref, + unique int child: @ruby_do_block_child_type ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument, + int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +@ruby_method_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_arg | @ruby_underscore_statement + +#keyset[ruby_method, index] +ruby_method_child( + int ruby_method: @ruby_method ref, + int index: int ref, + unique int child: @ruby_method_child_type ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +@ruby_module_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_module, index] +ruby_module_child( + int ruby_module: @ruby_module ref, + int index: int ref, + unique int child: @ruby_module_child_type ref +); + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_name_type = @ruby_token_constant | @ruby_token_identifier + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_scope_resolution_name_type ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +@ruby_singleton_class_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_singleton_class, index] +ruby_singleton_class_child( + int ruby_singleton_class: @ruby_singleton_class ref, + int index: int ref, + unique int child: @ruby_singleton_class_child_type ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +@ruby_singleton_method_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_arg | @ruby_underscore_statement + +#keyset[ruby_singleton_method, index] +ruby_singleton_method_child( + int ruby_singleton_method: @ruby_singleton_method ref, + int index: int ref, + unique int child: @ruby_singleton_method_child_type ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument, + int child: @ruby_underscore_arg ref +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_complex +| 5 = @ruby_token_constant +| 6 = @ruby_token_empty_statement +| 7 = @ruby_token_encoding +| 8 = @ruby_token_escape_sequence +| 9 = @ruby_token_false +| 10 = @ruby_token_file +| 11 = @ruby_token_float +| 12 = @ruby_token_forward_argument +| 13 = @ruby_token_forward_parameter +| 14 = @ruby_token_global_variable +| 15 = @ruby_token_hash_key_symbol +| 16 = @ruby_token_hash_splat_nil +| 17 = @ruby_token_heredoc_beginning +| 18 = @ruby_token_heredoc_content +| 19 = @ruby_token_heredoc_end +| 20 = @ruby_token_identifier +| 21 = @ruby_token_instance_variable +| 22 = @ruby_token_integer +| 23 = @ruby_token_line +| 24 = @ruby_token_nil +| 25 = @ruby_token_operator +| 26 = @ruby_token_self +| 27 = @ruby_token_simple_symbol +| 28 = @ruby_token_string_content +| 29 = @ruby_token_super +| 30 = @ruby_token_true +| 31 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_parameter | @ruby_block_parameters | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +@ruby_ast_node_parent = @file | @ruby_ast_node + +#keyset[parent, parent_index] +ruby_ast_node_info( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node_parent ref, + int parent_index: int ref, + int loc: @location ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive, + int child: @erb_token_comment ref +); + +erb_directive_def( + unique int id: @erb_directive, + int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive, + int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive, + int child: @erb_token_code ref +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +@erb_ast_node_parent = @erb_ast_node | @file + +#keyset[parent, parent_index] +erb_ast_node_info( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node_parent ref, + int parent_index: int ref, + int loc: @location ref +); + diff --git a/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_block_parameters_child.ql b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_block_parameters_child.ql new file mode 100644 index 00000000000..7569c08cbfb --- /dev/null +++ b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_block_parameters_child.ql @@ -0,0 +1,14 @@ +class RubyBlockParameters extends @ruby_block_parameters { + string toString() { none() } +} + +class RubyBlockParameter extends @ruby_block_parameters_child_type { + string toString() { none() } +} + +from RubyBlockParameters ruby_block_parameters, int index, RubyBlockParameter param +where + ruby_block_parameters_child(ruby_block_parameters, index, param) or + ruby_block_parameters_locals(ruby_block_parameters, + index - 1 - max(int i | ruby_block_parameters_child(ruby_block_parameters, i, _)), param) +select ruby_block_parameters, index, param diff --git a/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_call_def.ql b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_call_def.ql new file mode 100644 index 00000000000..67a5994b6c8 --- /dev/null +++ b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_call_def.ql @@ -0,0 +1,14 @@ +class RubyAstNode extends @ruby_ast_node { + string toString() { none() } +} + +class RubyCall extends RubyAstNode, @ruby_call { } + +from RubyCall ruby_call, RubyAstNode method +where + ruby_call_method(ruby_call, method) + or + ruby_call_def(ruby_call) and + not ruby_call_method(ruby_call, _) and + ruby_call_arguments(ruby_call, method) +select ruby_call, method diff --git a/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_rational_def.ql b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_rational_def.ql new file mode 100644 index 00000000000..724a2388824 --- /dev/null +++ b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_rational_def.ql @@ -0,0 +1,7 @@ +private class RubyAstNode extends @ruby_ast_node { + string toString() { none() } +} + +from RubyAstNode node, RubyAstNode child +where ruby_rational_def(node, child) and not ruby_complex_def(_, node) +select node, child diff --git a/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_tokeninfo.ql b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_tokeninfo.ql new file mode 100644 index 00000000000..ce7c23c0e6c --- /dev/null +++ b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/ruby_tokeninfo.ql @@ -0,0 +1,37 @@ +private class RubyAstNode extends @ruby_ast_node { + string toString() { none() } +} + +bindingset[old] +private int newKind(int old) { + old <= 3 and result = old + or + old >= 4 and result = old + 1 +} + +private predicate complex_token(RubyAstNode node, string value) { + exists(RubyAstNode token, string tokenValue | ruby_tokeninfo(token, _, tokenValue) | + ( + ruby_complex_def(node, token) and value = tokenValue + "i" + or + exists(@ruby_rational rational | + ruby_complex_def(node, rational) and + ruby_rational_def(rational, token) + ) and + value = tokenValue + "ri" + ) + ) +} + +private RubyAstNode parent(RubyAstNode node) { ruby_ast_node_info(node, result, _, _) } + +from RubyAstNode token, int kind, string value +where + exists(int oldKind | + ruby_tokeninfo(token, oldKind, value) and + not complex_token(parent+(token), _) and + kind = newKind(oldKind) + ) + or + complex_token(token, value) and kind = 4 +select token, kind, value diff --git a/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/upgrade.properties b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/upgrade.properties new file mode 100644 index 00000000000..f1b4e1fd9f7 --- /dev/null +++ b/ruby/downgrades/1199e154f5e9b3560297633c6ebb4dfe0b191ae4/upgrade.properties @@ -0,0 +1,12 @@ +description: tree-sitter-ruby update +compatibility: backwards +ruby_tokeninfo.rel: run ruby_tokeninfo.qlo +ruby_block_parameters_child.rel: run ruby_block_parameters_child.qlo +ruby_call_def.rel: run ruby_call_def.qlo +ruby_rational_def.rel: run ruby_rational_def.qlo + + +ruby_call_method.rel: delete +ruby_complex_def.rel: delete +ruby_block_parameters_locals.rel: delete +ruby_call_operator: delete diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/old.dbscheme b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/old.dbscheme new file mode 100644 index 00000000000..9fdd1d40fd3 --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/old.dbscheme @@ -0,0 +1,1393 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +@location = @location_default + +locations_default( + unique int id: @location_default, + int file: @file ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +sourceLocationPrefix( + string prefix: string ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + + +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_rational | @ruby_token_complex | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_underscore_expression ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +@ruby_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block, index] +ruby_block_child( + int ruby_block: @ruby_block ref, + int index: int ref, + unique int child: @ruby_block_child_type ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_argument_list | @ruby_scope_resolution | @ruby_token_operator | @ruby_underscore_variable + +@ruby_call_receiver_type = @ruby_call | @ruby_underscore_primary + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_call_receiver_type ref +); + +ruby_call_def( + unique int id: @ruby_call, + int method: @ruby_call_method_type ref +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +@ruby_class_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_class, index] +ruby_class_child( + int ruby_class: @ruby_class ref, + int index: int ref, + unique int child: @ruby_class_child_type ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +@ruby_do_block_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do_block, index] +ruby_do_block_child( + int ruby_do_block: @ruby_do_block ref, + int index: int ref, + unique int child: @ruby_do_block_child_type ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument, + int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +@ruby_method_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_arg | @ruby_underscore_statement + +#keyset[ruby_method, index] +ruby_method_child( + int ruby_method: @ruby_method ref, + int index: int ref, + unique int child: @ruby_method_child_type ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +@ruby_module_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_module, index] +ruby_module_child( + int ruby_module: @ruby_module ref, + int index: int ref, + unique int child: @ruby_module_child_type ref +); + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_name_type = @ruby_token_constant | @ruby_token_identifier + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_scope_resolution_name_type ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +@ruby_singleton_class_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_singleton_class, index] +ruby_singleton_class_child( + int ruby_singleton_class: @ruby_singleton_class ref, + int index: int ref, + unique int child: @ruby_singleton_class_child_type ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +@ruby_singleton_method_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_arg | @ruby_underscore_statement + +#keyset[ruby_singleton_method, index] +ruby_singleton_method_child( + int ruby_singleton_method: @ruby_singleton_method ref, + int index: int ref, + unique int child: @ruby_singleton_method_child_type ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument, + int child: @ruby_underscore_arg ref +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_complex +| 5 = @ruby_token_constant +| 6 = @ruby_token_empty_statement +| 7 = @ruby_token_encoding +| 8 = @ruby_token_escape_sequence +| 9 = @ruby_token_false +| 10 = @ruby_token_file +| 11 = @ruby_token_float +| 12 = @ruby_token_forward_argument +| 13 = @ruby_token_forward_parameter +| 14 = @ruby_token_global_variable +| 15 = @ruby_token_hash_key_symbol +| 16 = @ruby_token_hash_splat_nil +| 17 = @ruby_token_heredoc_beginning +| 18 = @ruby_token_heredoc_content +| 19 = @ruby_token_heredoc_end +| 20 = @ruby_token_identifier +| 21 = @ruby_token_instance_variable +| 22 = @ruby_token_integer +| 23 = @ruby_token_line +| 24 = @ruby_token_nil +| 25 = @ruby_token_operator +| 26 = @ruby_token_self +| 27 = @ruby_token_simple_symbol +| 28 = @ruby_token_string_content +| 29 = @ruby_token_super +| 30 = @ruby_token_true +| 31 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_parameter | @ruby_block_parameters | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +@ruby_ast_node_parent = @file | @ruby_ast_node + +#keyset[parent, parent_index] +ruby_ast_node_info( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node_parent ref, + int parent_index: int ref, + int loc: @location ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive, + int child: @erb_token_comment ref +); + +erb_directive_def( + unique int id: @erb_directive, + int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive, + int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive, + int child: @erb_token_code ref +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +@erb_ast_node_parent = @erb_ast_node | @file + +#keyset[parent, parent_index] +erb_ast_node_info( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node_parent ref, + int parent_index: int ref, + int loc: @location ref +); + diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby.dbscheme b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby.dbscheme new file mode 100644 index 00000000000..1199e154f5e --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby.dbscheme @@ -0,0 +1,1417 @@ +// CodeQL database schema for Ruby +// Automatically generated from the tree-sitter grammar; do not edit + +@location = @location_default + +locations_default( + unique int id: @location_default, + int file: @file ref, + int start_line: int ref, + int start_column: int ref, + int end_line: int ref, + int end_column: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +sourceLocationPrefix( + string prefix: string ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + + +@ruby_underscore_arg = @ruby_assignment | @ruby_binary | @ruby_conditional | @ruby_operator_assignment | @ruby_range | @ruby_unary | @ruby_underscore_primary + +@ruby_underscore_call_operator = @ruby_reserved_word + +@ruby_underscore_expression = @ruby_assignment | @ruby_binary | @ruby_break | @ruby_call | @ruby_next | @ruby_operator_assignment | @ruby_return | @ruby_unary | @ruby_underscore_arg | @ruby_yield + +@ruby_underscore_lhs = @ruby_call | @ruby_element_reference | @ruby_scope_resolution | @ruby_token_false | @ruby_token_nil | @ruby_token_true | @ruby_underscore_variable + +@ruby_underscore_method_name = @ruby_delimited_symbol | @ruby_setter | @ruby_token_constant | @ruby_token_identifier | @ruby_token_operator | @ruby_token_simple_symbol | @ruby_underscore_nonlocal_variable + +@ruby_underscore_nonlocal_variable = @ruby_token_class_variable | @ruby_token_global_variable | @ruby_token_instance_variable + +@ruby_underscore_pattern_constant = @ruby_scope_resolution | @ruby_token_constant + +@ruby_underscore_pattern_expr = @ruby_alternative_pattern | @ruby_as_pattern | @ruby_underscore_pattern_expr_basic + +@ruby_underscore_pattern_expr_basic = @ruby_array_pattern | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_parenthesized_pattern | @ruby_range | @ruby_token_identifier | @ruby_underscore_pattern_constant | @ruby_underscore_pattern_primitive | @ruby_variable_reference_pattern + +@ruby_underscore_pattern_primitive = @ruby_delimited_symbol | @ruby_lambda | @ruby_regex | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_encoding | @ruby_token_false | @ruby_token_file | @ruby_token_heredoc_beginning | @ruby_token_line | @ruby_token_nil | @ruby_token_self | @ruby_token_simple_symbol | @ruby_token_true | @ruby_unary | @ruby_underscore_simple_numeric + +@ruby_underscore_pattern_top_expr_body = @ruby_array_pattern | @ruby_find_pattern | @ruby_hash_pattern | @ruby_underscore_pattern_expr + +@ruby_underscore_primary = @ruby_array | @ruby_begin | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_delimited_symbol | @ruby_for | @ruby_hash | @ruby_if | @ruby_lambda | @ruby_method | @ruby_module | @ruby_next | @ruby_parenthesized_statements | @ruby_redo | @ruby_regex | @ruby_retry | @ruby_return | @ruby_singleton_class | @ruby_singleton_method | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_symbol_array | @ruby_token_character | @ruby_token_heredoc_beginning | @ruby_token_simple_symbol | @ruby_unary | @ruby_underscore_lhs | @ruby_underscore_simple_numeric | @ruby_unless | @ruby_until | @ruby_while | @ruby_yield + +@ruby_underscore_simple_numeric = @ruby_complex | @ruby_rational | @ruby_token_float | @ruby_token_integer + +@ruby_underscore_statement = @ruby_alias | @ruby_begin_block | @ruby_end_block | @ruby_if_modifier | @ruby_rescue_modifier | @ruby_undef | @ruby_underscore_expression | @ruby_unless_modifier | @ruby_until_modifier | @ruby_while_modifier + +@ruby_underscore_variable = @ruby_token_constant | @ruby_token_identifier | @ruby_token_self | @ruby_token_super | @ruby_underscore_nonlocal_variable + +ruby_alias_def( + unique int id: @ruby_alias, + int alias: @ruby_underscore_method_name ref, + int name: @ruby_underscore_method_name ref +); + +#keyset[ruby_alternative_pattern, index] +ruby_alternative_pattern_alternatives( + int ruby_alternative_pattern: @ruby_alternative_pattern ref, + int index: int ref, + unique int alternatives: @ruby_underscore_pattern_expr_basic ref +); + +ruby_alternative_pattern_def( + unique int id: @ruby_alternative_pattern +); + +@ruby_argument_list_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_argument_list, index] +ruby_argument_list_child( + int ruby_argument_list: @ruby_argument_list ref, + int index: int ref, + unique int child: @ruby_argument_list_child_type ref +); + +ruby_argument_list_def( + unique int id: @ruby_argument_list +); + +@ruby_array_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_array, index] +ruby_array_child( + int ruby_array: @ruby_array ref, + int index: int ref, + unique int child: @ruby_array_child_type ref +); + +ruby_array_def( + unique int id: @ruby_array +); + +ruby_array_pattern_class( + unique int ruby_array_pattern: @ruby_array_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_array_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_array_pattern, index] +ruby_array_pattern_child( + int ruby_array_pattern: @ruby_array_pattern ref, + int index: int ref, + unique int child: @ruby_array_pattern_child_type ref +); + +ruby_array_pattern_def( + unique int id: @ruby_array_pattern +); + +ruby_as_pattern_def( + unique int id: @ruby_as_pattern, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_pattern_expr ref +); + +@ruby_assignment_left_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +@ruby_assignment_right_type = @ruby_rescue_modifier | @ruby_right_assignment_list | @ruby_splat_argument | @ruby_underscore_expression + +ruby_assignment_def( + unique int id: @ruby_assignment, + int left: @ruby_assignment_left_type ref, + int right: @ruby_assignment_right_type ref +); + +@ruby_bare_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_string, index] +ruby_bare_string_child( + int ruby_bare_string: @ruby_bare_string ref, + int index: int ref, + unique int child: @ruby_bare_string_child_type ref +); + +ruby_bare_string_def( + unique int id: @ruby_bare_string +); + +@ruby_bare_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_bare_symbol, index] +ruby_bare_symbol_child( + int ruby_bare_symbol: @ruby_bare_symbol ref, + int index: int ref, + unique int child: @ruby_bare_symbol_child_type ref +); + +ruby_bare_symbol_def( + unique int id: @ruby_bare_symbol +); + +@ruby_begin_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin, index] +ruby_begin_child( + int ruby_begin: @ruby_begin ref, + int index: int ref, + unique int child: @ruby_begin_child_type ref +); + +ruby_begin_def( + unique int id: @ruby_begin +); + +@ruby_begin_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_begin_block, index] +ruby_begin_block_child( + int ruby_begin_block: @ruby_begin_block ref, + int index: int ref, + unique int child: @ruby_begin_block_child_type ref +); + +ruby_begin_block_def( + unique int id: @ruby_begin_block +); + +@ruby_binary_left_type = @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_binary.operator of + 0 = @ruby_binary_bangequal +| 1 = @ruby_binary_bangtilde +| 2 = @ruby_binary_percent +| 3 = @ruby_binary_ampersand +| 4 = @ruby_binary_ampersandampersand +| 5 = @ruby_binary_star +| 6 = @ruby_binary_starstar +| 7 = @ruby_binary_plus +| 8 = @ruby_binary_minus +| 9 = @ruby_binary_slash +| 10 = @ruby_binary_langle +| 11 = @ruby_binary_langlelangle +| 12 = @ruby_binary_langleequal +| 13 = @ruby_binary_langleequalrangle +| 14 = @ruby_binary_equalequal +| 15 = @ruby_binary_equalequalequal +| 16 = @ruby_binary_equaltilde +| 17 = @ruby_binary_rangle +| 18 = @ruby_binary_rangleequal +| 19 = @ruby_binary_ranglerangle +| 20 = @ruby_binary_caret +| 21 = @ruby_binary_and +| 22 = @ruby_binary_or +| 23 = @ruby_binary_pipe +| 24 = @ruby_binary_pipepipe +; + + +ruby_binary_def( + unique int id: @ruby_binary, + int left: @ruby_binary_left_type ref, + int operator: int ref, + int right: @ruby_underscore_expression ref +); + +ruby_block_parameters( + unique int ruby_block: @ruby_block ref, + unique int parameters: @ruby_block_parameters ref +); + +@ruby_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_block, index] +ruby_block_child( + int ruby_block: @ruby_block ref, + int index: int ref, + unique int child: @ruby_block_child_type ref +); + +ruby_block_def( + unique int id: @ruby_block +); + +ruby_block_argument_child( + unique int ruby_block_argument: @ruby_block_argument ref, + unique int child: @ruby_underscore_arg ref +); + +ruby_block_argument_def( + unique int id: @ruby_block_argument +); + +ruby_block_parameter_name( + unique int ruby_block_parameter: @ruby_block_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_block_parameter_def( + unique int id: @ruby_block_parameter +); + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_locals( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int locals: @ruby_token_identifier ref +); + +@ruby_block_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_block_parameters, index] +ruby_block_parameters_child( + int ruby_block_parameters: @ruby_block_parameters ref, + int index: int ref, + unique int child: @ruby_block_parameters_child_type ref +); + +ruby_block_parameters_def( + unique int id: @ruby_block_parameters +); + +ruby_break_child( + unique int ruby_break: @ruby_break ref, + unique int child: @ruby_argument_list ref +); + +ruby_break_def( + unique int id: @ruby_break +); + +ruby_call_arguments( + unique int ruby_call: @ruby_call ref, + unique int arguments: @ruby_argument_list ref +); + +@ruby_call_block_type = @ruby_block | @ruby_do_block + +ruby_call_block( + unique int ruby_call: @ruby_call ref, + unique int block: @ruby_call_block_type ref +); + +@ruby_call_method_type = @ruby_token_operator | @ruby_underscore_variable + +ruby_call_method( + unique int ruby_call: @ruby_call ref, + unique int method: @ruby_call_method_type ref +); + +ruby_call_operator( + unique int ruby_call: @ruby_call ref, + unique int operator: @ruby_underscore_call_operator ref +); + +ruby_call_receiver( + unique int ruby_call: @ruby_call ref, + unique int receiver: @ruby_underscore_primary ref +); + +ruby_call_def( + unique int id: @ruby_call +); + +ruby_case_value( + unique int ruby_case__: @ruby_case__ ref, + unique int value: @ruby_underscore_statement ref +); + +@ruby_case_child_type = @ruby_else | @ruby_when + +#keyset[ruby_case__, index] +ruby_case_child( + int ruby_case__: @ruby_case__ ref, + int index: int ref, + unique int child: @ruby_case_child_type ref +); + +ruby_case_def( + unique int id: @ruby_case__ +); + +#keyset[ruby_case_match, index] +ruby_case_match_clauses( + int ruby_case_match: @ruby_case_match ref, + int index: int ref, + unique int clauses: @ruby_in_clause ref +); + +ruby_case_match_else( + unique int ruby_case_match: @ruby_case_match ref, + unique int else: @ruby_else ref +); + +ruby_case_match_def( + unique int id: @ruby_case_match, + int value: @ruby_underscore_statement ref +); + +#keyset[ruby_chained_string, index] +ruby_chained_string_child( + int ruby_chained_string: @ruby_chained_string ref, + int index: int ref, + unique int child: @ruby_string__ ref +); + +ruby_chained_string_def( + unique int id: @ruby_chained_string +); + +@ruby_class_name_type = @ruby_scope_resolution | @ruby_token_constant + +ruby_class_superclass( + unique int ruby_class: @ruby_class ref, + unique int superclass: @ruby_superclass ref +); + +@ruby_class_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_class, index] +ruby_class_child( + int ruby_class: @ruby_class ref, + int index: int ref, + unique int child: @ruby_class_child_type ref +); + +ruby_class_def( + unique int id: @ruby_class, + int name: @ruby_class_name_type ref +); + +@ruby_complex_child_type = @ruby_rational | @ruby_token_float | @ruby_token_integer + +ruby_complex_def( + unique int id: @ruby_complex, + int child: @ruby_complex_child_type ref +); + +ruby_conditional_def( + unique int id: @ruby_conditional, + int alternative: @ruby_underscore_arg ref, + int condition: @ruby_underscore_arg ref, + int consequence: @ruby_underscore_arg ref +); + +@ruby_delimited_symbol_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_delimited_symbol, index] +ruby_delimited_symbol_child( + int ruby_delimited_symbol: @ruby_delimited_symbol ref, + int index: int ref, + unique int child: @ruby_delimited_symbol_child_type ref +); + +ruby_delimited_symbol_def( + unique int id: @ruby_delimited_symbol +); + +@ruby_destructured_left_assignment_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_destructured_left_assignment, index] +ruby_destructured_left_assignment_child( + int ruby_destructured_left_assignment: @ruby_destructured_left_assignment ref, + int index: int ref, + unique int child: @ruby_destructured_left_assignment_child_type ref +); + +ruby_destructured_left_assignment_def( + unique int id: @ruby_destructured_left_assignment +); + +@ruby_destructured_parameter_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_destructured_parameter, index] +ruby_destructured_parameter_child( + int ruby_destructured_parameter: @ruby_destructured_parameter ref, + int index: int ref, + unique int child: @ruby_destructured_parameter_child_type ref +); + +ruby_destructured_parameter_def( + unique int id: @ruby_destructured_parameter +); + +@ruby_do_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do, index] +ruby_do_child( + int ruby_do: @ruby_do ref, + int index: int ref, + unique int child: @ruby_do_child_type ref +); + +ruby_do_def( + unique int id: @ruby_do +); + +ruby_do_block_parameters( + unique int ruby_do_block: @ruby_do_block ref, + unique int parameters: @ruby_block_parameters ref +); + +@ruby_do_block_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_do_block, index] +ruby_do_block_child( + int ruby_do_block: @ruby_do_block ref, + int index: int ref, + unique int child: @ruby_do_block_child_type ref +); + +ruby_do_block_def( + unique int id: @ruby_do_block +); + +@ruby_element_reference_child_type = @ruby_block_argument | @ruby_hash_splat_argument | @ruby_pair | @ruby_splat_argument | @ruby_token_forward_argument | @ruby_underscore_expression + +#keyset[ruby_element_reference, index] +ruby_element_reference_child( + int ruby_element_reference: @ruby_element_reference ref, + int index: int ref, + unique int child: @ruby_element_reference_child_type ref +); + +ruby_element_reference_def( + unique int id: @ruby_element_reference, + int object: @ruby_underscore_primary ref +); + +@ruby_else_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_else, index] +ruby_else_child( + int ruby_else: @ruby_else ref, + int index: int ref, + unique int child: @ruby_else_child_type ref +); + +ruby_else_def( + unique int id: @ruby_else +); + +@ruby_elsif_alternative_type = @ruby_else | @ruby_elsif + +ruby_elsif_alternative( + unique int ruby_elsif: @ruby_elsif ref, + unique int alternative: @ruby_elsif_alternative_type ref +); + +ruby_elsif_consequence( + unique int ruby_elsif: @ruby_elsif ref, + unique int consequence: @ruby_then ref +); + +ruby_elsif_def( + unique int id: @ruby_elsif, + int condition: @ruby_underscore_statement ref +); + +@ruby_end_block_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_end_block, index] +ruby_end_block_child( + int ruby_end_block: @ruby_end_block ref, + int index: int ref, + unique int child: @ruby_end_block_child_type ref +); + +ruby_end_block_def( + unique int id: @ruby_end_block +); + +@ruby_ensure_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_ensure, index] +ruby_ensure_child( + int ruby_ensure: @ruby_ensure ref, + int index: int ref, + unique int child: @ruby_ensure_child_type ref +); + +ruby_ensure_def( + unique int id: @ruby_ensure +); + +ruby_exception_variable_def( + unique int id: @ruby_exception_variable, + int child: @ruby_underscore_lhs ref +); + +@ruby_exceptions_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_exceptions, index] +ruby_exceptions_child( + int ruby_exceptions: @ruby_exceptions ref, + int index: int ref, + unique int child: @ruby_exceptions_child_type ref +); + +ruby_exceptions_def( + unique int id: @ruby_exceptions +); + +ruby_expression_reference_pattern_def( + unique int id: @ruby_expression_reference_pattern, + int value: @ruby_underscore_expression ref +); + +ruby_find_pattern_class( + unique int ruby_find_pattern: @ruby_find_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_find_pattern_child_type = @ruby_splat_parameter | @ruby_underscore_pattern_expr + +#keyset[ruby_find_pattern, index] +ruby_find_pattern_child( + int ruby_find_pattern: @ruby_find_pattern ref, + int index: int ref, + unique int child: @ruby_find_pattern_child_type ref +); + +ruby_find_pattern_def( + unique int id: @ruby_find_pattern +); + +@ruby_for_pattern_type = @ruby_left_assignment_list | @ruby_underscore_lhs + +ruby_for_def( + unique int id: @ruby_for, + int body: @ruby_do ref, + int pattern: @ruby_for_pattern_type ref, + int value: @ruby_in ref +); + +@ruby_hash_child_type = @ruby_hash_splat_argument | @ruby_pair + +#keyset[ruby_hash, index] +ruby_hash_child( + int ruby_hash: @ruby_hash ref, + int index: int ref, + unique int child: @ruby_hash_child_type ref +); + +ruby_hash_def( + unique int id: @ruby_hash +); + +ruby_hash_pattern_class( + unique int ruby_hash_pattern: @ruby_hash_pattern ref, + unique int class: @ruby_underscore_pattern_constant ref +); + +@ruby_hash_pattern_child_type = @ruby_hash_splat_parameter | @ruby_keyword_pattern | @ruby_token_hash_splat_nil + +#keyset[ruby_hash_pattern, index] +ruby_hash_pattern_child( + int ruby_hash_pattern: @ruby_hash_pattern ref, + int index: int ref, + unique int child: @ruby_hash_pattern_child_type ref +); + +ruby_hash_pattern_def( + unique int id: @ruby_hash_pattern +); + +ruby_hash_splat_argument_def( + unique int id: @ruby_hash_splat_argument, + int child: @ruby_underscore_arg ref +); + +ruby_hash_splat_parameter_name( + unique int ruby_hash_splat_parameter: @ruby_hash_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_hash_splat_parameter_def( + unique int id: @ruby_hash_splat_parameter +); + +@ruby_heredoc_body_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_heredoc_content | @ruby_token_heredoc_end + +#keyset[ruby_heredoc_body, index] +ruby_heredoc_body_child( + int ruby_heredoc_body: @ruby_heredoc_body ref, + int index: int ref, + unique int child: @ruby_heredoc_body_child_type ref +); + +ruby_heredoc_body_def( + unique int id: @ruby_heredoc_body +); + +@ruby_if_alternative_type = @ruby_else | @ruby_elsif + +ruby_if_alternative( + unique int ruby_if: @ruby_if ref, + unique int alternative: @ruby_if_alternative_type ref +); + +ruby_if_consequence( + unique int ruby_if: @ruby_if ref, + unique int consequence: @ruby_then ref +); + +ruby_if_def( + unique int id: @ruby_if, + int condition: @ruby_underscore_statement ref +); + +ruby_if_guard_def( + unique int id: @ruby_if_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_if_modifier_def( + unique int id: @ruby_if_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_in_def( + unique int id: @ruby_in, + int child: @ruby_underscore_arg ref +); + +ruby_in_clause_body( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int body: @ruby_then ref +); + +@ruby_in_clause_guard_type = @ruby_if_guard | @ruby_unless_guard + +ruby_in_clause_guard( + unique int ruby_in_clause: @ruby_in_clause ref, + unique int guard: @ruby_in_clause_guard_type ref +); + +ruby_in_clause_def( + unique int id: @ruby_in_clause, + int pattern: @ruby_underscore_pattern_top_expr_body ref +); + +@ruby_interpolation_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_interpolation, index] +ruby_interpolation_child( + int ruby_interpolation: @ruby_interpolation ref, + int index: int ref, + unique int child: @ruby_interpolation_child_type ref +); + +ruby_interpolation_def( + unique int id: @ruby_interpolation +); + +ruby_keyword_parameter_value( + unique int ruby_keyword_parameter: @ruby_keyword_parameter ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_keyword_parameter_def( + unique int id: @ruby_keyword_parameter, + int name: @ruby_token_identifier ref +); + +@ruby_keyword_pattern_key_type = @ruby_string__ | @ruby_token_hash_key_symbol + +ruby_keyword_pattern_value( + unique int ruby_keyword_pattern: @ruby_keyword_pattern ref, + unique int value: @ruby_underscore_pattern_expr ref +); + +ruby_keyword_pattern_def( + unique int id: @ruby_keyword_pattern, + int key__: @ruby_keyword_pattern_key_type ref +); + +@ruby_lambda_body_type = @ruby_block | @ruby_do_block + +ruby_lambda_parameters( + unique int ruby_lambda: @ruby_lambda ref, + unique int parameters: @ruby_lambda_parameters ref +); + +ruby_lambda_def( + unique int id: @ruby_lambda, + int body: @ruby_lambda_body_type ref +); + +@ruby_lambda_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_lambda_parameters, index] +ruby_lambda_parameters_child( + int ruby_lambda_parameters: @ruby_lambda_parameters ref, + int index: int ref, + unique int child: @ruby_lambda_parameters_child_type ref +); + +ruby_lambda_parameters_def( + unique int id: @ruby_lambda_parameters +); + +@ruby_left_assignment_list_child_type = @ruby_destructured_left_assignment | @ruby_rest_assignment | @ruby_underscore_lhs + +#keyset[ruby_left_assignment_list, index] +ruby_left_assignment_list_child( + int ruby_left_assignment_list: @ruby_left_assignment_list ref, + int index: int ref, + unique int child: @ruby_left_assignment_list_child_type ref +); + +ruby_left_assignment_list_def( + unique int id: @ruby_left_assignment_list +); + +ruby_method_parameters( + unique int ruby_method: @ruby_method ref, + unique int parameters: @ruby_method_parameters ref +); + +@ruby_method_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_arg | @ruby_underscore_statement + +#keyset[ruby_method, index] +ruby_method_child( + int ruby_method: @ruby_method ref, + int index: int ref, + unique int child: @ruby_method_child_type ref +); + +ruby_method_def( + unique int id: @ruby_method, + int name: @ruby_underscore_method_name ref +); + +@ruby_method_parameters_child_type = @ruby_block_parameter | @ruby_destructured_parameter | @ruby_hash_splat_parameter | @ruby_keyword_parameter | @ruby_optional_parameter | @ruby_splat_parameter | @ruby_token_forward_parameter | @ruby_token_hash_splat_nil | @ruby_token_identifier + +#keyset[ruby_method_parameters, index] +ruby_method_parameters_child( + int ruby_method_parameters: @ruby_method_parameters ref, + int index: int ref, + unique int child: @ruby_method_parameters_child_type ref +); + +ruby_method_parameters_def( + unique int id: @ruby_method_parameters +); + +@ruby_module_name_type = @ruby_scope_resolution | @ruby_token_constant + +@ruby_module_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_module, index] +ruby_module_child( + int ruby_module: @ruby_module ref, + int index: int ref, + unique int child: @ruby_module_child_type ref +); + +ruby_module_def( + unique int id: @ruby_module, + int name: @ruby_module_name_type ref +); + +ruby_next_child( + unique int ruby_next: @ruby_next ref, + unique int child: @ruby_argument_list ref +); + +ruby_next_def( + unique int id: @ruby_next +); + +case @ruby_operator_assignment.operator of + 0 = @ruby_operator_assignment_percentequal +| 1 = @ruby_operator_assignment_ampersandampersandequal +| 2 = @ruby_operator_assignment_ampersandequal +| 3 = @ruby_operator_assignment_starstarequal +| 4 = @ruby_operator_assignment_starequal +| 5 = @ruby_operator_assignment_plusequal +| 6 = @ruby_operator_assignment_minusequal +| 7 = @ruby_operator_assignment_slashequal +| 8 = @ruby_operator_assignment_langlelangleequal +| 9 = @ruby_operator_assignment_ranglerangleequal +| 10 = @ruby_operator_assignment_caretequal +| 11 = @ruby_operator_assignment_pipeequal +| 12 = @ruby_operator_assignment_pipepipeequal +; + + +@ruby_operator_assignment_right_type = @ruby_rescue_modifier | @ruby_underscore_expression + +ruby_operator_assignment_def( + unique int id: @ruby_operator_assignment, + int left: @ruby_underscore_lhs ref, + int operator: int ref, + int right: @ruby_operator_assignment_right_type ref +); + +ruby_optional_parameter_def( + unique int id: @ruby_optional_parameter, + int name: @ruby_token_identifier ref, + int value: @ruby_underscore_arg ref +); + +@ruby_pair_key_type = @ruby_string__ | @ruby_token_hash_key_symbol | @ruby_underscore_arg + +ruby_pair_value( + unique int ruby_pair: @ruby_pair ref, + unique int value: @ruby_underscore_arg ref +); + +ruby_pair_def( + unique int id: @ruby_pair, + int key__: @ruby_pair_key_type ref +); + +ruby_parenthesized_pattern_def( + unique int id: @ruby_parenthesized_pattern, + int child: @ruby_underscore_pattern_expr ref +); + +@ruby_parenthesized_statements_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_parenthesized_statements, index] +ruby_parenthesized_statements_child( + int ruby_parenthesized_statements: @ruby_parenthesized_statements ref, + int index: int ref, + unique int child: @ruby_parenthesized_statements_child_type ref +); + +ruby_parenthesized_statements_def( + unique int id: @ruby_parenthesized_statements +); + +@ruby_pattern_child_type = @ruby_splat_argument | @ruby_underscore_arg + +ruby_pattern_def( + unique int id: @ruby_pattern, + int child: @ruby_pattern_child_type ref +); + +@ruby_program_child_type = @ruby_token_empty_statement | @ruby_token_uninterpreted | @ruby_underscore_statement + +#keyset[ruby_program, index] +ruby_program_child( + int ruby_program: @ruby_program ref, + int index: int ref, + unique int child: @ruby_program_child_type ref +); + +ruby_program_def( + unique int id: @ruby_program +); + +@ruby_range_begin_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_begin( + unique int ruby_range: @ruby_range ref, + unique int begin: @ruby_range_begin_type ref +); + +@ruby_range_end_type = @ruby_underscore_arg | @ruby_underscore_pattern_primitive + +ruby_range_end( + unique int ruby_range: @ruby_range ref, + unique int end: @ruby_range_end_type ref +); + +case @ruby_range.operator of + 0 = @ruby_range_dotdot +| 1 = @ruby_range_dotdotdot +; + + +ruby_range_def( + unique int id: @ruby_range, + int operator: int ref +); + +@ruby_rational_child_type = @ruby_token_float | @ruby_token_integer + +ruby_rational_def( + unique int id: @ruby_rational, + int child: @ruby_rational_child_type ref +); + +ruby_redo_child( + unique int ruby_redo: @ruby_redo ref, + unique int child: @ruby_argument_list ref +); + +ruby_redo_def( + unique int id: @ruby_redo +); + +@ruby_regex_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_regex, index] +ruby_regex_child( + int ruby_regex: @ruby_regex ref, + int index: int ref, + unique int child: @ruby_regex_child_type ref +); + +ruby_regex_def( + unique int id: @ruby_regex +); + +ruby_rescue_body( + unique int ruby_rescue: @ruby_rescue ref, + unique int body: @ruby_then ref +); + +ruby_rescue_exceptions( + unique int ruby_rescue: @ruby_rescue ref, + unique int exceptions: @ruby_exceptions ref +); + +ruby_rescue_variable( + unique int ruby_rescue: @ruby_rescue ref, + unique int variable: @ruby_exception_variable ref +); + +ruby_rescue_def( + unique int id: @ruby_rescue +); + +@ruby_rescue_modifier_body_type = @ruby_underscore_arg | @ruby_underscore_statement + +ruby_rescue_modifier_def( + unique int id: @ruby_rescue_modifier, + int body: @ruby_rescue_modifier_body_type ref, + int handler: @ruby_underscore_expression ref +); + +ruby_rest_assignment_child( + unique int ruby_rest_assignment: @ruby_rest_assignment ref, + unique int child: @ruby_underscore_lhs ref +); + +ruby_rest_assignment_def( + unique int id: @ruby_rest_assignment +); + +ruby_retry_child( + unique int ruby_retry: @ruby_retry ref, + unique int child: @ruby_argument_list ref +); + +ruby_retry_def( + unique int id: @ruby_retry +); + +ruby_return_child( + unique int ruby_return: @ruby_return ref, + unique int child: @ruby_argument_list ref +); + +ruby_return_def( + unique int id: @ruby_return +); + +@ruby_right_assignment_list_child_type = @ruby_splat_argument | @ruby_underscore_arg + +#keyset[ruby_right_assignment_list, index] +ruby_right_assignment_list_child( + int ruby_right_assignment_list: @ruby_right_assignment_list ref, + int index: int ref, + unique int child: @ruby_right_assignment_list_child_type ref +); + +ruby_right_assignment_list_def( + unique int id: @ruby_right_assignment_list +); + +@ruby_scope_resolution_scope_type = @ruby_underscore_pattern_constant | @ruby_underscore_primary + +ruby_scope_resolution_scope( + unique int ruby_scope_resolution: @ruby_scope_resolution ref, + unique int scope: @ruby_scope_resolution_scope_type ref +); + +ruby_scope_resolution_def( + unique int id: @ruby_scope_resolution, + int name: @ruby_token_constant ref +); + +ruby_setter_def( + unique int id: @ruby_setter, + int name: @ruby_token_identifier ref +); + +@ruby_singleton_class_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_singleton_class, index] +ruby_singleton_class_child( + int ruby_singleton_class: @ruby_singleton_class ref, + int index: int ref, + unique int child: @ruby_singleton_class_child_type ref +); + +ruby_singleton_class_def( + unique int id: @ruby_singleton_class, + int value: @ruby_underscore_arg ref +); + +@ruby_singleton_method_object_type = @ruby_underscore_arg | @ruby_underscore_variable + +ruby_singleton_method_parameters( + unique int ruby_singleton_method: @ruby_singleton_method ref, + unique int parameters: @ruby_method_parameters ref +); + +@ruby_singleton_method_child_type = @ruby_else | @ruby_ensure | @ruby_rescue | @ruby_token_empty_statement | @ruby_underscore_arg | @ruby_underscore_statement + +#keyset[ruby_singleton_method, index] +ruby_singleton_method_child( + int ruby_singleton_method: @ruby_singleton_method ref, + int index: int ref, + unique int child: @ruby_singleton_method_child_type ref +); + +ruby_singleton_method_def( + unique int id: @ruby_singleton_method, + int name: @ruby_underscore_method_name ref, + int object: @ruby_singleton_method_object_type ref +); + +ruby_splat_argument_def( + unique int id: @ruby_splat_argument, + int child: @ruby_underscore_arg ref +); + +ruby_splat_parameter_name( + unique int ruby_splat_parameter: @ruby_splat_parameter ref, + unique int name: @ruby_token_identifier ref +); + +ruby_splat_parameter_def( + unique int id: @ruby_splat_parameter +); + +@ruby_string_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_string__, index] +ruby_string_child( + int ruby_string__: @ruby_string__ ref, + int index: int ref, + unique int child: @ruby_string_child_type ref +); + +ruby_string_def( + unique int id: @ruby_string__ +); + +#keyset[ruby_string_array, index] +ruby_string_array_child( + int ruby_string_array: @ruby_string_array ref, + int index: int ref, + unique int child: @ruby_bare_string ref +); + +ruby_string_array_def( + unique int id: @ruby_string_array +); + +@ruby_subshell_child_type = @ruby_interpolation | @ruby_token_escape_sequence | @ruby_token_string_content + +#keyset[ruby_subshell, index] +ruby_subshell_child( + int ruby_subshell: @ruby_subshell ref, + int index: int ref, + unique int child: @ruby_subshell_child_type ref +); + +ruby_subshell_def( + unique int id: @ruby_subshell +); + +ruby_superclass_def( + unique int id: @ruby_superclass, + int child: @ruby_underscore_expression ref +); + +#keyset[ruby_symbol_array, index] +ruby_symbol_array_child( + int ruby_symbol_array: @ruby_symbol_array ref, + int index: int ref, + unique int child: @ruby_bare_symbol ref +); + +ruby_symbol_array_def( + unique int id: @ruby_symbol_array +); + +@ruby_then_child_type = @ruby_token_empty_statement | @ruby_underscore_statement + +#keyset[ruby_then, index] +ruby_then_child( + int ruby_then: @ruby_then ref, + int index: int ref, + unique int child: @ruby_then_child_type ref +); + +ruby_then_def( + unique int id: @ruby_then +); + +@ruby_unary_operand_type = @ruby_parenthesized_statements | @ruby_underscore_expression | @ruby_underscore_simple_numeric + +case @ruby_unary.operator of + 0 = @ruby_unary_bang +| 1 = @ruby_unary_plus +| 2 = @ruby_unary_minus +| 3 = @ruby_unary_definedquestion +| 4 = @ruby_unary_not +| 5 = @ruby_unary_tilde +; + + +ruby_unary_def( + unique int id: @ruby_unary, + int operand: @ruby_unary_operand_type ref, + int operator: int ref +); + +#keyset[ruby_undef, index] +ruby_undef_child( + int ruby_undef: @ruby_undef ref, + int index: int ref, + unique int child: @ruby_underscore_method_name ref +); + +ruby_undef_def( + unique int id: @ruby_undef +); + +@ruby_unless_alternative_type = @ruby_else | @ruby_elsif + +ruby_unless_alternative( + unique int ruby_unless: @ruby_unless ref, + unique int alternative: @ruby_unless_alternative_type ref +); + +ruby_unless_consequence( + unique int ruby_unless: @ruby_unless ref, + unique int consequence: @ruby_then ref +); + +ruby_unless_def( + unique int id: @ruby_unless, + int condition: @ruby_underscore_statement ref +); + +ruby_unless_guard_def( + unique int id: @ruby_unless_guard, + int condition: @ruby_underscore_expression ref +); + +ruby_unless_modifier_def( + unique int id: @ruby_unless_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_until_def( + unique int id: @ruby_until, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_until_modifier_def( + unique int id: @ruby_until_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +@ruby_variable_reference_pattern_name_type = @ruby_token_identifier | @ruby_underscore_nonlocal_variable + +ruby_variable_reference_pattern_def( + unique int id: @ruby_variable_reference_pattern, + int name: @ruby_variable_reference_pattern_name_type ref +); + +ruby_when_body( + unique int ruby_when: @ruby_when ref, + unique int body: @ruby_then ref +); + +#keyset[ruby_when, index] +ruby_when_pattern( + int ruby_when: @ruby_when ref, + int index: int ref, + unique int pattern: @ruby_pattern ref +); + +ruby_when_def( + unique int id: @ruby_when +); + +ruby_while_def( + unique int id: @ruby_while, + int body: @ruby_do ref, + int condition: @ruby_underscore_statement ref +); + +ruby_while_modifier_def( + unique int id: @ruby_while_modifier, + int body: @ruby_underscore_statement ref, + int condition: @ruby_underscore_expression ref +); + +ruby_yield_child( + unique int ruby_yield: @ruby_yield ref, + unique int child: @ruby_argument_list ref +); + +ruby_yield_def( + unique int id: @ruby_yield +); + +ruby_tokeninfo( + unique int id: @ruby_token, + int kind: int ref, + string value: string ref +); + +case @ruby_token.kind of + 0 = @ruby_reserved_word +| 1 = @ruby_token_character +| 2 = @ruby_token_class_variable +| 3 = @ruby_token_comment +| 4 = @ruby_token_constant +| 5 = @ruby_token_empty_statement +| 6 = @ruby_token_encoding +| 7 = @ruby_token_escape_sequence +| 8 = @ruby_token_false +| 9 = @ruby_token_file +| 10 = @ruby_token_float +| 11 = @ruby_token_forward_argument +| 12 = @ruby_token_forward_parameter +| 13 = @ruby_token_global_variable +| 14 = @ruby_token_hash_key_symbol +| 15 = @ruby_token_hash_splat_nil +| 16 = @ruby_token_heredoc_beginning +| 17 = @ruby_token_heredoc_content +| 18 = @ruby_token_heredoc_end +| 19 = @ruby_token_identifier +| 20 = @ruby_token_instance_variable +| 21 = @ruby_token_integer +| 22 = @ruby_token_line +| 23 = @ruby_token_nil +| 24 = @ruby_token_operator +| 25 = @ruby_token_self +| 26 = @ruby_token_simple_symbol +| 27 = @ruby_token_string_content +| 28 = @ruby_token_super +| 29 = @ruby_token_true +| 30 = @ruby_token_uninterpreted +; + + +@ruby_ast_node = @ruby_alias | @ruby_alternative_pattern | @ruby_argument_list | @ruby_array | @ruby_array_pattern | @ruby_as_pattern | @ruby_assignment | @ruby_bare_string | @ruby_bare_symbol | @ruby_begin | @ruby_begin_block | @ruby_binary | @ruby_block | @ruby_block_argument | @ruby_block_parameter | @ruby_block_parameters | @ruby_break | @ruby_call | @ruby_case__ | @ruby_case_match | @ruby_chained_string | @ruby_class | @ruby_complex | @ruby_conditional | @ruby_delimited_symbol | @ruby_destructured_left_assignment | @ruby_destructured_parameter | @ruby_do | @ruby_do_block | @ruby_element_reference | @ruby_else | @ruby_elsif | @ruby_end_block | @ruby_ensure | @ruby_exception_variable | @ruby_exceptions | @ruby_expression_reference_pattern | @ruby_find_pattern | @ruby_for | @ruby_hash | @ruby_hash_pattern | @ruby_hash_splat_argument | @ruby_hash_splat_parameter | @ruby_heredoc_body | @ruby_if | @ruby_if_guard | @ruby_if_modifier | @ruby_in | @ruby_in_clause | @ruby_interpolation | @ruby_keyword_parameter | @ruby_keyword_pattern | @ruby_lambda | @ruby_lambda_parameters | @ruby_left_assignment_list | @ruby_method | @ruby_method_parameters | @ruby_module | @ruby_next | @ruby_operator_assignment | @ruby_optional_parameter | @ruby_pair | @ruby_parenthesized_pattern | @ruby_parenthesized_statements | @ruby_pattern | @ruby_program | @ruby_range | @ruby_rational | @ruby_redo | @ruby_regex | @ruby_rescue | @ruby_rescue_modifier | @ruby_rest_assignment | @ruby_retry | @ruby_return | @ruby_right_assignment_list | @ruby_scope_resolution | @ruby_setter | @ruby_singleton_class | @ruby_singleton_method | @ruby_splat_argument | @ruby_splat_parameter | @ruby_string__ | @ruby_string_array | @ruby_subshell | @ruby_superclass | @ruby_symbol_array | @ruby_then | @ruby_token | @ruby_unary | @ruby_undef | @ruby_unless | @ruby_unless_guard | @ruby_unless_modifier | @ruby_until | @ruby_until_modifier | @ruby_variable_reference_pattern | @ruby_when | @ruby_while | @ruby_while_modifier | @ruby_yield + +@ruby_ast_node_parent = @file | @ruby_ast_node + +#keyset[parent, parent_index] +ruby_ast_node_info( + unique int node: @ruby_ast_node ref, + int parent: @ruby_ast_node_parent ref, + int parent_index: int ref, + int loc: @location ref +); + +erb_comment_directive_def( + unique int id: @erb_comment_directive, + int child: @erb_token_comment ref +); + +erb_directive_def( + unique int id: @erb_directive, + int child: @erb_token_code ref +); + +erb_graphql_directive_def( + unique int id: @erb_graphql_directive, + int child: @erb_token_code ref +); + +erb_output_directive_def( + unique int id: @erb_output_directive, + int child: @erb_token_code ref +); + +@erb_template_child_type = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_token_content + +#keyset[erb_template, index] +erb_template_child( + int erb_template: @erb_template ref, + int index: int ref, + unique int child: @erb_template_child_type ref +); + +erb_template_def( + unique int id: @erb_template +); + +erb_tokeninfo( + unique int id: @erb_token, + int kind: int ref, + string value: string ref +); + +case @erb_token.kind of + 0 = @erb_reserved_word +| 1 = @erb_token_code +| 2 = @erb_token_comment +| 3 = @erb_token_content +; + + +@erb_ast_node = @erb_comment_directive | @erb_directive | @erb_graphql_directive | @erb_output_directive | @erb_template | @erb_token + +@erb_ast_node_parent = @erb_ast_node | @file + +#keyset[parent, parent_index] +erb_ast_node_info( + unique int node: @erb_ast_node ref, + int parent: @erb_ast_node_parent ref, + int parent_index: int ref, + int loc: @location ref +); + diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_ast_node_info.ql b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_ast_node_info.ql new file mode 100644 index 00000000000..18cff225540 --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_ast_node_info.ql @@ -0,0 +1,45 @@ +class ScopeResolutionMethodCall extends @ruby_call { + private @ruby_scope_resolution scope; + + ScopeResolutionMethodCall() { ruby_call_def(this, scope) } + + @ruby_scope_resolution getScopeResolution() { result = scope } + + string toString() { none() } +} + +class Location extends @location { + string toString() { none() } +} + +class RubyAstNode extends @ruby_ast_node { + string toString() { none() } +} + +class RubyAstNodeParent extends @ruby_ast_node_parent { + string toString() { none() } +} + +from RubyAstNode node, RubyAstNodeParent parent, int index, Location loc +where + ruby_ast_node_info(node, parent, index, loc) and + not node = any(ScopeResolutionMethodCall c).getScopeResolution() and + not parent = any(ScopeResolutionMethodCall c) and + not parent = any(ScopeResolutionMethodCall c).getScopeResolution() + or + ruby_ast_node_info(node, _, _, loc) and + parent instanceof ScopeResolutionMethodCall and + node = + rank[index + 1](RubyAstNode child, int x, int oldIndex | + exists(RubyAstNodeParent oldParent | + ruby_ast_node_info(child, oldParent, oldIndex, _) and + child != parent.(ScopeResolutionMethodCall).getScopeResolution() + | + oldParent = parent and x = 1 + or + oldParent = parent.(ScopeResolutionMethodCall).getScopeResolution() and x = 0 + ) + | + child order by x, oldIndex + ) +select node, parent, index, loc diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_block_parameters_child.ql b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_block_parameters_child.ql new file mode 100644 index 00000000000..9611d522db5 --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_block_parameters_child.ql @@ -0,0 +1,29 @@ +class RubyBlockParameters extends @ruby_block_parameters { + string toString() { none() } +} + +class RubyIdentifier extends @ruby_token_identifier { + string toString() { none() } +} + +predicate blockParametersLocals(RubyBlockParameters params, int index, RubyIdentifier local) { + local = + rank[index + 1](@ruby_token semi, int semiIndex, RubyIdentifier id, int idIndex | + ruby_tokeninfo(semi, _, ";") and + ruby_ast_node_info(semi, params, semiIndex, _) and + ruby_ast_node_info(id, params, idIndex, _) and + idIndex > semiIndex + | + id order by idIndex + ) +} + +class RubyBlockParameter extends @ruby_block_parameters_child_type { + string toString() { none() } +} + +from RubyBlockParameters ruby_block_parameters, int index, RubyBlockParameter param +where + ruby_block_parameters_child(ruby_block_parameters, index, param) and + not blockParametersLocals(ruby_block_parameters, _, param) +select ruby_block_parameters, index, param diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_block_parameters_locals.ql b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_block_parameters_locals.ql new file mode 100644 index 00000000000..cbe70adde55 --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_block_parameters_locals.ql @@ -0,0 +1,23 @@ +class RubyBlockParameters extends @ruby_block_parameters { + string toString() { none() } +} + +class RubyIdentifier extends @ruby_token_identifier { + string toString() { none() } +} + +predicate blockParametersLocals(RubyBlockParameters params, int index, RubyIdentifier local) { + local = + rank[index + 1](@ruby_token semi, int semiIndex, RubyIdentifier id, int idIndex | + ruby_tokeninfo(semi, _, ";") and + ruby_ast_node_info(semi, params, semiIndex, _) and + ruby_ast_node_info(id, params, idIndex, _) and + idIndex > semiIndex + | + id order by idIndex + ) +} + +from RubyBlockParameters ruby_block_parameters, int index, RubyIdentifier local +where blockParametersLocals(ruby_block_parameters, index, local) +select ruby_block_parameters, index, local diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_arguments.ql b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_arguments.ql new file mode 100644 index 00000000000..39f55a926af --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_arguments.ql @@ -0,0 +1,43 @@ +class RubyCallMethodType = @ruby_token_operator or @ruby_underscore_variable; + +class RubyArgumentList extends @ruby_argument_list { + string toString() { none() } +} + +abstract class RubyCall extends @ruby_ast_node { + string toString() { none() } + + abstract RubyArgumentList getArguments(); +} + +class NormalRubyCall extends RubyCall, @ruby_call { + NormalRubyCall() { ruby_call_def(this, any(RubyCallMethodType m)) } + + override RubyArgumentList getArguments() { ruby_call_arguments(this, result) } +} + +class ImplicitRubyCall extends RubyCall, @ruby_call { + RubyArgumentList arguments; + + ImplicitRubyCall() { ruby_call_def(this, arguments) } + + override RubyArgumentList getArguments() { result = arguments } +} + +class ScopeResolutionCall extends RubyCall, @ruby_scope_resolution { + ScopeResolutionCall() { + ruby_scope_resolution_def(this, any(@ruby_token_identifier m)) and + not ruby_call_def(_, this) + } + + override RubyArgumentList getArguments() { none() } +} + +class ScopeResolutionMethodCall extends RubyCall, @ruby_call { + ScopeResolutionMethodCall() { ruby_call_def(this, any(@ruby_scope_resolution s)) } + + override RubyArgumentList getArguments() { ruby_call_arguments(this, result) } +} + +from RubyCall ruby_call +select ruby_call, ruby_call.getArguments() diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_def.ql b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_def.ql new file mode 100644 index 00000000000..6e5babf86f2 --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_def.ql @@ -0,0 +1,27 @@ +class RubyCallMethodType = @ruby_token_operator or @ruby_underscore_variable; + +abstract class RubyCall extends @ruby_ast_node { + string toString() { none() } +} + +class NormalRubyCall extends RubyCall, @ruby_call { + NormalRubyCall() { ruby_call_def(this, any(RubyCallMethodType m)) } +} + +class ImplicitRubyCall extends RubyCall, @ruby_call { + ImplicitRubyCall() { ruby_call_def(this, any(@ruby_argument_list a)) } +} + +class ScopeResolutionCall extends RubyCall, @ruby_scope_resolution { + ScopeResolutionCall() { + ruby_scope_resolution_def(this, any(@ruby_token_identifier m)) and + not ruby_call_def(_, this) + } +} + +class ScopeResolutionMethodCall extends RubyCall, @ruby_call { + ScopeResolutionMethodCall() { ruby_call_def(this, any(@ruby_scope_resolution s)) } +} + +from RubyCall ruby_call +select ruby_call diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_method.ql b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_method.ql new file mode 100644 index 00000000000..200fad69b31 --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_method.ql @@ -0,0 +1,52 @@ +class RubyCallMethodType = @ruby_token_operator or @ruby_underscore_variable; + +class RubyMethod extends RubyCallMethodType { + string toString() { none() } +} + +abstract class RubyCall extends @ruby_ast_node { + string toString() { none() } + + abstract RubyMethod getMethod(); +} + +class NormalRubyCall extends RubyCall, @ruby_call { + private RubyMethod method; + + NormalRubyCall() { ruby_call_def(this, method) } + + override RubyMethod getMethod() { result = method } +} + +class ImplicitRubyCall extends RubyCall, @ruby_call { + ImplicitRubyCall() { ruby_call_def(this, any(@ruby_argument_list a)) } + + override RubyMethod getMethod() { none() } +} + +class ScopeResolutionCall extends RubyCall, @ruby_scope_resolution { + private @ruby_token_identifier method; + + ScopeResolutionCall() { + ruby_scope_resolution_def(this, method) and + not ruby_call_def(_, this) + } + + override RubyMethod getMethod() { result = method } +} + +class ScopeResolutionMethodCall extends RubyCall, @ruby_call { + private RubyMethod method; + + ScopeResolutionMethodCall() { + exists(@ruby_scope_resolution scope | + ruby_call_def(this, scope) and + ruby_scope_resolution_def(scope, method) + ) + } + + override RubyMethod getMethod() { result = method } +} + +from RubyCall ruby_call +select ruby_call, ruby_call.getMethod() diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_operator.ql b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_operator.ql new file mode 100644 index 00000000000..a8c2086529a --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_operator.ql @@ -0,0 +1,45 @@ +class RubyCallOperator extends @ruby_reserved_word { + RubyCallOperator() { ruby_tokeninfo(this, _, [".", "::", "&."]) } + + string toString() { none() } +} + +class RubyCallMethodType = @ruby_token_operator or @ruby_underscore_variable; + +abstract class RubyCall extends @ruby_ast_node { + string toString() { none() } + + abstract RubyCallOperator getOperator(); +} + +class NormalRubyCall extends RubyCall, @ruby_call { + NormalRubyCall() { ruby_call_def(this, any(RubyCallMethodType m)) } + + override RubyCallOperator getOperator() { ruby_ast_node_info(result, this, _, _) } +} + +class ImplicitRubyCall extends RubyCall, @ruby_call { + ImplicitRubyCall() { ruby_call_def(this, any(@ruby_argument_list a)) } + + override RubyCallOperator getOperator() { ruby_ast_node_info(result, this, _, _) } +} + +class ScopeResolutionCall extends RubyCall, @ruby_scope_resolution { + ScopeResolutionCall() { + ruby_scope_resolution_def(this, any(@ruby_token_identifier m)) and + not ruby_call_def(_, this) + } + + override RubyCallOperator getOperator() { ruby_ast_node_info(result, this, _, _) } +} + +class ScopeResolutionMethodCall extends RubyCall, @ruby_call { + private @ruby_scope_resolution scope; + + ScopeResolutionMethodCall() { ruby_call_def(this, scope) } + + override RubyCallOperator getOperator() { ruby_ast_node_info(result, scope, _, _) } +} + +from RubyCall ruby_call +select ruby_call, ruby_call.getOperator() diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_receiver.ql b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_receiver.ql new file mode 100644 index 00000000000..81a316eaabd --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_call_receiver.ql @@ -0,0 +1,43 @@ +class RubyCallMethodType = @ruby_token_operator or @ruby_underscore_variable; + +class RubyPrimary extends @ruby_underscore_primary { + string toString() { none() } +} + +abstract class RubyCall extends @ruby_ast_node { + string toString() { none() } + + abstract RubyPrimary getReceiver(); +} + +class NormalRubyCall extends RubyCall, @ruby_call { + NormalRubyCall() { ruby_call_def(this, any(RubyCallMethodType m)) } + + override RubyPrimary getReceiver() { ruby_call_receiver(this, result) } +} + +class ImplicitRubyCall extends RubyCall, @ruby_call { + ImplicitRubyCall() { ruby_call_def(this, any(@ruby_argument_list a)) } + + override RubyPrimary getReceiver() { ruby_call_receiver(this, result) } +} + +class ScopeResolutionCall extends RubyCall, @ruby_scope_resolution { + ScopeResolutionCall() { + ruby_scope_resolution_def(this, any(@ruby_token_identifier m)) and + not ruby_call_def(_, this) + } + + override RubyPrimary getReceiver() { ruby_scope_resolution_scope(this, result) } +} + +class ScopeResolutionMethodCall extends RubyCall, @ruby_call { + private @ruby_scope_resolution scope; + + ScopeResolutionMethodCall() { ruby_call_def(this, scope) } + + override RubyPrimary getReceiver() { ruby_scope_resolution_scope(scope, result) } +} + +from RubyCall ruby_call +select ruby_call, ruby_call.getReceiver() diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_scope_resolution_def.ql b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_scope_resolution_def.ql new file mode 100644 index 00000000000..db858388b65 --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_scope_resolution_def.ql @@ -0,0 +1,16 @@ +class RubyScopeResolution extends @ruby_scope_resolution { + RubyScopeResolution() { + exists(RubyConstant name | ruby_scope_resolution_def(this, name)) and + not ruby_call_def(_, this) + } + + string toString() { none() } +} + +class RubyConstant extends @ruby_token_constant { + string toString() { none() } +} + +from RubyScopeResolution scope, RubyConstant name +where ruby_scope_resolution_def(scope, name) +select scope, name diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_tokeninfo.ql b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_tokeninfo.ql new file mode 100644 index 00000000000..1d4af53f766 --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/ruby_tokeninfo.ql @@ -0,0 +1,20 @@ +private class RubyToken extends @ruby_token { + string toString() { none() } +} + +bindingset[old] +private int newKind(int old) { + // @ruby_token_complex was removed, for lack of a better solution + // it gets translated to @ruby_token_float + // 4 = @ruby_token_complex + // 10 = @ruby_token_float + old = 4 and result = 10 + or + old <= 3 and result = old + or + old >= 5 and result = old - 1 +} + +from RubyToken id, int kind, string value +where ruby_tokeninfo(id, kind, value) +select id, newKind(kind), value diff --git a/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/upgrade.properties b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/upgrade.properties new file mode 100644 index 00000000000..8c5b2c86673 --- /dev/null +++ b/ruby/ql/lib/upgrades/9fdd1d40fd3c3f8f9db8fabf5a353580d14c663a/upgrade.properties @@ -0,0 +1,12 @@ +description: tree-sitter-ruby update +compatibility: backwards +ruby_block_parameters_child.rel: run ruby_block_parameters_child.qlo +ruby_block_parameters_locals.rel: run ruby_block_parameters_locals.qlo +ruby_call_def.rel: run ruby_call_def.qlo +ruby_call_arguments.rel: run ruby_call_arguments.qlo +ruby_call_method.rel: run ruby_call_method.qlo +ruby_call_operator.rel: run ruby_call_operator.qlo +ruby_call_receiver.rel: run ruby_call_receiver.qlo +ruby_scope_resolution_def.rel: run ruby_scope_resolution_def.qlo +ruby_ast_node_info.rel: run ruby_ast_node_info.qlo +ruby_tokeninfo.rel: run ruby_tokeninfo.qlo From 8e4cf190e97ae1ec159632604a7f9f95633c629f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 28 Apr 2022 11:59:05 +0000 Subject: [PATCH 0188/1618] Release preparation for version 2.9.1 --- cpp/ql/lib/CHANGELOG.md | 11 +++++++++++ .../change-notes/2022-04-22-no-size-array.md | 4 ---- ...-04-25-windows-pool-allocation-functions.md | 4 ---- cpp/ql/lib/change-notes/released/0.2.0.md | 10 ++++++++++ cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 6 ++++++ .../0.1.1.md} | 7 ++++--- cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/lib/CHANGELOG.md | 2 ++ .../lib/change-notes/released/1.1.1.md | 1 + .../Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/src/CHANGELOG.md | 2 ++ .../src/change-notes/released/1.1.1.md | 1 + .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 6 ++++++ .../0.2.0.md} | 9 +++++---- csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 2 ++ csharp/ql/src/change-notes/released/0.1.1.md | 1 + csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 18 ++++++++++++++++++ .../2022-03-28-JumpStmt-as-superclass.md | 4 ---- .../2022-04-01-spring-models-improvements.md | 4 ---- java/ql/lib/change-notes/2022-04-17-jms.md | 6 ------ .../2022-04-22-sharedprefs-fluent-steps.md | 4 ---- java/ql/lib/change-notes/released/0.2.0.md | 17 +++++++++++++++++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 10 +++++++++- .../0.1.1.md} | 7 ++++--- java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 2 ++ .../ql/lib/change-notes/released/0.1.1.md | 1 + javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 8 ++++++++ .../0.1.1.md} | 7 ++++--- javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 6 ++++++ ...2022-04-25-allow-implicit-read-signature.md | 4 ---- .../ql/lib/change-notes/released/0.2.0.md | 9 +++++---- python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 2 ++ python/ql/src/change-notes/released/0.1.1.md | 1 + python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 10 ++++++++-- ...2022-04-25-allow-implicit-read-signature.md | 4 ---- .../ql/lib/change-notes/released/0.2.0.md | 9 +++++---- ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 8 ++++++++ .../2022-04-13-incomplete-sanitization.md | 4 ---- .../2022-04-14-rb-insecure-download.md | 4 ---- .../2022-04-14-rb-missing-regexp-anchor.md | 4 ---- ruby/ql/src/change-notes/released/0.1.1.md | 7 +++++++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- 67 files changed, 184 insertions(+), 98 deletions(-) delete mode 100644 cpp/ql/lib/change-notes/2022-04-22-no-size-array.md delete mode 100644 cpp/ql/lib/change-notes/2022-04-25-windows-pool-allocation-functions.md create mode 100644 cpp/ql/lib/change-notes/released/0.2.0.md rename cpp/ql/src/change-notes/{2022-04-13-pexternal-entity-expansion.md => released/0.1.1.md} (85%) create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.1.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.1.md rename csharp/ql/lib/change-notes/{2022-04-25-allow-implicit-read-signature.md => released/0.2.0.md} (68%) create mode 100644 csharp/ql/src/change-notes/released/0.1.1.md delete mode 100644 java/ql/lib/change-notes/2022-03-28-JumpStmt-as-superclass.md delete mode 100644 java/ql/lib/change-notes/2022-04-01-spring-models-improvements.md delete mode 100644 java/ql/lib/change-notes/2022-04-17-jms.md delete mode 100644 java/ql/lib/change-notes/2022-04-22-sharedprefs-fluent-steps.md create mode 100644 java/ql/lib/change-notes/released/0.2.0.md rename java/ql/src/change-notes/{2022-04-26-insecure-cookie-named-constants.md => released/0.1.1.md} (77%) create mode 100644 javascript/ql/lib/change-notes/released/0.1.1.md rename javascript/ql/src/change-notes/{2022-04-21-static-accessors.md => released/0.1.1.md} (85%) delete mode 100644 python/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md rename cpp/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md => python/ql/lib/change-notes/released/0.2.0.md (68%) create mode 100644 python/ql/src/change-notes/released/0.1.1.md delete mode 100644 ruby/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md rename java/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md => ruby/ql/lib/change-notes/released/0.2.0.md (68%) delete mode 100644 ruby/ql/src/change-notes/2022-04-13-incomplete-sanitization.md delete mode 100644 ruby/ql/src/change-notes/2022-04-14-rb-insecure-download.md delete mode 100644 ruby/ql/src/change-notes/2022-04-14-rb-missing-regexp-anchor.md create mode 100644 ruby/ql/src/change-notes/released/0.1.1.md diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 0f33f4cc3e8..474d60447ab 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,14 @@ +## 0.2.0 + +### Breaking Changes + +The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. + +### Minor Analysis Improvements + +* More Windows pool allocation functions are now detected as `AllocationFunction`s. +* The `semmle.code.cpp.commons.Buffer` library has been enhanced to handle array members of classes that do not specify a size. + ## 0.1.0 ### Breaking Changes diff --git a/cpp/ql/lib/change-notes/2022-04-22-no-size-array.md b/cpp/ql/lib/change-notes/2022-04-22-no-size-array.md deleted file mode 100644 index 40a8c9a75d5..00000000000 --- a/cpp/ql/lib/change-notes/2022-04-22-no-size-array.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `semmle.code.cpp.commons.Buffer` library has been enhanced to handle array members of classes that do not specify a size. diff --git a/cpp/ql/lib/change-notes/2022-04-25-windows-pool-allocation-functions.md b/cpp/ql/lib/change-notes/2022-04-25-windows-pool-allocation-functions.md deleted file mode 100644 index b3876b96801..00000000000 --- a/cpp/ql/lib/change-notes/2022-04-25-windows-pool-allocation-functions.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* More Windows pool allocation functions are now detected as `AllocationFunction`s. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/released/0.2.0.md b/cpp/ql/lib/change-notes/released/0.2.0.md new file mode 100644 index 00000000000..7a4ef048682 --- /dev/null +++ b/cpp/ql/lib/change-notes/released/0.2.0.md @@ -0,0 +1,10 @@ +## 0.2.0 + +### Breaking Changes + +The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. + +### Minor Analysis Improvements + +* More Windows pool allocation functions are now detected as `AllocationFunction`s. +* The `semmle.code.cpp.commons.Buffer` library has been enhanced to handle array members of classes that do not specify a size. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index 2e08f40f6aa..5274e27ed52 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.2.0 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index c486434910b..00ac7dc6755 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.1.1-dev +version: 0.2.0 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index d0200fbfd1a..fa04b672083 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.1.1 + +### New Queries + +* An new query `cpp/external-entity-expansion` has been added. The query detects XML objects that are vulnerable to external entity expansion (XXE) attacks. + ## 0.1.0 ### Minor Analysis Improvements diff --git a/cpp/ql/src/change-notes/2022-04-13-pexternal-entity-expansion.md b/cpp/ql/src/change-notes/released/0.1.1.md similarity index 85% rename from cpp/ql/src/change-notes/2022-04-13-pexternal-entity-expansion.md rename to cpp/ql/src/change-notes/released/0.1.1.md index 9fa66388f7e..56f7297cf67 100644 --- a/cpp/ql/src/change-notes/2022-04-13-pexternal-entity-expansion.md +++ b/cpp/ql/src/change-notes/released/0.1.1.md @@ -1,4 +1,5 @@ ---- -category: newQuery ---- +## 0.1.1 + +### New Queries + * An new query `cpp/external-entity-expansion` has been added. The query detects XML objects that are vulnerable to external entity expansion (XXE) attacks. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 2e08f40f6aa..92d1505475f 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.1.1 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index 3f439e5eec8..adc05e6f5cd 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.1.1-dev +version: 0.1.1 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 867ad28bc67..2791add0d9c 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,5 @@ +## 1.1.1 + ## 1.1.0 ## 1.0.7 diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.1.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.1.md new file mode 100644 index 00000000000..bf5d722f884 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.1.1.md @@ -0,0 +1 @@ +## 1.1.1 diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 2ac15439f56..1a19084be3f 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.1.1 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 220d9ed0db9..e697a9d4344 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.1.1-dev +version: 1.1.1 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 867ad28bc67..2791add0d9c 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,5 @@ +## 1.1.1 + ## 1.1.0 ## 1.0.7 diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.1.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.1.md new file mode 100644 index 00000000000..bf5d722f884 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.1.1.md @@ -0,0 +1 @@ +## 1.1.1 diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 2ac15439f56..1a19084be3f 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.0 +lastReleaseVersion: 1.1.1 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index 475df83c7ff..e75764d366f 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.1.1-dev +version: 1.1.1 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 3c66572c3e8..ad9dad3be6e 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.2.0 + +### Breaking Changes + +The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. + ## 0.1.0 ### Breaking Changes diff --git a/csharp/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md b/csharp/ql/lib/change-notes/released/0.2.0.md similarity index 68% rename from csharp/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md rename to csharp/ql/lib/change-notes/released/0.2.0.md index 4164b4d4b81..e85cbeb0ddb 100644 --- a/csharp/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md +++ b/csharp/ql/lib/change-notes/released/0.2.0.md @@ -1,4 +1,5 @@ ---- -category: breaking ---- -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. \ No newline at end of file +## 0.2.0 + +### Breaking Changes + +The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index 2e08f40f6aa..5274e27ed52 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.2.0 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 4eb02c5a592..df26aba8e06 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.1.1-dev +version: 0.2.0 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index d969cefbbcc..c6b210ab15b 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,5 @@ +## 0.1.1 + ## 0.1.0 ## 0.0.13 diff --git a/csharp/ql/src/change-notes/released/0.1.1.md b/csharp/ql/src/change-notes/released/0.1.1.md new file mode 100644 index 00000000000..f8f257d7250 --- /dev/null +++ b/csharp/ql/src/change-notes/released/0.1.1.md @@ -0,0 +1 @@ +## 0.1.1 diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index 2e08f40f6aa..92d1505475f 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.1.1 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 875f58bcf58..d1e09f59e10 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.1.1-dev +version: 0.1.1 groups: - csharp - queries diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 2426054941a..956c5217150 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,21 @@ +## 0.2.0 + +### Breaking Changes + +The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. + +### Minor Analysis Improvements + +Improved the data flow support for the Android class `SharedPreferences$Editor`. Specifically, the fluent logic of some of its methods is now taken into account when calculating data flow. + * Added flow sources and steps for JMS versions 1 and 2. + * Added flow sources and steps for RabbitMQ. + * Added flow steps for `java.io.DataInput` and `java.io.ObjectInput` implementations. +* Added data-flow models for the Spring Framework component `spring-beans`. + +### Bug Fixes + +* The QL class `JumpStmt` has been made the superclass of `BreakStmt`, `ContinueStmt` and `YieldStmt`. This allows directly using its inherited predicates without having to explicitly cast to `JumpStmt` first. + ## 0.1.0 ### Breaking Changes diff --git a/java/ql/lib/change-notes/2022-03-28-JumpStmt-as-superclass.md b/java/ql/lib/change-notes/2022-03-28-JumpStmt-as-superclass.md deleted file mode 100644 index e2e97a84742..00000000000 --- a/java/ql/lib/change-notes/2022-03-28-JumpStmt-as-superclass.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* The QL class `JumpStmt` has been made the superclass of `BreakStmt`, `ContinueStmt` and `YieldStmt`. This allows directly using its inherited predicates without having to explicitly cast to `JumpStmt` first. diff --git a/java/ql/lib/change-notes/2022-04-01-spring-models-improvements.md b/java/ql/lib/change-notes/2022-04-01-spring-models-improvements.md deleted file mode 100644 index 84903366fdc..00000000000 --- a/java/ql/lib/change-notes/2022-04-01-spring-models-improvements.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added data-flow models for the Spring Framework component `spring-beans`. \ No newline at end of file diff --git a/java/ql/lib/change-notes/2022-04-17-jms.md b/java/ql/lib/change-notes/2022-04-17-jms.md deleted file mode 100644 index 53d620b0fd1..00000000000 --- a/java/ql/lib/change-notes/2022-04-17-jms.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: minorAnalysis ---- - * Added flow sources and steps for JMS versions 1 and 2. - * Added flow sources and steps for RabbitMQ. - * Added flow steps for `java.io.DataInput` and `java.io.ObjectInput` implementations. diff --git a/java/ql/lib/change-notes/2022-04-22-sharedprefs-fluent-steps.md b/java/ql/lib/change-notes/2022-04-22-sharedprefs-fluent-steps.md deleted file mode 100644 index 324b7b0d59f..00000000000 --- a/java/ql/lib/change-notes/2022-04-22-sharedprefs-fluent-steps.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -Improved the data flow support for the Android class `SharedPreferences$Editor`. Specifically, the fluent logic of some of its methods is now taken into account when calculating data flow. \ No newline at end of file diff --git a/java/ql/lib/change-notes/released/0.2.0.md b/java/ql/lib/change-notes/released/0.2.0.md new file mode 100644 index 00000000000..c3c44094be3 --- /dev/null +++ b/java/ql/lib/change-notes/released/0.2.0.md @@ -0,0 +1,17 @@ +## 0.2.0 + +### Breaking Changes + +The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. + +### Minor Analysis Improvements + +Improved the data flow support for the Android class `SharedPreferences$Editor`. Specifically, the fluent logic of some of its methods is now taken into account when calculating data flow. + * Added flow sources and steps for JMS versions 1 and 2. + * Added flow sources and steps for RabbitMQ. + * Added flow steps for `java.io.DataInput` and `java.io.ObjectInput` implementations. +* Added data-flow models for the Spring Framework component `spring-beans`. + +### Bug Fixes + +* The QL class `JumpStmt` has been made the superclass of `BreakStmt`, `ContinueStmt` and `YieldStmt`. This allows directly using its inherited predicates without having to explicitly cast to `JumpStmt` first. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 2e08f40f6aa..5274e27ed52 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.2.0 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 27a0786ada4..be1391ac60b 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.1.1-dev +version: 0.2.0 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 921b195faa8..60da4508197 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.1.1 + +### Minor Analysis Improvements + +* Query `java/insecure-cookie` no longer produces a false positive if +`cookie.setSecure(...)` is called passing a constant that always equals +`true`. + ## 0.1.0 ### Query Metadata Changes @@ -20,7 +28,7 @@ this respect. ### Minor Analysis Improvements -* Updated "Local information disclosure in a temporary directory" (`java/local-temp-file-or-directory-information-disclosure`) to remove false-positives when OS is properly used as logical guard. + * Updated "Local information disclosure in a temporary directory" (`java/local-temp-file-or-directory-information-disclosure`) to remove false-positives when OS is properly used as logical guard. ## 0.0.11 diff --git a/java/ql/src/change-notes/2022-04-26-insecure-cookie-named-constants.md b/java/ql/src/change-notes/released/0.1.1.md similarity index 77% rename from java/ql/src/change-notes/2022-04-26-insecure-cookie-named-constants.md rename to java/ql/src/change-notes/released/0.1.1.md index e0c892752da..5bbf16fc815 100644 --- a/java/ql/src/change-notes/2022-04-26-insecure-cookie-named-constants.md +++ b/java/ql/src/change-notes/released/0.1.1.md @@ -1,6 +1,7 @@ ---- -category: minorAnalysis ---- +## 0.1.1 + +### Minor Analysis Improvements + * Query `java/insecure-cookie` no longer produces a false positive if `cookie.setSecure(...)` is called passing a constant that always equals `true`. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index 2e08f40f6aa..92d1505475f 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.1.1 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index b6be26eadcf..e7c4cc1e30d 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.1.1-dev +version: 0.1.1 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index 79407b35480..d50d7fa0dbb 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,5 @@ +## 0.1.1 + ## 0.1.0 ### Bug Fixes diff --git a/javascript/ql/lib/change-notes/released/0.1.1.md b/javascript/ql/lib/change-notes/released/0.1.1.md new file mode 100644 index 00000000000..f8f257d7250 --- /dev/null +++ b/javascript/ql/lib/change-notes/released/0.1.1.md @@ -0,0 +1 @@ +## 0.1.1 diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index 2e08f40f6aa..92d1505475f 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.1.1 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 0d784b3240f..bb491a62c51 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.1.1-dev +version: 0.1.1 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index a73b0db75bb..a70da925644 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.1.1 + +### Minor Analysis Improvements + +* The call graph now deals more precisely with calls to accessors (getters and setters). + Previously, calls to static accessors were not resolved, and some method calls were + incorrectly seen as calls to an accessor. Both issues have been fixed. + ## 0.1.0 ### New Queries diff --git a/javascript/ql/src/change-notes/2022-04-21-static-accessors.md b/javascript/ql/src/change-notes/released/0.1.1.md similarity index 85% rename from javascript/ql/src/change-notes/2022-04-21-static-accessors.md rename to javascript/ql/src/change-notes/released/0.1.1.md index 9712dcd7010..5697e7d1ce1 100644 --- a/javascript/ql/src/change-notes/2022-04-21-static-accessors.md +++ b/javascript/ql/src/change-notes/released/0.1.1.md @@ -1,6 +1,7 @@ ---- -category: minorAnalysis ---- +## 0.1.1 + +### Minor Analysis Improvements + * The call graph now deals more precisely with calls to accessors (getters and setters). Previously, calls to static accessors were not resolved, and some method calls were incorrectly seen as calls to an accessor. Both issues have been fixed. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index 2e08f40f6aa..92d1505475f 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.1.1 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 1cb17438364..8ce1a539b74 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.1.1-dev +version: 0.1.1 groups: - javascript - queries diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 1eb7cdddbae..13c8dc1b121 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.2.0 + +### Breaking Changes + +The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. + ## 0.1.0 ### Breaking Changes diff --git a/python/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md b/python/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md deleted file mode 100644 index 4164b4d4b81..00000000000 --- a/python/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. \ No newline at end of file diff --git a/cpp/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md b/python/ql/lib/change-notes/released/0.2.0.md similarity index 68% rename from cpp/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md rename to python/ql/lib/change-notes/released/0.2.0.md index 4164b4d4b81..e85cbeb0ddb 100644 --- a/cpp/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md +++ b/python/ql/lib/change-notes/released/0.2.0.md @@ -1,4 +1,5 @@ ---- -category: breaking ---- -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. \ No newline at end of file +## 0.2.0 + +### Breaking Changes + +The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index 2e08f40f6aa..5274e27ed52 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.2.0 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 2a7c3cbbb9f..b4ca380ac44 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.1.1-dev +version: 0.2.0 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index f627fbb9c56..3b427cfaae9 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,5 @@ +## 0.1.1 + ## 0.1.0 ## 0.0.13 diff --git a/python/ql/src/change-notes/released/0.1.1.md b/python/ql/src/change-notes/released/0.1.1.md new file mode 100644 index 00000000000..f8f257d7250 --- /dev/null +++ b/python/ql/src/change-notes/released/0.1.1.md @@ -0,0 +1 @@ +## 0.1.1 diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index 2e08f40f6aa..92d1505475f 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.1.1 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 9de94d9cde3..0a865bb7e0b 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.1.1-dev +version: 0.1.1 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index c18bd1d66e2..1c971469283 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 0.2.0 + +### Breaking Changes + +The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. + ## 0.1.0 ### Breaking Changes @@ -11,8 +17,8 @@ ### Minor Analysis Improvements -* Whereas `ConstantValue::getString()` previously returned both string and regular-expression values, it now returns only string values. The same applies to `ConstantValue::isString(value)`. -* Regular-expression values can now be accessed with the new predicates `ConstantValue::getRegExp()`, `ConstantValue::isRegExp(value)`, and `ConstantValue::isRegExpWithFlags(value, flags)`. +* Whereas `ConstantValue::getString()` previously returned both string and regular-expression values, it now returns only string values. The same applies to `ConstantValue::isString(value)`. +* Regular-expression values can now be accessed with the new predicates `ConstantValue::getRegExp()`, `ConstantValue::isRegExp(value)`, and `ConstantValue::isRegExpWithFlags(value, flags)`. * The `ParseRegExp` and `RegExpTreeView` modules are now "internal" modules. Users should use `codeql.ruby.Regexp` instead. ## 0.0.13 diff --git a/ruby/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md b/ruby/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md deleted file mode 100644 index 4164b4d4b81..00000000000 --- a/ruby/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: breaking ---- -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. \ No newline at end of file diff --git a/java/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md b/ruby/ql/lib/change-notes/released/0.2.0.md similarity index 68% rename from java/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md rename to ruby/ql/lib/change-notes/released/0.2.0.md index 4164b4d4b81..e85cbeb0ddb 100644 --- a/java/ql/lib/change-notes/2022-04-25-allow-implicit-read-signature.md +++ b/ruby/ql/lib/change-notes/released/0.2.0.md @@ -1,4 +1,5 @@ ---- -category: breaking ---- -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. \ No newline at end of file +## 0.2.0 + +### Breaking Changes + +The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 2e08f40f6aa..5274e27ed52 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.2.0 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 13703800ccc..37f05e1d20d 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.1.1-dev +version: 0.2.0 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index 291328e28c7..72bf3f42e84 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.1.1 + +### New Queries + +* Added a new query, `rb/insecure-download`. The query finds cases where executables and other sensitive files are downloaded over an insecure connection, which may allow for man-in-the-middle attacks. +* Added a new query, `rb/regex/missing-regexp-anchor`, which finds regular expressions which are improperly anchored. Validations using such expressions are at risk of being bypassed. +* Added a new query, `rb/incomplete-sanitization`. The query finds string transformations that do not replace or escape all occurrences of a meta-character. + ## 0.1.0 ### New Queries diff --git a/ruby/ql/src/change-notes/2022-04-13-incomplete-sanitization.md b/ruby/ql/src/change-notes/2022-04-13-incomplete-sanitization.md deleted file mode 100644 index 1dfa0d65d11..00000000000 --- a/ruby/ql/src/change-notes/2022-04-13-incomplete-sanitization.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query, `rb/incomplete-sanitization`. The query finds string transformations that do not replace or escape all occurrences of a meta-character. diff --git a/ruby/ql/src/change-notes/2022-04-14-rb-insecure-download.md b/ruby/ql/src/change-notes/2022-04-14-rb-insecure-download.md deleted file mode 100644 index 104f8253427..00000000000 --- a/ruby/ql/src/change-notes/2022-04-14-rb-insecure-download.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query, `rb/insecure-download`. The query finds cases where executables and other sensitive files are downloaded over an insecure connection, which may allow for man-in-the-middle attacks. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/2022-04-14-rb-missing-regexp-anchor.md b/ruby/ql/src/change-notes/2022-04-14-rb-missing-regexp-anchor.md deleted file mode 100644 index 7f18700d693..00000000000 --- a/ruby/ql/src/change-notes/2022-04-14-rb-missing-regexp-anchor.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query, `rb/regex/missing-regexp-anchor`, which finds regular expressions which are improperly anchored. Validations using such expressions are at risk of being bypassed. \ No newline at end of file diff --git a/ruby/ql/src/change-notes/released/0.1.1.md b/ruby/ql/src/change-notes/released/0.1.1.md new file mode 100644 index 00000000000..602663ddbb1 --- /dev/null +++ b/ruby/ql/src/change-notes/released/0.1.1.md @@ -0,0 +1,7 @@ +## 0.1.1 + +### New Queries + +* Added a new query, `rb/insecure-download`. The query finds cases where executables and other sensitive files are downloaded over an insecure connection, which may allow for man-in-the-middle attacks. +* Added a new query, `rb/regex/missing-regexp-anchor`, which finds regular expressions which are improperly anchored. Validations using such expressions are at risk of being bypassed. +* Added a new query, `rb/incomplete-sanitization`. The query finds string transformations that do not replace or escape all occurrences of a meta-character. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 2e08f40f6aa..92d1505475f 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.0 +lastReleaseVersion: 0.1.1 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 0ad549dddf8..6e81cdab8a5 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.1.1-dev +version: 0.1.1 groups: - ruby - queries From 4a648f3c895c5b4e9087f2d4dd68f12db4e97285 Mon Sep 17 00:00:00 2001 From: Jeroen Ketema <93738568+jketema@users.noreply.github.com> Date: Thu, 28 Apr 2022 14:14:19 +0200 Subject: [PATCH 0189/1618] Fix change note items --- cpp/ql/lib/CHANGELOG.md | 2 +- cpp/ql/lib/change-notes/released/0.2.0.md | 2 +- csharp/ql/lib/CHANGELOG.md | 2 +- csharp/ql/lib/change-notes/released/0.2.0.md | 2 +- java/ql/lib/CHANGELOG.md | 10 +++++----- java/ql/lib/change-notes/released/0.2.0.md | 10 +++++----- java/ql/src/CHANGELOG.md | 6 ++---- python/ql/lib/CHANGELOG.md | 2 +- python/ql/lib/change-notes/released/0.2.0.md | 2 +- ruby/ql/lib/CHANGELOG.md | 2 +- ruby/ql/lib/change-notes/released/0.2.0.md | 2 +- 11 files changed, 20 insertions(+), 22 deletions(-) diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 474d60447ab..d278929caed 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -2,7 +2,7 @@ ### Breaking Changes -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. ### Minor Analysis Improvements diff --git a/cpp/ql/lib/change-notes/released/0.2.0.md b/cpp/ql/lib/change-notes/released/0.2.0.md index 7a4ef048682..e0b751200c4 100644 --- a/cpp/ql/lib/change-notes/released/0.2.0.md +++ b/cpp/ql/lib/change-notes/released/0.2.0.md @@ -2,7 +2,7 @@ ### Breaking Changes -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. ### Minor Analysis Improvements diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index ad9dad3be6e..67bb243493e 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -2,7 +2,7 @@ ### Breaking Changes -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. ## 0.1.0 diff --git a/csharp/ql/lib/change-notes/released/0.2.0.md b/csharp/ql/lib/change-notes/released/0.2.0.md index e85cbeb0ddb..7ccf56ddd47 100644 --- a/csharp/ql/lib/change-notes/released/0.2.0.md +++ b/csharp/ql/lib/change-notes/released/0.2.0.md @@ -2,4 +2,4 @@ ### Breaking Changes -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 956c5217150..ab5c12f5463 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -2,14 +2,14 @@ ### Breaking Changes -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. ### Minor Analysis Improvements -Improved the data flow support for the Android class `SharedPreferences$Editor`. Specifically, the fluent logic of some of its methods is now taken into account when calculating data flow. - * Added flow sources and steps for JMS versions 1 and 2. - * Added flow sources and steps for RabbitMQ. - * Added flow steps for `java.io.DataInput` and `java.io.ObjectInput` implementations. +* Improved the data flow support for the Android class `SharedPreferences$Editor`. Specifically, the fluent logic of some of its methods is now taken into account when calculating data flow. + * Added flow sources and steps for JMS versions 1 and 2. + * Added flow sources and steps for RabbitMQ. + * Added flow steps for `java.io.DataInput` and `java.io.ObjectInput` implementations. * Added data-flow models for the Spring Framework component `spring-beans`. ### Bug Fixes diff --git a/java/ql/lib/change-notes/released/0.2.0.md b/java/ql/lib/change-notes/released/0.2.0.md index c3c44094be3..57202ae3f78 100644 --- a/java/ql/lib/change-notes/released/0.2.0.md +++ b/java/ql/lib/change-notes/released/0.2.0.md @@ -2,14 +2,14 @@ ### Breaking Changes -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. ### Minor Analysis Improvements -Improved the data flow support for the Android class `SharedPreferences$Editor`. Specifically, the fluent logic of some of its methods is now taken into account when calculating data flow. - * Added flow sources and steps for JMS versions 1 and 2. - * Added flow sources and steps for RabbitMQ. - * Added flow steps for `java.io.DataInput` and `java.io.ObjectInput` implementations. +* Improved the data flow support for the Android class `SharedPreferences$Editor`. Specifically, the fluent logic of some of its methods is now taken into account when calculating data flow. + * Added flow sources and steps for JMS versions 1 and 2. + * Added flow sources and steps for RabbitMQ. + * Added flow steps for `java.io.DataInput` and `java.io.ObjectInput` implementations. * Added data-flow models for the Spring Framework component `spring-beans`. ### Bug Fixes diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 60da4508197..dc7d34948f1 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -2,9 +2,7 @@ ### Minor Analysis Improvements -* Query `java/insecure-cookie` no longer produces a false positive if -`cookie.setSecure(...)` is called passing a constant that always equals -`true`. +* Query `java/insecure-cookie` no longer produces a false positive if `cookie.setSecure(...)` is called passing a constant that always equals `true`. ## 0.1.0 @@ -28,7 +26,7 @@ this respect. ### Minor Analysis Improvements - * Updated "Local information disclosure in a temporary directory" (`java/local-temp-file-or-directory-information-disclosure`) to remove false-positives when OS is properly used as logical guard. +* Updated "Local information disclosure in a temporary directory" (`java/local-temp-file-or-directory-information-disclosure`) to remove false-positives when OS is properly used as logical guard. ## 0.0.11 diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 13c8dc1b121..ae6636f6f6e 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -2,7 +2,7 @@ ### Breaking Changes -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. ## 0.1.0 diff --git a/python/ql/lib/change-notes/released/0.2.0.md b/python/ql/lib/change-notes/released/0.2.0.md index e85cbeb0ddb..7ccf56ddd47 100644 --- a/python/ql/lib/change-notes/released/0.2.0.md +++ b/python/ql/lib/change-notes/released/0.2.0.md @@ -2,4 +2,4 @@ ### Breaking Changes -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index 1c971469283..bc171ff917b 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -2,7 +2,7 @@ ### Breaking Changes -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. ## 0.1.0 diff --git a/ruby/ql/lib/change-notes/released/0.2.0.md b/ruby/ql/lib/change-notes/released/0.2.0.md index e85cbeb0ddb..7ccf56ddd47 100644 --- a/ruby/ql/lib/change-notes/released/0.2.0.md +++ b/ruby/ql/lib/change-notes/released/0.2.0.md @@ -2,4 +2,4 @@ ### Breaking Changes -The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. +* The signature of `allowImplicitRead` on `DataFlow::Configuration` and `TaintTracking::Configuration` has changed from `allowImplicitRead(DataFlow::Node node, DataFlow::Content c)` to `allowImplicitRead(DataFlow::Node node, DataFlow::ContentSet c)`. From 2e6addab0307fb1c9bf5f977ac35c047f24c87ac Mon Sep 17 00:00:00 2001 From: Jeroen Ketema <93738568+jketema@users.noreply.github.com> Date: Thu, 28 Apr 2022 14:22:41 +0200 Subject: [PATCH 0190/1618] Fix one more change note --- java/ql/src/change-notes/released/0.1.1.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/java/ql/src/change-notes/released/0.1.1.md b/java/ql/src/change-notes/released/0.1.1.md index 5bbf16fc815..7bc7742c49a 100644 --- a/java/ql/src/change-notes/released/0.1.1.md +++ b/java/ql/src/change-notes/released/0.1.1.md @@ -2,6 +2,4 @@ ### Minor Analysis Improvements -* Query `java/insecure-cookie` no longer produces a false positive if -`cookie.setSecure(...)` is called passing a constant that always equals -`true`. +* Query `java/insecure-cookie` no longer produces a false positive if `cookie.setSecure(...)` is called passing a constant that always equals `true`. From f1fa7cba5aaba678cbf12a4c0f226eafba0b821c Mon Sep 17 00:00:00 2001 From: Jonas Jensen Date: Thu, 28 Apr 2022 14:40:57 +0200 Subject: [PATCH 0191/1618] C++: Remove import order workarounds These workarounds are no longer needed from CodeQL CLI 2.9.0. --- cpp/ql/lib/semmle/code/cpp/security/Overflow.qll | 2 -- .../Memory Management/ReturnStackAllocatedMemory.ql | 3 --- cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql | 3 --- 3 files changed, 8 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/security/Overflow.qll b/cpp/ql/lib/semmle/code/cpp/security/Overflow.qll index 32428cd30a7..4d6d22c086a 100644 --- a/cpp/ql/lib/semmle/code/cpp/security/Overflow.qll +++ b/cpp/ql/lib/semmle/code/cpp/security/Overflow.qll @@ -5,8 +5,6 @@ import cpp import semmle.code.cpp.controlflow.Dominance -// `GlobalValueNumbering` is only imported to prevent IR re-evaluation. -private import semmle.code.cpp.valuenumbering.GlobalValueNumbering import semmle.code.cpp.rangeanalysis.SimpleRangeAnalysis import semmle.code.cpp.rangeanalysis.RangeAnalysisUtils import semmle.code.cpp.controlflow.Guards diff --git a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql index dc5a0848296..c72e25f61df 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/ReturnStackAllocatedMemory.ql @@ -14,9 +14,6 @@ */ import cpp -// We don't actually use the global value numbering library in this query, but without it we end up -// recomputing the IR. -private import semmle.code.cpp.valuenumbering.GlobalValueNumbering import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.dataflow.MustFlow import PathGraph diff --git a/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql b/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql index 32a97a4c8d3..7f1a007ac0c 100644 --- a/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql +++ b/cpp/ql/src/Likely Bugs/OO/UnsafeUseOfThis.ql @@ -15,9 +15,6 @@ */ import cpp -// We don't actually use the global value numbering library in this query, but without it we end up -// recomputing the IR. -import semmle.code.cpp.valuenumbering.GlobalValueNumbering import semmle.code.cpp.ir.IR import semmle.code.cpp.ir.dataflow.MustFlow import PathGraph From 4e2344c4885dd271d7380d9e6a7a541053a3ae7f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 28 Apr 2022 09:23:00 +0100 Subject: [PATCH 0192/1618] C++: Add test cases for SAXParser. --- .../Security/CWE/CWE-611/tests.cpp | 4 +- .../query-tests/Security/CWE/CWE-611/tests.h | 4 +- .../Security/CWE/CWE-611/tests2.cpp | 46 +++++++++++++++++++ 3 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp index 237951e7fea..76ceb7b7556 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp @@ -4,8 +4,8 @@ // --- -class SecurityManager; -class InputSource; + + class AbstractDOMParser { public: diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h index ba9fa168d2a..aa4c539bbd9 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h @@ -1,2 +1,4 @@ -// library functions for rule CWE-611 +// library/common functions for rule CWE-611 +class SecurityManager; +class InputSource; diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp new file mode 100644 index 00000000000..8ec67c70a75 --- /dev/null +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp @@ -0,0 +1,46 @@ +// test cases for rule CWE-611 + +#include "tests.h" + +// --- + +class SAXParser +{ +public: + SAXParser(); + + void setDisableDefaultEntityResolution(bool); // default is false + void setSecurityManager(SecurityManager *const manager); + void parse(const InputSource &data); +}; + +// --- + +void test2_1(InputSource &data) { + SAXParser *p = new SAXParser(); + + p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] +} + +void test2_2(InputSource &data) { + SAXParser *p = new SAXParser(); + + p->setDisableDefaultEntityResolution(true); + p->parse(data); // GOOD +} + +void test2_3(InputSource &data) { + SAXParser *p = new SAXParser(); + bool v = false; + + p->setDisableDefaultEntityResolution(v); + p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] +} + +void test2_4(InputSource &data) { + SAXParser *p = new SAXParser(); + bool v = true; + + p->setDisableDefaultEntityResolution(v); + p->parse(data); // GOOD +} From 2ccd5a55314bcf5fa042f3de5ca4e5e8e99e275e Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 28 Apr 2022 16:08:41 +0100 Subject: [PATCH 0193/1618] C++: Add support for SAXParser in the query. --- cpp/ql/src/Security/CWE/CWE-611/XXE.ql | 75 ++++++++++++------- .../Security/CWE/CWE-611/XXE.expected | 12 +++ .../Security/CWE/CWE-611/tests2.cpp | 6 +- 3 files changed, 65 insertions(+), 28 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql index 78cd914872d..20d979fd8c8 100644 --- a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql @@ -57,42 +57,51 @@ class XercesDOMParserClass extends Class { } /** - * Gets a valid flow state for `XercesDOMParser` flow. + * The `SAXParser` class. + */ +class SAXParser extends Class { + SAXParser() { this.hasName("SAXParser") } +} + +/** + * Gets a valid flow state for `AbstractDOMParser` or `SAXParser` flow. * - * These flow states take the form `XercesDOM-A-B`, where: + * These flow states take the form `Xerces-A-B`, where: * - A is 1 if `setDisableDefaultEntityResolution` is `true`, 0 otherwise. * - B is 1 if `setCreateEntityReferenceNodes` is `true`, 0 otherwise. */ -predicate encodeXercesDOMFlowState( +predicate encodeXercesFlowState( string flowstate, int disabledDefaultEntityResolution, int createEntityReferenceNodes ) { - flowstate = "XercesDOM-0-0" and + flowstate = "Xerces-0-0" and disabledDefaultEntityResolution = 0 and createEntityReferenceNodes = 0 or - flowstate = "XercesDOM-0-1" and + flowstate = "Xerces-0-1" and disabledDefaultEntityResolution = 0 and createEntityReferenceNodes = 1 or - flowstate = "XercesDOM-1-0" and + flowstate = "Xerces-1-0" and disabledDefaultEntityResolution = 1 and createEntityReferenceNodes = 0 or - flowstate = "XercesDOM-1-1" and + flowstate = "Xerces-1-1" and disabledDefaultEntityResolution = 1 and createEntityReferenceNodes = 1 } /** - * A flow state representing the configuration of a `XercesDOMParser` object. + * A flow state representing the configuration of a `AbstractDOMParser` or + * `SAXParser` object. */ -class XercesDOMParserFlowState extends XXEFlowState { - XercesDOMParserFlowState() { encodeXercesDOMFlowState(this, _, _) } +class XercesFlowState extends XXEFlowState { + XercesFlowState() { encodeXercesFlowState(this, _, _) } } /** * A flow state transformer for a call to - * `AbstractDOMParser.setDisableDefaultEntityResolution`. Transforms the flow + * `AbstractDOMParser.setDisableDefaultEntityResolution` or + * `SAXParser.setDisableDefaultEntityResolution`. Transforms the flow * state through the qualifier according to the setting in the parameter. */ class DisableDefaultEntityResolutionTranformer extends XXEFlowStateTranformer { @@ -101,7 +110,10 @@ class DisableDefaultEntityResolutionTranformer extends XXEFlowStateTranformer { DisableDefaultEntityResolutionTranformer() { exists(Call call, Function f | call.getTarget() = f and - f.getDeclaringType() instanceof AbstractDOMParserClass and + ( + f.getDeclaringType() instanceof AbstractDOMParserClass or + f.getDeclaringType() instanceof SAXParser + ) and f.hasName("setDisableDefaultEntityResolution") and this = call.getQualifier() and newValue = call.getArgument(0) @@ -110,13 +122,13 @@ class DisableDefaultEntityResolutionTranformer extends XXEFlowStateTranformer { final override XXEFlowState transform(XXEFlowState flowstate) { exists(int createEntityReferenceNodes | - encodeXercesDOMFlowState(flowstate, _, createEntityReferenceNodes) and + encodeXercesFlowState(flowstate, _, createEntityReferenceNodes) and ( newValue.getValue().toInt() = 1 and // true - encodeXercesDOMFlowState(result, 1, createEntityReferenceNodes) + encodeXercesFlowState(result, 1, createEntityReferenceNodes) or not newValue.getValue().toInt() = 1 and // false or unknown - encodeXercesDOMFlowState(result, 0, createEntityReferenceNodes) + encodeXercesFlowState(result, 0, createEntityReferenceNodes) ) ) } @@ -142,27 +154,31 @@ class CreateEntityReferenceNodesTranformer extends XXEFlowStateTranformer { final override XXEFlowState transform(XXEFlowState flowstate) { exists(int disabledDefaultEntityResolution | - encodeXercesDOMFlowState(flowstate, disabledDefaultEntityResolution, _) and + encodeXercesFlowState(flowstate, disabledDefaultEntityResolution, _) and ( newValue.getValue().toInt() = 1 and // true - encodeXercesDOMFlowState(result, disabledDefaultEntityResolution, 1) + encodeXercesFlowState(result, disabledDefaultEntityResolution, 1) or not newValue.getValue().toInt() = 1 and // false or unknown - encodeXercesDOMFlowState(result, disabledDefaultEntityResolution, 0) + encodeXercesFlowState(result, disabledDefaultEntityResolution, 0) ) ) } } /** - * The `AbstractDOMParser.parse` method. + * The `AbstractDOMParser.parse` or `SAXParser.parse` method. */ class ParseFunction extends Function { - ParseFunction() { this.getClassAndName("parse") instanceof AbstractDOMParserClass } + ParseFunction() { + this.getClassAndName("parse") instanceof AbstractDOMParserClass or + this.getClassAndName("parse") instanceof SAXParser + } } /** - * The `createLSParser` function that returns a newly created `LSParser` object. + * The `createLSParser` function that returns a newly created `DOMLSParser` + * object. */ class CreateLSParser extends Function { CreateLSParser() { @@ -184,14 +200,23 @@ class XXEConfiguration extends DataFlow::Configuration { call.getStaticCallTarget() = any(XercesDOMParserClass c).getAConstructor() and node.asInstruction().(WriteSideEffectInstruction).getDestinationAddress() = call.getThisArgument() and - encodeXercesDOMFlowState(flowstate, 0, 1) // default configuration + encodeXercesFlowState(flowstate, 0, 1) // default configuration ) or // source is the result of a call to `createLSParser`. exists(Call call | call.getTarget() instanceof CreateLSParser and call = node.asExpr() and - encodeXercesDOMFlowState(flowstate, 0, 1) // default configuration + encodeXercesFlowState(flowstate, 0, 1) // default configuration + ) + or + // source is the write on `this` of a call to the `SAXParser` + // constructor. + exists(CallInstruction call | + node.asInstruction().(WriteSideEffectInstruction).getDestinationAddress() = + call.getThisArgument() and + call.getStaticCallTarget().(Constructor).getDeclaringType() instanceof SAXParser and + encodeXercesFlowState(flowstate, 0, 1) // default configuration ) } @@ -201,8 +226,8 @@ class XXEConfiguration extends DataFlow::Configuration { call.getTarget() instanceof ParseFunction and call.getQualifier() = node.asConvertedExpr() ) and - flowstate instanceof XercesDOMParserFlowState and - not encodeXercesDOMFlowState(flowstate, 1, 1) // safe configuration + flowstate instanceof XercesFlowState and + not encodeXercesFlowState(flowstate, 1, 1) // safe configuration } override predicate isAdditionalFlowStep( diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected index 7f05e6d41b8..f6360956a5f 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected @@ -1,4 +1,7 @@ edges +| tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | +| tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | +| tests2.cpp:41:17:41:31 | SAXParser output argument | tests2.cpp:45:2:45:2 | p | | tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p | | tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p | | tests.cpp:53:19:53:19 | VariableAddress [post update] | tests.cpp:55:2:55:2 | p | @@ -27,6 +30,12 @@ edges | tests.cpp:146:18:146:18 | q | tests.cpp:134:39:134:39 | p | | tests.cpp:150:19:150:32 | call to createLSParser | tests.cpp:152:2:152:2 | p | nodes +| tests2.cpp:20:17:20:31 | SAXParser output argument | semmle.label | SAXParser output argument | +| tests2.cpp:22:2:22:2 | p | semmle.label | p | +| tests2.cpp:33:17:33:31 | SAXParser output argument | semmle.label | SAXParser output argument | +| tests2.cpp:37:2:37:2 | p | semmle.label | p | +| tests2.cpp:41:17:41:31 | SAXParser output argument | semmle.label | SAXParser output argument | +| tests2.cpp:45:2:45:2 | p | semmle.label | p | | tests.cpp:33:23:33:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | | tests.cpp:35:2:35:2 | p | semmle.label | p | | tests.cpp:46:23:46:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | @@ -66,6 +75,9 @@ nodes | tests.cpp:152:2:152:2 | p | semmle.label | p | subpaths #select +| tests2.cpp:22:2:22:2 | p | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:20:17:20:31 | SAXParser output argument | XML parser | +| tests2.cpp:37:2:37:2 | p | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:33:17:33:31 | SAXParser output argument | XML parser | +| tests2.cpp:45:2:45:2 | p | tests2.cpp:41:17:41:31 | SAXParser output argument | tests2.cpp:45:2:45:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:41:17:41:31 | SAXParser output argument | XML parser | | tests.cpp:35:2:35:2 | p | tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:33:23:33:43 | XercesDOMParser output argument | XML parser | | tests.cpp:49:2:49:2 | p | tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:46:23:46:43 | XercesDOMParser output argument | XML parser | | tests.cpp:57:2:57:2 | p | tests.cpp:53:23:53:43 | XercesDOMParser output argument | tests.cpp:57:2:57:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:53:23:53:43 | XercesDOMParser output argument | XML parser | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp index 8ec67c70a75..d5a495b29aa 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp @@ -19,7 +19,7 @@ public: void test2_1(InputSource &data) { SAXParser *p = new SAXParser(); - p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] + p->parse(data); // BAD (parser not correctly configured) } void test2_2(InputSource &data) { @@ -34,7 +34,7 @@ void test2_3(InputSource &data) { bool v = false; p->setDisableDefaultEntityResolution(v); - p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] + p->parse(data); // BAD (parser not correctly configured) } void test2_4(InputSource &data) { @@ -42,5 +42,5 @@ void test2_4(InputSource &data) { bool v = true; p->setDisableDefaultEntityResolution(v); - p->parse(data); // GOOD + p->parse(data); // GOOD [FALSE POSITIVE] } From 79d1ffc1d9641440d250fdeca5c9395d8e0147f7 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 28 Apr 2022 17:49:41 +0100 Subject: [PATCH 0194/1618] C++: Change note. --- .../src/change-notes/2022-04-28-external-entity-expansion.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 cpp/ql/src/change-notes/2022-04-28-external-entity-expansion.md diff --git a/cpp/ql/src/change-notes/2022-04-28-external-entity-expansion.md b/cpp/ql/src/change-notes/2022-04-28-external-entity-expansion.md new file mode 100644 index 00000000000..911cbd7e54c --- /dev/null +++ b/cpp/ql/src/change-notes/2022-04-28-external-entity-expansion.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The "XML external entity expansion" (`cpp/external-entity-expansion`) query has been extended to support a broader selection of XML libraries and interfaces. From d6f0bbb81669dfa8db2ab084b722432bbd8f647b Mon Sep 17 00:00:00 2001 From: Chuan-kai Lin Date: Thu, 28 Apr 2022 11:53:36 -0700 Subject: [PATCH 0195/1618] Fix syntax errors in QL comments --- cpp/ql/lib/semmle/code/cpp/Function.qll | 4 ++-- .../Memory Management/SuspiciousCallToMemset.ql | 2 +- csharp/ql/lib/semmle/code/csharp/exprs/Call.qll | 4 ++-- csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql | 2 +- csharp/ql/src/Documentation/XmldocExtraParam.ql | 2 +- csharp/ql/src/Documentation/XmldocExtraTypeParam.ql | 2 +- csharp/ql/src/Documentation/XmldocMissingException.ql | 2 +- csharp/ql/src/Documentation/XmldocMissingParam.ql | 2 +- csharp/ql/src/Documentation/XmldocMissingReturn.ql | 2 +- csharp/ql/src/Documentation/XmldocMissingSummary.ql | 2 +- csharp/ql/src/Documentation/XmldocMissingTypeParam.ql | 2 +- java/ql/lib/semmle/code/java/frameworks/JaxWS.qll | 2 +- .../semmle/code/java/frameworks/spring/SpringEntry.qll | 2 +- .../Security/CWE/CWE-939/IncorrectURLVerification.ql | 2 +- javascript/ql/lib/semmle/javascript/DefUse.qll | 4 ++-- javascript/ql/lib/semmle/javascript/Externs.qll | 8 ++++---- .../UnsafeShellCommandConstructionCustomizations.qll | 2 +- 17 files changed, 23 insertions(+), 23 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/Function.qll b/cpp/ql/lib/semmle/code/cpp/Function.qll index 0f1de2b512c..bf69c33f6cb 100644 --- a/cpp/ql/lib/semmle/code/cpp/Function.qll +++ b/cpp/ql/lib/semmle/code/cpp/Function.qll @@ -38,8 +38,8 @@ class Function extends Declaration, ControlFlowNode, AccessHolder, @function { * int z = min(5, 7); * ``` * The full signature of the function called on the last line would be - * "min(int, int) -> int", and the full signature of the uninstantiated - * template on the first line would be "min(T, T) -> T". + * `min(int, int) -> int`, and the full signature of the uninstantiated + * template on the first line would be `min(T, T) -> T`. */ string getFullSignature() { exists(string name, string templateArgs, string args | diff --git a/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql b/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql index 8e41b414794..cb495f939fb 100644 --- a/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql +++ b/cpp/ql/src/Likely Bugs/Memory Management/SuspiciousCallToMemset.ql @@ -2,7 +2,7 @@ * @name Suspicious call to memset * @description Use of memset where the size argument is computed as the size of * some non-struct type. When initializing a buffer, you should specify - * its size as * to ensure + * its size as ` * ` to ensure * portability. * @kind problem * @id cpp/suspicious-call-to-memset diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll index dff1aafa0d2..9635df52333 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Call.qll @@ -175,8 +175,8 @@ class Call extends DotNet::Call, Expr, @call { * - Line 10: The static target is `Type.InvokeMember()`, whereas the run-time targets * are both `A.M()` and `B.M()`. * - * - Line 16: There is no static target (delegate call) but the delegate `i => { }` (line - * 20) is a run-time target. + * - Line 16: There is no static target (delegate call) but the delegate `i => { }` + * (line 20) is a run-time target. */ override Callable getARuntimeTarget() { exists(DispatchCall dc | dc.getCall() = this | result = dc.getADynamicTarget()) diff --git a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql index b3fea8d8419..9f9eff6f1f6 100644 --- a/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql +++ b/csharp/ql/src/API Abuse/IncorrectCompareToSignature.ql @@ -1,6 +1,6 @@ /** * @name Potentially incorrect CompareTo(...) signature - * @description The declaring type of a method with signature 'CompareTo(T)' does not implement 'IComparable'. + * @description The declaring type of a method with signature `CompareTo(T)` does not implement `IComparable`. * @kind problem * @problem.severity warning * @precision medium diff --git a/csharp/ql/src/Documentation/XmldocExtraParam.ql b/csharp/ql/src/Documentation/XmldocExtraParam.ql index be42720d439..a745edfb6d8 100644 --- a/csharp/ql/src/Documentation/XmldocExtraParam.ql +++ b/csharp/ql/src/Documentation/XmldocExtraParam.ql @@ -1,6 +1,6 @@ /** * @name Incorrect parameter name in documentation - * @description The parameter name given in a '' tag does not exist. Rename the parameter or + * @description The parameter name given in a `` tag does not exist. Rename the parameter or * change the name in the documentation to ensure that they are the same. * @kind problem * @problem.severity recommendation diff --git a/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql b/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql index 4763b3d958c..76c2039920d 100644 --- a/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql +++ b/csharp/ql/src/Documentation/XmldocExtraTypeParam.ql @@ -1,6 +1,6 @@ /** * @name Incorrect type parameter name in documentation - * @description The type parameter name given in a '' tag does not exist. Rename the parameter or + * @description The type parameter name given in a `` tag does not exist. Rename the parameter or * change the name in the documentation to ensure that they are the same. * @kind problem * @problem.severity recommendation diff --git a/csharp/ql/src/Documentation/XmldocMissingException.ql b/csharp/ql/src/Documentation/XmldocMissingException.ql index 87af9c299f5..a5c06c598c7 100644 --- a/csharp/ql/src/Documentation/XmldocMissingException.ql +++ b/csharp/ql/src/Documentation/XmldocMissingException.ql @@ -1,6 +1,6 @@ /** * @name Missing documentation for exception - * @description Exceptions thrown by the method should be documented using ' ' tags. + * @description Exceptions thrown by the method should be documented using ` ` tags. * Ensure that the correct type of the exception is given in the 'cref' attribute. * @kind problem * @problem.severity recommendation diff --git a/csharp/ql/src/Documentation/XmldocMissingParam.ql b/csharp/ql/src/Documentation/XmldocMissingParam.ql index 1926bee4eb6..adf9fcd5718 100644 --- a/csharp/ql/src/Documentation/XmldocMissingParam.ql +++ b/csharp/ql/src/Documentation/XmldocMissingParam.ql @@ -1,6 +1,6 @@ /** * @name Missing documentation for parameter - * @description All parameters should be documented using ' ' tags. + * @description All parameters should be documented using ` ` tags. * Ensure that the name attribute matches the name of the parameter. * @kind problem * @problem.severity recommendation diff --git a/csharp/ql/src/Documentation/XmldocMissingReturn.ql b/csharp/ql/src/Documentation/XmldocMissingReturn.ql index 112c6238d97..05c93227c3c 100644 --- a/csharp/ql/src/Documentation/XmldocMissingReturn.ql +++ b/csharp/ql/src/Documentation/XmldocMissingReturn.ql @@ -1,7 +1,7 @@ /** * @name Missing documentation for return value * @description The method returns a value, but the return value is not documented using - * a '' tag. + * a `` tag. * @kind problem * @problem.severity recommendation * @precision low diff --git a/csharp/ql/src/Documentation/XmldocMissingSummary.ql b/csharp/ql/src/Documentation/XmldocMissingSummary.ql index 74238b63ed4..312848b6bdf 100644 --- a/csharp/ql/src/Documentation/XmldocMissingSummary.ql +++ b/csharp/ql/src/Documentation/XmldocMissingSummary.ql @@ -1,6 +1,6 @@ /** * @name Missing a summary in documentation comment - * @description The documentation comment does not contain a '' tag. + * @description The documentation comment does not contain a `` tag. * @kind problem * @problem.severity recommendation * @precision high diff --git a/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql b/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql index d559783146c..cd1e0eeea3e 100644 --- a/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql +++ b/csharp/ql/src/Documentation/XmldocMissingTypeParam.ql @@ -1,6 +1,6 @@ /** * @name Missing documentation for type parameter - * @description All type parameters should be documented using ' ' tags. + * @description All type parameters should be documented using ` ` tags. * Ensure that the 'name' attribute matches the name of the type parameter. * @kind problem * @problem.severity recommendation diff --git a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll index 1bf13692ecf..6a652f9fd38 100644 --- a/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll +++ b/java/ql/lib/semmle/code/java/frameworks/JaxWS.qll @@ -390,7 +390,7 @@ private class HttpHeadersModel extends SummaryModelCsv { } /** - * Model MultivaluedMap, which extends Map> and provides a few extra helper methods. + * Model MultivaluedMap, which extends `Map>` and provides a few extra helper methods. */ private class MultivaluedMapModel extends SummaryModelCsv { override predicate row(string row) { diff --git a/java/ql/lib/semmle/code/java/frameworks/spring/SpringEntry.qll b/java/ql/lib/semmle/code/java/frameworks/spring/SpringEntry.qll index 8ec02002af5..e2ce38ea44e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/spring/SpringEntry.qll +++ b/java/ql/lib/semmle/code/java/frameworks/spring/SpringEntry.qll @@ -64,7 +64,7 @@ class SpringEntry extends SpringXmlElement { /** * Gets the bean pointed to by either the `value-ref` attribute, or a nested - * ` or `` element, whichever is present. + * `` or `` element, whichever is present. */ SpringBean getValueRefBean() { if this.hasValueRefString() diff --git a/java/ql/src/experimental/Security/CWE/CWE-939/IncorrectURLVerification.ql b/java/ql/src/experimental/Security/CWE/CWE-939/IncorrectURLVerification.ql index 19d034f1622..9d51316a854 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-939/IncorrectURLVerification.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-939/IncorrectURLVerification.ql @@ -15,7 +15,7 @@ import java /** * The Java class `android.R.string` specific to Android applications, which contains references to application specific resources defined in /res/values/strings.xml. - * For example, ...example.com... in the application com.example.android.web can be referred as R.string.host with the type com.example.android.web.R$string + * For example, `...example.com...` in the application com.example.android.web can be referred as R.string.host with the type com.example.android.web.R$string */ class AndroidRString extends RefType { AndroidRString() { this.hasQualifiedName(_, "R$string") } diff --git a/javascript/ql/lib/semmle/javascript/DefUse.qll b/javascript/ql/lib/semmle/javascript/DefUse.qll index a36c682d766..e603c5b9112 100644 --- a/javascript/ql/lib/semmle/javascript/DefUse.qll +++ b/javascript/ql/lib/semmle/javascript/DefUse.qll @@ -8,7 +8,7 @@ import javascript * This predicate covers four kinds of definitions: * * - * + * * * * @@ -56,7 +56,7 @@ private predicate defn(ControlFlowNode def, Expr lhs, AST::ValueNode rhs) { * where there is no explicit right hand side: * *
    Exampledeflhsrhs
    Exampledeflhsrhs
    x = yx = yxy
    var a = bvar a = bab
    function f { ... }fffunction f { ... }
    - * + * * * * diff --git a/javascript/ql/lib/semmle/javascript/Externs.qll b/javascript/ql/lib/semmle/javascript/Externs.qll index 157b4b3f4cf..9787de6f464 100644 --- a/javascript/ql/lib/semmle/javascript/Externs.qll +++ b/javascript/ql/lib/semmle/javascript/Externs.qll @@ -53,7 +53,7 @@ import javascript * * /** * * @param {!Object} obj - * * @return {!Array} + * * @return {!Array<string>} * */ * Object.keys = function(obj) {}; * @@ -109,7 +109,7 @@ class ExternalTypedef extends ExternalDecl, VariableDeclarator { * * /** * * @param {!Object} obj - * * @return {!Array} + * * @return {!Array<string>} * */ * Object.keys = function(obj) {}; * @@ -214,7 +214,7 @@ class ExternalGlobalVarDecl extends ExternalGlobalDecl, VariableDeclarator { *
      * /**
      *  * @param {!Object} obj
    - *  * @return {!Array}
    + *  * @return {!Array<string>}
      *  */
      * Object.keys = function(obj) {};
      *
    @@ -273,7 +273,7 @@ class ExternalMemberDecl extends ExternalVarDecl, ExprStmt {
      * 
      * /**
      *  * @param {!Object} obj
    - *  * @return {!Array}
    + *  * @return {!Array<string>}
      *  */
      * Object.keys = function(obj) {};
      *
    diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/UnsafeShellCommandConstructionCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/UnsafeShellCommandConstructionCustomizations.qll
    index f46570b7434..676d4a41f10 100644
    --- a/javascript/ql/lib/semmle/javascript/security/dataflow/UnsafeShellCommandConstructionCustomizations.qll
    +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/UnsafeShellCommandConstructionCustomizations.qll
    @@ -273,7 +273,7 @@ module UnsafeShellCommandConstruction {
       }
     
       /**
    -   * A guard of the form `typeof x === ""`, where  is  "number", or "boolean",
    +   * A guard of the form `typeof x === ""`, where `` is  "number", or "boolean",
        * which sanitizes `x` in its "then" branch.
        */
       class TypeOfSanitizer extends TaintTracking::SanitizerGuardNode, DataFlow::ValueNode {
    
    From 834f2e845df193e16d9e4ca134157684a61432a5 Mon Sep 17 00:00:00 2001
    From: Jorge <46056498+jorgectf@users.noreply.github.com>
    Date: Thu, 28 Apr 2022 21:55:15 +0200
    Subject: [PATCH 0196/1618] Delete `MyBatisAbstractSql` and inline
     `MyBatisAbstractSqlMethodsStep`
    
    ---
     .../semmle/code/java/frameworks/MyBatis.qll   | 100 +++++++++++-------
     1 file changed, 61 insertions(+), 39 deletions(-)
    
    diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    index e2fb5b3707f..691fa0d5382 100644
    --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    @@ -105,10 +105,6 @@ class TypeParam extends Interface {
       TypeParam() { this.hasQualifiedName("org.apache.ibatis.annotations", "Param") }
     }
     
    -private class MyBatisAbstractSql extends RefType {
    -  MyBatisAbstractSql() { this.hasQualifiedName("org.apache.ibatis.jdbc", "AbstractSQL") }
    -}
    -
     private class MyBatisProvider extends RefType {
       MyBatisProvider() {
         this.hasQualifiedName("org.apache.ibatis.annotations",
    @@ -129,7 +125,7 @@ class MyBatisInjectionSink extends DataFlow::Node {
           a.getType() instanceof MyBatisProvider and
           m.getDeclaringType() = a.getValue(["type", "value"]).(TypeLiteral).getTypeName().getType() and
           m.hasName(a.getValue("method").(StringLiteral).getValue()) and
    -      this.asExpr() = m.getBody().getAStmt().(ReturnStmt).getResult()
    +      this.asExpr() = m.getBody().getAStmt().(ReturnStmt).getEnclosingCallable()
         )
       }
     }
    @@ -157,41 +153,67 @@ private class MyBatisAbstractSqlToStringStep extends SummaryModelCsv {
       }
     }
     
    -private class MyBatisAbstractSqlMethod extends string {
    -  string taintedArgs;
    -  string signature;
    -
    -  MyBatisAbstractSqlMethod() {
    -    this in [
    -        "UPDATE", "SET", "INSERT_INTO", "SELECT", "OFFSET_ROWS", "LIMIT", "OFFSET",
    -        "FETCH_FIRST_ROWS_ONLY", "DELETE_FROM", "INNER_JOIN", "ORDER_BY", "WHERE", "HAVING",
    -        "OUTER_JOIN", "LEFT_OUTER_JOIN", "RIGHT_OUTER_JOIN", "GROUP_BY", "FROM", "SELECT_DISTINCT"
    -      ] and
    -    taintedArgs = "Argument[0]" and
    -    signature = "String"
    -    or
    -    this in [
    -        "SET", "INTO_COLUMNS", "INTO_VALUES", "SELECT_DISTINCT", "FROM", "JOIN", "INNER_JOIN",
    -        "LEFT_OUTER_JOIN", "RIGHT_OUTER_JOIN", "OUTER_JOIN", "WHERE", "GROUP_BY", "HAVING",
    -        "ORDER_BY"
    -      ] and
    -    taintedArgs = "Argument[0].ArrayElement" and
    -    signature = "String[]"
    -    or
    -    this = "VALUES" and taintedArgs = "Argument[0..1]" and signature = "String,String"
    -  }
    -
    -  string getTaintedArgs() { result = taintedArgs }
    -
    -  string getCsvSignature() { result = signature }
    -}
    -
     private class MyBatisAbstractSqlMethodsStep extends SummaryModelCsv {
       override predicate row(string row) {
    -    exists(MyBatisAbstractSqlMethod m |
    -      row =
    -        "org.apache.ibatis.jdbc;AbstractSQL;true;" + m + ";(" + m.getCsvSignature() + ");;" +
    -          m.getTaintedArgs() + ";Argument[-1];taint"
    -    )
    +    row =
    +      [
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;toString;;;Argument[-1];ReturnValue;taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;WHERE;(String[]);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;WHERE;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;WHERE;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;WHERE;(String);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;VALUES;(String,String);;Argument[0..1];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;UPDATE;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;SET;(String[]);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;SET;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;SET;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;SET;(String);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;SELECT_DISTINCT;(String[]);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;SELECT_DISTINCT;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;SELECT_DISTINCT;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;SELECT_DISTINCT;(String);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;SELECT;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;RIGHT_OUTER_JOIN;(String[]);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;RIGHT_OUTER_JOIN;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;RIGHT_OUTER_JOIN;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;RIGHT_OUTER_JOIN;(String);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;OUTER_JOIN;(String[]);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;OUTER_JOIN;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;OUTER_JOIN;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;OUTER_JOIN;(String);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;ORDER_BY;(String[]);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;ORDER_BY;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;ORDER_BY;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;ORDER_BY;(String);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;OFFSET_ROWS;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;OFFSET;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;LIMIT;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;LEFT_OUTER_JOIN;(String[]);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;LEFT_OUTER_JOIN;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;LEFT_OUTER_JOIN;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;LEFT_OUTER_JOIN;(String);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;JOIN;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;INTO_VALUES;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;INTO_COLUMNS;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;INSERT_INTO;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;INNER_JOIN;(String[]);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;INNER_JOIN;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;INNER_JOIN;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;INNER_JOIN;(String);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;HAVING;(String[]);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;HAVING;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;HAVING;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;HAVING;(String);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;GROUP_BY;(String[]);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;GROUP_BY;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;GROUP_BY;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;GROUP_BY;(String);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;FROM;(String[]);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;FROM;(String[]);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;FROM;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;FROM;(String);;Argument[0].ArrayElement;Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;FETCH_FIRST_ROWS_ONLY;(String);;Argument[0];Argument[-1];taint",
    +        "org.apache.ibatis.jdbc;AbstractSQL;true;DELETE_FROM;(String);;Argument[0];Argument[-1];taint"
    +      ]
       }
     }
    
    From 50e95b5aadc5a679dc85ca2c35bae019c6cfdee8 Mon Sep 17 00:00:00 2001
    From: Jorge <46056498+jorgectf@users.noreply.github.com>
    Date: Thu, 28 Apr 2022 21:56:20 +0200
    Subject: [PATCH 0197/1618] Apply suggestions from code review
    
    Co-authored-by: Anders Schack-Mulligen 
    ---
     java/ql/lib/semmle/code/java/frameworks/MyBatis.qll | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    index 691fa0d5382..b48508a0b3e 100644
    --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    @@ -134,8 +134,8 @@ private class MyBatisProviderStep extends TaintTracking::AdditionalValueStep {
       override predicate step(DataFlow::Node n1, DataFlow::Node n2) {
         exists(MethodAccess ma, Annotation a, Method providerMethod |
           exists(int i |
    -        ma.getArgument(i) = n1.asExpr() and
    -        providerMethod.getParameter(i) = n2.asParameter()
    +        ma.getArgument(pragma[only_bind_into](i)) = n1.asExpr() and
    +        providerMethod.getParameter(pragma[only_bind_into](i)) = n2.asParameter()
           )
         |
           a.getType() instanceof MyBatisProvider and
    
    From 548721a8cfe004d06a1482da7ede2162ab802083 Mon Sep 17 00:00:00 2001
    From: jorgectf 
    Date: Thu, 28 Apr 2022 23:36:51 +0200
    Subject: [PATCH 0198/1618] Fix `MyBatisInjectionSink`
    
    ---
     java/ql/lib/semmle/code/java/frameworks/MyBatis.qll | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    index 2e08ee9ca26..86384362a3b 100644
    --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    @@ -125,7 +125,7 @@ class MyBatisInjectionSink extends DataFlow::Node {
           a.getType() instanceof MyBatisProvider and
           m.getDeclaringType() = a.getValue(["type", "value"]).(TypeLiteral).getTypeName().getType() and
           m.hasName(a.getValue("method").(StringLiteral).getValue()) and
    -      this.asExpr() = m.getBody().getAStmt().(ReturnStmt).getEnclosingCallable()
    +      this.getEnclosingCallable() = m.getBody().getAStmt().(ReturnStmt).getEnclosingCallable()
         )
       }
     }
    
    From 0aa1251ffe47a396224db32e8d72a5d7beaf42ad Mon Sep 17 00:00:00 2001
    From: luchua-bc 
    Date: Fri, 29 Apr 2022 02:31:43 +0000
    Subject: [PATCH 0199/1618] Add more test cases
    
    ---
     .../Security/CWE/CWE-552/UnsafeUrlForward.qll |  6 +-
     .../semmle/code/java/frameworks/Jsf.qll       |  2 +-
     .../security/CWE-552/UnsafeResourceGet.java   | 64 ++++++++++++++++-
     .../security/CWE-552/UnsafeResourceGet2.java  | 58 +++++++++++++++
     .../CWE-552/UnsafeUrlForward.expected         | 70 +++++++++++--------
     .../query-tests/security/CWE-552/options      |  2 +-
     .../jboss-vfs-3.2/org/jboss/vfs/VFS.java      | 19 +++++
     .../org/jboss/vfs/VirtualFile.java            | 29 ++++++++
     .../resource/FileResourceManager.java         | 31 ++++++++
     .../server/handlers/resource/Resource.java    | 33 +++++++++
     10 files changed, 281 insertions(+), 33 deletions(-)
     create mode 100644 java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet2.java
     create mode 100644 java/ql/test/stubs/jboss-vfs-3.2/org/jboss/vfs/VFS.java
     create mode 100644 java/ql/test/stubs/jboss-vfs-3.2/org/jboss/vfs/VirtualFile.java
     create mode 100644 java/ql/test/stubs/undertow-io-2.2/io/undertow/server/handlers/resource/FileResourceManager.java
     create mode 100644 java/ql/test/stubs/undertow-io-2.2/io/undertow/server/handlers/resource/Resource.java
    
    diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll
    index 2ee7188f313..c741eabcaa5 100644
    --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll
    +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll
    @@ -160,7 +160,7 @@ private class ServletGetPathSource extends SourceModelCsv {
       }
     }
     
    -/** Taint model related to `java.nio.file.Path`. */
    +/** Taint model related to `java.nio.file.Path` and `io.undertow.server.handlers.resource.Resource`. */
     private class FilePathFlowStep extends SummaryModelCsv {
       override predicate row(string row) {
         row =
    @@ -168,7 +168,9 @@ private class FilePathFlowStep extends SummaryModelCsv {
             "java.nio.file;Paths;true;get;;;Argument[0..1];ReturnValue;taint",
             "java.nio.file;Path;true;resolve;;;Argument[-1..0];ReturnValue;taint",
             "java.nio.file;Path;true;normalize;;;Argument[-1];ReturnValue;taint",
    -        "java.nio.file;Path;true;toString;;;Argument[-1];ReturnValue;taint"
    +        "io.undertow.server.handlers.resource;Resource;true;getFile;;;Argument[-1];ReturnValue;taint",
    +        "io.undertow.server.handlers.resource;Resource;true;getFilePath;;;Argument[-1];ReturnValue;taint",
    +        "io.undertow.server.handlers.resource;Resource;true;getPath;;;Argument[-1];ReturnValue;taint"
           ]
       }
     }
    diff --git a/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll b/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll
    index 4701d6ca565..a013c341c67 100644
    --- a/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll
    +++ b/java/ql/src/experimental/semmle/code/java/frameworks/Jsf.qll
    @@ -2,7 +2,7 @@
      * Provides classes and predicates for working with the Java Server Faces (JSF).
      */
     
    -import semmle.code.java.Type
    +import java
     
     /**
      * The JSF class `ExternalContext` for processing HTTP requests.
    diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java
    index ae22a7e7d0f..64c23334f18 100644
    --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java
    +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet.java
    @@ -5,7 +5,9 @@ import java.io.IOException;
     import java.io.PrintWriter;
     import java.nio.file.Path;
     import java.nio.file.Paths;
    +import java.net.URI;
     import java.net.URL;
    +import java.net.URISyntaxException;
     
     import javax.servlet.http.HttpServlet;
     import javax.servlet.http.HttpServletRequest;
    @@ -15,6 +17,11 @@ import javax.servlet.ServletException;
     import javax.servlet.ServletConfig;
     import javax.servlet.ServletContext;
     
    +import io.undertow.server.handlers.resource.FileResourceManager;
    +import io.undertow.server.handlers.resource.Resource;
    +import org.jboss.vfs.VFS;
    +import org.jboss.vfs.VirtualFile;
    +
     public class UnsafeResourceGet extends HttpServlet {
     	private static final String BASE_PATH = "/pages";
     
    @@ -137,7 +144,7 @@ public class UnsafeResourceGet extends HttpServlet {
     		ServletOutputStream out = response.getOutputStream();
     
     		// A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file
    -		// Note the class is in two levels of subpackages and `Class.loadResource` starts from its own directory
    +		// Note the class is in two levels of subpackages and `Class.getResource` starts from its own directory
     		URL url = getClass().getResource(requestUrl);
     
     		InputStream in = url.openStream();
    @@ -205,4 +212,59 @@ public class UnsafeResourceGet extends HttpServlet {
     			}
     		}
     	}
    +
    +	// BAD: getResource constructed from `ClassLoader` without input validation
    +	protected void doPutBad(HttpServletRequest request, HttpServletResponse response)
    +			throws ServletException, IOException {
    +		String requestUrl = request.getParameter("requestURL");
    +		ServletOutputStream out = response.getOutputStream();
    +
    +		// A sample request /fake.jsp/../../../WEB-INF/web.xml can load the web.xml file
    +		// Note the class is in two levels of subpackages and `ClassLoader.getResource` starts from its own directory
    +		URL url = getClass().getClassLoader().getResource(requestUrl);
    +
    +		InputStream in = url.openStream();
    +		byte[] buf = new byte[4 * 1024];  // 4K buffer
    +		int bytesRead;
    +		while ((bytesRead = in.read(buf)) != -1) {
    +			out.write(buf, 0, bytesRead);
    +		}
    +	}
    +
    +	// BAD: getResource constructed using Undertow IO without input validation
    +	protected void doPutBad2(HttpServletRequest request, HttpServletResponse response)
    +			throws ServletException, IOException {
    +		String requestPath = request.getParameter("requestPath");
    +
    +		try {
    +			FileResourceManager rm = new FileResourceManager(VFS.getChild(new URI("/usr/share")).getPhysicalFile());
    +			Resource rs = rm.getResource(requestPath);
    +
    +			VirtualFile overlay = VFS.getChild(new URI("EAP_HOME/modules/"));
    +			// Do file operations
    +			overlay.getChild(rs.getPath());
    +		} catch (URISyntaxException ue) {
    +			throw new IOException("Cannot parse the URI");
    +		}
    +	}
    +
    +	// GOOD: getResource constructed using Undertow IO with input validation
    +	protected void doPutGood2(HttpServletRequest request, HttpServletResponse response)
    +			throws ServletException, IOException {
    +		String requestPath = request.getParameter("requestPath");
    +
    +		try {
    +			FileResourceManager rm = new FileResourceManager(VFS.getChild(new URI("/usr/share")).getPhysicalFile());
    +			Resource rs = rm.getResource(requestPath);
    +
    +			VirtualFile overlay = VFS.getChild(new URI("EAP_HOME/modules/"));
    +			String path = rs.getPath();
    +			if (path.startsWith("/trusted_path") && !path.contains("..")) {
    +				// Do file operations
    +				overlay.getChild(path);
    +			}
    +		} catch (URISyntaxException ue) {
    +			throw new IOException("Cannot parse the URI");
    +		}
    +	}
     }
    diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet2.java b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet2.java
    new file mode 100644
    index 00000000000..b3d041d024c
    --- /dev/null
    +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeResourceGet2.java
    @@ -0,0 +1,58 @@
    +package com.example;
    +
    +import javax.faces.context.FacesContext;
    +import java.io.BufferedReader;
    +import java.io.InputStream;
    +import java.io.InputStreamReader;
    +import java.io.IOException;
    +import java.net.URL;
    +import java.util.Map;
    +
    +/** Sample class of JSF managed bean */
    +public class UnsafeResourceGet2 {
    +	// BAD: getResourceAsStream constructed from `ExternalContext` without input validation
    +	public String parameterActionBad1() throws IOException {
    +		FacesContext fc = FacesContext.getCurrentInstance();
    +		Map params = fc.getExternalContext().getRequestParameterMap();
    +		String loadUrl = params.get("loadUrl");
    +
    +		InputStreamReader isr = new InputStreamReader(fc.getExternalContext().getResourceAsStream(loadUrl));
    +		BufferedReader br = new BufferedReader(isr);
    +		if(br.ready()) {
    +			//Do Stuff
    +			return "result";
    +		}
    +
    +		return "home";
    +	}
    +
    +	// BAD: getResource constructed from `ExternalContext` without input validation
    +	public String parameterActionBad2() throws IOException {
    +		FacesContext fc = FacesContext.getCurrentInstance();
    +		Map params = fc.getExternalContext().getRequestParameterMap();
    +		String loadUrl = params.get("loadUrl");
    +
    +		URL url = fc.getExternalContext().getResource(loadUrl);
    +
    +		InputStream in = url.openStream();
    +		//Do Stuff
    +		return "result";
    +	}
    +
    +	// GOOD: getResource constructed from `ExternalContext` with input validation
    +	public String parameterActionGood1() throws IOException {
    +		FacesContext fc = FacesContext.getCurrentInstance();
    +		Map params = fc.getExternalContext().getRequestParameterMap();
    +		String loadUrl = params.get("loadUrl");
    +
    +		if (loadUrl.equals("/public/crossdomain.xml")) {
    +			URL url = fc.getExternalContext().getResource(loadUrl);
    +
    +			InputStream in = url.openStream();
    +			//Do Stuff
    +			return "result";
    +		}
    +
    +		return "home";
    +	}
    +}
    diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected
    index 2f136732fdc..202ce9d0cd8 100644
    --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected
    +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected
    @@ -1,17 +1,21 @@
     edges
     | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path |
    -| UnsafeResourceGet.java:25:23:25:56 | getParameter(...) : String | UnsafeResourceGet.java:34:20:34:22 | url |
    -| UnsafeResourceGet.java:104:24:104:58 | getParameter(...) : String | UnsafeResourceGet.java:108:68:108:78 | requestPath |
    -| UnsafeResourceGet.java:136:23:136:56 | getParameter(...) : String | UnsafeResourceGet.java:143:20:143:22 | url |
    -| UnsafeResourceGet.java:174:24:174:58 | getParameter(...) : String | UnsafeResourceGet.java:182:68:182:78 | requestPath |
    +| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:17:20:17:25 | params : Map |
    +| UnsafeResourceGet2.java:17:20:17:25 | params : Map | UnsafeResourceGet2.java:17:20:17:40 | get(...) : Object |
    +| UnsafeResourceGet2.java:17:20:17:40 | get(...) : Object | UnsafeResourceGet2.java:19:93:19:99 | loadUrl |
    +| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:33:20:33:25 | params : Map |
    +| UnsafeResourceGet2.java:33:20:33:25 | params : Map | UnsafeResourceGet2.java:33:20:33:40 | get(...) : Object |
    +| UnsafeResourceGet2.java:33:20:33:40 | get(...) : Object | UnsafeResourceGet2.java:37:20:37:22 | url |
    +| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:41:20:41:22 | url |
    +| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath |
    +| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:150:20:150:22 | url |
    +| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath |
    +| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:226:20:226:22 | url |
    +| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:245:21:245:22 | rs : Resource |
    +| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | UnsafeResourceGet.java:245:21:245:32 | getPath(...) |
     | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL |
     | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL |
     | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path |
    -| UnsafeServletRequestDispatch.java:106:17:106:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:107:53:107:56 | path : String |
    -| UnsafeServletRequestDispatch.java:107:24:107:57 | resolve(...) : Path | UnsafeServletRequestDispatch.java:107:24:107:69 | normalize(...) : Path |
    -| UnsafeServletRequestDispatch.java:107:24:107:69 | normalize(...) : Path | UnsafeServletRequestDispatch.java:110:53:110:65 | requestedPath : Path |
    -| UnsafeServletRequestDispatch.java:107:53:107:56 | path : String | UnsafeServletRequestDispatch.java:107:24:107:57 | resolve(...) : Path |
    -| UnsafeServletRequestDispatch.java:110:53:110:65 | requestedPath : Path | UnsafeServletRequestDispatch.java:110:53:110:76 | toString(...) |
     | UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url |
     | UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url |
     | UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url |
    @@ -23,26 +27,33 @@ edges
     nodes
     | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | semmle.label | getServletPath(...) : String |
     | UnsafeRequestPath.java:23:33:23:36 | path | semmle.label | path |
    -| UnsafeResourceGet.java:25:23:25:56 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    -| UnsafeResourceGet.java:34:20:34:22 | url | semmle.label | url |
    -| UnsafeResourceGet.java:104:24:104:58 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    -| UnsafeResourceGet.java:108:68:108:78 | requestPath | semmle.label | requestPath |
    -| UnsafeResourceGet.java:136:23:136:56 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    -| UnsafeResourceGet.java:143:20:143:22 | url | semmle.label | url |
    -| UnsafeResourceGet.java:174:24:174:58 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    -| UnsafeResourceGet.java:182:68:182:78 | requestPath | semmle.label | requestPath |
    +| UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map |
    +| UnsafeResourceGet2.java:17:20:17:25 | params : Map | semmle.label | params : Map |
    +| UnsafeResourceGet2.java:17:20:17:40 | get(...) : Object | semmle.label | get(...) : Object |
    +| UnsafeResourceGet2.java:19:93:19:99 | loadUrl | semmle.label | loadUrl |
    +| UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | semmle.label | getRequestParameterMap(...) : Map |
    +| UnsafeResourceGet2.java:33:20:33:25 | params : Map | semmle.label | params : Map |
    +| UnsafeResourceGet2.java:33:20:33:40 | get(...) : Object | semmle.label | get(...) : Object |
    +| UnsafeResourceGet2.java:37:20:37:22 | url | semmle.label | url |
    +| UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    +| UnsafeResourceGet.java:41:20:41:22 | url | semmle.label | url |
    +| UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    +| UnsafeResourceGet.java:115:68:115:78 | requestPath | semmle.label | requestPath |
    +| UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    +| UnsafeResourceGet.java:150:20:150:22 | url | semmle.label | url |
    +| UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    +| UnsafeResourceGet.java:189:68:189:78 | requestPath | semmle.label | requestPath |
    +| UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    +| UnsafeResourceGet.java:226:20:226:22 | url | semmle.label | url |
    +| UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    +| UnsafeResourceGet.java:245:21:245:22 | rs : Resource | semmle.label | rs : Resource |
    +| UnsafeResourceGet.java:245:21:245:32 | getPath(...) | semmle.label | getPath(...) |
     | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | semmle.label | getParameter(...) : String |
     | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | semmle.label | returnURL |
     | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | semmle.label | getParameter(...) : String |
     | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | semmle.label | returnURL |
     | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
     | UnsafeServletRequestDispatch.java:76:53:76:56 | path | semmle.label | path |
    -| UnsafeServletRequestDispatch.java:106:17:106:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    -| UnsafeServletRequestDispatch.java:107:24:107:57 | resolve(...) : Path | semmle.label | resolve(...) : Path |
    -| UnsafeServletRequestDispatch.java:107:24:107:69 | normalize(...) : Path | semmle.label | normalize(...) : Path |
    -| UnsafeServletRequestDispatch.java:107:53:107:56 | path : String | semmle.label | path : String |
    -| UnsafeServletRequestDispatch.java:110:53:110:65 | requestedPath : Path | semmle.label | requestedPath : Path |
    -| UnsafeServletRequestDispatch.java:110:53:110:76 | toString(...) | semmle.label | toString(...) |
     | UnsafeUrlForward.java:13:27:13:36 | url : String | semmle.label | url : String |
     | UnsafeUrlForward.java:14:27:14:29 | url | semmle.label | url |
     | UnsafeUrlForward.java:18:27:18:36 | url : String | semmle.label | url : String |
    @@ -61,14 +72,17 @@ nodes
     subpaths
     #select
     | UnsafeRequestPath.java:23:33:23:36 | path | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) : String | UnsafeRequestPath.java:23:33:23:36 | path | Potentially untrusted URL forward due to $@. | UnsafeRequestPath.java:20:17:20:63 | getServletPath(...) | user-provided value |
    -| UnsafeResourceGet.java:34:20:34:22 | url | UnsafeResourceGet.java:25:23:25:56 | getParameter(...) : String | UnsafeResourceGet.java:34:20:34:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:25:23:25:56 | getParameter(...) | user-provided value |
    -| UnsafeResourceGet.java:108:68:108:78 | requestPath | UnsafeResourceGet.java:104:24:104:58 | getParameter(...) : String | UnsafeResourceGet.java:108:68:108:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:104:24:104:58 | getParameter(...) | user-provided value |
    -| UnsafeResourceGet.java:143:20:143:22 | url | UnsafeResourceGet.java:136:23:136:56 | getParameter(...) : String | UnsafeResourceGet.java:143:20:143:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:136:23:136:56 | getParameter(...) | user-provided value |
    -| UnsafeResourceGet.java:182:68:182:78 | requestPath | UnsafeResourceGet.java:174:24:174:58 | getParameter(...) : String | UnsafeResourceGet.java:182:68:182:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:174:24:174:58 | getParameter(...) | user-provided value |
    +| UnsafeResourceGet2.java:19:93:19:99 | loadUrl | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:19:93:19:99 | loadUrl | Potentially untrusted URL forward due to $@. | UnsafeResourceGet2.java:16:32:16:79 | getRequestParameterMap(...) | user-provided value |
    +| UnsafeResourceGet2.java:37:20:37:22 | url | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) : Map | UnsafeResourceGet2.java:37:20:37:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet2.java:32:32:32:79 | getRequestParameterMap(...) | user-provided value |
    +| UnsafeResourceGet.java:41:20:41:22 | url | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) : String | UnsafeResourceGet.java:41:20:41:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:32:23:32:56 | getParameter(...) | user-provided value |
    +| UnsafeResourceGet.java:115:68:115:78 | requestPath | UnsafeResourceGet.java:111:24:111:58 | getParameter(...) : String | UnsafeResourceGet.java:115:68:115:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:111:24:111:58 | getParameter(...) | user-provided value |
    +| UnsafeResourceGet.java:150:20:150:22 | url | UnsafeResourceGet.java:143:23:143:56 | getParameter(...) : String | UnsafeResourceGet.java:150:20:150:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:143:23:143:56 | getParameter(...) | user-provided value |
    +| UnsafeResourceGet.java:189:68:189:78 | requestPath | UnsafeResourceGet.java:181:24:181:58 | getParameter(...) : String | UnsafeResourceGet.java:189:68:189:78 | requestPath | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:181:24:181:58 | getParameter(...) | user-provided value |
    +| UnsafeResourceGet.java:226:20:226:22 | url | UnsafeResourceGet.java:219:23:219:56 | getParameter(...) : String | UnsafeResourceGet.java:226:20:226:22 | url | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:219:23:219:56 | getParameter(...) | user-provided value |
    +| UnsafeResourceGet.java:245:21:245:32 | getPath(...) | UnsafeResourceGet.java:237:24:237:58 | getParameter(...) : String | UnsafeResourceGet.java:245:21:245:32 | getPath(...) | Potentially untrusted URL forward due to $@. | UnsafeResourceGet.java:237:24:237:58 | getParameter(...) | user-provided value |
     | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) | user-provided value |
     | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) | user-provided value |
     | UnsafeServletRequestDispatch.java:76:53:76:56 | path | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) | user-provided value |
    -| UnsafeServletRequestDispatch.java:110:53:110:76 | toString(...) | UnsafeServletRequestDispatch.java:106:17:106:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:110:53:110:76 | toString(...) | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:106:17:106:44 | getParameter(...) | user-provided value |
     | UnsafeUrlForward.java:14:27:14:29 | url | UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:13:27:13:36 | url | user-provided value |
     | UnsafeUrlForward.java:20:28:20:30 | url | UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:18:27:18:36 | url | user-provided value |
     | UnsafeUrlForward.java:26:23:26:25 | url | UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:25:21:25:30 | url | user-provided value |
    diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/options b/java/ql/test/experimental/query-tests/security/CWE-552/options
    index ba166b547a0..095b86c3e9a 100644
    --- a/java/ql/test/experimental/query-tests/security/CWE-552/options
    +++ b/java/ql/test/experimental/query-tests/security/CWE-552/options
    @@ -1 +1 @@
    -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/springframework-5.3.8/
    \ No newline at end of file
    +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/servlet-api-2.4:${testdir}/../../../../stubs/springframework-5.3.8/:${testdir}/../../../../stubs/javax-faces-2.3/:${testdir}/../../../../stubs/undertow-io-2.2/:${testdir}/../../../../stubs/jboss-vfs-3.2/
    diff --git a/java/ql/test/stubs/jboss-vfs-3.2/org/jboss/vfs/VFS.java b/java/ql/test/stubs/jboss-vfs-3.2/org/jboss/vfs/VFS.java
    new file mode 100644
    index 00000000000..e3528239558
    --- /dev/null
    +++ b/java/ql/test/stubs/jboss-vfs-3.2/org/jboss/vfs/VFS.java
    @@ -0,0 +1,19 @@
    +package org.jboss.vfs;
    +
    +import java.net.URI;
    +import java.net.URISyntaxException;
    +import java.net.URL;
    +
    +public class VFS {
    +	public static VirtualFile getChild(URL url) throws URISyntaxException {
    +		return null;
    +	}
    +
    +	public static VirtualFile getChild(URI uri) {
    +		return null;
    +	}
    +
    +	public static VirtualFile getChild(String path) {
    +		return null;
    +	}
    +}
    diff --git a/java/ql/test/stubs/jboss-vfs-3.2/org/jboss/vfs/VirtualFile.java b/java/ql/test/stubs/jboss-vfs-3.2/org/jboss/vfs/VirtualFile.java
    new file mode 100644
    index 00000000000..ff6c17caff6
    --- /dev/null
    +++ b/java/ql/test/stubs/jboss-vfs-3.2/org/jboss/vfs/VirtualFile.java
    @@ -0,0 +1,29 @@
    +package org.jboss.vfs;
    +
    +import java.io.File;
    +import java.io.IOException;
    +
    +public class VirtualFile {
    +	VirtualFile(String name, VirtualFile parent) {
    +	}
    +
    +	public String getName() {
    +		return null;
    +	}
    +
    +	public String getPathName() {
    +		return null;
    +	}
    +
    +	String getPathName(boolean url) {
    +		return null;
    +	}
    +
    +	public File getPhysicalFile() throws IOException {
    +		return null;
    +	}
    +
    +	public VirtualFile getChild(String path) {
    +		return null;
    +	}
    +}
    diff --git a/java/ql/test/stubs/undertow-io-2.2/io/undertow/server/handlers/resource/FileResourceManager.java b/java/ql/test/stubs/undertow-io-2.2/io/undertow/server/handlers/resource/FileResourceManager.java
    new file mode 100644
    index 00000000000..815222f2f9f
    --- /dev/null
    +++ b/java/ql/test/stubs/undertow-io-2.2/io/undertow/server/handlers/resource/FileResourceManager.java
    @@ -0,0 +1,31 @@
    +package io.undertow.server.handlers.resource;
    +
    +import java.io.File;
    +
    +public class FileResourceManager {
    +	public FileResourceManager(final File base) {
    +	}
    +
    +	public FileResourceManager(final File base, long transferMinSize) {
    +	}
    +
    +	public FileResourceManager(final File base, long transferMinSize, boolean caseSensitive) {
    +	}
    +
    +	public FileResourceManager(final File base, long transferMinSize, boolean followLinks, final String... safePaths) {
    +	}
    +
    +	protected FileResourceManager(long transferMinSize, boolean caseSensitive, boolean followLinks, final String... safePaths) {
    +	}
    +
    +	public FileResourceManager(final File base, long transferMinSize, boolean caseSensitive, boolean followLinks, final String... safePaths) {
    +	}
    +
    +	public File getBase() {
    +		return null;
    +	}
    +
    +	public Resource getResource(final String p) {
    +		return null;
    +	}
    +}
    diff --git a/java/ql/test/stubs/undertow-io-2.2/io/undertow/server/handlers/resource/Resource.java b/java/ql/test/stubs/undertow-io-2.2/io/undertow/server/handlers/resource/Resource.java
    new file mode 100644
    index 00000000000..579e08107c6
    --- /dev/null
    +++ b/java/ql/test/stubs/undertow-io-2.2/io/undertow/server/handlers/resource/Resource.java
    @@ -0,0 +1,33 @@
    +package io.undertow.server.handlers.resource;
    +
    +import java.io.File;
    +import java.net.URL;
    +import java.nio.file.Path;
    +import java.util.Date;
    +import java.util.List;
    +
    +public interface Resource {
    +	String getPath();
    +
    +	Date getLastModified();
    +
    +	String getLastModifiedString();
    +
    +	String getName();
    +
    +	boolean isDirectory();
    +
    +	List list();
    +
    +	Long getContentLength();
    +
    +	File getFile();
    +
    +	Path getFilePath();
    +
    +	File getResourceManagerRoot();
    +
    +	Path getResourceManagerRootPath();
    +
    +	URL getUrl();
    +}
    
    From 33d499c12db1c7b2c19eff664beb72677c048d51 Mon Sep 17 00:00:00 2001
    From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
    Date: Fri, 29 Apr 2022 08:50:11 +0100
    Subject: [PATCH 0200/1618] C++: Address review comments.
    
    ---
     cpp/ql/src/Security/CWE/CWE-611/XXE.ql | 10 +++++-----
     1 file changed, 5 insertions(+), 5 deletions(-)
    
    diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
    index 20d979fd8c8..be626795db4 100644
    --- a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
    +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
    @@ -59,8 +59,8 @@ class XercesDOMParserClass extends Class {
     /**
      * The `SAXParser` class.
      */
    -class SAXParser extends Class {
    -  SAXParser() { this.hasName("SAXParser") }
    +class SAXParserClass extends Class {
    +  SAXParserClass() { this.hasName("SAXParser") }
     }
     
     /**
    @@ -112,7 +112,7 @@ class DisableDefaultEntityResolutionTranformer extends XXEFlowStateTranformer {
           call.getTarget() = f and
           (
             f.getDeclaringType() instanceof AbstractDOMParserClass or
    -        f.getDeclaringType() instanceof SAXParser
    +        f.getDeclaringType() instanceof SAXParserClass
           ) and
           f.hasName("setDisableDefaultEntityResolution") and
           this = call.getQualifier() and
    @@ -172,7 +172,7 @@ class CreateEntityReferenceNodesTranformer extends XXEFlowStateTranformer {
     class ParseFunction extends Function {
       ParseFunction() {
         this.getClassAndName("parse") instanceof AbstractDOMParserClass or
    -    this.getClassAndName("parse") instanceof SAXParser
    +    this.getClassAndName("parse") instanceof SAXParserClass
       }
     }
     
    @@ -213,9 +213,9 @@ class XXEConfiguration extends DataFlow::Configuration {
         // source is the write on `this` of a call to the `SAXParser`
         // constructor.
         exists(CallInstruction call |
    +      call.getStaticCallTarget() = any(SAXParserClass c).getAConstructor() and
           node.asInstruction().(WriteSideEffectInstruction).getDestinationAddress() =
             call.getThisArgument() and
    -      call.getStaticCallTarget().(Constructor).getDeclaringType() instanceof SAXParser and
           encodeXercesFlowState(flowstate, 0, 1) // default configuration
         )
       }
    
    From 215453e4db951b8d6e858cac8e5494d5ac1756ed Mon Sep 17 00:00:00 2001
    From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
    Date: Fri, 29 Apr 2022 09:07:25 +0100
    Subject: [PATCH 0201/1618] Update cpp/ql/src/Security/CWE/CWE-611/XXE.ql
    
    Co-authored-by: Jeroen Ketema <93738568+jketema@users.noreply.github.com>
    ---
     cpp/ql/src/Security/CWE/CWE-611/XXE.ql | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
    index be626795db4..76247cf7c49 100644
    --- a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
    +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
    @@ -91,7 +91,7 @@ predicate encodeXercesFlowState(
     }
     
     /**
    - * A flow state representing the configuration of a `AbstractDOMParser` or
    + * A flow state representing the configuration of an `AbstractDOMParser` or
      * `SAXParser` object.
      */
     class XercesFlowState extends XXEFlowState {
    
    From 7fb1069d69b0cff278250c7d05de52f6c13f2e2a Mon Sep 17 00:00:00 2001
    From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
    Date: Fri, 29 Apr 2022 09:54:47 +0100
    Subject: [PATCH 0202/1618] C++: Use GVN on the values passed into set*
     functions.
    
    ---
     cpp/ql/src/Security/CWE/CWE-611/XXE.ql                   | 9 +++++----
     .../test/query-tests/Security/CWE/CWE-611/XXE.expected   | 4 ----
     cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp  | 2 +-
     3 files changed, 6 insertions(+), 9 deletions(-)
    
    diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
    index 76247cf7c49..805f3a61277 100644
    --- a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
    +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql
    @@ -16,6 +16,7 @@ import cpp
     import semmle.code.cpp.ir.dataflow.DataFlow
     import DataFlow::PathGraph
     import semmle.code.cpp.ir.IR
    +import semmle.code.cpp.valuenumbering.GlobalValueNumbering
     
     /**
      * A flow state representing a possible configuration of an XML object.
    @@ -124,10 +125,10 @@ class DisableDefaultEntityResolutionTranformer extends XXEFlowStateTranformer {
         exists(int createEntityReferenceNodes |
           encodeXercesFlowState(flowstate, _, createEntityReferenceNodes) and
           (
    -        newValue.getValue().toInt() = 1 and // true
    +        globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // true
             encodeXercesFlowState(result, 1, createEntityReferenceNodes)
             or
    -        not newValue.getValue().toInt() = 1 and // false or unknown
    +        not globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // false or unknown
             encodeXercesFlowState(result, 0, createEntityReferenceNodes)
           )
         )
    @@ -156,10 +157,10 @@ class CreateEntityReferenceNodesTranformer extends XXEFlowStateTranformer {
         exists(int disabledDefaultEntityResolution |
           encodeXercesFlowState(flowstate, disabledDefaultEntityResolution, _) and
           (
    -        newValue.getValue().toInt() = 1 and // true
    +        globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // true
             encodeXercesFlowState(result, disabledDefaultEntityResolution, 1)
             or
    -        not newValue.getValue().toInt() = 1 and // false or unknown
    +        not globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // false or unknown
             encodeXercesFlowState(result, disabledDefaultEntityResolution, 0)
           )
         )
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    index f6360956a5f..25f1ad8e1ab 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    @@ -1,7 +1,6 @@
     edges
     | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p |
     | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p |
    -| tests2.cpp:41:17:41:31 | SAXParser output argument | tests2.cpp:45:2:45:2 | p |
     | tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p |
     | tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p |
     | tests.cpp:53:19:53:19 | VariableAddress [post update] | tests.cpp:55:2:55:2 | p |
    @@ -34,8 +33,6 @@ nodes
     | tests2.cpp:22:2:22:2 | p | semmle.label | p |
     | tests2.cpp:33:17:33:31 | SAXParser output argument | semmle.label | SAXParser output argument |
     | tests2.cpp:37:2:37:2 | p | semmle.label | p |
    -| tests2.cpp:41:17:41:31 | SAXParser output argument | semmle.label | SAXParser output argument |
    -| tests2.cpp:45:2:45:2 | p | semmle.label | p |
     | tests.cpp:33:23:33:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument |
     | tests.cpp:35:2:35:2 | p | semmle.label | p |
     | tests.cpp:46:23:46:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument |
    @@ -77,7 +74,6 @@ subpaths
     #select
     | tests2.cpp:22:2:22:2 | p | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:20:17:20:31 | SAXParser output argument | XML parser |
     | tests2.cpp:37:2:37:2 | p | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:33:17:33:31 | SAXParser output argument | XML parser |
    -| tests2.cpp:45:2:45:2 | p | tests2.cpp:41:17:41:31 | SAXParser output argument | tests2.cpp:45:2:45:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:41:17:41:31 | SAXParser output argument | XML parser |
     | tests.cpp:35:2:35:2 | p | tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:33:23:33:43 | XercesDOMParser output argument | XML parser |
     | tests.cpp:49:2:49:2 | p | tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:46:23:46:43 | XercesDOMParser output argument | XML parser |
     | tests.cpp:57:2:57:2 | p | tests.cpp:53:23:53:43 | XercesDOMParser output argument | tests.cpp:57:2:57:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:53:23:53:43 | XercesDOMParser output argument | XML parser |
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp
    index d5a495b29aa..758cb57b26e 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp
    @@ -42,5 +42,5 @@ void test2_4(InputSource &data) {
     	bool v = true;
     
     	p->setDisableDefaultEntityResolution(v);
    -	p->parse(data); // GOOD [FALSE POSITIVE]
    +	p->parse(data); // GOOD
     }
    
    From dfe21409021c9ad6b7cab8f6a959df7ea140b1a6 Mon Sep 17 00:00:00 2001
    From: Erik Krogh Kristensen 
    Date: Fri, 29 Apr 2022 11:22:12 +0200
    Subject: [PATCH 0203/1618] slight simplification
    
    ---
     ql/ql/src/queries/performance/UnusedField.ql | 3 +--
     1 file changed, 1 insertion(+), 2 deletions(-)
    
    diff --git a/ql/ql/src/queries/performance/UnusedField.ql b/ql/ql/src/queries/performance/UnusedField.ql
    index 5e58bb7f769..37b32f61a2a 100644
    --- a/ql/ql/src/queries/performance/UnusedField.ql
    +++ b/ql/ql/src/queries/performance/UnusedField.ql
    @@ -16,8 +16,7 @@ where
       implClz.getASuperType*() = clz and
       // The field is not accessed in the charpred (of any of the classes)
       not exists(FieldAccess access |
    -    access.getEnclosingPredicate() =
    -      [clz.getDeclaration().getCharPred(), implClz.getDeclaration().getCharPred()]
    +    access.getEnclosingPredicate() = [clz, implClz].getDeclaration().getCharPred()
       ) and
       // The implementation class is not abstract, and the field is not an override
       not implClz.getDeclaration().isAbstract() and
    
    From a1542322e279225a326313cb936e150f91fbe04a Mon Sep 17 00:00:00 2001
    From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
    Date: Thu, 28 Apr 2022 09:39:33 +0100
    Subject: [PATCH 0204/1618] C++: Add test cases for SAX2XMLReader.
    
    ---
     .../Security/CWE/CWE-611/tests3.cpp           | 65 +++++++++++++++++++
     1 file changed, 65 insertions(+)
     create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp
    
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp
    new file mode 100644
    index 00000000000..bcece961d56
    --- /dev/null
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp
    @@ -0,0 +1,65 @@
    +// test cases for rule CWE-611
    +
    +#include "tests.h"
    +
    +// ---
    +
    +typedef unsigned int XMLCh;
    +
    +class XMLUni
    +{
    +public:
    +	static const XMLCh fgXercesDisableDefaultEntityResolution[];
    +};
    +
    +class SAX2XMLReader
    +{
    +public:
    +	void setFeature(const XMLCh *feature, bool value);
    +	void parse(const InputSource &data);
    +};
    +
    +class XMLReaderFactory
    +{
    +public:
    +	static SAX2XMLReader *createXMLReader();
    +};
    +
    +// ---
    +
    +void test3_1(InputSource &data) {
    +	SAX2XMLReader *p = XMLReaderFactory::createXMLReader();
    +
    +	p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED]
    +}
    +
    +void test3_2(InputSource &data) {
    +	SAX2XMLReader *p = XMLReaderFactory::createXMLReader();
    +
    +	p->setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, true);
    +	p->parse(data); // GOOD
    +}
    +
    +SAX2XMLReader *p_3_3 = XMLReaderFactory::createXMLReader();
    +
    +void test3_3(InputSource &data) {
    +	p_3_3->parse(data); // BAD (parser not correctly configured) [NOT DETECTED]
    +}
    +
    +SAX2XMLReader *p_3_4 = XMLReaderFactory::createXMLReader();
    +
    +void test3_4(InputSource &data) {
    +	p_3_4->setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, true);
    +	p_3_4->parse(data); // GOOD
    +}
    +
    +SAX2XMLReader *p_3_5 = XMLReaderFactory::createXMLReader();
    +
    +void test3_5_init() {
    +	p_3_5->setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, true);
    +}
    +
    +void test3_5(InputSource &data) {
    +	test3_5_init();
    +	p_3_5->parse(data); // GOOD
    +}
    
    From b02519bf0bb9c6d79ed01387466673c559a84293 Mon Sep 17 00:00:00 2001
    From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
    Date: Thu, 28 Apr 2022 16:35:31 +0100
    Subject: [PATCH 0205/1618] C++: Make the createLSParser test a bit closer to
     real life.
    
    ---
     .../Security/CWE/CWE-611/XXE.expected         |  6 ++--
     .../Security/CWE/CWE-611/tests.cpp            | 30 ++++++++++++-------
     2 files changed, 22 insertions(+), 14 deletions(-)
    
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    index 25f1ad8e1ab..083fa5f673e 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    @@ -27,7 +27,7 @@ edges
     | tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:146:18:146:18 | q |
     | tests.cpp:144:18:144:18 | q | tests.cpp:130:39:130:39 | p |
     | tests.cpp:146:18:146:18 | q | tests.cpp:134:39:134:39 | p |
    -| tests.cpp:150:19:150:32 | call to createLSParser | tests.cpp:152:2:152:2 | p |
    +| tests.cpp:150:25:150:38 | call to createLSParser | tests.cpp:152:2:152:2 | p |
     nodes
     | tests2.cpp:20:17:20:31 | SAXParser output argument | semmle.label | SAXParser output argument |
     | tests2.cpp:22:2:22:2 | p | semmle.label | p |
    @@ -68,7 +68,7 @@ nodes
     | tests.cpp:140:23:140:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument |
     | tests.cpp:144:18:144:18 | q | semmle.label | q |
     | tests.cpp:146:18:146:18 | q | semmle.label | q |
    -| tests.cpp:150:19:150:32 | call to createLSParser | semmle.label | call to createLSParser |
    +| tests.cpp:150:25:150:38 | call to createLSParser | semmle.label | call to createLSParser |
     | tests.cpp:152:2:152:2 | p | semmle.label | p |
     subpaths
     #select
    @@ -85,4 +85,4 @@ subpaths
     | tests.cpp:122:3:122:3 | q | tests.cpp:118:24:118:44 | XercesDOMParser output argument | tests.cpp:122:3:122:3 | q | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:118:24:118:44 | XercesDOMParser output argument | XML parser |
     | tests.cpp:131:2:131:2 | p | tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:131:2:131:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:140:23:140:43 | XercesDOMParser output argument | XML parser |
     | tests.cpp:135:2:135:2 | p | tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:135:2:135:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:140:23:140:43 | XercesDOMParser output argument | XML parser |
    -| tests.cpp:152:2:152:2 | p | tests.cpp:150:19:150:32 | call to createLSParser | tests.cpp:152:2:152:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:150:19:150:32 | call to createLSParser | XML parser |
    +| tests.cpp:152:2:152:2 | p | tests.cpp:150:25:150:38 | call to createLSParser | tests.cpp:152:2:152:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:150:25:150:38 | call to createLSParser | XML parser |
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp
    index 76ceb7b7556..ec822b44a20 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp
    @@ -4,9 +4,6 @@
     
     // ---
     
    -
    -
    -
     class AbstractDOMParser {
     public:
     	AbstractDOMParser();
    @@ -25,7 +22,10 @@ public:
     class DOMLSParser : public AbstractDOMParser {
     };
     
    -DOMLSParser *createLSParser();
    +class DOMImplementationLS {
    +public:
    +	DOMLSParser *createLSParser();
    +};
     
     // ---
     
    @@ -146,25 +146,33 @@ void test10(InputSource &data) {
     	test10_doParseC(q, data);
     }
     
    -void test11(InputSource &data) {
    -	DOMLSParser *p = createLSParser();
    +void test11(DOMImplementationLS *impl, InputSource &data) {
    +	DOMLSParser *p = impl->createLSParser();
     
     	p->parse(data); // BAD (parser not correctly configured)
     }
     
    -void test12(InputSource &data) {
    -	DOMLSParser *p = createLSParser();
    +void test12(DOMImplementationLS *impl, InputSource &data) {
    +	DOMLSParser *p = impl->createLSParser();
     
     	p->setDisableDefaultEntityResolution(true);
     	p->parse(data); // GOOD
     }
     
    -DOMLSParser *g_p1 = createLSParser();
    -DOMLSParser *g_p2 = createLSParser();
    +DOMImplementationLS *g_impl;
    +DOMLSParser *g_p1, *g_p2;
     InputSource *g_data;
     
    -void test13() {
    +void test13_init() {
    +	g_p1 = g_impl->createLSParser();
     	g_p1->setDisableDefaultEntityResolution(true);
    +
    +	g_p2 = g_impl->createLSParser();
    +}
    +
    +void test13() {
    +	test13_init();
    +
     	g_p1->parse(*g_data); // GOOD
     	g_p2->parse(*g_data); // BAD (parser not correctly configured) [NOT DETECTED]
     }
    
    From 397efd1648e66342b3accacddbdc1448893ee3b1 Mon Sep 17 00:00:00 2001
    From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
    Date: Thu, 28 Apr 2022 16:56:00 +0100
    Subject: [PATCH 0206/1618] C++: Split off the createLSParser tests into their
     own file.
    
    ---
     .../Security/CWE/CWE-611/XXE.expected         |  8 +--
     .../Security/CWE/CWE-611/tests.cpp            | 65 +++++--------------
     .../query-tests/Security/CWE/CWE-611/tests.h  | 10 +++
     .../Security/CWE/CWE-611/tests5.cpp           | 46 +++++++++++++
     4 files changed, 77 insertions(+), 52 deletions(-)
     create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp
    
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    index 083fa5f673e..d5353ff057a 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    @@ -1,6 +1,7 @@
     edges
     | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p |
     | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p |
    +| tests5.cpp:18:25:18:38 | call to createLSParser | tests5.cpp:20:2:20:2 | p |
     | tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p |
     | tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p |
     | tests.cpp:53:19:53:19 | VariableAddress [post update] | tests.cpp:55:2:55:2 | p |
    @@ -27,12 +28,13 @@ edges
     | tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:146:18:146:18 | q |
     | tests.cpp:144:18:144:18 | q | tests.cpp:130:39:130:39 | p |
     | tests.cpp:146:18:146:18 | q | tests.cpp:134:39:134:39 | p |
    -| tests.cpp:150:25:150:38 | call to createLSParser | tests.cpp:152:2:152:2 | p |
     nodes
     | tests2.cpp:20:17:20:31 | SAXParser output argument | semmle.label | SAXParser output argument |
     | tests2.cpp:22:2:22:2 | p | semmle.label | p |
     | tests2.cpp:33:17:33:31 | SAXParser output argument | semmle.label | SAXParser output argument |
     | tests2.cpp:37:2:37:2 | p | semmle.label | p |
    +| tests5.cpp:18:25:18:38 | call to createLSParser | semmle.label | call to createLSParser |
    +| tests5.cpp:20:2:20:2 | p | semmle.label | p |
     | tests.cpp:33:23:33:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument |
     | tests.cpp:35:2:35:2 | p | semmle.label | p |
     | tests.cpp:46:23:46:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument |
    @@ -68,12 +70,11 @@ nodes
     | tests.cpp:140:23:140:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument |
     | tests.cpp:144:18:144:18 | q | semmle.label | q |
     | tests.cpp:146:18:146:18 | q | semmle.label | q |
    -| tests.cpp:150:25:150:38 | call to createLSParser | semmle.label | call to createLSParser |
    -| tests.cpp:152:2:152:2 | p | semmle.label | p |
     subpaths
     #select
     | tests2.cpp:22:2:22:2 | p | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:20:17:20:31 | SAXParser output argument | XML parser |
     | tests2.cpp:37:2:37:2 | p | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:33:17:33:31 | SAXParser output argument | XML parser |
    +| tests5.cpp:20:2:20:2 | p | tests5.cpp:18:25:18:38 | call to createLSParser | tests5.cpp:20:2:20:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests5.cpp:18:25:18:38 | call to createLSParser | XML parser |
     | tests.cpp:35:2:35:2 | p | tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:33:23:33:43 | XercesDOMParser output argument | XML parser |
     | tests.cpp:49:2:49:2 | p | tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:46:23:46:43 | XercesDOMParser output argument | XML parser |
     | tests.cpp:57:2:57:2 | p | tests.cpp:53:23:53:43 | XercesDOMParser output argument | tests.cpp:57:2:57:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:53:23:53:43 | XercesDOMParser output argument | XML parser |
    @@ -85,4 +86,3 @@ subpaths
     | tests.cpp:122:3:122:3 | q | tests.cpp:118:24:118:44 | XercesDOMParser output argument | tests.cpp:122:3:122:3 | q | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:118:24:118:44 | XercesDOMParser output argument | XML parser |
     | tests.cpp:131:2:131:2 | p | tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:131:2:131:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:140:23:140:43 | XercesDOMParser output argument | XML parser |
     | tests.cpp:135:2:135:2 | p | tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:135:2:135:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:140:23:140:43 | XercesDOMParser output argument | XML parser |
    -| tests.cpp:152:2:152:2 | p | tests.cpp:150:25:150:38 | call to createLSParser | tests.cpp:152:2:152:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:150:25:150:38 | call to createLSParser | XML parser |
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp
    index ec822b44a20..a2d767e19bd 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp
    @@ -1,31 +1,31 @@
    -// test cases for rule CWE-611
    +// test cases for rule CWE-611 (XercesDOMParser)
     
     #include "tests.h"
     
     // ---
     
    -class AbstractDOMParser {
    -public:
    -	AbstractDOMParser();
    -
    -	void setDisableDefaultEntityResolution(bool); // default is false
    -	void setCreateEntityReferenceNodes(bool); // default is true
    -	void setSecurityManager(SecurityManager *const manager);
    -	void parse(const InputSource &data);
    -};
    -
     class XercesDOMParser: public AbstractDOMParser {
     public:
     	XercesDOMParser();
     };
     
    -class DOMLSParser : public AbstractDOMParser {
    -};
     
    -class DOMImplementationLS {
    -public:
    -	DOMLSParser *createLSParser();
    -};
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
     
     // ---
     
    @@ -145,34 +145,3 @@ void test10(InputSource &data) {
     	test10_doParseC(p, data);
     	test10_doParseC(q, data);
     }
    -
    -void test11(DOMImplementationLS *impl, InputSource &data) {
    -	DOMLSParser *p = impl->createLSParser();
    -
    -	p->parse(data); // BAD (parser not correctly configured)
    -}
    -
    -void test12(DOMImplementationLS *impl, InputSource &data) {
    -	DOMLSParser *p = impl->createLSParser();
    -
    -	p->setDisableDefaultEntityResolution(true);
    -	p->parse(data); // GOOD
    -}
    -
    -DOMImplementationLS *g_impl;
    -DOMLSParser *g_p1, *g_p2;
    -InputSource *g_data;
    -
    -void test13_init() {
    -	g_p1 = g_impl->createLSParser();
    -	g_p1->setDisableDefaultEntityResolution(true);
    -
    -	g_p2 = g_impl->createLSParser();
    -}
    -
    -void test13() {
    -	test13_init();
    -
    -	g_p1->parse(*g_data); // GOOD
    -	g_p2->parse(*g_data); // BAD (parser not correctly configured) [NOT DETECTED]
    -}
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h
    index aa4c539bbd9..4e5c5b4e6fb 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h
    @@ -2,3 +2,13 @@
     
     class SecurityManager;
     class InputSource;
    +
    +class AbstractDOMParser {
    +public:
    +	AbstractDOMParser();
    +
    +	void setDisableDefaultEntityResolution(bool); // default is false
    +	void setCreateEntityReferenceNodes(bool); // default is true
    +	void setSecurityManager(SecurityManager *const manager);
    +	void parse(const InputSource &data);
    +};
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp
    new file mode 100644
    index 00000000000..3f3bfad92df
    --- /dev/null
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp
    @@ -0,0 +1,46 @@
    +// test cases for rule CWE-611 (createLSParser)
    +
    +#include "tests.h"
    +
    +// ---
    +
    +class DOMLSParser : public AbstractDOMParser {
    +};
    +
    +class DOMImplementationLS {
    +public:
    +	DOMLSParser *createLSParser();
    +};
    +
    +// ---
    +
    +void test5_1(DOMImplementationLS *impl, InputSource &data) {
    +	DOMLSParser *p = impl->createLSParser();
    +
    +	p->parse(data); // BAD (parser not correctly configured)
    +}
    +
    +void test5_2(DOMImplementationLS *impl, InputSource &data) {
    +	DOMLSParser *p = impl->createLSParser();
    +
    +	p->setDisableDefaultEntityResolution(true);
    +	p->parse(data); // GOOD
    +}
    +
    +DOMImplementationLS *g_impl;
    +DOMLSParser *g_p1, *g_p2;
    +InputSource *g_data;
    +
    +void test5_3_init() {
    +	g_p1 = g_impl->createLSParser();
    +	g_p1->setDisableDefaultEntityResolution(true);
    +
    +	g_p2 = g_impl->createLSParser();
    +}
    +
    +void test5_3() {
    +	test5_3_init();
    +
    +	g_p1->parse(*g_data); // GOOD
    +	g_p2->parse(*g_data); // BAD (parser not correctly configured) [NOT DETECTED]
    +}
    
    From 4be31618917f67716e32c12ed51c80e82a46f172 Mon Sep 17 00:00:00 2001
    From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
    Date: Thu, 28 Apr 2022 17:02:26 +0100
    Subject: [PATCH 0207/1618] C++: Move some stuff from tests3.cpp to common
     tests.h
    
    ---
     .../query-tests/Security/CWE/CWE-611/tests.h   |  8 ++++++++
     .../Security/CWE/CWE-611/tests3.cpp            | 18 +++++++++---------
     2 files changed, 17 insertions(+), 9 deletions(-)
    
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h
    index 4e5c5b4e6fb..0e0d1c9d8c5 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h
    @@ -12,3 +12,11 @@ public:
     	void setSecurityManager(SecurityManager *const manager);
     	void parse(const InputSource &data);
     };
    +
    +typedef unsigned int XMLCh;
    +
    +class XMLUni
    +{
    +public:
    +	static const XMLCh fgXercesDisableDefaultEntityResolution[];
    +};
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp
    index bcece961d56..3bff5d77866 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp
    @@ -1,17 +1,9 @@
    -// test cases for rule CWE-611
    +// test cases for rule CWE-611 (SAX2XMLReader)
     
     #include "tests.h"
     
     // ---
     
    -typedef unsigned int XMLCh;
    -
    -class XMLUni
    -{
    -public:
    -	static const XMLCh fgXercesDisableDefaultEntityResolution[];
    -};
    -
     class SAX2XMLReader
     {
     public:
    @@ -25,6 +17,14 @@ public:
     	static SAX2XMLReader *createXMLReader();
     };
     
    +
    +
    +
    +
    +
    +
    +
    +
     // ---
     
     void test3_1(InputSource &data) {
    
    From c6deddb2904f72a713d7f5d172c39fad70800188 Mon Sep 17 00:00:00 2001
    From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
    Date: Thu, 28 Apr 2022 17:09:32 +0100
    Subject: [PATCH 0208/1618] C++: For consistency.
    
    ---
     cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp
    index 758cb57b26e..147be557844 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests2.cpp
    @@ -1,4 +1,4 @@
    -// test cases for rule CWE-611
    +// test cases for rule CWE-611 (SAXParser)
     
     #include "tests.h"
     
    
    From 1d71f042db20cc0e59e9c5d95f1c52079b74c337 Mon Sep 17 00:00:00 2001
    From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
    Date: Thu, 28 Apr 2022 17:14:39 +0100
    Subject: [PATCH 0209/1618] C++: Turns out DOMLSParser is not an
     AbstractDOMParser and works a little differently than I'd thought.
    
    ---
     .../Security/CWE/CWE-611/XXE.expected           |  4 ----
     .../query-tests/Security/CWE/CWE-611/tests5.cpp | 17 +++++++++++++----
     2 files changed, 13 insertions(+), 8 deletions(-)
    
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    index d5353ff057a..dcf334d5bfe 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
    @@ -1,7 +1,6 @@
     edges
     | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p |
     | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p |
    -| tests5.cpp:18:25:18:38 | call to createLSParser | tests5.cpp:20:2:20:2 | p |
     | tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p |
     | tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p |
     | tests.cpp:53:19:53:19 | VariableAddress [post update] | tests.cpp:55:2:55:2 | p |
    @@ -33,8 +32,6 @@ nodes
     | tests2.cpp:22:2:22:2 | p | semmle.label | p |
     | tests2.cpp:33:17:33:31 | SAXParser output argument | semmle.label | SAXParser output argument |
     | tests2.cpp:37:2:37:2 | p | semmle.label | p |
    -| tests5.cpp:18:25:18:38 | call to createLSParser | semmle.label | call to createLSParser |
    -| tests5.cpp:20:2:20:2 | p | semmle.label | p |
     | tests.cpp:33:23:33:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument |
     | tests.cpp:35:2:35:2 | p | semmle.label | p |
     | tests.cpp:46:23:46:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument |
    @@ -74,7 +71,6 @@ subpaths
     #select
     | tests2.cpp:22:2:22:2 | p | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:20:17:20:31 | SAXParser output argument | XML parser |
     | tests2.cpp:37:2:37:2 | p | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:33:17:33:31 | SAXParser output argument | XML parser |
    -| tests5.cpp:20:2:20:2 | p | tests5.cpp:18:25:18:38 | call to createLSParser | tests5.cpp:20:2:20:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests5.cpp:18:25:18:38 | call to createLSParser | XML parser |
     | tests.cpp:35:2:35:2 | p | tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:33:23:33:43 | XercesDOMParser output argument | XML parser |
     | tests.cpp:49:2:49:2 | p | tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:46:23:46:43 | XercesDOMParser output argument | XML parser |
     | tests.cpp:57:2:57:2 | p | tests.cpp:53:23:53:43 | XercesDOMParser output argument | tests.cpp:57:2:57:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:53:23:53:43 | XercesDOMParser output argument | XML parser |
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp
    index 3f3bfad92df..477107d97fe 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp
    @@ -4,7 +4,16 @@
     
     // ---
     
    -class DOMLSParser : public AbstractDOMParser {
    +class DOMConfiguration {
    +public:
    +	void setParameter(const XMLCh *parameter, bool value);
    +};
    +
    +class DOMLSParser {
    +public:
    +	DOMConfiguration *getDomConfig();
    +
    +	void parse(const InputSource &data);
     };
     
     class DOMImplementationLS {
    @@ -17,13 +26,13 @@ public:
     void test5_1(DOMImplementationLS *impl, InputSource &data) {
     	DOMLSParser *p = impl->createLSParser();
     
    -	p->parse(data); // BAD (parser not correctly configured)
    +	p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED]
     }
     
     void test5_2(DOMImplementationLS *impl, InputSource &data) {
     	DOMLSParser *p = impl->createLSParser();
     
    -	p->setDisableDefaultEntityResolution(true);
    +	p->getDomConfig()->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, true);
     	p->parse(data); // GOOD
     }
     
    @@ -33,7 +42,7 @@ InputSource *g_data;
     
     void test5_3_init() {
     	g_p1 = g_impl->createLSParser();
    -	g_p1->setDisableDefaultEntityResolution(true);
    +	g_p1->getDomConfig()->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, true);
     
     	g_p2 = g_impl->createLSParser();
     }
    
    From dd258781ed9c4eaa6dd452a913cdc640a9aad470 Mon Sep 17 00:00:00 2001
    From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
    Date: Thu, 28 Apr 2022 18:14:39 +0100
    Subject: [PATCH 0210/1618] C++: More test cases.
    
    ---
     .../Security/CWE/CWE-611/tests5.cpp           | 29 +++++++++++++++++--
     1 file changed, 26 insertions(+), 3 deletions(-)
    
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp
    index 477107d97fe..e98d5a99e60 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests5.cpp
    @@ -36,19 +36,42 @@ void test5_2(DOMImplementationLS *impl, InputSource &data) {
     	p->parse(data); // GOOD
     }
     
    +void test5_3(DOMImplementationLS *impl, InputSource &data) {
    +	DOMLSParser *p = impl->createLSParser();
    +
    +	p->getDomConfig()->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, false);
    +	p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED]
    +}
    +
    +void test5_4(DOMImplementationLS *impl, InputSource &data) {
    +	DOMLSParser *p = impl->createLSParser();
    +	DOMConfiguration *cfg = p->getDomConfig();
    +
    +	cfg->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, true);
    +	p->parse(data); // GOOD
    +}
    +
    +void test5_5(DOMImplementationLS *impl, InputSource &data) {
    +	DOMLSParser *p = impl->createLSParser();
    +	DOMConfiguration *cfg = p->getDomConfig();
    +
    +	cfg->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, false);
    +	p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED]
    +}
    +
     DOMImplementationLS *g_impl;
     DOMLSParser *g_p1, *g_p2;
     InputSource *g_data;
     
    -void test5_3_init() {
    +void test5_6_init() {
     	g_p1 = g_impl->createLSParser();
     	g_p1->getDomConfig()->setParameter(XMLUni::fgXercesDisableDefaultEntityResolution, true);
     
     	g_p2 = g_impl->createLSParser();
     }
     
    -void test5_3() {
    -	test5_3_init();
    +void test5_6() {
    +	test5_6_init();
     
     	g_p1->parse(*g_data); // GOOD
     	g_p2->parse(*g_data); // BAD (parser not correctly configured) [NOT DETECTED]
    
    From a0e003e33ce836f5eeb7b0e88e26b2a15e4762e1 Mon Sep 17 00:00:00 2001
    From: Tom Hvitved 
    Date: Fri, 29 Apr 2022 11:59:51 +0200
    Subject: [PATCH 0211/1618] C#: Add FP test for `cs/useless-cast-to-self`
    
    ---
     .../Language Abuse/UselessCastToSelf/UselessCastToSelf.cs    | 2 ++
     .../UselessCastToSelf/UselessCastToSelf.expected             | 5 +++--
     2 files changed, 5 insertions(+), 2 deletions(-)
    
    diff --git a/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.cs b/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.cs
    index 2c6ea6bafbf..e3aa1ad3067 100644
    --- a/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.cs	
    +++ b/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.cs	
    @@ -22,6 +22,7 @@ class Test
             var good7 = (Action)((int x) => { });
             func = x => x;
             exprFunc = x => x;
    +        exprFuncUntyped = (Expression>)(x => x); // FP
         }
     
         enum Enum
    @@ -35,4 +36,5 @@ class Test
     
         private Func func;
         private Expression> exprFunc;
    +    private LambdaExpression exprFuncUntyped;
     }
    diff --git a/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.expected b/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.expected
    index 7310437e1ef..11ac047b255 100644
    --- a/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.expected	
    +++ b/csharp/ql/test/query-tests/Language Abuse/UselessCastToSelf/UselessCastToSelf.expected	
    @@ -2,5 +2,6 @@
     | UselessCastToSelf.cs:10:20:10:29 | (...) ... | This cast is redundant because the expression already has type Test. |
     | UselessCastToSelf.cs:11:20:11:31 | ... as ... | This cast is redundant because the expression already has type Test. |
     | UselessCastToSelf.cs:13:20:13:56 | (...) ... | This cast is redundant because the expression already has type Expression>>. |
    -| UselessCastToSelf.cs:31:17:31:22 | (...) ... | This cast is redundant because the expression already has type Int32. |
    -| UselessCastToSelf.cs:33:24:33:29 | (...) ... | This cast is redundant because the expression already has type Int32. |
    +| UselessCastToSelf.cs:25:27:25:63 | (...) ... | This cast is redundant because the expression already has type Expression>>. |
    +| UselessCastToSelf.cs:32:17:32:22 | (...) ... | This cast is redundant because the expression already has type Int32. |
    +| UselessCastToSelf.cs:34:24:34:29 | (...) ... | This cast is redundant because the expression already has type Int32. |
    
    From 12320aa5d28ee7af8a82d51b9e5c82fdb8373d4b Mon Sep 17 00:00:00 2001
    From: Tony Torralba 
    Date: Fri, 29 Apr 2022 11:29:44 +0200
    Subject: [PATCH 0212/1618] Fix Intent Redirection sanitizer
    
    ---
     ...22-04-29-intent-redirection-sanitizer-fix.md |  5 +++++
     .../java/security/AndroidIntentRedirection.qll  | 14 +++++++++++---
     .../CWE-940/AndroidIntentRedirectionTest.java   | 17 +++++++++++++----
     3 files changed, 29 insertions(+), 7 deletions(-)
     create mode 100644 java/ql/lib/change-notes/2022-04-29-intent-redirection-sanitizer-fix.md
    
    diff --git a/java/ql/lib/change-notes/2022-04-29-intent-redirection-sanitizer-fix.md b/java/ql/lib/change-notes/2022-04-29-intent-redirection-sanitizer-fix.md
    new file mode 100644
    index 00000000000..66fa93ec4db
    --- /dev/null
    +++ b/java/ql/lib/change-notes/2022-04-29-intent-redirection-sanitizer-fix.md
    @@ -0,0 +1,5 @@
    +---
    +category: minorAnalysis
    +---
    +Fixed a sanitizer of the query `java/android/intent-redirection`. Now, for an intent to be considered
    +safe against intent redirection, both its package name and class name must be checked.
    \ No newline at end of file
    diff --git a/java/ql/lib/semmle/code/java/security/AndroidIntentRedirection.qll b/java/ql/lib/semmle/code/java/security/AndroidIntentRedirection.qll
    index 4a89b59f8c9..c549784ccbf 100644
    --- a/java/ql/lib/semmle/code/java/security/AndroidIntentRedirection.qll
    +++ b/java/ql/lib/semmle/code/java/security/AndroidIntentRedirection.qll
    @@ -65,16 +65,24 @@ private class DefaultIntentRedirectionSink extends IntentRedirectionSink {
     }
     
     /**
    - * A default sanitizer for nodes dominated by calls to `ComponentName.getPackageName`
    - * or `ComponentName.getClassName`. These are used to check whether the origin or destination
    + * A default sanitizer for `Intent` nodes dominated by calls to `ComponentName.getPackageName`
    + * and `ComponentName.getClassName`. These are used to check whether the origin or destination
      * components are trusted.
      */
     private class DefaultIntentRedirectionSanitizer extends IntentRedirectionSanitizer {
       DefaultIntentRedirectionSanitizer() {
    +    this.getType() instanceof TypeIntent and
         exists(MethodAccess ma, Method m, Guard g, boolean branch |
           ma.getMethod() = m and
           m.getDeclaringType() instanceof TypeComponentName and
    -      m.hasName(["getPackageName", "getClassName"]) and
    +      m.hasName("getPackageName") and
    +      g.isEquality(ma, _, branch) and
    +      g.controls(this.asExpr().getBasicBlock(), branch)
    +    ) and
    +    exists(MethodAccess ma, Method m, Guard g, boolean branch |
    +      ma.getMethod() = m and
    +      m.getDeclaringType() instanceof TypeComponentName and
    +      m.hasName("getClassName") and
           g.isEquality(ma, _, branch) and
           g.controls(this.asExpr().getBasicBlock(), branch)
         )
    diff --git a/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.java b/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.java
    index c577ca96620..2ce945461b6 100644
    --- a/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.java
    +++ b/java/ql/test/query-tests/security/CWE-940/AndroidIntentRedirectionTest.java
    @@ -40,13 +40,23 @@ public class AndroidIntentRedirectionTest extends Activity {
             sendStickyOrderedBroadcastAsUser(intent, null, null, null, 0, null, null); // $ hasAndroidIntentRedirection
             // @formatter:on
     
    +        // Sanitizing only the package or the class still allows redirecting
    +        // to non-exported activities in the same package
    +        // or activities with the same name in other packages, respectively.
             if (intent.getComponent().getPackageName().equals("something")) {
    -            startActivity(intent); // Safe - sanitized
    +            startActivity(intent); // $ hasAndroidIntentRedirection
             } else {
                 startActivity(intent); // $ hasAndroidIntentRedirection
             }
             if (intent.getComponent().getClassName().equals("something")) {
    -            startActivity(intent); // Safe - sanitized
    +            startActivity(intent); // $ hasAndroidIntentRedirection
    +        } else {
    +            startActivity(intent); // $ hasAndroidIntentRedirection
    +        }
    +
    +        if (intent.getComponent().getPackageName().equals("something")
    +                && intent.getComponent().getClassName().equals("something")) {
    +            startActivity(intent); // Safe
             } else {
                 startActivity(intent); // $ hasAndroidIntentRedirection
             }
    @@ -94,8 +104,7 @@ public class AndroidIntentRedirectionTest extends Activity {
                 }
                 {
                     Intent fwdIntent = new Intent();
    -                ComponentName component =
    -                        new ComponentName("", intent.getStringExtra("className"));
    +                ComponentName component = new ComponentName("", intent.getStringExtra("className"));
                     fwdIntent.setComponent(component);
                     startActivity(fwdIntent); // $ hasAndroidIntentRedirection
                 }
    
    From 08b6b1d2094603802c14ef9213ff8ca2086f8c65 Mon Sep 17 00:00:00 2001
    From: Henry Mercer 
    Date: Fri, 29 Apr 2022 11:26:32 +0100
    Subject: [PATCH 0213/1618] Use codeql-action/upload-sarif@main in CSV coverage
     metrics workflow
    
    ---
     .github/workflows/csv-coverage-metrics.yml | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/.github/workflows/csv-coverage-metrics.yml b/.github/workflows/csv-coverage-metrics.yml
    index a48bbc4def6..7778221dc2f 100644
    --- a/.github/workflows/csv-coverage-metrics.yml
    +++ b/.github/workflows/csv-coverage-metrics.yml
    @@ -38,7 +38,7 @@ jobs:
               path: metrics-java.sarif
               retention-days: 20
           - name: Upload SARIF file
    -        uses: github/codeql-action/upload-sarif@v1
    +        uses: github/codeql-action/upload-sarif@main
             with:
               sarif_file: metrics-java.sarif
       
    @@ -65,6 +65,6 @@ jobs:
               path: metrics-csharp.sarif
               retention-days: 20
           - name: Upload SARIF file
    -        uses: github/codeql-action/upload-sarif@v1
    +        uses: github/codeql-action/upload-sarif@main
             with:
               sarif_file: metrics-csharp.sarif
    
    From 812a24fc1846af1247abc7e2710a9b0cb7a871c9 Mon Sep 17 00:00:00 2001
    From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
    Date: Thu, 28 Apr 2022 12:53:00 +0100
    Subject: [PATCH 0214/1618] C++: Add test cases for libxml2.
    
    ---
     .../query-tests/Security/CWE/CWE-611/tests.h  |   2 +
     .../Security/CWE/CWE-611/tests4.cpp           | 135 ++++++++++++++++++
     2 files changed, 137 insertions(+)
     create mode 100644 cpp/ql/test/query-tests/Security/CWE/CWE-611/tests4.cpp
    
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h
    index aa4c539bbd9..fa67239a8bc 100644
    --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h
    @@ -2,3 +2,5 @@
     
     class SecurityManager;
     class InputSource;
    +
    +#define NULL (0)
    diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests4.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests4.cpp
    new file mode 100644
    index 00000000000..40197d2c0ee
    --- /dev/null
    +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests4.cpp
    @@ -0,0 +1,135 @@
    +// test cases for rule CWE-611 (libxml2)
    +
    +#include "tests.h"
    +
    +// ---
    +
    +enum xmlParserOption
    +{
    +	XML_PARSE_NOENT = 2,
    +	XML_PARSE_DTDLOAD = 4,
    +	XML_PARSE_OPTION_HARMLESS = 8
    +};
    +
    +class xmlDoc;
    +
    +xmlDoc *xmlReadFile(const char *fileName, const char *encoding, int flags);
    +xmlDoc *xmlReadMemory(const char *ptr, int sz, const char *url, const char *encoding, int flags);
    +
    +void xmlFreeDoc(xmlDoc *ptr);
    +
    +// ---
    +
    +void test4_1(const char *fileName) {
    +	xmlDoc *p;
    +
    +	p = xmlReadFile(fileName, NULL, XML_PARSE_NOENT); // BAD (parser not correctly configured) [NOT DETECTED]
    +	if (p != NULL)
    +	{
    +		xmlFreeDoc(p);
    +	}
    +}
    +
    +void test4_2(const char *fileName) {
    +	xmlDoc *p;
    +
    +	p = xmlReadFile(fileName, NULL, XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) [NOT DETECTED]
    +	if (p != NULL)
    +	{
    +		xmlFreeDoc(p);
    +	}
    +}
    +
    +void test4_3(const char *fileName) {
    +	xmlDoc *p;
    +
    +	p = xmlReadFile(fileName, NULL, XML_PARSE_NOENT | XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) [NOT DETECTED]
    +	if (p != NULL)
    +	{
    +		xmlFreeDoc(p);
    +	}
    +}
    +
    +void test4_4(const char *fileName) {
    +	xmlDoc *p;
    +
    +	p = xmlReadFile(fileName, NULL, 0); // GOOD
    +	if (p != NULL)
    +	{
    +		xmlFreeDoc(p);
    +	}
    +}
    +
    +void test4_5(const char *fileName) {
    +	xmlDoc *p;
    +
    +	p = xmlReadFile(fileName, NULL, XML_PARSE_OPTION_HARMLESS); // GOOD
    +	if (p != NULL)
    +	{
    +		xmlFreeDoc(p);
    +	}
    +}
    +
    +void test4_6(const char *fileName) {
    +	xmlDoc *p;
    +	int flags = XML_PARSE_NOENT;
    +
    +	p = xmlReadFile(fileName, NULL, flags); // BAD (parser not correctly configured) [NOT DETECTED]
    +	if (p != NULL)
    +	{
    +		xmlFreeDoc(p);
    +	}
    +}
    +
    +void test4_7(const char *fileName) {
    +	xmlDoc *p;
    +	int flags = 0;
    +
    +	p = xmlReadFile(fileName, NULL, flags); // GOOD
    +	if (p != NULL)
    +	{
    +		xmlFreeDoc(p);
    +	}
    +}
    +
    +void test4_8(const char *fileName) {
    +	xmlDoc *p;
    +	int flags = XML_PARSE_OPTION_HARMLESS;
    +
    +	p = xmlReadFile(fileName, NULL, flags | XML_PARSE_NOENT); // BAD (parser not correctly configured) [NOT DETECTED]
    +	if (p != NULL)
    +	{
    +		xmlFreeDoc(p);
    +	}
    +}
    +
    +void test4_9(const char *fileName) {
    +	xmlDoc *p;
    +	int flags = XML_PARSE_NOENT;
    +
    +	p = xmlReadFile(fileName, NULL, flags | XML_PARSE_OPTION_HARMLESS); // BAD (parser not correctly configured) [NOT DETECTED]
    +	if (p != NULL)
    +	{
    +		xmlFreeDoc(p);
    +	}
    +}
    +
    +void test4_10(const char *ptr, int sz) {
    +	xmlDoc *p;
    +
    +	p = xmlReadMemory(ptr, sz, "", NULL, 0); // GOOD
    +	if (p != NULL)
    +	{
    +		xmlFreeDoc(p);
    +	}
    +}
    +
    +void test4_11(const char *ptr, int sz) {
    +	xmlDoc *p;
    +
    +	p = xmlReadMemory(ptr, sz, "", NULL, XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) [NOT DETECTED]
    +	if (p != NULL)
    +	{
    +		xmlFreeDoc(p);
    +	}
    +}
    
    From 37b051a851b8a4a736ff4111b9be4e937c1ac482 Mon Sep 17 00:00:00 2001
    From: Jorge <46056498+jorgectf@users.noreply.github.com>
    Date: Fri, 29 Apr 2022 14:44:17 +0200
    Subject: [PATCH 0215/1618] Apply suggestions from code review
    
    Co-authored-by: Anders Schack-Mulligen 
    ---
     java/ql/lib/semmle/code/java/frameworks/MyBatis.qll | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    index 86384362a3b..b6601e6de08 100644
    --- a/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    +++ b/java/ql/lib/semmle/code/java/frameworks/MyBatis.qll
    @@ -125,7 +125,7 @@ class MyBatisInjectionSink extends DataFlow::Node {
           a.getType() instanceof MyBatisProvider and
           m.getDeclaringType() = a.getValue(["type", "value"]).(TypeLiteral).getTypeName().getType() and
           m.hasName(a.getValue("method").(StringLiteral).getValue()) and
    -      this.getEnclosingCallable() = m.getBody().getAStmt().(ReturnStmt).getEnclosingCallable()
    +      exists(ReturnStmt ret | this.asExpr() = ret.getResult() and ret.getEnclosingCallable() = m)
         )
       }
     }
    
    From cf4325c86f7f1fb8d0f4701c483b5dc84a10b6a2 Mon Sep 17 00:00:00 2001
    From: Arthur Baars 
    Date: Fri, 29 Apr 2022 16:19:11 +0200
    Subject: [PATCH 0216/1618] Add change note
    
    ---
     ruby/ql/lib/change-notes/2022-04-30-update-grammar.md | 4 ++++
     1 file changed, 4 insertions(+)
     create mode 100644 ruby/ql/lib/change-notes/2022-04-30-update-grammar.md
    
    diff --git a/ruby/ql/lib/change-notes/2022-04-30-update-grammar.md b/ruby/ql/lib/change-notes/2022-04-30-update-grammar.md
    new file mode 100644
    index 00000000000..34a485c94e6
    --- /dev/null
    +++ b/ruby/ql/lib/change-notes/2022-04-30-update-grammar.md
    @@ -0,0 +1,4 @@
    +---
    +category: fix
    +---
    +The TreeSitter Ruby grammar has been updated; this fixes several issues where Ruby code was parsed incorrectly.
    
    From c8e0d7f8472557dd8cb8eda2f3169d2d6aebfbdb Mon Sep 17 00:00:00 2001
    From: Jonathan Leitschuh 
    Date: Fri, 29 Apr 2022 14:51:26 -0400
    Subject: [PATCH 0217/1618] Summary model for `File` should include overriden
     methods
    
    ---
     java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll
    index e5e4c582a66..c1fbbdb275e 100644
    --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll
    +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll
    @@ -298,8 +298,8 @@ private predicate summaryModelCsv(string row) {
           "java.net;URI;false;toURL;;;Argument[-1];ReturnValue;taint",
           "java.net;URI;false;toString;;;Argument[-1];ReturnValue;taint",
           "java.net;URI;false;toAsciiString;;;Argument[-1];ReturnValue;taint",
    -      "java.io;File;false;toURI;;;Argument[-1];ReturnValue;taint",
    -      "java.io;File;false;toPath;;;Argument[-1];ReturnValue;taint",
    +      "java.io;File;true;toURI;;;Argument[-1];ReturnValue;taint",
    +      "java.io;File;true;toPath;;;Argument[-1];ReturnValue;taint",
           "java.io;File;true;getAbsoluteFile;;;Argument[-1];ReturnValue;taint",
           "java.io;File;true;getCanonicalFile;;;Argument[-1];ReturnValue;taint",
           "java.io;File;true;getAbsolutePath;;;Argument[-1];ReturnValue;taint",
    
    From 920a7cd2e62e69886516e67e55a7b4295b7725e1 Mon Sep 17 00:00:00 2001
    From: luchua-bc 
    Date: Fri, 29 Apr 2022 20:29:04 +0000
    Subject: [PATCH 0218/1618] Put back the taint step removed during merge
    
    ---
     .../Security/CWE/CWE-552/UnsafeUrlForward.qll        |  1 +
     .../security/CWE-552/UnsafeUrlForward.expected       | 12 ++++++++++++
     2 files changed, 13 insertions(+)
    
    diff --git a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll
    index c741eabcaa5..5471f55b212 100644
    --- a/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll
    +++ b/java/ql/src/experimental/Security/CWE/CWE-552/UnsafeUrlForward.qll
    @@ -168,6 +168,7 @@ private class FilePathFlowStep extends SummaryModelCsv {
             "java.nio.file;Paths;true;get;;;Argument[0..1];ReturnValue;taint",
             "java.nio.file;Path;true;resolve;;;Argument[-1..0];ReturnValue;taint",
             "java.nio.file;Path;true;normalize;;;Argument[-1];ReturnValue;taint",
    +        "java.nio.file;Path;true;toString;;;Argument[-1];ReturnValue;taint",
             "io.undertow.server.handlers.resource;Resource;true;getFile;;;Argument[-1];ReturnValue;taint",
             "io.undertow.server.handlers.resource;Resource;true;getFilePath;;;Argument[-1];ReturnValue;taint",
             "io.undertow.server.handlers.resource;Resource;true;getPath;;;Argument[-1];ReturnValue;taint"
    diff --git a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected
    index 202ce9d0cd8..179d2b37265 100644
    --- a/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected
    +++ b/java/ql/test/experimental/query-tests/security/CWE-552/UnsafeUrlForward.expected
    @@ -16,6 +16,11 @@ edges
     | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL |
     | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL |
     | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path |
    +| UnsafeServletRequestDispatch.java:106:17:106:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:107:53:107:56 | path : String |
    +| UnsafeServletRequestDispatch.java:107:24:107:57 | resolve(...) : Path | UnsafeServletRequestDispatch.java:107:24:107:69 | normalize(...) : Path |
    +| UnsafeServletRequestDispatch.java:107:24:107:69 | normalize(...) : Path | UnsafeServletRequestDispatch.java:110:53:110:65 | requestedPath : Path |
    +| UnsafeServletRequestDispatch.java:107:53:107:56 | path : String | UnsafeServletRequestDispatch.java:107:24:107:57 | resolve(...) : Path |
    +| UnsafeServletRequestDispatch.java:110:53:110:65 | requestedPath : Path | UnsafeServletRequestDispatch.java:110:53:110:76 | toString(...) |
     | UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url |
     | UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url |
     | UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url |
    @@ -54,6 +59,12 @@ nodes
     | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | semmle.label | returnURL |
     | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
     | UnsafeServletRequestDispatch.java:76:53:76:56 | path | semmle.label | path |
    +| UnsafeServletRequestDispatch.java:106:17:106:44 | getParameter(...) : String | semmle.label | getParameter(...) : String |
    +| UnsafeServletRequestDispatch.java:107:24:107:57 | resolve(...) : Path | semmle.label | resolve(...) : Path |
    +| UnsafeServletRequestDispatch.java:107:24:107:69 | normalize(...) : Path | semmle.label | normalize(...) : Path |
    +| UnsafeServletRequestDispatch.java:107:53:107:56 | path : String | semmle.label | path : String |
    +| UnsafeServletRequestDispatch.java:110:53:110:65 | requestedPath : Path | semmle.label | requestedPath : Path |
    +| UnsafeServletRequestDispatch.java:110:53:110:76 | toString(...) | semmle.label | toString(...) |
     | UnsafeUrlForward.java:13:27:13:36 | url : String | semmle.label | url : String |
     | UnsafeUrlForward.java:14:27:14:29 | url | semmle.label | url |
     | UnsafeUrlForward.java:18:27:18:36 | url : String | semmle.label | url : String |
    @@ -83,6 +94,7 @@ subpaths
     | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:32:51:32:59 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:23:22:23:54 | getParameter(...) | user-provided value |
     | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) : String | UnsafeServletRequestDispatch.java:48:56:48:64 | returnURL | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:42:22:42:54 | getParameter(...) | user-provided value |
     | UnsafeServletRequestDispatch.java:76:53:76:56 | path | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:76:53:76:56 | path | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:71:17:71:44 | getParameter(...) | user-provided value |
    +| UnsafeServletRequestDispatch.java:110:53:110:76 | toString(...) | UnsafeServletRequestDispatch.java:106:17:106:44 | getParameter(...) : String | UnsafeServletRequestDispatch.java:110:53:110:76 | toString(...) | Potentially untrusted URL forward due to $@. | UnsafeServletRequestDispatch.java:106:17:106:44 | getParameter(...) | user-provided value |
     | UnsafeUrlForward.java:14:27:14:29 | url | UnsafeUrlForward.java:13:27:13:36 | url : String | UnsafeUrlForward.java:14:27:14:29 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:13:27:13:36 | url | user-provided value |
     | UnsafeUrlForward.java:20:28:20:30 | url | UnsafeUrlForward.java:18:27:18:36 | url : String | UnsafeUrlForward.java:20:28:20:30 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:18:27:18:36 | url | user-provided value |
     | UnsafeUrlForward.java:26:23:26:25 | url | UnsafeUrlForward.java:25:21:25:30 | url : String | UnsafeUrlForward.java:26:23:26:25 | url | Potentially untrusted URL forward due to $@. | UnsafeUrlForward.java:25:21:25:30 | url | user-provided value |
    
    From f87312d4ba97570f39fe6adb87c38e1760590e45 Mon Sep 17 00:00:00 2001
    From: Erik Krogh Kristensen 
    Date: Sat, 30 Apr 2022 20:29:44 +0200
    Subject: [PATCH 0219/1618] have ApiGraphModelsSpecific.qll mention all the
     required predicates/types
    
    ---
     .../data/internal/ApiGraphModelsSpecific.qll           | 10 ++++++++--
     .../data/internal/ApiGraphModelsSpecific.qll           |  4 ++++
     2 files changed, 12 insertions(+), 2 deletions(-)
    
    diff --git a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll
    index 752acea10c6..9e08e8ed619 100644
    --- a/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll
    +++ b/javascript/ql/lib/semmle/javascript/frameworks/data/internal/ApiGraphModelsSpecific.qll
    @@ -4,12 +4,18 @@
      * It must export the following members:
      * ```ql
      * class Unit // a unit type
    + * module AccessPathSyntax // a re-export of the AccessPathSyntax module
    + * class InvokeNode // a type representing an invocation connected to the API graph
      * module API // the API graph module
      * predicate isPackageUsed(string package)
      * API::Node getExtraNodeFromPath(string package, string type, string path, int n)
      * API::Node getExtraSuccessorFromNode(API::Node node, AccessPathToken token)
    - * API::Node getExtraSuccessorFromInvoke(API::InvokeNode node, AccessPathToken token)
    - * predicate invocationMatchesExtraCallSiteFilter(API::InvokeNode invoke, AccessPathToken token)
    + * API::Node getExtraSuccessorFromInvoke(InvokeNode node, AccessPathToken token)
    + * predicate invocationMatchesExtraCallSiteFilter(InvokeNode invoke, AccessPathToken token)
    + * InvokeNode getAnInvocationOf(API::Node node)
    + * predicate isExtraValidTokenNameInIdentifyingAccessPath(string name)
    + * predicate isExtraValidNoArgumentTokenInIdentifyingAccessPath(string name)
    + * predicate isExtraValidTokenArgumentInIdentifyingAccessPath(string name, string argument)
      * ```
      */
     
    diff --git a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsSpecific.qll b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsSpecific.qll
    index 3bd595b44b8..381623d557e 100644
    --- a/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsSpecific.qll
    +++ b/ruby/ql/lib/codeql/ruby/frameworks/data/internal/ApiGraphModelsSpecific.qll
    @@ -4,6 +4,7 @@
      * It must export the following members:
      * ```ql
      * class Unit // a unit type
    + * module AccessPathSyntax // a re-export of the AccessPathSyntax module
      * class InvokeNode // a type representing an invocation connected to the API graph
      * module API // the API graph module
      * predicate isPackageUsed(string package)
    @@ -12,6 +13,9 @@
      * API::Node getExtraSuccessorFromInvoke(InvokeNode node, AccessPathToken token)
      * predicate invocationMatchesExtraCallSiteFilter(InvokeNode invoke, AccessPathToken token)
      * InvokeNode getAnInvocationOf(API::Node node)
    + * predicate isExtraValidTokenNameInIdentifyingAccessPath(string name)
    + * predicate isExtraValidNoArgumentTokenInIdentifyingAccessPath(string name)
    + * predicate isExtraValidTokenArgumentInIdentifyingAccessPath(string name, string argument)
      * ```
      */
     
    
    From 57ae07017f6bc97f139222508eacb7e8f57db7f7 Mon Sep 17 00:00:00 2001
    From: bananabr 
    Date: Sat, 30 Apr 2022 18:27:31 -0500
    Subject: [PATCH 0220/1618] adds the Selection API as a new DOM text source
    
    ---
     .../2022-04-30-xss-selection-source.md        |  4 ++++
     .../dataflow/XssThroughDomCustomizations.qll  | 22 +++++++++++++++++++
     .../XssThroughDom/XssThroughDom.expected      | 12 ++++++++++
     .../CWE-079/XssThroughDom/xss-through-dom.js  |  8 +++++++
     4 files changed, 46 insertions(+)
     create mode 100644 javascript/ql/lib/change-notes/2022-04-30-xss-selection-source.md
    
    diff --git a/javascript/ql/lib/change-notes/2022-04-30-xss-selection-source.md b/javascript/ql/lib/change-notes/2022-04-30-xss-selection-source.md
    new file mode 100644
    index 00000000000..4b7ed054b74
    --- /dev/null
    +++ b/javascript/ql/lib/change-notes/2022-04-30-xss-selection-source.md
    @@ -0,0 +1,4 @@
    +---
    +category: minorAnalysis
    +---
    +* Added the `Selection` api as a DOM text source in the `XssThroughDomCustomizations` library.
    \ No newline at end of file
    diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll
    index 80c28c03513..cc9535e054e 100644
    --- a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll
    +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll
    @@ -216,4 +216,26 @@ module XssThroughDom {
           }
         }
       }
    +
    +
    +  /**
    +   * A source for text from the DOM from a Selection object toString method call
    +   * https://developer.mozilla.org/en-US/docs/Web/API/Selection
    +   */
    +  DataFlow::SourceNode getSelectionCall(DataFlow::TypeTracker t) {
    +    t.start() and
    +    exists(DataFlow::CallNode call |
    +      call = DataFlow::globalVarRef("getSelection").getACall()
    +    |
    +      result = call
    +    )
    +    or
    +    exists(DataFlow::TypeTracker t2 | result = getSelectionCall(t2).track(t2, t))
    +  }
    +  
    +  class SelectionSource extends Source {
    +    SelectionSource() {
    +      this = getSelectionCall(DataFlow::TypeTracker::end()).getAMethodCall("toString")
    +    }
    +  }
     }
    diff --git a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected
    index 104a3055e40..0cf59fe99c1 100644
    --- a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected
    +++ b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected
    @@ -139,6 +139,12 @@ nodes
     | xss-through-dom.js:122:53:122:67 | ev.target.files |
     | xss-through-dom.js:122:53:122:67 | ev.target.files |
     | xss-through-dom.js:122:53:122:70 | ev.target.files[0] |
    +| xss-through-dom.js:129:6:129:42 | linkText |
    +| xss-through-dom.js:129:17:129:36 | selection.toString() |
    +| xss-through-dom.js:129:17:129:36 | selection.toString() |
    +| xss-through-dom.js:129:17:129:42 | selecti ... ) \|\| '' |
    +| xss-through-dom.js:130:19:130:26 | linkText |
    +| xss-through-dom.js:130:19:130:26 | linkText |
     edges
     | forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values |
     | forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values |
    @@ -225,6 +231,11 @@ edges
     | xss-through-dom.js:122:53:122:67 | ev.target.files | xss-through-dom.js:122:53:122:70 | ev.target.files[0] |
     | xss-through-dom.js:122:53:122:70 | ev.target.files[0] | xss-through-dom.js:122:33:122:71 | URL.cre ... les[0]) |
     | xss-through-dom.js:122:53:122:70 | ev.target.files[0] | xss-through-dom.js:122:33:122:71 | URL.cre ... les[0]) |
    +| xss-through-dom.js:129:6:129:42 | linkText | xss-through-dom.js:130:19:130:26 | linkText |
    +| xss-through-dom.js:129:6:129:42 | linkText | xss-through-dom.js:130:19:130:26 | linkText |
    +| xss-through-dom.js:129:17:129:36 | selection.toString() | xss-through-dom.js:129:17:129:42 | selecti ... ) \|\| '' |
    +| xss-through-dom.js:129:17:129:36 | selection.toString() | xss-through-dom.js:129:17:129:42 | selecti ... ) \|\| '' |
    +| xss-through-dom.js:129:17:129:42 | selecti ... ) \|\| '' | xss-through-dom.js:129:6:129:42 | linkText |
     #select
     | forms.js:9:31:9:40 | values.foo | forms.js:8:23:8:28 | values | forms.js:9:31:9:40 | values.foo | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:8:23:8:28 | values | DOM text |
     | forms.js:12:31:12:40 | values.bar | forms.js:11:24:11:29 | values | forms.js:12:31:12:40 | values.bar | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:11:24:11:29 | values | DOM text |
    @@ -262,3 +273,4 @@ edges
     | xss-through-dom.js:115:16:115:18 | src | xss-through-dom.js:114:17:114:52 | documen ... k").src | xss-through-dom.js:115:16:115:18 | src | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:114:17:114:52 | documen ... k").src | DOM text |
     | xss-through-dom.js:120:23:120:45 | ev.targ ... 0].name | xss-through-dom.js:120:23:120:37 | ev.target.files | xss-through-dom.js:120:23:120:45 | ev.targ ... 0].name | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:120:23:120:37 | ev.target.files | DOM text |
     | xss-through-dom.js:122:33:122:71 | URL.cre ... les[0]) | xss-through-dom.js:122:53:122:67 | ev.target.files | xss-through-dom.js:122:33:122:71 | URL.cre ... les[0]) | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:122:53:122:67 | ev.target.files | DOM text |
    +| xss-through-dom.js:130:19:130:26 | linkText | xss-through-dom.js:129:17:129:36 | selection.toString() | xss-through-dom.js:130:19:130:26 | linkText | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:129:17:129:36 | selection.toString() | DOM text |
    diff --git a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js
    index 6fcf9e2a13f..55f4e80436c 100644
    --- a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js
    +++ b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js
    @@ -122,3 +122,11 @@ class Sub extends Super {
             $("img#id").attr("src", URL.createObjectURL(ev.target.files[0])); // NOT OK
         }
     })();
    +
    +(function () {
    +	let elem = document.createElement('a');
    +	const selection = getSelection();
    +	let linkText = selection.toString() || '';
    +	elem.innerHTML = linkText; // NOT OK
    +	elem.innerText = linkText; // OK
    +})();
    \ No newline at end of file
    
    From ed58ee86fe426fffa60e6698f4d5dd9c05460c4f Mon Sep 17 00:00:00 2001
    From: bananabr 
    Date: Sun, 1 May 2022 20:41:43 -0500
    Subject: [PATCH 0221/1618] documented getSelectionCall
    
    ---
     .../security/dataflow/XssThroughDomCustomizations.qll       | 6 +++++-
     1 file changed, 5 insertions(+), 1 deletion(-)
    
    diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll
    index cc9535e054e..a387607229a 100644
    --- a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll
    +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll
    @@ -219,7 +219,7 @@ module XssThroughDom {
     
     
       /**
    -   * A source for text from the DOM from a Selection object toString method call
    +   * A call to window.getSelection
        * https://developer.mozilla.org/en-US/docs/Web/API/Selection
        */
       DataFlow::SourceNode getSelectionCall(DataFlow::TypeTracker t) {
    @@ -233,6 +233,10 @@ module XssThroughDom {
         exists(DataFlow::TypeTracker t2 | result = getSelectionCall(t2).track(t2, t))
       }
       
    +  /**
    +   * A source for text from the DOM from a Selection object toString method call
    +   * https://developer.mozilla.org/en-US/docs/Web/API/Selection
    +   */
       class SelectionSource extends Source {
         SelectionSource() {
           this = getSelectionCall(DataFlow::TypeTracker::end()).getAMethodCall("toString")
    
    From 714465bf39d97e31aa6f0a7aa01c57e16f3c3078 Mon Sep 17 00:00:00 2001
    From: Rasmus Wriedt Larsen 
    Date: Mon, 2 May 2022 11:29:00 +0200
    Subject: [PATCH 0222/1618] Python: Refactor `SaxParserSetFeatureCall`
    
    Originally made by @erik-krogh in
    https://github.com/github/codeql/pull/8693/files#diff-9627c1fb9a1cc77fb93e6b7e31af1a4fa908f2a60362cfb34377d24debb97398
    
    Could not be applied directly to this PR, since this PR deletes the file.
    ---
     .../lib/semmle/python/frameworks/Stdlib.qll   | 38 ++++---------------
     1 file changed, 7 insertions(+), 31 deletions(-)
    
    diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll
    index 10eaa9dc3b6..bf2b01930d2 100644
    --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll
    +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll
    @@ -3408,7 +3408,7 @@ private module StdlibPrivate {
        *
        * See https://docs.python.org/3.10/library/xml.sax.reader.html#xml.sax.xmlreader.XMLReader.setFeature
        */
    -  private class SaxParserSetFeatureCall extends DataFlow::MethodCallNode {
    +  private class SaxParserSetFeatureCall extends API::CallNode, DataFlow::MethodCallNode {
         SaxParserSetFeatureCall() {
           this =
             API::moduleImport("xml")
    @@ -3421,27 +3421,9 @@ private module StdlibPrivate {
     
         // The keyword argument names does not match documentation. I checked (with Python
         // 3.9.5) that the names used here actually works.
    -    DataFlow::Node getFeatureArg() { result in [this.getArg(0), this.getArgByName("name")] }
    +    API::Node getFeatureArg() { result = this.getParameter(0, "name") }
     
    -    DataFlow::Node getStateArg() { result in [this.getArg(1), this.getArgByName("state")] }
    -  }
    -
    -  /** Gets a back-reference to the `setFeature` state argument `arg`. */
    -  private DataFlow::TypeTrackingNode saxParserSetFeatureStateArgBacktracker(
    -    DataFlow::TypeBackTracker t, DataFlow::Node arg
    -  ) {
    -    t.start() and
    -    arg = any(SaxParserSetFeatureCall c).getStateArg() and
    -    result = arg.getALocalSource()
    -    or
    -    exists(DataFlow::TypeBackTracker t2 |
    -      result = saxParserSetFeatureStateArgBacktracker(t2, arg).backtrack(t2, t)
    -    )
    -  }
    -
    -  /** Gets a back-reference to the `setFeature` state argument `arg`. */
    -  DataFlow::LocalSourceNode saxParserSetFeatureStateArgBacktracker(DataFlow::Node arg) {
    -    result = saxParserSetFeatureStateArgBacktracker(DataFlow::TypeBackTracker::end(), arg)
    +    API::Node getStateArg() { result = this.getParameter(1, "state") }
       }
     
       /**
    @@ -3452,16 +3434,13 @@ private module StdlibPrivate {
       private DataFlow::Node saxParserWithFeatureExternalGesTurnedOn(DataFlow::TypeTracker t) {
         t.start() and
         exists(SaxParserSetFeatureCall call |
    -      call.getFeatureArg() =
    +      call.getFeatureArg().getARhs() =
             API::moduleImport("xml")
                 .getMember("sax")
                 .getMember("handler")
                 .getMember("feature_external_ges")
                 .getAUse() and
    -      saxParserSetFeatureStateArgBacktracker(call.getStateArg())
    -          .asExpr()
    -          .(BooleanLiteral)
    -          .booleanValue() = true and
    +      call.getStateArg().getAValueReachingRhs().asExpr().(BooleanLiteral).booleanValue() = true and
           result = call.getObject()
         )
         or
    @@ -3471,16 +3450,13 @@ private module StdlibPrivate {
         // take account of that we can set the feature to False, which makes the parser safe again
         not exists(SaxParserSetFeatureCall call |
           call.getObject() = result and
    -      call.getFeatureArg() =
    +      call.getFeatureArg().getARhs() =
             API::moduleImport("xml")
                 .getMember("sax")
                 .getMember("handler")
                 .getMember("feature_external_ges")
                 .getAUse() and
    -      saxParserSetFeatureStateArgBacktracker(call.getStateArg())
    -          .asExpr()
    -          .(BooleanLiteral)
    -          .booleanValue() = false
    +      call.getStateArg().getAValueReachingRhs().asExpr().(BooleanLiteral).booleanValue() = false
         )
       }
     
    
    From c67b06b1fdfa48fc4f53448eb6ca245ebe76de5d Mon Sep 17 00:00:00 2001
    From: yoff 
    Date: Mon, 2 May 2022 11:36:58 +0200
    Subject: [PATCH 0223/1618] Update
     python/ql/test/experimental/dataflow/typetracking/attribute_tests.py
    
    Co-authored-by: Taus 
    ---
     .../test/experimental/dataflow/typetracking/attribute_tests.py  | 2 ++
     1 file changed, 2 insertions(+)
    
    diff --git a/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py b/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py
    index dfb6489df41..2cc6346527f 100644
    --- a/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py
    +++ b/python/ql/test/experimental/dataflow/typetracking/attribute_tests.py
    @@ -58,6 +58,8 @@ def test_global_attribute_read():
     
     def test_local_attribute_assignment():
         # Same as `test_global_attribute_assignment`, but the assigned variable is not global
    +    # In this case, we don't want flow going to the `ModuleVariableNode` for `local_var` 
    +    # (which is referenced in `test_local_attribute_read`).
         local_var = object() # $ tracked=foo
         local_var.foo = tracked # $ tracked tracked=foo
     
    
    From 0c62916af5d42aaf88667dc2d04f82ec12537b37 Mon Sep 17 00:00:00 2001
    From: Rasmus Wriedt Larsen 
    Date: Mon, 2 May 2022 14:05:35 +0200
    Subject: [PATCH 0224/1618] Python: Highlight problem with Flask
     `request.files` modeling
    
    ---
     python/ql/test/library-tests/frameworks/flask/taint_test.py | 3 +++
     1 file changed, 3 insertions(+)
    
    diff --git a/python/ql/test/library-tests/frameworks/flask/taint_test.py b/python/ql/test/library-tests/frameworks/flask/taint_test.py
    index 1c1f88eab68..609e4caf091 100644
    --- a/python/ql/test/library-tests/frameworks/flask/taint_test.py
    +++ b/python/ql/test/library-tests/frameworks/flask/taint_test.py
    @@ -189,6 +189,7 @@ def test_taint(name = "World!", number="0", foo="foo"):  # $requestHandler route
         a = request.args
         b = a
         gl = b.getlist
    +    files = request.files
         ensure_tainted(
             request.args, # $ tainted
             a, # $ tainted
    @@ -202,6 +203,8 @@ def test_taint(name = "World!", number="0", foo="foo"):  # $requestHandler route
             a.getlist('key'), # $ tainted
             b.getlist('key'), # $ tainted
             gl('key'), # $ tainted
    +
    +        files.get('key').filename, # $ MISSING: tainted
         )
     
         # aliasing tests
    
    From fb0133d276c2f8c62f79bcea3f3d1087ebbfcdd7 Mon Sep 17 00:00:00 2001
    From: Rasmus Wriedt Larsen 
    Date: Mon, 2 May 2022 14:14:29 +0200
    Subject: [PATCH 0225/1618] Python: Fix Flask `request.files` modeling
    
    ---
     python/ql/lib/semmle/python/frameworks/Flask.qll            | 2 +-
     python/ql/test/library-tests/frameworks/flask/taint_test.py | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/python/ql/lib/semmle/python/frameworks/Flask.qll b/python/ql/lib/semmle/python/frameworks/Flask.qll
    index 8fe9e9bdd4b..19400aba739 100644
    --- a/python/ql/lib/semmle/python/frameworks/Flask.qll
    +++ b/python/ql/lib/semmle/python/frameworks/Flask.qll
    @@ -418,7 +418,7 @@ module Flask {
           // TODO: This approach for identifying member-access is very adhoc, and we should
           // be able to do something more structured for providing modeling of the members
           // of a container-object.
    -      exists(DataFlow::AttrRead files | files = request().getMember("files").getAnImmediateUse() |
    +      exists(DataFlow::Node files | files = request().getMember("files").getAUse() |
             this.asCfgNode().(SubscriptNode).getObject() = files.asCfgNode()
             or
             this.(DataFlow::MethodCallNode).calls(files, "get")
    diff --git a/python/ql/test/library-tests/frameworks/flask/taint_test.py b/python/ql/test/library-tests/frameworks/flask/taint_test.py
    index 609e4caf091..dcca8ff6681 100644
    --- a/python/ql/test/library-tests/frameworks/flask/taint_test.py
    +++ b/python/ql/test/library-tests/frameworks/flask/taint_test.py
    @@ -204,7 +204,7 @@ def test_taint(name = "World!", number="0", foo="foo"):  # $requestHandler route
             b.getlist('key'), # $ tainted
             gl('key'), # $ tainted
     
    -        files.get('key').filename, # $ MISSING: tainted
    +        files.get('key').filename, # $ tainted
         )
     
         # aliasing tests
    
    From de4390cdf6500f352591e69ad4568243cc7408d1 Mon Sep 17 00:00:00 2001
    From: Rasmus Wriedt Larsen 
    Date: Mon, 2 May 2022 14:19:45 +0200
    Subject: [PATCH 0226/1618] Python: Improve Flask `request.files` handling even
     more
    
    ---
     python/ql/lib/semmle/python/frameworks/Flask.qll | 15 +++++----------
     1 file changed, 5 insertions(+), 10 deletions(-)
    
    diff --git a/python/ql/lib/semmle/python/frameworks/Flask.qll b/python/ql/lib/semmle/python/frameworks/Flask.qll
    index 19400aba739..02331ed316e 100644
    --- a/python/ql/lib/semmle/python/frameworks/Flask.qll
    +++ b/python/ql/lib/semmle/python/frameworks/Flask.qll
    @@ -411,21 +411,16 @@ module Flask {
       /** An `FileStorage` instance that originates from a flask request. */
       private class FlaskRequestFileStorageInstances extends Werkzeug::FileStorage::InstanceSource {
         FlaskRequestFileStorageInstances() {
    -      // TODO: this currently only works in local-scope, since writing type-trackers for
    -      // this is a little too much effort. Once API-graphs are available for more
    -      // things, we can rewrite this.
    -      //
           // TODO: This approach for identifying member-access is very adhoc, and we should
           // be able to do something more structured for providing modeling of the members
           // of a container-object.
    -      exists(DataFlow::Node files | files = request().getMember("files").getAUse() |
    -        this.asCfgNode().(SubscriptNode).getObject() = files.asCfgNode()
    +      exists(API::Node files | files = request().getMember("files") |
    +        this.asCfgNode().(SubscriptNode).getObject() = files.getAUse().asCfgNode()
             or
    -        this.(DataFlow::MethodCallNode).calls(files, "get")
    +        this = files.getMember("get").getACall()
             or
    -        exists(DataFlow::MethodCallNode getlistCall | getlistCall.calls(files, "getlist") |
    -          this.asCfgNode().(SubscriptNode).getObject() = getlistCall.asCfgNode()
    -        )
    +        this.asCfgNode().(SubscriptNode).getObject() =
    +          files.getMember("getlist").getReturn().getAUse().asCfgNode()
           )
         }
       }
    
    From 7e1be3172e946da4620eb52c112391ad6241b36b Mon Sep 17 00:00:00 2001
    From: Rasmus Wriedt Larsen 
    Date: Mon, 2 May 2022 14:24:13 +0200
    Subject: [PATCH 0227/1618] Python: Add change-note
    
    ---
     .../change-notes/2022-05-02-flask-request-files-modeling.md  | 5 +++++
     1 file changed, 5 insertions(+)
     create mode 100644 python/ql/lib/change-notes/2022-05-02-flask-request-files-modeling.md
    
    diff --git a/python/ql/lib/change-notes/2022-05-02-flask-request-files-modeling.md b/python/ql/lib/change-notes/2022-05-02-flask-request-files-modeling.md
    new file mode 100644
    index 00000000000..9b80811a608
    --- /dev/null
    +++ b/python/ql/lib/change-notes/2022-05-02-flask-request-files-modeling.md
    @@ -0,0 +1,5 @@
    +---
    +category: minorAnalysis
    +---
    +The modeling of `request.files` in Flask has been fixed, so we now properly handle
    +assignments to local variables (such as `files = request.files; files['key'].filename`).
    
    From 8602a6f6c98f5a9f46db2c099ff7451b64f9b550 Mon Sep 17 00:00:00 2001
    From: Tony Torralba 
    Date: Mon, 2 May 2022 15:38:28 +0200
    Subject: [PATCH 0228/1618] Add models for OkHttp and Retrofit
    
    ---
     .../code/java/dataflow/ExternalFlow.qll       |   2 +
     .../semmle/code/java/frameworks/OkHttp.qll    |  55 ++
     .../semmle/code/java/frameworks/Retrofit.qll  |  12 +
     .../library-tests/frameworks/okhttp/Test.java | 237 ++++++++
     .../library-tests/frameworks/okhttp/options   |   1 +
     .../frameworks/okhttp/test.expected           |   0
     .../library-tests/frameworks/okhttp/test.ql   |   6 +
     .../frameworks/retrofit/Test.java             |  16 +
     .../library-tests/frameworks/retrofit/options |   1 +
     .../frameworks/retrofit/test.expected         |   0
     .../library-tests/frameworks/retrofit/test.ql |   6 +
     .../stubs/okhttp-4.9.3/kotlin/Function.java   |   8 +
     .../test/stubs/okhttp-4.9.3/kotlin/Pair.java  |  19 +
     .../test/stubs/okhttp-4.9.3/kotlin/Unit.java  |  11 +
     .../collections/AbstractCollection.java       |  26 +
     .../kotlin/collections/AbstractList.java      |  40 ++
     .../kotlin/jvm/functions/Function0.java       |  10 +
     .../jvm/internal/markers/KMappedMarker.java   |   8 +
     .../stubs/okhttp-4.9.3/okhttp3/Address.java   |  84 +++
     .../okhttp-4.9.3/okhttp3/Authenticator.java   |  19 +
     .../stubs/okhttp-4.9.3/okhttp3/Cache.java     | 137 +++++
     .../okhttp-4.9.3/okhttp3/CacheControl.java    |  78 +++
     .../test/stubs/okhttp-4.9.3/okhttp3/Call.java |  24 +
     .../stubs/okhttp-4.9.3/okhttp3/Callback.java  |  13 +
     .../okhttp3/CertificatePinner.java            |  51 ++
     .../stubs/okhttp-4.9.3/okhttp3/Challenge.java |  46 ++
     .../okhttp-4.9.3/okhttp3/CipherSuite.java     | 155 +++++
     .../okhttp-4.9.3/okhttp3/Connection.java      |  16 +
     .../okhttp-4.9.3/okhttp3/ConnectionPool.java  |  17 +
     .../okhttp-4.9.3/okhttp3/ConnectionSpec.java  |  58 ++
     .../stubs/okhttp-4.9.3/okhttp3/Cookie.java    |  93 +++
     .../stubs/okhttp-4.9.3/okhttp3/CookieJar.java |  19 +
     .../okhttp-4.9.3/okhttp3/Dispatcher.java      |  62 ++
     .../test/stubs/okhttp-4.9.3/okhttp3/Dns.java  |  17 +
     .../okhttp-4.9.3/okhttp3/EventListener.java   |  60 ++
     .../stubs/okhttp-4.9.3/okhttp3/Handshake.java |  78 +++
     .../stubs/okhttp-4.9.3/okhttp3/Headers.java   | 161 ++++++
     .../stubs/okhttp-4.9.3/okhttp3/HttpUrl.java   | 390 +++++++++++++
     .../okhttp-4.9.3/okhttp3/Interceptor.java     |  34 ++
     .../stubs/okhttp-4.9.3/okhttp3/MediaType.java |  63 +++
     .../okhttp-4.9.3/okhttp3/OkHttpClient.java    | 528 ++++++++++++++++++
     .../stubs/okhttp-4.9.3/okhttp3/Protocol.java  |  18 +
     .../stubs/okhttp-4.9.3/okhttp3/Request.java   | 182 ++++++
     .../okhttp-4.9.3/okhttp3/RequestBody.java     |  49 ++
     .../stubs/okhttp-4.9.3/okhttp3/Response.java  | 270 +++++++++
     .../okhttp-4.9.3/okhttp3/ResponseBody.java    |  45 ++
     .../stubs/okhttp-4.9.3/okhttp3/Route.java     |  41 ++
     .../okhttp-4.9.3/okhttp3/TlsVersion.java      |  28 +
     .../stubs/okhttp-4.9.3/okhttp3/WebSocket.java |  21 +
     .../okhttp3/WebSocketListener.java            |  18 +
     .../okhttp3/internal/cache/CacheRequest.java  |  11 +
     .../okhttp3/internal/cache/CacheStrategy.java |  20 +
     .../okhttp3/internal/cache/DiskLruCache.java  | 106 ++++
     .../okhttp3/internal/concurrent/Task.java     |  20 +
     .../internal/concurrent/TaskQueue.java        |  35 ++
     .../internal/concurrent/TaskRunner.java       |  35 ++
     .../okhttp3/internal/connection/Exchange.java |  44 ++
     .../internal/connection/ExchangeFinder.java   |  24 +
     .../okhttp3/internal/connection/RealCall.java |  63 +++
     .../internal/connection/RealConnection.java   |  65 +++
     .../connection/RealConnectionPool.java        |  31 +
     .../internal/connection/RouteDatabase.java    |  13 +
     .../okhttp3/internal/http/ExchangeCodec.java  |  31 +
     .../internal/http/RealInterceptorChain.java   |  36 ++
     .../okhttp3/internal/http2/ErrorCode.java     |  17 +
     .../okhttp3/internal/http2/Header.java        |  38 ++
     .../okhttp3/internal/http2/Hpack.java         |  34 ++
     .../internal/http2/Http2Connection.java       | 153 +++++
     .../okhttp3/internal/http2/Http2Reader.java   |  42 ++
     .../okhttp3/internal/http2/Http2Stream.java   | 104 ++++
     .../okhttp3/internal/http2/Http2Writer.java   |  39 ++
     .../okhttp3/internal/http2/PushObserver.java  |  22 +
     .../okhttp3/internal/http2/Settings.java      |  34 ++
     .../okhttp3/internal/io/FileSystem.java       |  25 +
     .../internal/tls/CertificateChainCleaner.java |  21 +
     .../okhttp3/internal/ws/RealWebSocket.java    |  66 +++
     .../internal/ws/WebSocketExtensions.java      |  34 ++
     .../okhttp3/internal/ws/WebSocketReader.java  |  24 +
     .../stubs/okhttp-4.9.3/okio/AsyncTimeout.java |  28 +
     .../test/stubs/okhttp-4.9.3/okio/Buffer.java  | 469 ++++++++++++++++
     .../stubs/okhttp-4.9.3/okio/BufferedSink.java |  41 ++
     .../okhttp-4.9.3/okio/BufferedSource.java     |  60 ++
     .../stubs/okhttp-4.9.3/okio/ByteString.java   | 284 ++++++++++
     .../test/stubs/okhttp-4.9.3/okio/Options.java |  28 +
     .../test/stubs/okhttp-4.9.3/okio/Segment.java |  31 +
     .../ql/test/stubs/okhttp-4.9.3/okio/Sink.java |  16 +
     .../test/stubs/okhttp-4.9.3/okio/Source.java  |  14 +
     .../test/stubs/okhttp-4.9.3/okio/Timeout.java |  30 +
     .../stubs/retrofit-2.9.0/kotlin/Function.java |   8 +
     .../stubs/retrofit-2.9.0/kotlin/Pair.java     |  19 +
     .../stubs/retrofit-2.9.0/kotlin/Unit.java     |  11 +
     .../collections/AbstractCollection.java       |  26 +
     .../kotlin/collections/AbstractList.java      |  40 ++
     .../kotlin/collections/IntIterator.java       |  14 +
     .../kotlin/jvm/functions/Function0.java       |  10 +
     .../kotlin/jvm/functions/Function1.java       |  10 +
     .../jvm/internal/markers/KMappedMarker.java   |   8 +
     .../kotlin/ranges/ClosedRange.java            |  12 +
     .../kotlin/ranges/IntProgression.java         |  26 +
     .../kotlin/ranges/IntRange.java               |  26 +
     .../kotlin/sequences/Sequence.java            |  10 +
     .../retrofit-2.9.0/kotlin/text/FlagEnum.java  |  10 +
     .../kotlin/text/MatchGroup.java               |  19 +
     .../kotlin/text/MatchGroupCollection.java     |  12 +
     .../kotlin/text/MatchResult.java              |  24 +
     .../retrofit-2.9.0/kotlin/text/Regex.java     |  42 ++
     .../kotlin/text/RegexOption.java              |  12 +
     .../stubs/retrofit-2.9.0/retrofit2/Call.java  |  20 +
     .../retrofit-2.9.0/retrofit2/CallAdapter.java |  22 +
     .../retrofit-2.9.0/retrofit2/Callback.java    |  12 +
     .../retrofit-2.9.0/retrofit2/Converter.java   |  24 +
     .../retrofit-2.9.0/retrofit2/Response.java    |  25 +
     .../retrofit-2.9.0/retrofit2/Retrofit.java    |  51 ++
     113 files changed, 6014 insertions(+)
     create mode 100644 java/ql/lib/semmle/code/java/frameworks/OkHttp.qll
     create mode 100644 java/ql/lib/semmle/code/java/frameworks/Retrofit.qll
     create mode 100644 java/ql/test/library-tests/frameworks/okhttp/Test.java
     create mode 100644 java/ql/test/library-tests/frameworks/okhttp/options
     create mode 100644 java/ql/test/library-tests/frameworks/okhttp/test.expected
     create mode 100644 java/ql/test/library-tests/frameworks/okhttp/test.ql
     create mode 100644 java/ql/test/library-tests/frameworks/retrofit/Test.java
     create mode 100644 java/ql/test/library-tests/frameworks/retrofit/options
     create mode 100644 java/ql/test/library-tests/frameworks/retrofit/test.expected
     create mode 100644 java/ql/test/library-tests/frameworks/retrofit/test.ql
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/kotlin/Function.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/kotlin/Pair.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/kotlin/Unit.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/kotlin/collections/AbstractCollection.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/kotlin/collections/AbstractList.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/kotlin/jvm/functions/Function0.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/kotlin/jvm/internal/markers/KMappedMarker.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Address.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Authenticator.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Cache.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/CacheControl.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Call.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Callback.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/CertificatePinner.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Challenge.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/CipherSuite.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Connection.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/ConnectionPool.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/ConnectionSpec.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Cookie.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/CookieJar.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Dispatcher.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Dns.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/EventListener.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Handshake.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Headers.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/HttpUrl.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Interceptor.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/MediaType.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/OkHttpClient.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Protocol.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Request.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/RequestBody.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Response.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/ResponseBody.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/Route.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/TlsVersion.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/WebSocket.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/WebSocketListener.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/CacheRequest.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/CacheStrategy.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/DiskLruCache.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/Task.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/TaskQueue.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/TaskRunner.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/Exchange.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/ExchangeFinder.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealCall.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealConnection.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealConnectionPool.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RouteDatabase.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http/ExchangeCodec.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http/RealInterceptorChain.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/ErrorCode.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Header.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Hpack.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Connection.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Reader.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Stream.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Writer.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/PushObserver.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Settings.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/io/FileSystem.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/tls/CertificateChainCleaner.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/RealWebSocket.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/WebSocketExtensions.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/WebSocketReader.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okio/AsyncTimeout.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okio/Buffer.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okio/BufferedSink.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okio/BufferedSource.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okio/ByteString.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okio/Options.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okio/Segment.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okio/Sink.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okio/Source.java
     create mode 100644 java/ql/test/stubs/okhttp-4.9.3/okio/Timeout.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/Function.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/Pair.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/Unit.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/AbstractCollection.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/AbstractList.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/IntIterator.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/functions/Function0.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/functions/Function1.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/internal/markers/KMappedMarker.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/ClosedRange.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/IntProgression.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/IntRange.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/sequences/Sequence.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/text/FlagEnum.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchGroup.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchGroupCollection.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchResult.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/text/Regex.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/kotlin/text/RegexOption.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/retrofit2/Call.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/retrofit2/CallAdapter.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/retrofit2/Callback.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/retrofit2/Converter.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/retrofit2/Response.java
     create mode 100644 java/ql/test/stubs/retrofit-2.9.0/retrofit2/Retrofit.java
    
    diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll
    index f3ac4a041b6..f3101c208db 100644
    --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll
    +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll
    @@ -102,8 +102,10 @@ private module Frameworks {
       private import semmle.code.java.frameworks.JsonJava
       private import semmle.code.java.frameworks.Logging
       private import semmle.code.java.frameworks.Objects
    +  private import semmle.code.java.frameworks.OkHttp
       private import semmle.code.java.frameworks.Optional
       private import semmle.code.java.frameworks.Regex
    +  private import semmle.code.java.frameworks.Retrofit
       private import semmle.code.java.frameworks.Stream
       private import semmle.code.java.frameworks.Strings
       private import semmle.code.java.frameworks.ratpack.Ratpack
    diff --git a/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll b/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll
    new file mode 100644
    index 00000000000..36e23d45881
    --- /dev/null
    +++ b/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll
    @@ -0,0 +1,55 @@
    +/**
    + * Provides classes and predicates for working with the OkHttp client.
    + */
    +
    +import java
    +import semmle.code.java.dataflow.ExternalFlow
    +
    +private class OkHttpOpenUrlSinks extends SinkModelCsv {
    +  override predicate row(string row) {
    +    row =
    +      [
    +        "okhttp3;Request;true;Request;;;Argument[0];open-url",
    +        "okhttp3;Request$Builder;true;url;;;Argument[0];open-url"
    +      ]
    +  }
    +}
    +
    +private class OKHttpSummaries extends SummaryModelCsv {
    +  override predicate row(string row) {
    +    row =
    +      [
    +        "okhttp3;HttpUrl;false;parse;;;Argument[0];ReturnValue;taint",
    +        "okhttp3;HttpUrl;false;uri;;;Argument[-1];ReturnValue;taint",
    +        "okhttp3;HttpUrl;false;url;;;Argument[-1];ReturnValue;taint",
    +        "okhttp3;HttpUrl$Builder;false;addEncodedPathSegment;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;addEncodedPathSegments;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;addEncodedQueryParameter;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;addPathSegment;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;addPathSegments;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;addQueryParameter;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;build;;;Argument[-1];ReturnValue;taint",
    +        "okhttp3;HttpUrl$Builder;false;encodedFragment;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;encodedPassword;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;encodedPath;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;encodedQuery;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;encodedUsername;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;fragment;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;fragment;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;host;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;password;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;port;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;query;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;removeAllEncodedQueryParameters;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;removeAllQueryParameters;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;removePathSegment;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;scheme;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;scheme;;;Argument[0];Argument[-1];taint",
    +        "okhttp3;HttpUrl$Builder;false;setEncodedPathSegment;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;setEncodedQueryParameter;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;setPathSegment;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;setQueryParameter;;;Argument[-1];ReturnValue;value",
    +        "okhttp3;HttpUrl$Builder;false;username;;;Argument[-1];ReturnValue;value",
    +      ]
    +  }
    +}
    diff --git a/java/ql/lib/semmle/code/java/frameworks/Retrofit.qll b/java/ql/lib/semmle/code/java/frameworks/Retrofit.qll
    new file mode 100644
    index 00000000000..cb1aaa87667
    --- /dev/null
    +++ b/java/ql/lib/semmle/code/java/frameworks/Retrofit.qll
    @@ -0,0 +1,12 @@
    +/**
    + * Provides classes and predicates for working with the Retrofit API client.
    + */
    +
    +import java
    +import semmle.code.java.dataflow.ExternalFlow
    +
    +private class RetrofitOpenUrlSinks extends SinkModelCsv {
    +  override predicate row(string row) {
    +    row = "retrofit2;Retrofit$Builder;true;baseUrl;;;Argument[0];open-url"
    +  }
    +}
    diff --git a/java/ql/test/library-tests/frameworks/okhttp/Test.java b/java/ql/test/library-tests/frameworks/okhttp/Test.java
    new file mode 100644
    index 00000000000..02950ccaa30
    --- /dev/null
    +++ b/java/ql/test/library-tests/frameworks/okhttp/Test.java
    @@ -0,0 +1,237 @@
    +package generatedtest;
    +
    +import java.net.URI;
    +import java.net.URL;
    +import okhttp3.HttpUrl;
    +import okhttp3.Request;
    +
    +// Test case generated by GenerateFlowTestCase.ql
    +public class Test {
    +
    +	Object source() {
    +		return null;
    +	}
    +
    +	void sink(Object o) {}
    +
    +	public void testSinks() {
    +		new Request((HttpUrl) source(), null, null, null, null); // $ hasValueFlow
    +		new Request.Builder().url((String) source()); // $ hasValueFlow
    +	}
    +
    +	public void test() throws Exception {
    +
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;addEncodedPathSegment;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.addEncodedPathSegment(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;addEncodedPathSegments;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.addEncodedPathSegments(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;addEncodedQueryParameter;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.addEncodedQueryParameter(null, null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;addPathSegment;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.addPathSegment(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;addPathSegments;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.addPathSegments(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;addQueryParameter;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.addQueryParameter(null, null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;build;;;Argument[-1];ReturnValue;taint"
    +			HttpUrl out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.build();
    +			sink(out); // $ hasTaintFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;encodedFragment;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.encodedFragment(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;encodedPassword;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.encodedPassword(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;encodedPath;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.encodedPath(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;encodedQuery;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.encodedQuery(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;encodedUsername;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.encodedUsername(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;fragment;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.fragment(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;host;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.host(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;password;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.password(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;port;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.port(0);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;query;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.query(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;removeAllEncodedQueryParameters;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.removeAllEncodedQueryParameters(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;removeAllQueryParameters;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.removeAllQueryParameters(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;removePathSegment;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.removePathSegment(0);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;scheme;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.scheme(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;scheme;;;Argument[0];Argument[-1];taint"
    +			HttpUrl.Builder out = null;
    +			String in = (String) source();
    +			out.scheme(in);
    +			sink(out); // $ hasTaintFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;setEncodedPathSegment;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.setEncodedPathSegment(0, null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;setEncodedQueryParameter;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.setEncodedQueryParameter(null, null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;setPathSegment;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.setPathSegment(0, null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;setQueryParameter;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.setQueryParameter(null, null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl$Builder;false;username;;;Argument[-1];ReturnValue;value"
    +			HttpUrl.Builder out = null;
    +			HttpUrl.Builder in = (HttpUrl.Builder) source();
    +			out = in.username(null);
    +			sink(out); // $ hasValueFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl;false;parse;;;Argument[0];ReturnValue;taint"
    +			HttpUrl out = null;
    +			String in = (String) source();
    +			out = HttpUrl.parse(in);
    +			sink(out); // $ hasTaintFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl;false;uri;;;Argument[-1];ReturnValue;taint"
    +			URI out = null;
    +			HttpUrl in = (HttpUrl) source();
    +			out = in.uri();
    +			sink(out); // $ hasTaintFlow
    +		}
    +		{
    +			// "okhttp3;HttpUrl;false;url;;;Argument[-1];ReturnValue;taint"
    +			URL out = null;
    +			HttpUrl in = (HttpUrl) source();
    +			out = in.url();
    +			sink(out); // $ hasTaintFlow
    +		}
    +
    +	}
    +
    +}
    diff --git a/java/ql/test/library-tests/frameworks/okhttp/options b/java/ql/test/library-tests/frameworks/okhttp/options
    new file mode 100644
    index 00000000000..597cc3181f0
    --- /dev/null
    +++ b/java/ql/test/library-tests/frameworks/okhttp/options
    @@ -0,0 +1 @@
    +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/okhttp-4.9.3
    diff --git a/java/ql/test/library-tests/frameworks/okhttp/test.expected b/java/ql/test/library-tests/frameworks/okhttp/test.expected
    new file mode 100644
    index 00000000000..e69de29bb2d
    diff --git a/java/ql/test/library-tests/frameworks/okhttp/test.ql b/java/ql/test/library-tests/frameworks/okhttp/test.ql
    new file mode 100644
    index 00000000000..e78af7d25bf
    --- /dev/null
    +++ b/java/ql/test/library-tests/frameworks/okhttp/test.ql
    @@ -0,0 +1,6 @@
    +import java
    +import TestUtilities.InlineFlowTest
    +
    +class FlowConf extends DefaultValueFlowConf {
    +  override predicate isSink(DataFlow::Node n) { super.isSink(n) or sinkNode(n, "open-url") }
    +}
    diff --git a/java/ql/test/library-tests/frameworks/retrofit/Test.java b/java/ql/test/library-tests/frameworks/retrofit/Test.java
    new file mode 100644
    index 00000000000..a5513298230
    --- /dev/null
    +++ b/java/ql/test/library-tests/frameworks/retrofit/Test.java
    @@ -0,0 +1,16 @@
    +import java.net.URL;
    +import okhttp3.HttpUrl;
    +import retrofit2.Retrofit;
    +
    +public class Test {
    +    public Object source() {
    +        return null;
    +    }
    +
    +    public void test() {
    +        Retrofit.Builder builder = new Retrofit.Builder();
    +        builder.baseUrl((String) source()); // $ hasValueFlow
    +        builder.baseUrl((URL) source()); // $ hasValueFlow
    +        builder.baseUrl((HttpUrl) source()); // $ hasValueFlow
    +    }
    +}
    diff --git a/java/ql/test/library-tests/frameworks/retrofit/options b/java/ql/test/library-tests/frameworks/retrofit/options
    new file mode 100644
    index 00000000000..87371f0fe2a
    --- /dev/null
    +++ b/java/ql/test/library-tests/frameworks/retrofit/options
    @@ -0,0 +1 @@
    +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/okhttp-4.9.3:${testdir}/../../../stubs/retrofit-2.9.0
    diff --git a/java/ql/test/library-tests/frameworks/retrofit/test.expected b/java/ql/test/library-tests/frameworks/retrofit/test.expected
    new file mode 100644
    index 00000000000..e69de29bb2d
    diff --git a/java/ql/test/library-tests/frameworks/retrofit/test.ql b/java/ql/test/library-tests/frameworks/retrofit/test.ql
    new file mode 100644
    index 00000000000..e78af7d25bf
    --- /dev/null
    +++ b/java/ql/test/library-tests/frameworks/retrofit/test.ql
    @@ -0,0 +1,6 @@
    +import java
    +import TestUtilities.InlineFlowTest
    +
    +class FlowConf extends DefaultValueFlowConf {
    +  override predicate isSink(DataFlow::Node n) { super.isSink(n) or sinkNode(n, "open-url") }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/kotlin/Function.java b/java/ql/test/stubs/okhttp-4.9.3/kotlin/Function.java
    new file mode 100644
    index 00000000000..ec16743fa7a
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/kotlin/Function.java
    @@ -0,0 +1,8 @@
    +// Generated automatically from kotlin.Function for testing purposes
    +
    +package kotlin;
    +
    +
    +public interface Function
    +{
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/kotlin/Pair.java b/java/ql/test/stubs/okhttp-4.9.3/kotlin/Pair.java
    new file mode 100644
    index 00000000000..74869657cb4
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/kotlin/Pair.java
    @@ -0,0 +1,19 @@
    +// Generated automatically from kotlin.Pair for testing purposes
    +
    +package kotlin;
    +
    +import java.io.Serializable;
    +
    +public class Pair implements Serializable
    +{
    +    protected Pair() {}
    +    public Pair(A p0, B p1){}
    +    public String toString(){ return null; }
    +    public boolean equals(Object p0){ return false; }
    +    public final A component1(){ return null; }
    +    public final A getFirst(){ return null; }
    +    public final B component2(){ return null; }
    +    public final B getSecond(){ return null; }
    +    public final Pair copy(A p0, B p1){ return null; }
    +    public int hashCode(){ return 0; }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/kotlin/Unit.java b/java/ql/test/stubs/okhttp-4.9.3/kotlin/Unit.java
    new file mode 100644
    index 00000000000..c2aeb7e3616
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/kotlin/Unit.java
    @@ -0,0 +1,11 @@
    +// Generated automatically from kotlin.Unit for testing purposes
    +
    +package kotlin;
    +
    +
    +public class Unit
    +{
    +    protected Unit() {}
    +    public String toString(){ return null; }
    +    public static Unit INSTANCE = null;
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/kotlin/collections/AbstractCollection.java b/java/ql/test/stubs/okhttp-4.9.3/kotlin/collections/AbstractCollection.java
    new file mode 100644
    index 00000000000..48555f6818e
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/kotlin/collections/AbstractCollection.java
    @@ -0,0 +1,26 @@
    +// Generated automatically from kotlin.collections.AbstractCollection for testing purposes
    +
    +package kotlin.collections;
    +
    +import java.util.Collection;
    +import java.util.Iterator;
    +import kotlin.jvm.internal.markers.KMappedMarker;
    +
    +abstract public class AbstractCollection implements Collection, KMappedMarker
    +{
    +    protected AbstractCollection(){}
    +    public  T[] toArray(T[] p0){ return null; }
    +    public Object[] toArray(){ return null; }
    +    public String toString(){ return null; }
    +    public abstract Iterator iterator();
    +    public abstract int getSize();
    +    public boolean add(E p0){ return false; }
    +    public boolean addAll(Collection p0){ return false; }
    +    public boolean contains(Object p0){ return false; }
    +    public boolean containsAll(Collection p0){ return false; }
    +    public boolean isEmpty(){ return false; }
    +    public boolean remove(Object p0){ return false; }
    +    public boolean removeAll(Collection p0){ return false; }
    +    public boolean retainAll(Collection p0){ return false; }
    +    public void clear(){}
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/kotlin/collections/AbstractList.java b/java/ql/test/stubs/okhttp-4.9.3/kotlin/collections/AbstractList.java
    new file mode 100644
    index 00000000000..1a11dbf9132
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/kotlin/collections/AbstractList.java
    @@ -0,0 +1,40 @@
    +// Generated automatically from kotlin.collections.AbstractList for testing purposes
    +
    +package kotlin.collections;
    +
    +import java.util.Collection;
    +import java.util.Iterator;
    +import java.util.List;
    +import java.util.ListIterator;
    +import kotlin.collections.AbstractCollection;
    +import kotlin.jvm.internal.markers.KMappedMarker;
    +
    +abstract public class AbstractList extends AbstractCollection implements KMappedMarker, List
    +{
    +    protected AbstractList(){}
    +    public E remove(int p0){ return null; }
    +    public E set(int p0, E p1){ return null; }
    +    public Iterator iterator(){ return null; }
    +    public List subList(int p0, int p1){ return null; }
    +    public ListIterator listIterator(){ return null; }
    +    public ListIterator listIterator(int p0){ return null; }
    +    public abstract E get(int p0);
    +    public abstract int getSize();
    +    public boolean addAll(int p0, Collection p1){ return false; }
    +    public boolean equals(Object p0){ return false; }
    +    public int hashCode(){ return 0; }
    +    public int indexOf(Object p0){ return 0; }
    +    public int lastIndexOf(Object p0){ return 0; }
    +    public static AbstractList.Companion Companion = null;
    +    public void add(int p0, E p1){}
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public final boolean orderedEquals$kotlin_stdlib(Collection p0, Collection p1){ return false; }
    +        public final int orderedHashCode$kotlin_stdlib(Collection p0){ return 0; }
    +        public final void checkBoundsIndexes$kotlin_stdlib(int p0, int p1, int p2){}
    +        public final void checkElementIndex$kotlin_stdlib(int p0, int p1){}
    +        public final void checkPositionIndex$kotlin_stdlib(int p0, int p1){}
    +        public final void checkRangeIndexes$kotlin_stdlib(int p0, int p1, int p2){}
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/kotlin/jvm/functions/Function0.java b/java/ql/test/stubs/okhttp-4.9.3/kotlin/jvm/functions/Function0.java
    new file mode 100644
    index 00000000000..93c5085ec5f
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/kotlin/jvm/functions/Function0.java
    @@ -0,0 +1,10 @@
    +// Generated automatically from kotlin.jvm.functions.Function0 for testing purposes
    +
    +package kotlin.jvm.functions;
    +
    +import kotlin.Function;
    +
    +public interface Function0 extends Function
    +{
    +    R invoke();
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/kotlin/jvm/internal/markers/KMappedMarker.java b/java/ql/test/stubs/okhttp-4.9.3/kotlin/jvm/internal/markers/KMappedMarker.java
    new file mode 100644
    index 00000000000..08178fd7cc5
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/kotlin/jvm/internal/markers/KMappedMarker.java
    @@ -0,0 +1,8 @@
    +// Generated automatically from kotlin.jvm.internal.markers.KMappedMarker for testing purposes
    +
    +package kotlin.jvm.internal.markers;
    +
    +
    +public interface KMappedMarker
    +{
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Address.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Address.java
    new file mode 100644
    index 00000000000..aa50e384773
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Address.java
    @@ -0,0 +1,84 @@
    +// Generated automatically from okhttp3.Address for testing purposes
    +
    +package okhttp3;
    +
    +import java.net.Proxy;
    +import java.net.ProxySelector;
    +import java.util.List;
    +import javax.net.SocketFactory;
    +import javax.net.ssl.HostnameVerifier;
    +import javax.net.ssl.SSLSocketFactory;
    +import okhttp3.Authenticator;
    +import okhttp3.CertificatePinner;
    +import okhttp3.ConnectionSpec;
    +import okhttp3.Dns;
    +import okhttp3.HttpUrl;
    +import okhttp3.Protocol;
    +
    +public class Address {
    +    protected Address() {}
    +
    +    public Address(String p0, int p1, Dns p2, SocketFactory p3, SSLSocketFactory p4,
    +            HostnameVerifier p5, CertificatePinner p6, Authenticator p7, Proxy p8,
    +            List p9, List p10, ProxySelector p11) {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public boolean equals(Object p0) {
    +        return false;
    +    }
    +
    +    public final Authenticator proxyAuthenticator() {
    +        return null;
    +    }
    +
    +    public final CertificatePinner certificatePinner() {
    +        return null;
    +    }
    +
    +    public final Dns dns() {
    +        return null;
    +    }
    +
    +    public final HostnameVerifier hostnameVerifier() {
    +        return null;
    +    }
    +
    +    public final HttpUrl url() {
    +        return null;
    +    }
    +
    +    public final List connectionSpecs() {
    +        return null;
    +    }
    +
    +    public final List protocols() {
    +        return null;
    +    }
    +
    +    public final Proxy proxy() {
    +        return null;
    +    }
    +
    +    public final ProxySelector proxySelector() {
    +        return null;
    +    }
    +
    +    public final SSLSocketFactory sslSocketFactory() {
    +        return null;
    +    }
    +
    +    public final SocketFactory socketFactory() {
    +        return null;
    +    }
    +
    +    public final boolean equalsNonHost$okhttp(Address p0) {
    +        return false;
    +    }
    +
    +    public int hashCode() {
    +        return 0;
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Authenticator.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Authenticator.java
    new file mode 100644
    index 00000000000..2b969cbc064
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Authenticator.java
    @@ -0,0 +1,19 @@
    +// Generated automatically from okhttp3.Authenticator for testing purposes
    +
    +package okhttp3;
    +
    +import okhttp3.Request;
    +import okhttp3.Response;
    +import okhttp3.Route;
    +
    +public interface Authenticator
    +{
    +    Request authenticate(Route p0, Response p1);
    +    static Authenticator JAVA_NET_AUTHENTICATOR = null;
    +    static Authenticator NONE = null;
    +    static Authenticator.Companion Companion = null;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Cache.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Cache.java
    new file mode 100644
    index 00000000000..789ff82e4f8
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Cache.java
    @@ -0,0 +1,137 @@
    +// Generated automatically from okhttp3.Cache for testing purposes
    +
    +package okhttp3;
    +
    +import java.io.Closeable;
    +import java.io.File;
    +import java.io.Flushable;
    +import java.util.Iterator;
    +import okhttp3.Headers;
    +import okhttp3.HttpUrl;
    +import okhttp3.Request;
    +import okhttp3.Response;
    +import okhttp3.internal.cache.CacheRequest;
    +import okhttp3.internal.cache.CacheStrategy;
    +import okhttp3.internal.cache.DiskLruCache;
    +import okhttp3.internal.io.FileSystem;
    +import okio.BufferedSource;
    +
    +public class Cache implements Closeable, Flushable {
    +    protected Cache() {}
    +
    +    public Cache(File p0, long p1) {}
    +
    +    public Cache(File p0, long p1, FileSystem p2) {}
    +
    +    public final CacheRequest put$okhttp(Response p0) {
    +        return null;
    +    }
    +
    +    public final DiskLruCache getCache$okhttp() {
    +        return null;
    +    }
    +
    +    public final File directory() {
    +        return null;
    +    }
    +
    +    public final Iterator urls() {
    +        return null;
    +    }
    +
    +    public final Response get$okhttp(Request p0) {
    +        return null;
    +    }
    +
    +    public final boolean isClosed() {
    +        return false;
    +    }
    +
    +    public final int getWriteAbortCount$okhttp() {
    +        return 0;
    +    }
    +
    +    public final int getWriteSuccessCount$okhttp() {
    +        return 0;
    +    }
    +
    +    public final int hitCount() {
    +        return 0;
    +    }
    +
    +    public final int networkCount() {
    +        return 0;
    +    }
    +
    +    public final int requestCount() {
    +        return 0;
    +    }
    +
    +    public final int writeAbortCount() {
    +        return 0;
    +    }
    +
    +    public final int writeSuccessCount() {
    +        return 0;
    +    }
    +
    +    public final long maxSize() {
    +        return 0;
    +    }
    +
    +    public final long size() {
    +        return 0;
    +    }
    +
    +    public final void delete() {}
    +
    +    public final void evictAll() {}
    +
    +    public final void initialize() {}
    +
    +    public final void remove$okhttp(Request p0) {}
    +
    +    public final void setWriteAbortCount$okhttp(int p0) {}
    +
    +    public final void setWriteSuccessCount$okhttp(int p0) {}
    +
    +    public final void trackConditionalCacheHit$okhttp() {}
    +
    +    public final void trackResponse$okhttp(CacheStrategy p0) {}
    +
    +    public final void update$okhttp(Response p0, Response p1) {}
    +
    +    public static Cache.Companion Companion = null;
    +
    +    public static String key(HttpUrl p0) {
    +        return null;
    +    }
    +
    +    public void close() {}
    +
    +    public void flush() {}
    +
    +    static public class Companion {
    +        protected Companion() {}
    +
    +        public final Headers varyHeaders(Response p0) {
    +            return null;
    +        }
    +
    +        public final String key(HttpUrl p0) {
    +            return null;
    +        }
    +
    +        public final boolean hasVaryAll(Response p0) {
    +            return false;
    +        }
    +
    +        public final boolean varyMatches(Response p0, Headers p1, Request p2) {
    +            return false;
    +        }
    +
    +        public final int readInt$okhttp(BufferedSource p0) {
    +            return 0;
    +        }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CacheControl.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CacheControl.java
    new file mode 100644
    index 00000000000..564f1cad733
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CacheControl.java
    @@ -0,0 +1,78 @@
    +// Generated automatically from okhttp3.CacheControl for testing purposes
    +
    +package okhttp3;
    +
    +import okhttp3.Headers;
    +
    +public class CacheControl {
    +    protected CacheControl() {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public final boolean immutable() {
    +        return false;
    +    }
    +
    +    public final boolean isPrivate() {
    +        return false;
    +    }
    +
    +    public final boolean isPublic() {
    +        return false;
    +    }
    +
    +    public final boolean mustRevalidate() {
    +        return false;
    +    }
    +
    +    public final boolean noCache() {
    +        return false;
    +    }
    +
    +    public final boolean noStore() {
    +        return false;
    +    }
    +
    +    public final boolean noTransform() {
    +        return false;
    +    }
    +
    +    public final boolean onlyIfCached() {
    +        return false;
    +    }
    +
    +    public final int maxAgeSeconds() {
    +        return 0;
    +    }
    +
    +    public final int maxStaleSeconds() {
    +        return 0;
    +    }
    +
    +    public final int minFreshSeconds() {
    +        return 0;
    +    }
    +
    +    public final int sMaxAgeSeconds() {
    +        return 0;
    +    }
    +
    +    public static CacheControl FORCE_CACHE = null;
    +    public static CacheControl FORCE_NETWORK = null;
    +
    +    public static CacheControl parse(Headers p0) {
    +        return null;
    +    }
    +
    +    public static CacheControl.Companion Companion = null;
    +
    +    static public class Companion {
    +        protected Companion() {}
    +
    +        public final CacheControl parse(Headers p0) {
    +            return null;
    +        }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Call.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Call.java
    new file mode 100644
    index 00000000000..69017719bb9
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Call.java
    @@ -0,0 +1,24 @@
    +// Generated automatically from okhttp3.Call for testing purposes
    +
    +package okhttp3;
    +
    +import okhttp3.Callback;
    +import okhttp3.Request;
    +import okhttp3.Response;
    +import okio.Timeout;
    +
    +public interface Call extends Cloneable
    +{
    +    Call clone();
    +    Request request();
    +    Response execute();
    +    Timeout timeout();
    +    boolean isCanceled();
    +    boolean isExecuted();
    +    static public interface Factory
    +    {
    +        Call newCall(Request p0);
    +    }
    +    void cancel();
    +    void enqueue(Callback p0);
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Callback.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Callback.java
    new file mode 100644
    index 00000000000..e86c6d20801
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Callback.java
    @@ -0,0 +1,13 @@
    +// Generated automatically from okhttp3.Callback for testing purposes
    +
    +package okhttp3;
    +
    +import java.io.IOException;
    +import okhttp3.Call;
    +import okhttp3.Response;
    +
    +public interface Callback
    +{
    +    void onFailure(Call p0, IOException p1);
    +    void onResponse(Call p0, Response p1);
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CertificatePinner.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CertificatePinner.java
    new file mode 100644
    index 00000000000..15e83d72f46
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CertificatePinner.java
    @@ -0,0 +1,51 @@
    +// Generated automatically from okhttp3.CertificatePinner for testing purposes
    +
    +package okhttp3;
    +
    +import java.security.cert.Certificate;
    +import java.security.cert.X509Certificate;
    +import java.util.List;
    +import java.util.Set;
    +import kotlin.jvm.functions.Function0;
    +import okhttp3.internal.tls.CertificateChainCleaner;
    +import okio.ByteString;
    +
    +public class CertificatePinner
    +{
    +    protected CertificatePinner() {}
    +    public CertificatePinner(Set p0, CertificateChainCleaner p1){}
    +    public boolean equals(Object p0){ return false; }
    +    public final CertificateChainCleaner getCertificateChainCleaner$okhttp(){ return null; }
    +    public final CertificatePinner withCertificateChainCleaner$okhttp(CertificateChainCleaner p0){ return null; }
    +    public final List findMatchingPins(String p0){ return null; }
    +    public final Set getPins(){ return null; }
    +    public final void check$okhttp(String p0, Function0> p1){}
    +    public final void check(String p0, Certificate... p1){}
    +    public final void check(String p0, List p1){}
    +    public int hashCode(){ return 0; }
    +    public static ByteString sha1Hash(X509Certificate p0){ return null; }
    +    public static ByteString sha256Hash(X509Certificate p0){ return null; }
    +    public static CertificatePinner DEFAULT = null;
    +    public static CertificatePinner.Companion Companion = null;
    +    public static String pin(Certificate p0){ return null; }
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public final ByteString sha1Hash(X509Certificate p0){ return null; }
    +        public final ByteString sha256Hash(X509Certificate p0){ return null; }
    +        public final String pin(Certificate p0){ return null; }
    +    }
    +    static public class Pin
    +    {
    +        protected Pin() {}
    +        public Pin(String p0, String p1){}
    +        public String toString(){ return null; }
    +        public boolean equals(Object p0){ return false; }
    +        public final ByteString getHash(){ return null; }
    +        public final String getHashAlgorithm(){ return null; }
    +        public final String getPattern(){ return null; }
    +        public final boolean matchesCertificate(X509Certificate p0){ return false; }
    +        public final boolean matchesHostname(String p0){ return false; }
    +        public int hashCode(){ return 0; }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Challenge.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Challenge.java
    new file mode 100644
    index 00000000000..f64fe1436b4
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Challenge.java
    @@ -0,0 +1,46 @@
    +// Generated automatically from okhttp3.Challenge for testing purposes
    +
    +package okhttp3;
    +
    +import java.nio.charset.Charset;
    +import java.util.Map;
    +
    +public class Challenge {
    +    protected Challenge() {}
    +
    +    public Challenge(String p0, Map p1) {}
    +
    +    public Challenge(String p0, String p1) {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public boolean equals(Object p0) {
    +        return false;
    +    }
    +
    +    public final Challenge withCharset(Charset p0) {
    +        return null;
    +    }
    +
    +    public final Charset charset() {
    +        return null;
    +    }
    +
    +    public final Map authParams() {
    +        return null;
    +    }
    +
    +    public final String realm() {
    +        return null;
    +    }
    +
    +    public final String scheme() {
    +        return null;
    +    }
    +
    +    public int hashCode() {
    +        return 0;
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CipherSuite.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CipherSuite.java
    new file mode 100644
    index 00000000000..24d10e5da04
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CipherSuite.java
    @@ -0,0 +1,155 @@
    +// Generated automatically from okhttp3.CipherSuite for testing purposes
    +
    +package okhttp3;
    +
    +import java.util.Comparator;
    +
    +public class CipherSuite {
    +    protected CipherSuite() {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public final String javaName() {
    +        return null;
    +    }
    +
    +    public static CipherSuite TLS_AES_128_CCM_8_SHA256 = null;
    +    public static CipherSuite TLS_AES_128_CCM_SHA256 = null;
    +    public static CipherSuite TLS_AES_128_GCM_SHA256 = null;
    +    public static CipherSuite TLS_AES_256_GCM_SHA384 = null;
    +    public static CipherSuite TLS_CHACHA20_POLY1305_SHA256 = null;
    +    public static CipherSuite TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_DSS_WITH_AES_128_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 = null;
    +    public static CipherSuite TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 = null;
    +    public static CipherSuite TLS_DHE_DSS_WITH_AES_256_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 = null;
    +    public static CipherSuite TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 = null;
    +    public static CipherSuite TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_DSS_WITH_DES_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_RSA_WITH_AES_128_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 = null;
    +    public static CipherSuite TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 = null;
    +    public static CipherSuite TLS_DHE_RSA_WITH_AES_256_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 = null;
    +    public static CipherSuite TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 = null;
    +    public static CipherSuite TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA = null;
    +    public static CipherSuite TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = null;
    +    public static CipherSuite TLS_DHE_RSA_WITH_DES_CBC_SHA = null;
    +    public static CipherSuite TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = null;
    +    public static CipherSuite TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 = null;
    +    public static CipherSuite TLS_DH_anon_WITH_3DES_EDE_CBC_SHA = null;
    +    public static CipherSuite TLS_DH_anon_WITH_AES_128_CBC_SHA = null;
    +    public static CipherSuite TLS_DH_anon_WITH_AES_128_CBC_SHA256 = null;
    +    public static CipherSuite TLS_DH_anon_WITH_AES_128_GCM_SHA256 = null;
    +    public static CipherSuite TLS_DH_anon_WITH_AES_256_CBC_SHA = null;
    +    public static CipherSuite TLS_DH_anon_WITH_AES_256_CBC_SHA256 = null;
    +    public static CipherSuite TLS_DH_anon_WITH_AES_256_GCM_SHA384 = null;
    +    public static CipherSuite TLS_DH_anon_WITH_DES_CBC_SHA = null;
    +    public static CipherSuite TLS_DH_anon_WITH_RC4_128_MD5 = null;
    +    public static CipherSuite TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 = null;
    +    public static CipherSuite TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 = null;
    +    public static CipherSuite TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 = null;
    +    public static CipherSuite TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 = null;
    +    public static CipherSuite TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 = null;
    +    public static CipherSuite TLS_ECDHE_ECDSA_WITH_NULL_SHA = null;
    +    public static CipherSuite TLS_ECDHE_ECDSA_WITH_RC4_128_SHA = null;
    +    public static CipherSuite TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 = null;
    +    public static CipherSuite TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 = null;
    +    public static CipherSuite TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 = null;
    +    public static CipherSuite TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 = null;
    +    public static CipherSuite TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 = null;
    +    public static CipherSuite TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 = null;
    +    public static CipherSuite TLS_ECDHE_RSA_WITH_NULL_SHA = null;
    +    public static CipherSuite TLS_ECDHE_RSA_WITH_RC4_128_SHA = null;
    +    public static CipherSuite TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 = null;
    +    public static CipherSuite TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 = null;
    +    public static CipherSuite TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 = null;
    +    public static CipherSuite TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 = null;
    +    public static CipherSuite TLS_ECDH_ECDSA_WITH_NULL_SHA = null;
    +    public static CipherSuite TLS_ECDH_ECDSA_WITH_RC4_128_SHA = null;
    +    public static CipherSuite TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDH_RSA_WITH_AES_128_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 = null;
    +    public static CipherSuite TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 = null;
    +    public static CipherSuite TLS_ECDH_RSA_WITH_AES_256_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 = null;
    +    public static CipherSuite TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 = null;
    +    public static CipherSuite TLS_ECDH_RSA_WITH_NULL_SHA = null;
    +    public static CipherSuite TLS_ECDH_RSA_WITH_RC4_128_SHA = null;
    +    public static CipherSuite TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDH_anon_WITH_AES_128_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDH_anon_WITH_AES_256_CBC_SHA = null;
    +    public static CipherSuite TLS_ECDH_anon_WITH_NULL_SHA = null;
    +    public static CipherSuite TLS_ECDH_anon_WITH_RC4_128_SHA = null;
    +    public static CipherSuite TLS_EMPTY_RENEGOTIATION_INFO_SCSV = null;
    +    public static CipherSuite TLS_FALLBACK_SCSV = null;
    +    public static CipherSuite TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 = null;
    +    public static CipherSuite TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA = null;
    +    public static CipherSuite TLS_KRB5_EXPORT_WITH_RC4_40_MD5 = null;
    +    public static CipherSuite TLS_KRB5_EXPORT_WITH_RC4_40_SHA = null;
    +    public static CipherSuite TLS_KRB5_WITH_3DES_EDE_CBC_MD5 = null;
    +    public static CipherSuite TLS_KRB5_WITH_3DES_EDE_CBC_SHA = null;
    +    public static CipherSuite TLS_KRB5_WITH_DES_CBC_MD5 = null;
    +    public static CipherSuite TLS_KRB5_WITH_DES_CBC_SHA = null;
    +    public static CipherSuite TLS_KRB5_WITH_RC4_128_MD5 = null;
    +    public static CipherSuite TLS_KRB5_WITH_RC4_128_SHA = null;
    +    public static CipherSuite TLS_PSK_WITH_3DES_EDE_CBC_SHA = null;
    +    public static CipherSuite TLS_PSK_WITH_AES_128_CBC_SHA = null;
    +    public static CipherSuite TLS_PSK_WITH_AES_256_CBC_SHA = null;
    +    public static CipherSuite TLS_PSK_WITH_RC4_128_SHA = null;
    +    public static CipherSuite TLS_RSA_EXPORT_WITH_DES40_CBC_SHA = null;
    +    public static CipherSuite TLS_RSA_EXPORT_WITH_RC4_40_MD5 = null;
    +    public static CipherSuite TLS_RSA_WITH_3DES_EDE_CBC_SHA = null;
    +    public static CipherSuite TLS_RSA_WITH_AES_128_CBC_SHA = null;
    +    public static CipherSuite TLS_RSA_WITH_AES_128_CBC_SHA256 = null;
    +    public static CipherSuite TLS_RSA_WITH_AES_128_GCM_SHA256 = null;
    +    public static CipherSuite TLS_RSA_WITH_AES_256_CBC_SHA = null;
    +    public static CipherSuite TLS_RSA_WITH_AES_256_CBC_SHA256 = null;
    +    public static CipherSuite TLS_RSA_WITH_AES_256_GCM_SHA384 = null;
    +    public static CipherSuite TLS_RSA_WITH_CAMELLIA_128_CBC_SHA = null;
    +    public static CipherSuite TLS_RSA_WITH_CAMELLIA_256_CBC_SHA = null;
    +    public static CipherSuite TLS_RSA_WITH_DES_CBC_SHA = null;
    +    public static CipherSuite TLS_RSA_WITH_NULL_MD5 = null;
    +    public static CipherSuite TLS_RSA_WITH_NULL_SHA = null;
    +    public static CipherSuite TLS_RSA_WITH_NULL_SHA256 = null;
    +    public static CipherSuite TLS_RSA_WITH_RC4_128_MD5 = null;
    +    public static CipherSuite TLS_RSA_WITH_RC4_128_SHA = null;
    +    public static CipherSuite TLS_RSA_WITH_SEED_CBC_SHA = null;
    +
    +    public static CipherSuite forJavaName(String p0) {
    +        return null;
    +    }
    +
    +    public static CipherSuite.Companion Companion = null;
    +
    +    static public class Companion {
    +        protected Companion() {}
    +
    +        public final CipherSuite forJavaName(String p0) {
    +            return null;
    +        }
    +
    +        public final Comparator getORDER_BY_NAME$okhttp() {
    +            return null;
    +        }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Connection.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Connection.java
    new file mode 100644
    index 00000000000..636a95bccc8
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Connection.java
    @@ -0,0 +1,16 @@
    +// Generated automatically from okhttp3.Connection for testing purposes
    +
    +package okhttp3;
    +
    +import java.net.Socket;
    +import okhttp3.Handshake;
    +import okhttp3.Protocol;
    +import okhttp3.Route;
    +
    +public interface Connection
    +{
    +    Handshake handshake();
    +    Protocol protocol();
    +    Route route();
    +    Socket socket();
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/ConnectionPool.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/ConnectionPool.java
    new file mode 100644
    index 00000000000..ec315626985
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/ConnectionPool.java
    @@ -0,0 +1,17 @@
    +// Generated automatically from okhttp3.ConnectionPool for testing purposes
    +
    +package okhttp3;
    +
    +import java.util.concurrent.TimeUnit;
    +import okhttp3.internal.connection.RealConnectionPool;
    +
    +public class ConnectionPool
    +{
    +    public ConnectionPool(){}
    +    public ConnectionPool(RealConnectionPool p0){}
    +    public ConnectionPool(int p0, long p1, TimeUnit p2){}
    +    public final RealConnectionPool getDelegate$okhttp(){ return null; }
    +    public final int connectionCount(){ return 0; }
    +    public final int idleConnectionCount(){ return 0; }
    +    public final void evictAll(){}
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/ConnectionSpec.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/ConnectionSpec.java
    new file mode 100644
    index 00000000000..9f8d14b4714
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/ConnectionSpec.java
    @@ -0,0 +1,58 @@
    +// Generated automatically from okhttp3.ConnectionSpec for testing purposes
    +
    +package okhttp3;
    +
    +import java.util.List;
    +import javax.net.ssl.SSLSocket;
    +import okhttp3.CipherSuite;
    +import okhttp3.TlsVersion;
    +
    +public class ConnectionSpec {
    +    protected ConnectionSpec() {}
    +
    +    public ConnectionSpec(boolean p0, boolean p1, String[] p2, String[] p3) {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public boolean equals(Object p0) {
    +        return false;
    +    }
    +
    +    public final List cipherSuites() {
    +        return null;
    +    }
    +
    +    public final List tlsVersions() {
    +        return null;
    +    }
    +
    +    public final boolean isCompatible(SSLSocket p0) {
    +        return false;
    +    }
    +
    +    public final boolean isTls() {
    +        return false;
    +    }
    +
    +    public final boolean supportsTlsExtensions() {
    +        return false;
    +    }
    +
    +    public final void apply$okhttp(SSLSocket p0, boolean p1) {}
    +
    +    public int hashCode() {
    +        return 0;
    +    }
    +
    +    public static ConnectionSpec CLEARTEXT = null;
    +    public static ConnectionSpec COMPATIBLE_TLS = null;
    +    public static ConnectionSpec MODERN_TLS = null;
    +    public static ConnectionSpec RESTRICTED_TLS = null;
    +    public static ConnectionSpec.Companion Companion = null;
    +
    +    static public class Companion {
    +        protected Companion() {}
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Cookie.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Cookie.java
    new file mode 100644
    index 00000000000..3ffd4a2a270
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Cookie.java
    @@ -0,0 +1,93 @@
    +// Generated automatically from okhttp3.Cookie for testing purposes
    +
    +package okhttp3;
    +
    +import java.util.List;
    +import okhttp3.Headers;
    +import okhttp3.HttpUrl;
    +
    +public class Cookie {
    +    protected Cookie() {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public boolean equals(Object p0) {
    +        return false;
    +    }
    +
    +    public final String domain() {
    +        return null;
    +    }
    +
    +    public final String name() {
    +        return null;
    +    }
    +
    +    public final String path() {
    +        return null;
    +    }
    +
    +    public final String toString$okhttp(boolean p0) {
    +        return null;
    +    }
    +
    +    public final String value() {
    +        return null;
    +    }
    +
    +    public final boolean hostOnly() {
    +        return false;
    +    }
    +
    +    public final boolean httpOnly() {
    +        return false;
    +    }
    +
    +    public final boolean matches(HttpUrl p0) {
    +        return false;
    +    }
    +
    +    public final boolean persistent() {
    +        return false;
    +    }
    +
    +    public final boolean secure() {
    +        return false;
    +    }
    +
    +    public final long expiresAt() {
    +        return 0;
    +    }
    +
    +    public int hashCode() {
    +        return 0;
    +    }
    +
    +    public static Cookie parse(HttpUrl p0, String p1) {
    +        return null;
    +    }
    +
    +    public static Cookie.Companion Companion = null;
    +
    +    public static List parseAll(HttpUrl p0, Headers p1) {
    +        return null;
    +    }
    +
    +    static public class Companion {
    +        protected Companion() {}
    +
    +        public final Cookie parse$okhttp(long p0, HttpUrl p1, String p2) {
    +            return null;
    +        }
    +
    +        public final Cookie parse(HttpUrl p0, String p1) {
    +            return null;
    +        }
    +
    +        public final List parseAll(HttpUrl p0, Headers p1) {
    +            return null;
    +        }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CookieJar.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CookieJar.java
    new file mode 100644
    index 00000000000..59d63069688
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/CookieJar.java
    @@ -0,0 +1,19 @@
    +// Generated automatically from okhttp3.CookieJar for testing purposes
    +
    +package okhttp3;
    +
    +import java.util.List;
    +import okhttp3.Cookie;
    +import okhttp3.HttpUrl;
    +
    +public interface CookieJar
    +{
    +    List loadForRequest(HttpUrl p0);
    +    static CookieJar NO_COOKIES = null;
    +    static CookieJar.Companion Companion = null;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +    }
    +    void saveFromResponse(HttpUrl p0, List p1);
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Dispatcher.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Dispatcher.java
    new file mode 100644
    index 00000000000..ca74ca9e775
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Dispatcher.java
    @@ -0,0 +1,62 @@
    +// Generated automatically from okhttp3.Dispatcher for testing purposes
    +
    +package okhttp3;
    +
    +import java.util.List;
    +import java.util.concurrent.ExecutorService;
    +import okhttp3.Call;
    +import okhttp3.internal.connection.RealCall;
    +
    +public class Dispatcher {
    +    public Dispatcher() {}
    +
    +    public Dispatcher(ExecutorService p0) {}
    +
    +    public final ExecutorService executorService() {
    +        return null;
    +    }
    +
    +    public final List queuedCalls() {
    +        return null;
    +    }
    +
    +    public final List runningCalls() {
    +        return null;
    +    }
    +
    +    public final Runnable getIdleCallback() {
    +        return null;
    +    }
    +
    +    public final int getMaxRequests() {
    +        return 0;
    +    }
    +
    +    public final int getMaxRequestsPerHost() {
    +        return 0;
    +    }
    +
    +    public final int queuedCallsCount() {
    +        return 0;
    +    }
    +
    +    public final int runningCallsCount() {
    +        return 0;
    +    }
    +
    +    public final void cancelAll() {}
    +
    +    public final void enqueue$okhttp(RealCall.AsyncCall p0) {}
    +
    +    public final void executed$okhttp(RealCall p0) {}
    +
    +    public final void finished$okhttp(RealCall p0) {}
    +
    +    public final void finished$okhttp(RealCall.AsyncCall p0) {}
    +
    +    public final void setIdleCallback(Runnable p0) {}
    +
    +    public final void setMaxRequests(int p0) {}
    +
    +    public final void setMaxRequestsPerHost(int p0) {}
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Dns.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Dns.java
    new file mode 100644
    index 00000000000..6d31f149178
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Dns.java
    @@ -0,0 +1,17 @@
    +// Generated automatically from okhttp3.Dns for testing purposes
    +
    +package okhttp3;
    +
    +import java.net.InetAddress;
    +import java.util.List;
    +
    +public interface Dns
    +{
    +    List lookup(String p0);
    +    static Dns SYSTEM = null;
    +    static Dns.Companion Companion = null;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/EventListener.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/EventListener.java
    new file mode 100644
    index 00000000000..994ecdf8183
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/EventListener.java
    @@ -0,0 +1,60 @@
    +// Generated automatically from okhttp3.EventListener for testing purposes
    +
    +package okhttp3;
    +
    +import java.io.IOException;
    +import java.net.InetAddress;
    +import java.net.InetSocketAddress;
    +import java.net.Proxy;
    +import java.util.List;
    +import okhttp3.Call;
    +import okhttp3.Connection;
    +import okhttp3.Handshake;
    +import okhttp3.HttpUrl;
    +import okhttp3.Protocol;
    +import okhttp3.Request;
    +import okhttp3.Response;
    +
    +abstract public class EventListener
    +{
    +    public EventListener(){}
    +    public static EventListener NONE = null;
    +    public static EventListener.Companion Companion = null;
    +    public void cacheConditionalHit(Call p0, Response p1){}
    +    public void cacheHit(Call p0, Response p1){}
    +    public void cacheMiss(Call p0){}
    +    public void callEnd(Call p0){}
    +    public void callFailed(Call p0, IOException p1){}
    +    public void callStart(Call p0){}
    +    public void canceled(Call p0){}
    +    public void connectEnd(Call p0, InetSocketAddress p1, Proxy p2, Protocol p3){}
    +    public void connectFailed(Call p0, InetSocketAddress p1, Proxy p2, Protocol p3, IOException p4){}
    +    public void connectStart(Call p0, InetSocketAddress p1, Proxy p2){}
    +    public void connectionAcquired(Call p0, Connection p1){}
    +    public void connectionReleased(Call p0, Connection p1){}
    +    public void dnsEnd(Call p0, String p1, List p2){}
    +    public void dnsStart(Call p0, String p1){}
    +    public void proxySelectEnd(Call p0, HttpUrl p1, List p2){}
    +    public void proxySelectStart(Call p0, HttpUrl p1){}
    +    public void requestBodyEnd(Call p0, long p1){}
    +    public void requestBodyStart(Call p0){}
    +    public void requestFailed(Call p0, IOException p1){}
    +    public void requestHeadersEnd(Call p0, Request p1){}
    +    public void requestHeadersStart(Call p0){}
    +    public void responseBodyEnd(Call p0, long p1){}
    +    public void responseBodyStart(Call p0){}
    +    public void responseFailed(Call p0, IOException p1){}
    +    public void responseHeadersEnd(Call p0, Response p1){}
    +    public void responseHeadersStart(Call p0){}
    +    public void satisfactionFailure(Call p0, Response p1){}
    +    public void secureConnectEnd(Call p0, Handshake p1){}
    +    public void secureConnectStart(Call p0){}
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +    }
    +    static public interface Factory
    +    {
    +        EventListener create(Call p0);
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Handshake.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Handshake.java
    new file mode 100644
    index 00000000000..2f97dee0c4c
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Handshake.java
    @@ -0,0 +1,78 @@
    +// Generated automatically from okhttp3.Handshake for testing purposes
    +
    +package okhttp3;
    +
    +import java.security.Principal;
    +import java.security.cert.Certificate;
    +import java.util.List;
    +import javax.net.ssl.SSLSession;
    +import kotlin.jvm.functions.Function0;
    +import okhttp3.CipherSuite;
    +import okhttp3.TlsVersion;
    +
    +public class Handshake {
    +    protected Handshake() {}
    +
    +    public Handshake(TlsVersion p0, CipherSuite p1, List p2,
    +            Function0> p3) {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public boolean equals(Object p0) {
    +        return false;
    +    }
    +
    +    public final CipherSuite cipherSuite() {
    +        return null;
    +    }
    +
    +    public final List localCertificates() {
    +        return null;
    +    }
    +
    +    public final List peerCertificates() {
    +        return null;
    +    }
    +
    +    public final Principal localPrincipal() {
    +        return null;
    +    }
    +
    +    public final Principal peerPrincipal() {
    +        return null;
    +    }
    +
    +    public final TlsVersion tlsVersion() {
    +        return null;
    +    }
    +
    +    public int hashCode() {
    +        return 0;
    +    }
    +
    +    public static Handshake get(SSLSession p0) {
    +        return null;
    +    }
    +
    +    public static Handshake get(TlsVersion p0, CipherSuite p1, List p2,
    +            List p3) {
    +        return null;
    +    }
    +
    +    public static Handshake.Companion Companion = null;
    +
    +    static public class Companion {
    +        protected Companion() {}
    +
    +        public final Handshake get(SSLSession p0) {
    +            return null;
    +        }
    +
    +        public final Handshake get(TlsVersion p0, CipherSuite p1, List p2,
    +                List p3) {
    +            return null;
    +        }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Headers.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Headers.java
    new file mode 100644
    index 00000000000..1d19626d587
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Headers.java
    @@ -0,0 +1,161 @@
    +// Generated automatically from okhttp3.Headers for testing purposes
    +
    +package okhttp3;
    +
    +import java.time.Instant;
    +import java.util.Date;
    +import java.util.Iterator;
    +import java.util.List;
    +import java.util.Map;
    +import java.util.Set;
    +import kotlin.Pair;
    +import kotlin.jvm.internal.markers.KMappedMarker;
    +
    +public class Headers implements Iterable>, KMappedMarker {
    +    protected Headers() {}
    +
    +    public Iterator> iterator() {
    +        return null;
    +    }
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public boolean equals(Object p0) {
    +        return false;
    +    }
    +
    +    public final Date getDate(String p0) {
    +        return null;
    +    }
    +
    +    public final Headers.Builder newBuilder() {
    +        return null;
    +    }
    +
    +    public final Instant getInstant(String p0) {
    +        return null;
    +    }
    +
    +    public final List values(String p0) {
    +        return null;
    +    }
    +
    +    public final Map> toMultimap() {
    +        return null;
    +    }
    +
    +    public final Set names() {
    +        return null;
    +    }
    +
    +    public final String get(String p0) {
    +        return null;
    +    }
    +
    +    public final String name(int p0) {
    +        return null;
    +    }
    +
    +    public final String value(int p0) {
    +        return null;
    +    }
    +
    +    public final int size() {
    +        return 0;
    +    }
    +
    +    public final long byteCount() {
    +        return 0;
    +    }
    +
    +    public int hashCode() {
    +        return 0;
    +    }
    +
    +    public static Headers of(Map p0) {
    +        return null;
    +    }
    +
    +    public static Headers of(String... p0) {
    +        return null;
    +    }
    +
    +    public static Headers.Companion Companion = null;
    +
    +    static public class Builder {
    +        public Builder() {}
    +
    +        public final Headers build() {
    +            return null;
    +        }
    +
    +        public final Headers.Builder add(String p0) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder add(String p0, Date p1) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder add(String p0, Instant p1) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder add(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder addAll(Headers p0) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder addLenient$okhttp(String p0) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder addLenient$okhttp(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder addUnsafeNonAscii(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder removeAll(String p0) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder set(String p0, Date p1) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder set(String p0, Instant p1) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder set(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public final List getNamesAndValues$okhttp() {
    +            return null;
    +        }
    +
    +        public final String get(String p0) {
    +            return null;
    +        }
    +    }
    +    static public class Companion {
    +        protected Companion() {}
    +
    +        public final Headers of(Map p0) {
    +            return null;
    +        }
    +
    +        public final Headers of(String... p0) {
    +            return null;
    +        }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/HttpUrl.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/HttpUrl.java
    new file mode 100644
    index 00000000000..5fef4d9606d
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/HttpUrl.java
    @@ -0,0 +1,390 @@
    +// Generated automatically from okhttp3.HttpUrl for testing purposes
    +
    +package okhttp3;
    +
    +import java.net.URI;
    +import java.net.URL;
    +import java.nio.charset.Charset;
    +import java.util.List;
    +import java.util.Set;
    +
    +public class HttpUrl {
    +    protected HttpUrl() {}
    +
    +    public HttpUrl(String p0, String p1, String p2, String p3, int p4, List p5,
    +            List p6, String p7, String p8) {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public boolean equals(Object p0) {
    +        return false;
    +    }
    +
    +    public final HttpUrl resolve(String p0) {
    +        return null;
    +    }
    +
    +    public final HttpUrl.Builder newBuilder() {
    +        return null;
    +    }
    +
    +    public final HttpUrl.Builder newBuilder(String p0) {
    +        return null;
    +    }
    +
    +    public final List encodedPathSegments() {
    +        return null;
    +    }
    +
    +    public final List pathSegments() {
    +        return null;
    +    }
    +
    +    public final List queryParameterValues(String p0) {
    +        return null;
    +    }
    +
    +    public final Set queryParameterNames() {
    +        return null;
    +    }
    +
    +    public final String encodedFragment() {
    +        return null;
    +    }
    +
    +    public final String encodedPassword() {
    +        return null;
    +    }
    +
    +    public final String encodedPath() {
    +        return null;
    +    }
    +
    +    public final String encodedQuery() {
    +        return null;
    +    }
    +
    +    public final String encodedUsername() {
    +        return null;
    +    }
    +
    +    public final String fragment() {
    +        return null;
    +    }
    +
    +    public final String host() {
    +        return null;
    +    }
    +
    +    public final String password() {
    +        return null;
    +    }
    +
    +    public final String query() {
    +        return null;
    +    }
    +
    +    public final String queryParameter(String p0) {
    +        return null;
    +    }
    +
    +    public final String queryParameterName(int p0) {
    +        return null;
    +    }
    +
    +    public final String queryParameterValue(int p0) {
    +        return null;
    +    }
    +
    +    public final String redact() {
    +        return null;
    +    }
    +
    +    public final String scheme() {
    +        return null;
    +    }
    +
    +    public final String topPrivateDomain() {
    +        return null;
    +    }
    +
    +    public final String username() {
    +        return null;
    +    }
    +
    +    public final URI uri() {
    +        return null;
    +    }
    +
    +    public final URL url() {
    +        return null;
    +    }
    +
    +    public final boolean isHttps() {
    +        return false;
    +    }
    +
    +    public final int pathSize() {
    +        return 0;
    +    }
    +
    +    public final int port() {
    +        return 0;
    +    }
    +
    +    public final int querySize() {
    +        return 0;
    +    }
    +
    +    public int hashCode() {
    +        return 0;
    +    }
    +
    +    public static HttpUrl get(String p0) {
    +        return null;
    +    }
    +
    +    public static HttpUrl get(URI p0) {
    +        return null;
    +    }
    +
    +    public static HttpUrl get(URL p0) {
    +        return null;
    +    }
    +
    +    public static HttpUrl parse(String p0) {
    +        return null;
    +    }
    +
    +    public static HttpUrl.Companion Companion = null;
    +    public static String FORM_ENCODE_SET = null;
    +    public static String FRAGMENT_ENCODE_SET = null;
    +    public static String FRAGMENT_ENCODE_SET_URI = null;
    +    public static String PASSWORD_ENCODE_SET = null;
    +    public static String PATH_SEGMENT_ENCODE_SET = null;
    +    public static String PATH_SEGMENT_ENCODE_SET_URI = null;
    +    public static String QUERY_COMPONENT_ENCODE_SET = null;
    +    public static String QUERY_COMPONENT_ENCODE_SET_URI = null;
    +    public static String QUERY_COMPONENT_REENCODE_SET = null;
    +    public static String QUERY_ENCODE_SET = null;
    +    public static String USERNAME_ENCODE_SET = null;
    +
    +    public static int defaultPort(String p0) {
    +        return 0;
    +    }
    +
    +    static public class Builder {
    +        public Builder() {}
    +
    +        public String toString() {
    +            return null;
    +        }
    +
    +        public final HttpUrl build() {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder addEncodedPathSegment(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder addEncodedPathSegments(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder addEncodedQueryParameter(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder addPathSegment(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder addPathSegments(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder addQueryParameter(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder encodedFragment(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder encodedPassword(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder encodedPath(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder encodedQuery(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder encodedUsername(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder fragment(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder host(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder parse$okhttp(HttpUrl p0, String p1) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder password(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder port(int p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder query(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder reencodeForUri$okhttp() {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder removeAllEncodedQueryParameters(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder removeAllQueryParameters(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder removePathSegment(int p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder scheme(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder setEncodedPathSegment(int p0, String p1) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder setEncodedQueryParameter(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder setPathSegment(int p0, String p1) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder setQueryParameter(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public final HttpUrl.Builder username(String p0) {
    +            return null;
    +        }
    +
    +        public final List getEncodedPathSegments$okhttp() {
    +            return null;
    +        }
    +
    +        public final List getEncodedQueryNamesAndValues$okhttp() {
    +            return null;
    +        }
    +
    +        public final String getEncodedFragment$okhttp() {
    +            return null;
    +        }
    +
    +        public final String getEncodedPassword$okhttp() {
    +            return null;
    +        }
    +
    +        public final String getEncodedUsername$okhttp() {
    +            return null;
    +        }
    +
    +        public final String getHost$okhttp() {
    +            return null;
    +        }
    +
    +        public final String getScheme$okhttp() {
    +            return null;
    +        }
    +
    +        public final int getPort$okhttp() {
    +            return 0;
    +        }
    +
    +        public final void setEncodedFragment$okhttp(String p0) {}
    +
    +        public final void setEncodedPassword$okhttp(String p0) {}
    +
    +        public final void setEncodedQueryNamesAndValues$okhttp(List p0) {}
    +
    +        public final void setEncodedUsername$okhttp(String p0) {}
    +
    +        public final void setHost$okhttp(String p0) {}
    +
    +        public final void setPort$okhttp(int p0) {}
    +
    +        public final void setScheme$okhttp(String p0) {}
    +
    +        public static HttpUrl.Builder.Companion Companion = null;
    +        public static String INVALID_HOST = null;
    +
    +        static public class Companion {
    +            protected Companion() {}
    +        }
    +    }
    +    static public class Companion {
    +        protected Companion() {}
    +
    +        public final HttpUrl get(String p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl get(URI p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl get(URL p0) {
    +            return null;
    +        }
    +
    +        public final HttpUrl parse(String p0) {
    +            return null;
    +        }
    +
    +        public final List toQueryNamesAndValues$okhttp(String p0) {
    +            return null;
    +        }
    +
    +        public final String canonicalize$okhttp(String p0, int p1, int p2, String p3, boolean p4,
    +                boolean p5, boolean p6, boolean p7, Charset p8) {
    +            return null;
    +        }
    +
    +        public final String percentDecode$okhttp(String p0, int p1, int p2, boolean p3) {
    +            return null;
    +        }
    +
    +        public final int defaultPort(String p0) {
    +            return 0;
    +        }
    +
    +        public final void toPathString$okhttp(List p0, StringBuilder p1) {}
    +
    +        public final void toQueryString$okhttp(List p0, StringBuilder p1) {}
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Interceptor.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Interceptor.java
    new file mode 100644
    index 00000000000..db6c0e27b94
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Interceptor.java
    @@ -0,0 +1,34 @@
    +// Generated automatically from okhttp3.Interceptor for testing purposes
    +
    +package okhttp3;
    +
    +import java.util.concurrent.TimeUnit;
    +import kotlin.jvm.functions.Function1;
    +import okhttp3.Call;
    +import okhttp3.Connection;
    +import okhttp3.Request;
    +import okhttp3.Response;
    +
    +public interface Interceptor
    +{
    +    Response intercept(Interceptor.Chain p0);
    +    static Interceptor.Companion Companion = null;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public final Interceptor invoke(Function1 p0){ return null; }
    +    }
    +    static public interface Chain
    +    {
    +        Call call();
    +        Connection connection();
    +        Interceptor.Chain withConnectTimeout(int p0, TimeUnit p1);
    +        Interceptor.Chain withReadTimeout(int p0, TimeUnit p1);
    +        Interceptor.Chain withWriteTimeout(int p0, TimeUnit p1);
    +        Request request();
    +        Response proceed(Request p0);
    +        int connectTimeoutMillis();
    +        int readTimeoutMillis();
    +        int writeTimeoutMillis();
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/MediaType.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/MediaType.java
    new file mode 100644
    index 00000000000..2b3a2f0117a
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/MediaType.java
    @@ -0,0 +1,63 @@
    +// Generated automatically from okhttp3.MediaType for testing purposes
    +
    +package okhttp3;
    +
    +import java.nio.charset.Charset;
    +
    +public class MediaType {
    +    protected MediaType() {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public boolean equals(Object p0) {
    +        return false;
    +    }
    +
    +    public final Charset charset() {
    +        return null;
    +    }
    +
    +    public final Charset charset(Charset p0) {
    +        return null;
    +    }
    +
    +    public final String parameter(String p0) {
    +        return null;
    +    }
    +
    +    public final String subtype() {
    +        return null;
    +    }
    +
    +    public final String type() {
    +        return null;
    +    }
    +
    +    public int hashCode() {
    +        return 0;
    +    }
    +
    +    public static MediaType get(String p0) {
    +        return null;
    +    }
    +
    +    public static MediaType parse(String p0) {
    +        return null;
    +    }
    +
    +    public static MediaType.Companion Companion = null;
    +
    +    static public class Companion {
    +        protected Companion() {}
    +
    +        public final MediaType get(String p0) {
    +            return null;
    +        }
    +
    +        public final MediaType parse(String p0) {
    +            return null;
    +        }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/OkHttpClient.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/OkHttpClient.java
    new file mode 100644
    index 00000000000..2af0180eb36
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/OkHttpClient.java
    @@ -0,0 +1,528 @@
    +// Generated automatically from okhttp3.OkHttpClient for testing purposes
    +
    +package okhttp3;
    +
    +import java.net.Proxy;
    +import java.net.ProxySelector;
    +import java.time.Duration;
    +import java.util.List;
    +import java.util.concurrent.TimeUnit;
    +import javax.net.SocketFactory;
    +import javax.net.ssl.HostnameVerifier;
    +import javax.net.ssl.SSLSocketFactory;
    +import javax.net.ssl.X509TrustManager;
    +import kotlin.jvm.functions.Function1;
    +import okhttp3.Authenticator;
    +import okhttp3.Cache;
    +import okhttp3.Call;
    +import okhttp3.CertificatePinner;
    +import okhttp3.ConnectionPool;
    +import okhttp3.ConnectionSpec;
    +import okhttp3.CookieJar;
    +import okhttp3.Dispatcher;
    +import okhttp3.Dns;
    +import okhttp3.EventListener;
    +import okhttp3.Interceptor;
    +import okhttp3.Protocol;
    +import okhttp3.Request;
    +import okhttp3.Response;
    +import okhttp3.WebSocket;
    +import okhttp3.WebSocketListener;
    +import okhttp3.internal.connection.RouteDatabase;
    +import okhttp3.internal.tls.CertificateChainCleaner;
    +
    +public class OkHttpClient implements Call.Factory, Cloneable, WebSocket.Factory {
    +    public Call newCall(Request p0) {
    +        return null;
    +    }
    +
    +    public Object clone() {
    +        return null;
    +    }
    +
    +    public OkHttpClient() {}
    +
    +    public OkHttpClient(OkHttpClient.Builder p0) {}
    +
    +    public OkHttpClient.Builder newBuilder() {
    +        return null;
    +    }
    +
    +    public WebSocket newWebSocket(Request p0, WebSocketListener p1) {
    +        return null;
    +    }
    +
    +    public final Authenticator authenticator() {
    +        return null;
    +    }
    +
    +    public final Authenticator proxyAuthenticator() {
    +        return null;
    +    }
    +
    +    public final Cache cache() {
    +        return null;
    +    }
    +
    +    public final CertificateChainCleaner certificateChainCleaner() {
    +        return null;
    +    }
    +
    +    public final CertificatePinner certificatePinner() {
    +        return null;
    +    }
    +
    +    public final ConnectionPool connectionPool() {
    +        return null;
    +    }
    +
    +    public final CookieJar cookieJar() {
    +        return null;
    +    }
    +
    +    public final Dispatcher dispatcher() {
    +        return null;
    +    }
    +
    +    public final Dns dns() {
    +        return null;
    +    }
    +
    +    public final EventListener.Factory eventListenerFactory() {
    +        return null;
    +    }
    +
    +    public final HostnameVerifier hostnameVerifier() {
    +        return null;
    +    }
    +
    +    public final List connectionSpecs() {
    +        return null;
    +    }
    +
    +    public final List interceptors() {
    +        return null;
    +    }
    +
    +    public final List networkInterceptors() {
    +        return null;
    +    }
    +
    +    public final List protocols() {
    +        return null;
    +    }
    +
    +    public final Proxy proxy() {
    +        return null;
    +    }
    +
    +    public final ProxySelector proxySelector() {
    +        return null;
    +    }
    +
    +    public final RouteDatabase getRouteDatabase() {
    +        return null;
    +    }
    +
    +    public final SSLSocketFactory sslSocketFactory() {
    +        return null;
    +    }
    +
    +    public final SocketFactory socketFactory() {
    +        return null;
    +    }
    +
    +    public final X509TrustManager x509TrustManager() {
    +        return null;
    +    }
    +
    +    public final boolean followRedirects() {
    +        return false;
    +    }
    +
    +    public final boolean followSslRedirects() {
    +        return false;
    +    }
    +
    +    public final boolean retryOnConnectionFailure() {
    +        return false;
    +    }
    +
    +    public final int callTimeoutMillis() {
    +        return 0;
    +    }
    +
    +    public final int connectTimeoutMillis() {
    +        return 0;
    +    }
    +
    +    public final int pingIntervalMillis() {
    +        return 0;
    +    }
    +
    +    public final int readTimeoutMillis() {
    +        return 0;
    +    }
    +
    +    public final int writeTimeoutMillis() {
    +        return 0;
    +    }
    +
    +    public final long minWebSocketMessageToCompress() {
    +        return 0;
    +    }
    +
    +    public static OkHttpClient.Companion Companion = null;
    +
    +    static public class Builder {
    +        public Builder() {}
    +
    +        public Builder(OkHttpClient p0) {}
    +
    +        public final Authenticator getAuthenticator$okhttp() {
    +            return null;
    +        }
    +
    +        public final Authenticator getProxyAuthenticator$okhttp() {
    +            return null;
    +        }
    +
    +        public final Cache getCache$okhttp() {
    +            return null;
    +        }
    +
    +        public final CertificateChainCleaner getCertificateChainCleaner$okhttp() {
    +            return null;
    +        }
    +
    +        public final CertificatePinner getCertificatePinner$okhttp() {
    +            return null;
    +        }
    +
    +        public final ConnectionPool getConnectionPool$okhttp() {
    +            return null;
    +        }
    +
    +        public final CookieJar getCookieJar$okhttp() {
    +            return null;
    +        }
    +
    +        public final Dispatcher getDispatcher$okhttp() {
    +            return null;
    +        }
    +
    +        public final Dns getDns$okhttp() {
    +            return null;
    +        }
    +
    +        public final EventListener.Factory getEventListenerFactory$okhttp() {
    +            return null;
    +        }
    +
    +        public final HostnameVerifier getHostnameVerifier$okhttp() {
    +            return null;
    +        }
    +
    +        public final List getConnectionSpecs$okhttp() {
    +            return null;
    +        }
    +
    +        public final List getInterceptors$okhttp() {
    +            return null;
    +        }
    +
    +        public final List getNetworkInterceptors$okhttp() {
    +            return null;
    +        }
    +
    +        public final List interceptors() {
    +            return null;
    +        }
    +
    +        public final List networkInterceptors() {
    +            return null;
    +        }
    +
    +        public final List getProtocols$okhttp() {
    +            return null;
    +        }
    +
    +        public final OkHttpClient build() {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder addInterceptor(
    +                Function1 p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder addNetworkInterceptor(
    +                Function1 p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder addInterceptor(Interceptor p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder addNetworkInterceptor(Interceptor p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder authenticator(Authenticator p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder cache(Cache p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder callTimeout(Duration p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder callTimeout(long p0, TimeUnit p1) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder certificatePinner(CertificatePinner p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder connectTimeout(Duration p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder connectTimeout(long p0, TimeUnit p1) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder connectionPool(ConnectionPool p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder connectionSpecs(List p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder cookieJar(CookieJar p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder dispatcher(Dispatcher p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder dns(Dns p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder eventListener(EventListener p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder eventListenerFactory(EventListener.Factory p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder followRedirects(boolean p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder followSslRedirects(boolean p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder hostnameVerifier(HostnameVerifier p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder minWebSocketMessageToCompress(long p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder pingInterval(Duration p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder pingInterval(long p0, TimeUnit p1) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder protocols(List p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder proxy(Proxy p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder proxyAuthenticator(Authenticator p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder proxySelector(ProxySelector p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder readTimeout(Duration p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder readTimeout(long p0, TimeUnit p1) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder retryOnConnectionFailure(boolean p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder socketFactory(SocketFactory p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder sslSocketFactory(SSLSocketFactory p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder sslSocketFactory(SSLSocketFactory p0,
    +                X509TrustManager p1) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder writeTimeout(Duration p0) {
    +            return null;
    +        }
    +
    +        public final OkHttpClient.Builder writeTimeout(long p0, TimeUnit p1) {
    +            return null;
    +        }
    +
    +        public final Proxy getProxy$okhttp() {
    +            return null;
    +        }
    +
    +        public final ProxySelector getProxySelector$okhttp() {
    +            return null;
    +        }
    +
    +        public final RouteDatabase getRouteDatabase$okhttp() {
    +            return null;
    +        }
    +
    +        public final SSLSocketFactory getSslSocketFactoryOrNull$okhttp() {
    +            return null;
    +        }
    +
    +        public final SocketFactory getSocketFactory$okhttp() {
    +            return null;
    +        }
    +
    +        public final X509TrustManager getX509TrustManagerOrNull$okhttp() {
    +            return null;
    +        }
    +
    +        public final boolean getFollowRedirects$okhttp() {
    +            return false;
    +        }
    +
    +        public final boolean getFollowSslRedirects$okhttp() {
    +            return false;
    +        }
    +
    +        public final boolean getRetryOnConnectionFailure$okhttp() {
    +            return false;
    +        }
    +
    +        public final int getCallTimeout$okhttp() {
    +            return 0;
    +        }
    +
    +        public final int getConnectTimeout$okhttp() {
    +            return 0;
    +        }
    +
    +        public final int getPingInterval$okhttp() {
    +            return 0;
    +        }
    +
    +        public final int getReadTimeout$okhttp() {
    +            return 0;
    +        }
    +
    +        public final int getWriteTimeout$okhttp() {
    +            return 0;
    +        }
    +
    +        public final long getMinWebSocketMessageToCompress$okhttp() {
    +            return 0;
    +        }
    +
    +        public final void setAuthenticator$okhttp(Authenticator p0) {}
    +
    +        public final void setCache$okhttp(Cache p0) {}
    +
    +        public final void setCallTimeout$okhttp(int p0) {}
    +
    +        public final void setCertificateChainCleaner$okhttp(CertificateChainCleaner p0) {}
    +
    +        public final void setCertificatePinner$okhttp(CertificatePinner p0) {}
    +
    +        public final void setConnectTimeout$okhttp(int p0) {}
    +
    +        public final void setConnectionPool$okhttp(ConnectionPool p0) {}
    +
    +        public final void setConnectionSpecs$okhttp(List p0) {}
    +
    +        public final void setCookieJar$okhttp(CookieJar p0) {}
    +
    +        public final void setDispatcher$okhttp(Dispatcher p0) {}
    +
    +        public final void setDns$okhttp(Dns p0) {}
    +
    +        public final void setEventListenerFactory$okhttp(EventListener.Factory p0) {}
    +
    +        public final void setFollowRedirects$okhttp(boolean p0) {}
    +
    +        public final void setFollowSslRedirects$okhttp(boolean p0) {}
    +
    +        public final void setHostnameVerifier$okhttp(HostnameVerifier p0) {}
    +
    +        public final void setMinWebSocketMessageToCompress$okhttp(long p0) {}
    +
    +        public final void setPingInterval$okhttp(int p0) {}
    +
    +        public final void setProtocols$okhttp(List p0) {}
    +
    +        public final void setProxy$okhttp(Proxy p0) {}
    +
    +        public final void setProxyAuthenticator$okhttp(Authenticator p0) {}
    +
    +        public final void setProxySelector$okhttp(ProxySelector p0) {}
    +
    +        public final void setReadTimeout$okhttp(int p0) {}
    +
    +        public final void setRetryOnConnectionFailure$okhttp(boolean p0) {}
    +
    +        public final void setRouteDatabase$okhttp(RouteDatabase p0) {}
    +
    +        public final void setSocketFactory$okhttp(SocketFactory p0) {}
    +
    +        public final void setSslSocketFactoryOrNull$okhttp(SSLSocketFactory p0) {}
    +
    +        public final void setWriteTimeout$okhttp(int p0) {}
    +
    +        public final void setX509TrustManagerOrNull$okhttp(X509TrustManager p0) {}
    +    }
    +    static public class Companion {
    +        protected Companion() {}
    +
    +        public final List getDEFAULT_CONNECTION_SPECS$okhttp() {
    +            return null;
    +        }
    +
    +        public final List getDEFAULT_PROTOCOLS$okhttp() {
    +            return null;
    +        }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Protocol.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Protocol.java
    new file mode 100644
    index 00000000000..da4c21e9ee2
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Protocol.java
    @@ -0,0 +1,18 @@
    +// Generated automatically from okhttp3.Protocol for testing purposes
    +
    +package okhttp3;
    +
    +
    +public enum Protocol
    +{
    +    H2_PRIOR_KNOWLEDGE, HTTP_1_0, HTTP_1_1, HTTP_2, QUIC, SPDY_3;
    +    private Protocol() {}
    +    public String toString(){ return null; }
    +    public static Protocol get(String p0){ return null; }
    +    public static Protocol.Companion Companion = null;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public final Protocol get(String p0){ return null; }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Request.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Request.java
    new file mode 100644
    index 00000000000..f00e4c89c40
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Request.java
    @@ -0,0 +1,182 @@
    +// Generated automatically from okhttp3.Request for testing purposes
    +
    +package okhttp3;
    +
    +import java.net.URL;
    +import java.util.List;
    +import java.util.Map;
    +import okhttp3.CacheControl;
    +import okhttp3.Headers;
    +import okhttp3.HttpUrl;
    +import okhttp3.RequestBody;
    +
    +public class Request {
    +    protected Request() {}
    +
    +    public Request(HttpUrl p0, String p1, Headers p2, RequestBody p3,
    +            Map, ? extends Object> p4) {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public final  T tag(Class p0) {
    +        return null;
    +    }
    +
    +    public final CacheControl cacheControl() {
    +        return null;
    +    }
    +
    +    public final Headers headers() {
    +        return null;
    +    }
    +
    +    public final HttpUrl url() {
    +        return null;
    +    }
    +
    +    public final List headers(String p0) {
    +        return null;
    +    }
    +
    +    public final Map, Object> getTags$okhttp() {
    +        return null;
    +    }
    +
    +    public final Object tag() {
    +        return null;
    +    }
    +
    +    public final Request.Builder newBuilder() {
    +        return null;
    +    }
    +
    +    public final RequestBody body() {
    +        return null;
    +    }
    +
    +    public final String header(String p0) {
    +        return null;
    +    }
    +
    +    public final String method() {
    +        return null;
    +    }
    +
    +    public final boolean isHttps() {
    +        return false;
    +    }
    +
    +    static public class Builder {
    +        public  Request.Builder tag(Class p0, T p1) {
    +            return null;
    +        }
    +
    +        public Builder() {}
    +
    +        public Builder(Request p0) {}
    +
    +        public Request build() {
    +            return null;
    +        }
    +
    +        public Request.Builder addHeader(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public Request.Builder cacheControl(CacheControl p0) {
    +            return null;
    +        }
    +
    +        public Request.Builder delete(RequestBody p0) {
    +            return null;
    +        }
    +
    +        public Request.Builder get() {
    +            return null;
    +        }
    +
    +        public Request.Builder head() {
    +            return null;
    +        }
    +
    +        public Request.Builder header(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public Request.Builder headers(Headers p0) {
    +            return null;
    +        }
    +
    +        public Request.Builder method(String p0, RequestBody p1) {
    +            return null;
    +        }
    +
    +        public Request.Builder patch(RequestBody p0) {
    +            return null;
    +        }
    +
    +        public Request.Builder post(RequestBody p0) {
    +            return null;
    +        }
    +
    +        public Request.Builder put(RequestBody p0) {
    +            return null;
    +        }
    +
    +        public Request.Builder removeHeader(String p0) {
    +            return null;
    +        }
    +
    +        public Request.Builder tag(Object p0) {
    +            return null;
    +        }
    +
    +        public Request.Builder url(HttpUrl p0) {
    +            return null;
    +        }
    +
    +        public Request.Builder url(String p0) {
    +            return null;
    +        }
    +
    +        public Request.Builder url(URL p0) {
    +            return null;
    +        }
    +
    +        public final Headers.Builder getHeaders$okhttp() {
    +            return null;
    +        }
    +
    +        public final HttpUrl getUrl$okhttp() {
    +            return null;
    +        }
    +
    +        public final Map, Object> getTags$okhttp() {
    +            return null;
    +        }
    +
    +        public final Request.Builder delete() {
    +            return null;
    +        }
    +
    +        public final RequestBody getBody$okhttp() {
    +            return null;
    +        }
    +
    +        public final String getMethod$okhttp() {
    +            return null;
    +        }
    +
    +        public final void setBody$okhttp(RequestBody p0) {}
    +
    +        public final void setHeaders$okhttp(Headers.Builder p0) {}
    +
    +        public final void setMethod$okhttp(String p0) {}
    +
    +        public final void setTags$okhttp(Map, Object> p0) {}
    +
    +        public final void setUrl$okhttp(HttpUrl p0) {}
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/RequestBody.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/RequestBody.java
    new file mode 100644
    index 00000000000..a5d4133760a
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/RequestBody.java
    @@ -0,0 +1,49 @@
    +// Generated automatically from okhttp3.RequestBody for testing purposes
    +
    +package okhttp3;
    +
    +import java.io.File;
    +import okhttp3.MediaType;
    +import okio.BufferedSink;
    +import okio.ByteString;
    +
    +abstract public class RequestBody
    +{
    +    public RequestBody(){}
    +    public abstract MediaType contentType();
    +    public abstract void writeTo(BufferedSink p0);
    +    public boolean isDuplex(){ return false; }
    +    public boolean isOneShot(){ return false; }
    +    public long contentLength(){ return 0; }
    +    public static RequestBody create(ByteString p0, MediaType p1){ return null; }
    +    public static RequestBody create(File p0, MediaType p1){ return null; }
    +    public static RequestBody create(MediaType p0, ByteString p1){ return null; }
    +    public static RequestBody create(MediaType p0, File p1){ return null; }
    +    public static RequestBody create(MediaType p0, String p1){ return null; }
    +    public static RequestBody create(MediaType p0, byte[] p1){ return null; }
    +    public static RequestBody create(MediaType p0, byte[] p1, int p2){ return null; }
    +    public static RequestBody create(MediaType p0, byte[] p1, int p2, int p3){ return null; }
    +    public static RequestBody create(String p0, MediaType p1){ return null; }
    +    public static RequestBody create(byte[] p0){ return null; }
    +    public static RequestBody create(byte[] p0, MediaType p1){ return null; }
    +    public static RequestBody create(byte[] p0, MediaType p1, int p2){ return null; }
    +    public static RequestBody create(byte[] p0, MediaType p1, int p2, int p3){ return null; }
    +    public static RequestBody.Companion Companion = null;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public final RequestBody create(ByteString p0, MediaType p1){ return null; }
    +        public final RequestBody create(File p0, MediaType p1){ return null; }
    +        public final RequestBody create(MediaType p0, ByteString p1){ return null; }
    +        public final RequestBody create(MediaType p0, File p1){ return null; }
    +        public final RequestBody create(MediaType p0, String p1){ return null; }
    +        public final RequestBody create(MediaType p0, byte[] p1){ return null; }
    +        public final RequestBody create(MediaType p0, byte[] p1, int p2){ return null; }
    +        public final RequestBody create(MediaType p0, byte[] p1, int p2, int p3){ return null; }
    +        public final RequestBody create(String p0, MediaType p1){ return null; }
    +        public final RequestBody create(byte[] p0){ return null; }
    +        public final RequestBody create(byte[] p0, MediaType p1){ return null; }
    +        public final RequestBody create(byte[] p0, MediaType p1, int p2){ return null; }
    +        public final RequestBody create(byte[] p0, MediaType p1, int p2, int p3){ return null; }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Response.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Response.java
    new file mode 100644
    index 00000000000..a13ed203c53
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Response.java
    @@ -0,0 +1,270 @@
    +// Generated automatically from okhttp3.Response for testing purposes
    +
    +package okhttp3;
    +
    +import java.io.Closeable;
    +import java.util.List;
    +import okhttp3.CacheControl;
    +import okhttp3.Challenge;
    +import okhttp3.Handshake;
    +import okhttp3.Headers;
    +import okhttp3.Protocol;
    +import okhttp3.Request;
    +import okhttp3.ResponseBody;
    +import okhttp3.internal.connection.Exchange;
    +
    +public class Response implements Closeable {
    +    protected Response() {}
    +
    +    public Response(Request p0, Protocol p1, String p2, int p3, Handshake p4, Headers p5,
    +            ResponseBody p6, Response p7, Response p8, Response p9, long p10, long p11,
    +            Exchange p12) {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public final CacheControl cacheControl() {
    +        return null;
    +    }
    +
    +    public final Exchange exchange() {
    +        return null;
    +    }
    +
    +    public final Handshake handshake() {
    +        return null;
    +    }
    +
    +    public final Headers headers() {
    +        return null;
    +    }
    +
    +    public final Headers trailers() {
    +        return null;
    +    }
    +
    +    public final List challenges() {
    +        return null;
    +    }
    +
    +    public final List headers(String p0) {
    +        return null;
    +    }
    +
    +    public final Protocol protocol() {
    +        return null;
    +    }
    +
    +    public final Request request() {
    +        return null;
    +    }
    +
    +    public final Response cacheResponse() {
    +        return null;
    +    }
    +
    +    public final Response networkResponse() {
    +        return null;
    +    }
    +
    +    public final Response priorResponse() {
    +        return null;
    +    }
    +
    +    public final Response.Builder newBuilder() {
    +        return null;
    +    }
    +
    +    public final ResponseBody body() {
    +        return null;
    +    }
    +
    +    public final ResponseBody peekBody(long p0) {
    +        return null;
    +    }
    +
    +    public final String header(String p0) {
    +        return null;
    +    }
    +
    +    public final String header(String p0, String p1) {
    +        return null;
    +    }
    +
    +    public final String message() {
    +        return null;
    +    }
    +
    +    public final boolean isRedirect() {
    +        return false;
    +    }
    +
    +    public final boolean isSuccessful() {
    +        return false;
    +    }
    +
    +    public final int code() {
    +        return 0;
    +    }
    +
    +    public final long receivedResponseAtMillis() {
    +        return 0;
    +    }
    +
    +    public final long sentRequestAtMillis() {
    +        return 0;
    +    }
    +
    +    public void close() {}
    +
    +    static public class Builder {
    +        public Builder() {}
    +
    +        public Builder(Response p0) {}
    +
    +        public Response build() {
    +            return null;
    +        }
    +
    +        public Response.Builder addHeader(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public Response.Builder body(ResponseBody p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder cacheResponse(Response p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder code(int p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder handshake(Handshake p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder header(String p0, String p1) {
    +            return null;
    +        }
    +
    +        public Response.Builder headers(Headers p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder message(String p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder networkResponse(Response p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder priorResponse(Response p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder protocol(Protocol p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder receivedResponseAtMillis(long p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder removeHeader(String p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder request(Request p0) {
    +            return null;
    +        }
    +
    +        public Response.Builder sentRequestAtMillis(long p0) {
    +            return null;
    +        }
    +
    +        public final Exchange getExchange$okhttp() {
    +            return null;
    +        }
    +
    +        public final Handshake getHandshake$okhttp() {
    +            return null;
    +        }
    +
    +        public final Headers.Builder getHeaders$okhttp() {
    +            return null;
    +        }
    +
    +        public final Protocol getProtocol$okhttp() {
    +            return null;
    +        }
    +
    +        public final Request getRequest$okhttp() {
    +            return null;
    +        }
    +
    +        public final Response getCacheResponse$okhttp() {
    +            return null;
    +        }
    +
    +        public final Response getNetworkResponse$okhttp() {
    +            return null;
    +        }
    +
    +        public final Response getPriorResponse$okhttp() {
    +            return null;
    +        }
    +
    +        public final ResponseBody getBody$okhttp() {
    +            return null;
    +        }
    +
    +        public final String getMessage$okhttp() {
    +            return null;
    +        }
    +
    +        public final int getCode$okhttp() {
    +            return 0;
    +        }
    +
    +        public final long getReceivedResponseAtMillis$okhttp() {
    +            return 0;
    +        }
    +
    +        public final long getSentRequestAtMillis$okhttp() {
    +            return 0;
    +        }
    +
    +        public final void initExchange$okhttp(Exchange p0) {}
    +
    +        public final void setBody$okhttp(ResponseBody p0) {}
    +
    +        public final void setCacheResponse$okhttp(Response p0) {}
    +
    +        public final void setCode$okhttp(int p0) {}
    +
    +        public final void setExchange$okhttp(Exchange p0) {}
    +
    +        public final void setHandshake$okhttp(Handshake p0) {}
    +
    +        public final void setHeaders$okhttp(Headers.Builder p0) {}
    +
    +        public final void setMessage$okhttp(String p0) {}
    +
    +        public final void setNetworkResponse$okhttp(Response p0) {}
    +
    +        public final void setPriorResponse$okhttp(Response p0) {}
    +
    +        public final void setProtocol$okhttp(Protocol p0) {}
    +
    +        public final void setReceivedResponseAtMillis$okhttp(long p0) {}
    +
    +        public final void setRequest$okhttp(Request p0) {}
    +
    +        public final void setSentRequestAtMillis$okhttp(long p0) {}
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/ResponseBody.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/ResponseBody.java
    new file mode 100644
    index 00000000000..7cd78861bd8
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/ResponseBody.java
    @@ -0,0 +1,45 @@
    +// Generated automatically from okhttp3.ResponseBody for testing purposes
    +
    +package okhttp3;
    +
    +import java.io.Closeable;
    +import java.io.InputStream;
    +import java.io.Reader;
    +import okhttp3.MediaType;
    +import okio.BufferedSource;
    +import okio.ByteString;
    +
    +abstract public class ResponseBody implements Closeable
    +{
    +    public ResponseBody(){}
    +    public abstract BufferedSource source();
    +    public abstract MediaType contentType();
    +    public abstract long contentLength();
    +    public final ByteString byteString(){ return null; }
    +    public final InputStream byteStream(){ return null; }
    +    public final Reader charStream(){ return null; }
    +    public final String string(){ return null; }
    +    public final byte[] bytes(){ return null; }
    +    public static ResponseBody create(BufferedSource p0, MediaType p1, long p2){ return null; }
    +    public static ResponseBody create(ByteString p0, MediaType p1){ return null; }
    +    public static ResponseBody create(MediaType p0, ByteString p1){ return null; }
    +    public static ResponseBody create(MediaType p0, String p1){ return null; }
    +    public static ResponseBody create(MediaType p0, byte[] p1){ return null; }
    +    public static ResponseBody create(MediaType p0, long p1, BufferedSource p2){ return null; }
    +    public static ResponseBody create(String p0, MediaType p1){ return null; }
    +    public static ResponseBody create(byte[] p0, MediaType p1){ return null; }
    +    public static ResponseBody.Companion Companion = null;
    +    public void close(){}
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public final ResponseBody create(BufferedSource p0, MediaType p1, long p2){ return null; }
    +        public final ResponseBody create(ByteString p0, MediaType p1){ return null; }
    +        public final ResponseBody create(MediaType p0, ByteString p1){ return null; }
    +        public final ResponseBody create(MediaType p0, String p1){ return null; }
    +        public final ResponseBody create(MediaType p0, byte[] p1){ return null; }
    +        public final ResponseBody create(MediaType p0, long p1, BufferedSource p2){ return null; }
    +        public final ResponseBody create(String p0, MediaType p1){ return null; }
    +        public final ResponseBody create(byte[] p0, MediaType p1){ return null; }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Route.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Route.java
    new file mode 100644
    index 00000000000..bff177b55a0
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/Route.java
    @@ -0,0 +1,41 @@
    +// Generated automatically from okhttp3.Route for testing purposes
    +
    +package okhttp3;
    +
    +import java.net.InetSocketAddress;
    +import java.net.Proxy;
    +import okhttp3.Address;
    +
    +public class Route {
    +    protected Route() {}
    +
    +    public Route(Address p0, Proxy p1, InetSocketAddress p2) {}
    +
    +    public String toString() {
    +        return null;
    +    }
    +
    +    public boolean equals(Object p0) {
    +        return false;
    +    }
    +
    +    public final Address address() {
    +        return null;
    +    }
    +
    +    public final InetSocketAddress socketAddress() {
    +        return null;
    +    }
    +
    +    public final Proxy proxy() {
    +        return null;
    +    }
    +
    +    public final boolean requiresTunnel() {
    +        return false;
    +    }
    +
    +    public int hashCode() {
    +        return 0;
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/TlsVersion.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/TlsVersion.java
    new file mode 100644
    index 00000000000..fdcfdc9ab6d
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/TlsVersion.java
    @@ -0,0 +1,28 @@
    +// Generated automatically from okhttp3.TlsVersion for testing purposes
    +
    +package okhttp3;
    +
    +
    +public enum TlsVersion {
    +    SSL_3_0, TLS_1_0, TLS_1_1, TLS_1_2, TLS_1_3;
    +
    +    private TlsVersion() {}
    +
    +    public final String javaName() {
    +        return null;
    +    }
    +
    +    public static TlsVersion forJavaName(String p0) {
    +        return null;
    +    }
    +
    +    public static TlsVersion.Companion Companion = null;
    +
    +    static public class Companion {
    +        protected Companion() {}
    +
    +        public final TlsVersion forJavaName(String p0) {
    +            return null;
    +        }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/WebSocket.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/WebSocket.java
    new file mode 100644
    index 00000000000..aa987e818a9
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/WebSocket.java
    @@ -0,0 +1,21 @@
    +// Generated automatically from okhttp3.WebSocket for testing purposes
    +
    +package okhttp3;
    +
    +import okhttp3.Request;
    +import okhttp3.WebSocketListener;
    +import okio.ByteString;
    +
    +public interface WebSocket
    +{
    +    Request request();
    +    boolean close(int p0, String p1);
    +    boolean send(ByteString p0);
    +    boolean send(String p0);
    +    long queueSize();
    +    static public interface Factory
    +    {
    +        WebSocket newWebSocket(Request p0, WebSocketListener p1);
    +    }
    +    void cancel();
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/WebSocketListener.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/WebSocketListener.java
    new file mode 100644
    index 00000000000..01db429340a
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/WebSocketListener.java
    @@ -0,0 +1,18 @@
    +// Generated automatically from okhttp3.WebSocketListener for testing purposes
    +
    +package okhttp3;
    +
    +import okhttp3.Response;
    +import okhttp3.WebSocket;
    +import okio.ByteString;
    +
    +abstract public class WebSocketListener
    +{
    +    public WebSocketListener(){}
    +    public void onClosed(WebSocket p0, int p1, String p2){}
    +    public void onClosing(WebSocket p0, int p1, String p2){}
    +    public void onFailure(WebSocket p0, Throwable p1, Response p2){}
    +    public void onMessage(WebSocket p0, ByteString p1){}
    +    public void onMessage(WebSocket p0, String p1){}
    +    public void onOpen(WebSocket p0, Response p1){}
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/CacheRequest.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/CacheRequest.java
    new file mode 100644
    index 00000000000..5407de41640
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/CacheRequest.java
    @@ -0,0 +1,11 @@
    +// Generated automatically from okhttp3.internal.cache.CacheRequest for testing purposes
    +
    +package okhttp3.internal.cache;
    +
    +import okio.Sink;
    +
    +public interface CacheRequest
    +{
    +    Sink body();
    +    void abort();
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/CacheStrategy.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/CacheStrategy.java
    new file mode 100644
    index 00000000000..1805e58c0ec
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/CacheStrategy.java
    @@ -0,0 +1,20 @@
    +// Generated automatically from okhttp3.internal.cache.CacheStrategy for testing purposes
    +
    +package okhttp3.internal.cache;
    +
    +import okhttp3.Request;
    +import okhttp3.Response;
    +
    +public class CacheStrategy
    +{
    +    protected CacheStrategy() {}
    +    public CacheStrategy(Request p0, Response p1){}
    +    public final Request getNetworkRequest(){ return null; }
    +    public final Response getCacheResponse(){ return null; }
    +    public static CacheStrategy.Companion Companion = null;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public final boolean isCacheable(Response p0, Request p1){ return false; }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/DiskLruCache.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/DiskLruCache.java
    new file mode 100644
    index 00000000000..35a3b5fe3f3
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/cache/DiskLruCache.java
    @@ -0,0 +1,106 @@
    +// Generated automatically from okhttp3.internal.cache.DiskLruCache for testing purposes
    +
    +package okhttp3.internal.cache;
    +
    +import java.io.Closeable;
    +import java.io.File;
    +import java.io.Flushable;
    +import java.util.Iterator;
    +import java.util.LinkedHashMap;
    +import java.util.List;
    +import kotlin.text.Regex;
    +import okhttp3.internal.concurrent.TaskRunner;
    +import okhttp3.internal.io.FileSystem;
    +import okio.BufferedSink;
    +import okio.Sink;
    +import okio.Source;
    +
    +public class DiskLruCache implements Closeable, Flushable
    +{
    +    protected DiskLruCache() {}
    +    public DiskLruCache(FileSystem p0, File p1, int p2, int p3, long p4, TaskRunner p5){}
    +    public class Editor
    +    {
    +        protected Editor() {}
    +        public Editor(DiskLruCache.Entry p0){}
    +        public final DiskLruCache.Entry getEntry$okhttp(){ return null; }
    +        public final Sink newSink(int p0){ return null; }
    +        public final Source newSource(int p0){ return null; }
    +        public final boolean[] getWritten$okhttp(){ return null; }
    +        public final void abort(){}
    +        public final void commit(){}
    +        public final void detach$okhttp(){}
    +    }
    +    public class Entry
    +    {
    +        protected Entry() {}
    +        public Entry(String p0){}
    +        public final DiskLruCache.Editor getCurrentEditor$okhttp(){ return null; }
    +        public final DiskLruCache.Snapshot snapshot$okhttp(){ return null; }
    +        public final List getCleanFiles$okhttp(){ return null; }
    +        public final List getDirtyFiles$okhttp(){ return null; }
    +        public final String getKey$okhttp(){ return null; }
    +        public final boolean getReadable$okhttp(){ return false; }
    +        public final boolean getZombie$okhttp(){ return false; }
    +        public final int getLockingSourceCount$okhttp(){ return 0; }
    +        public final long getSequenceNumber$okhttp(){ return 0; }
    +        public final long[] getLengths$okhttp(){ return null; }
    +        public final void setCurrentEditor$okhttp(DiskLruCache.Editor p0){}
    +        public final void setLengths$okhttp(List p0){}
    +        public final void setLockingSourceCount$okhttp(int p0){}
    +        public final void setReadable$okhttp(boolean p0){}
    +        public final void setSequenceNumber$okhttp(long p0){}
    +        public final void setZombie$okhttp(boolean p0){}
    +        public final void writeLengths$okhttp(BufferedSink p0){}
    +    }
    +    public class Snapshot implements Closeable
    +    {
    +        protected Snapshot() {}
    +        public Snapshot(String p0, long p1, List p2, long[] p3){}
    +        public final DiskLruCache.Editor edit(){ return null; }
    +        public final Source getSource(int p0){ return null; }
    +        public final String key(){ return null; }
    +        public final long getLength(int p0){ return 0; }
    +        public void close(){}
    +    }
    +    public final DiskLruCache.Editor edit(String p0){ return null; }
    +    public final DiskLruCache.Editor edit(String p0, long p1){ return null; }
    +    public final DiskLruCache.Snapshot get(String p0){ return null; }
    +    public final File getDirectory(){ return null; }
    +    public final FileSystem getFileSystem$okhttp(){ return null; }
    +    public final Iterator snapshots(){ return null; }
    +    public final LinkedHashMap getLruEntries$okhttp(){ return null; }
    +    public final boolean getClosed$okhttp(){ return false; }
    +    public final boolean isClosed(){ return false; }
    +    public final boolean remove(String p0){ return false; }
    +    public final boolean removeEntry$okhttp(DiskLruCache.Entry p0){ return false; }
    +    public final int getValueCount$okhttp(){ return 0; }
    +    public final long getMaxSize(){ return 0; }
    +    public final long size(){ return 0; }
    +    public final void completeEdit$okhttp(DiskLruCache.Editor p0, boolean p1){}
    +    public final void delete(){}
    +    public final void evictAll(){}
    +    public final void initialize(){}
    +    public final void rebuildJournal$okhttp(){}
    +    public final void setClosed$okhttp(boolean p0){}
    +    public final void setMaxSize(long p0){}
    +    public final void trimToSize(){}
    +    public static DiskLruCache.Companion Companion = null;
    +    public static Regex LEGAL_KEY_PATTERN = null;
    +    public static String CLEAN = null;
    +    public static String DIRTY = null;
    +    public static String JOURNAL_FILE = null;
    +    public static String JOURNAL_FILE_BACKUP = null;
    +    public static String JOURNAL_FILE_TEMP = null;
    +    public static String MAGIC = null;
    +    public static String READ = null;
    +    public static String REMOVE = null;
    +    public static String VERSION_1 = null;
    +    public static long ANY_SEQUENCE_NUMBER = 0;
    +    public void close(){}
    +    public void flush(){}
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/Task.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/Task.java
    new file mode 100644
    index 00000000000..b21bcb7abd6
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/Task.java
    @@ -0,0 +1,20 @@
    +// Generated automatically from okhttp3.internal.concurrent.Task for testing purposes
    +
    +package okhttp3.internal.concurrent;
    +
    +import okhttp3.internal.concurrent.TaskQueue;
    +
    +abstract public class Task
    +{
    +    protected Task() {}
    +    public String toString(){ return null; }
    +    public Task(String p0, boolean p1){}
    +    public abstract long runOnce();
    +    public final String getName(){ return null; }
    +    public final TaskQueue getQueue$okhttp(){ return null; }
    +    public final boolean getCancelable(){ return false; }
    +    public final long getNextExecuteNanoTime$okhttp(){ return 0; }
    +    public final void initQueue$okhttp(TaskQueue p0){}
    +    public final void setNextExecuteNanoTime$okhttp(long p0){}
    +    public final void setQueue$okhttp(TaskQueue p0){}
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/TaskQueue.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/TaskQueue.java
    new file mode 100644
    index 00000000000..7e2dd674940
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/TaskQueue.java
    @@ -0,0 +1,35 @@
    +// Generated automatically from okhttp3.internal.concurrent.TaskQueue for testing purposes
    +
    +package okhttp3.internal.concurrent;
    +
    +import java.util.List;
    +import java.util.concurrent.CountDownLatch;
    +import kotlin.Unit;
    +import kotlin.jvm.functions.Function0;
    +import okhttp3.internal.concurrent.Task;
    +import okhttp3.internal.concurrent.TaskRunner;
    +
    +public class TaskQueue
    +{
    +    protected TaskQueue() {}
    +    public String toString(){ return null; }
    +    public TaskQueue(TaskRunner p0, String p1){}
    +    public final CountDownLatch idleLatch(){ return null; }
    +    public final List getFutureTasks$okhttp(){ return null; }
    +    public final List getScheduledTasks(){ return null; }
    +    public final String getName$okhttp(){ return null; }
    +    public final Task getActiveTask$okhttp(){ return null; }
    +    public final TaskRunner getTaskRunner$okhttp(){ return null; }
    +    public final boolean cancelAllAndDecide$okhttp(){ return false; }
    +    public final boolean getCancelActiveTask$okhttp(){ return false; }
    +    public final boolean getShutdown$okhttp(){ return false; }
    +    public final boolean scheduleAndDecide$okhttp(Task p0, long p1, boolean p2){ return false; }
    +    public final void cancelAll(){}
    +    public final void execute(String p0, long p1, boolean p2, Function0 p3){}
    +    public final void schedule(String p0, long p1, Function0 p2){}
    +    public final void schedule(Task p0, long p1){}
    +    public final void setActiveTask$okhttp(Task p0){}
    +    public final void setCancelActiveTask$okhttp(boolean p0){}
    +    public final void setShutdown$okhttp(boolean p0){}
    +    public final void shutdown(){}
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/TaskRunner.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/TaskRunner.java
    new file mode 100644
    index 00000000000..173c7135540
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/concurrent/TaskRunner.java
    @@ -0,0 +1,35 @@
    +// Generated automatically from okhttp3.internal.concurrent.TaskRunner for testing purposes
    +
    +package okhttp3.internal.concurrent;
    +
    +import java.util.List;
    +import java.util.logging.Logger;
    +import okhttp3.internal.concurrent.Task;
    +import okhttp3.internal.concurrent.TaskQueue;
    +
    +public class TaskRunner
    +{
    +    protected TaskRunner() {}
    +    public TaskRunner(TaskRunner.Backend p0){}
    +    public final List activeQueues(){ return null; }
    +    public final Task awaitTaskToRun(){ return null; }
    +    public final TaskQueue newQueue(){ return null; }
    +    public final TaskRunner.Backend getBackend(){ return null; }
    +    public final void cancelAll(){}
    +    public final void kickCoordinator$okhttp(TaskQueue p0){}
    +    public static TaskRunner INSTANCE = null;
    +    public static TaskRunner.Companion Companion = null;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public final Logger getLogger(){ return null; }
    +    }
    +    static public interface Backend
    +    {
    +        long nanoTime();
    +        void beforeTask(TaskRunner p0);
    +        void coordinatorNotify(TaskRunner p0);
    +        void coordinatorWait(TaskRunner p0, long p1);
    +        void execute(Runnable p0);
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/Exchange.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/Exchange.java
    new file mode 100644
    index 00000000000..3a3ea6f2997
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/Exchange.java
    @@ -0,0 +1,44 @@
    +// Generated automatically from okhttp3.internal.connection.Exchange for testing purposes
    +
    +package okhttp3.internal.connection;
    +
    +import java.io.IOException;
    +import okhttp3.EventListener;
    +import okhttp3.Headers;
    +import okhttp3.Request;
    +import okhttp3.Response;
    +import okhttp3.ResponseBody;
    +import okhttp3.internal.connection.ExchangeFinder;
    +import okhttp3.internal.connection.RealCall;
    +import okhttp3.internal.connection.RealConnection;
    +import okhttp3.internal.http.ExchangeCodec;
    +import okhttp3.internal.ws.RealWebSocket;
    +import okio.Sink;
    +
    +public class Exchange
    +{
    +    protected Exchange() {}
    +    public Exchange(RealCall p0, EventListener p1, ExchangeFinder p2, ExchangeCodec p3){}
    +    public final  E bodyComplete(long p0, boolean p1, boolean p2, E p3){ return null; }
    +    public final EventListener getEventListener$okhttp(){ return null; }
    +    public final ExchangeFinder getFinder$okhttp(){ return null; }
    +    public final Headers trailers(){ return null; }
    +    public final RealCall getCall$okhttp(){ return null; }
    +    public final RealConnection getConnection$okhttp(){ return null; }
    +    public final RealWebSocket.Streams newWebSocketStreams(){ return null; }
    +    public final Response.Builder readResponseHeaders(boolean p0){ return null; }
    +    public final ResponseBody openResponseBody(Response p0){ return null; }
    +    public final Sink createRequestBody(Request p0, boolean p1){ return null; }
    +    public final boolean isCoalescedConnection$okhttp(){ return false; }
    +    public final boolean isDuplex$okhttp(){ return false; }
    +    public final void cancel(){}
    +    public final void detachWithViolence(){}
    +    public final void finishRequest(){}
    +    public final void flushRequest(){}
    +    public final void noNewExchangesOnConnection(){}
    +    public final void noRequestBody(){}
    +    public final void responseHeadersEnd(Response p0){}
    +    public final void responseHeadersStart(){}
    +    public final void webSocketUpgradeFailed(){}
    +    public final void writeRequestHeaders(Request p0){}
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/ExchangeFinder.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/ExchangeFinder.java
    new file mode 100644
    index 00000000000..5565a5d71f5
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/ExchangeFinder.java
    @@ -0,0 +1,24 @@
    +// Generated automatically from okhttp3.internal.connection.ExchangeFinder for testing purposes
    +
    +package okhttp3.internal.connection;
    +
    +import java.io.IOException;
    +import okhttp3.Address;
    +import okhttp3.EventListener;
    +import okhttp3.HttpUrl;
    +import okhttp3.OkHttpClient;
    +import okhttp3.internal.connection.RealCall;
    +import okhttp3.internal.connection.RealConnectionPool;
    +import okhttp3.internal.http.ExchangeCodec;
    +import okhttp3.internal.http.RealInterceptorChain;
    +
    +public class ExchangeFinder
    +{
    +    protected ExchangeFinder() {}
    +    public ExchangeFinder(RealConnectionPool p0, Address p1, RealCall p2, EventListener p3){}
    +    public final Address getAddress$okhttp(){ return null; }
    +    public final ExchangeCodec find(OkHttpClient p0, RealInterceptorChain p1){ return null; }
    +    public final boolean retryAfterFailure(){ return false; }
    +    public final boolean sameHostAndPort(HttpUrl p0){ return false; }
    +    public final void trackFailure(IOException p0){}
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealCall.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealCall.java
    new file mode 100644
    index 00000000000..82556dc96b6
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealCall.java
    @@ -0,0 +1,63 @@
    +// Generated automatically from okhttp3.internal.connection.RealCall for testing purposes
    +
    +package okhttp3.internal.connection;
    +
    +import java.io.IOException;
    +import java.net.Socket;
    +import java.util.concurrent.ExecutorService;
    +import java.util.concurrent.atomic.AtomicInteger;
    +import okhttp3.Call;
    +import okhttp3.Callback;
    +import okhttp3.EventListener;
    +import okhttp3.OkHttpClient;
    +import okhttp3.Request;
    +import okhttp3.Response;
    +import okhttp3.internal.connection.Exchange;
    +import okhttp3.internal.connection.RealConnection;
    +import okhttp3.internal.http.RealInterceptorChain;
    +import okio.AsyncTimeout;
    +
    +public class RealCall implements Call
    +{
    +    protected RealCall() {}
    +    public AsyncTimeout timeout(){ return null; }
    +    public RealCall clone(){ return null; }
    +    public RealCall(OkHttpClient p0, Request p1, boolean p2){}
    +    public Request request(){ return null; }
    +    public Response execute(){ return null; }
    +    public boolean isCanceled(){ return false; }
    +    public boolean isExecuted(){ return false; }
    +    public class AsyncCall implements Runnable
    +    {
    +        protected AsyncCall() {}
    +        public AsyncCall(Callback p0){}
    +        public final AtomicInteger getCallsPerHost(){ return null; }
    +        public final RealCall getCall(){ return null; }
    +        public final Request getRequest(){ return null; }
    +        public final String getHost(){ return null; }
    +        public final void executeOn(ExecutorService p0){}
    +        public final void reuseCallsPerHostFrom(RealCall.AsyncCall p0){}
    +        public void run(){}
    +    }
    +    public final  E messageDone$okhttp(Exchange p0, boolean p1, boolean p2, E p3){ return null; }
    +    public final EventListener getEventListener$okhttp(){ return null; }
    +    public final Exchange getInterceptorScopedExchange$okhttp(){ return null; }
    +    public final Exchange initExchange$okhttp(RealInterceptorChain p0){ return null; }
    +    public final IOException noMoreExchanges$okhttp(IOException p0){ return null; }
    +    public final OkHttpClient getClient(){ return null; }
    +    public final RealConnection getConnection(){ return null; }
    +    public final RealConnection getConnectionToCancel(){ return null; }
    +    public final Request getOriginalRequest(){ return null; }
    +    public final Response getResponseWithInterceptorChain$okhttp(){ return null; }
    +    public final Socket releaseConnectionNoEvents$okhttp(){ return null; }
    +    public final String redactedUrl$okhttp(){ return null; }
    +    public final boolean getForWebSocket(){ return false; }
    +    public final boolean retryAfterFailure(){ return false; }
    +    public final void acquireConnectionNoEvents(RealConnection p0){}
    +    public final void enterNetworkInterceptorExchange(Request p0, boolean p1){}
    +    public final void exitNetworkInterceptorExchange$okhttp(boolean p0){}
    +    public final void setConnectionToCancel(RealConnection p0){}
    +    public final void timeoutEarlyExit(){}
    +    public void cancel(){}
    +    public void enqueue(Callback p0){}
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealConnection.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealConnection.java
    new file mode 100644
    index 00000000000..a45566bf0cc
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealConnection.java
    @@ -0,0 +1,65 @@
    +// Generated automatically from okhttp3.internal.connection.RealConnection for testing purposes
    +
    +package okhttp3.internal.connection;
    +
    +import java.io.IOException;
    +import java.lang.ref.Reference;
    +import java.net.Socket;
    +import java.util.List;
    +import okhttp3.Address;
    +import okhttp3.Call;
    +import okhttp3.Connection;
    +import okhttp3.EventListener;
    +import okhttp3.Handshake;
    +import okhttp3.OkHttpClient;
    +import okhttp3.Protocol;
    +import okhttp3.Route;
    +import okhttp3.internal.connection.Exchange;
    +import okhttp3.internal.connection.RealCall;
    +import okhttp3.internal.connection.RealConnectionPool;
    +import okhttp3.internal.http.ExchangeCodec;
    +import okhttp3.internal.http.RealInterceptorChain;
    +import okhttp3.internal.http2.Http2Connection;
    +import okhttp3.internal.http2.Http2Stream;
    +import okhttp3.internal.http2.Settings;
    +import okhttp3.internal.ws.RealWebSocket;
    +
    +public class RealConnection extends Http2Connection.Listener implements Connection
    +{
    +    protected RealConnection() {}
    +    public Handshake handshake(){ return null; }
    +    public Protocol protocol(){ return null; }
    +    public RealConnection(RealConnectionPool p0, Route p1){}
    +    public Route route(){ return null; }
    +    public Socket socket(){ return null; }
    +    public String toString(){ return null; }
    +    public final ExchangeCodec newCodec$okhttp(OkHttpClient p0, RealInterceptorChain p1){ return null; }
    +    public final List> getCalls(){ return null; }
    +    public final RealConnectionPool getConnectionPool(){ return null; }
    +    public final RealWebSocket.Streams newWebSocketStreams$okhttp(Exchange p0){ return null; }
    +    public final boolean getNoNewExchanges(){ return false; }
    +    public final boolean isEligible$okhttp(Address p0, List p1){ return false; }
    +    public final boolean isHealthy(boolean p0){ return false; }
    +    public final boolean isMultiplexed$okhttp(){ return false; }
    +    public final int getRouteFailureCount$okhttp(){ return 0; }
    +    public final long getIdleAtNs$okhttp(){ return 0; }
    +    public final void cancel(){}
    +    public final void connect(int p0, int p1, int p2, int p3, boolean p4, Call p5, EventListener p6){}
    +    public final void connectFailed$okhttp(OkHttpClient p0, Route p1, IOException p2){}
    +    public final void incrementSuccessCount$okhttp(){}
    +    public final void noCoalescedConnections$okhttp(){}
    +    public final void noNewExchanges$okhttp(){}
    +    public final void setIdleAtNs$okhttp(long p0){}
    +    public final void setNoNewExchanges(boolean p0){}
    +    public final void setRouteFailureCount$okhttp(int p0){}
    +    public final void trackFailure$okhttp(RealCall p0, IOException p1){}
    +    public static RealConnection.Companion Companion = null;
    +    public static long IDLE_CONNECTION_HEALTHY_NS = 0;
    +    public void onSettings(Http2Connection p0, Settings p1){}
    +    public void onStream(Http2Stream p0){}
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public final RealConnection newTestConnection(RealConnectionPool p0, Route p1, Socket p2, long p3){ return null; }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealConnectionPool.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealConnectionPool.java
    new file mode 100644
    index 00000000000..ea2fe9d1db5
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RealConnectionPool.java
    @@ -0,0 +1,31 @@
    +// Generated automatically from okhttp3.internal.connection.RealConnectionPool for testing purposes
    +
    +package okhttp3.internal.connection;
    +
    +import java.util.List;
    +import java.util.concurrent.TimeUnit;
    +import okhttp3.Address;
    +import okhttp3.ConnectionPool;
    +import okhttp3.Route;
    +import okhttp3.internal.concurrent.TaskRunner;
    +import okhttp3.internal.connection.RealCall;
    +import okhttp3.internal.connection.RealConnection;
    +
    +public class RealConnectionPool
    +{
    +    protected RealConnectionPool() {}
    +    public RealConnectionPool(TaskRunner p0, int p1, long p2, TimeUnit p3){}
    +    public final boolean callAcquirePooledConnection(Address p0, RealCall p1, List p2, boolean p3){ return false; }
    +    public final boolean connectionBecameIdle(RealConnection p0){ return false; }
    +    public final int connectionCount(){ return 0; }
    +    public final int idleConnectionCount(){ return 0; }
    +    public final long cleanup(long p0){ return 0; }
    +    public final void evictAll(){}
    +    public final void put(RealConnection p0){}
    +    public static RealConnectionPool.Companion Companion = null;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public final RealConnectionPool get(ConnectionPool p0){ return null; }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RouteDatabase.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RouteDatabase.java
    new file mode 100644
    index 00000000000..089718b9417
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/connection/RouteDatabase.java
    @@ -0,0 +1,13 @@
    +// Generated automatically from okhttp3.internal.connection.RouteDatabase for testing purposes
    +
    +package okhttp3.internal.connection;
    +
    +import okhttp3.Route;
    +
    +public class RouteDatabase
    +{
    +    public RouteDatabase(){}
    +    public final boolean shouldPostpone(Route p0){ return false; }
    +    public final void connected(Route p0){}
    +    public final void failed(Route p0){}
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http/ExchangeCodec.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http/ExchangeCodec.java
    new file mode 100644
    index 00000000000..209e0207e60
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http/ExchangeCodec.java
    @@ -0,0 +1,31 @@
    +// Generated automatically from okhttp3.internal.http.ExchangeCodec for testing purposes
    +
    +package okhttp3.internal.http;
    +
    +import okhttp3.Headers;
    +import okhttp3.Request;
    +import okhttp3.Response;
    +import okhttp3.internal.connection.RealConnection;
    +import okio.Sink;
    +import okio.Source;
    +
    +public interface ExchangeCodec
    +{
    +    Headers trailers();
    +    RealConnection getConnection();
    +    Response.Builder readResponseHeaders(boolean p0);
    +    Sink createRequestBody(Request p0, long p1);
    +    Source openResponseBodySource(Response p0);
    +    long reportedContentLength(Response p0);
    +    static ExchangeCodec.Companion Companion = null;
    +    static int DISCARD_STREAM_TIMEOUT_MILLIS = 0;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public static int DISCARD_STREAM_TIMEOUT_MILLIS = 0;
    +    }
    +    void cancel();
    +    void finishRequest();
    +    void flushRequest();
    +    void writeRequestHeaders(Request p0);
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http/RealInterceptorChain.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http/RealInterceptorChain.java
    new file mode 100644
    index 00000000000..0e1ce474afc
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http/RealInterceptorChain.java
    @@ -0,0 +1,36 @@
    +// Generated automatically from okhttp3.internal.http.RealInterceptorChain for testing purposes
    +
    +package okhttp3.internal.http;
    +
    +import java.util.List;
    +import java.util.concurrent.TimeUnit;
    +import okhttp3.Call;
    +import okhttp3.Connection;
    +import okhttp3.Interceptor;
    +import okhttp3.Request;
    +import okhttp3.Response;
    +import okhttp3.internal.connection.Exchange;
    +import okhttp3.internal.connection.RealCall;
    +
    +public class RealInterceptorChain implements Interceptor.Chain
    +{
    +    protected RealInterceptorChain() {}
    +    public Call call(){ return null; }
    +    public Connection connection(){ return null; }
    +    public Interceptor.Chain withConnectTimeout(int p0, TimeUnit p1){ return null; }
    +    public Interceptor.Chain withReadTimeout(int p0, TimeUnit p1){ return null; }
    +    public Interceptor.Chain withWriteTimeout(int p0, TimeUnit p1){ return null; }
    +    public RealInterceptorChain(RealCall p0, List p1, int p2, Exchange p3, Request p4, int p5, int p6, int p7){}
    +    public Request request(){ return null; }
    +    public Response proceed(Request p0){ return null; }
    +    public final Exchange getExchange$okhttp(){ return null; }
    +    public final RealCall getCall$okhttp(){ return null; }
    +    public final RealInterceptorChain copy$okhttp(int p0, Exchange p1, Request p2, int p3, int p4, int p5){ return null; }
    +    public final Request getRequest$okhttp(){ return null; }
    +    public final int getConnectTimeoutMillis$okhttp(){ return 0; }
    +    public final int getReadTimeoutMillis$okhttp(){ return 0; }
    +    public final int getWriteTimeoutMillis$okhttp(){ return 0; }
    +    public int connectTimeoutMillis(){ return 0; }
    +    public int readTimeoutMillis(){ return 0; }
    +    public int writeTimeoutMillis(){ return 0; }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/ErrorCode.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/ErrorCode.java
    new file mode 100644
    index 00000000000..e45e320f54f
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/ErrorCode.java
    @@ -0,0 +1,17 @@
    +// Generated automatically from okhttp3.internal.http2.ErrorCode for testing purposes
    +
    +package okhttp3.internal.http2;
    +
    +
    +public enum ErrorCode
    +{
    +    CANCEL, COMPRESSION_ERROR, CONNECT_ERROR, ENHANCE_YOUR_CALM, FLOW_CONTROL_ERROR, FRAME_SIZE_ERROR, HTTP_1_1_REQUIRED, INADEQUATE_SECURITY, INTERNAL_ERROR, NO_ERROR, PROTOCOL_ERROR, REFUSED_STREAM, SETTINGS_TIMEOUT, STREAM_CLOSED;
    +    private ErrorCode() {}
    +    public final int getHttpCode(){ return 0; }
    +    public static ErrorCode.Companion Companion = null;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +        public final ErrorCode fromHttp2(int p0){ return null; }
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Header.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Header.java
    new file mode 100644
    index 00000000000..dc4013f5be7
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Header.java
    @@ -0,0 +1,38 @@
    +// Generated automatically from okhttp3.internal.http2.Header for testing purposes
    +
    +package okhttp3.internal.http2;
    +
    +import okio.ByteString;
    +
    +public class Header
    +{
    +    protected Header() {}
    +    public Header(ByteString p0, ByteString p1){}
    +    public Header(ByteString p0, String p1){}
    +    public Header(String p0, String p1){}
    +    public String toString(){ return null; }
    +    public boolean equals(Object p0){ return false; }
    +    public final ByteString component1(){ return null; }
    +    public final ByteString component2(){ return null; }
    +    public final ByteString name = null;
    +    public final ByteString value = null;
    +    public final Header copy(ByteString p0, ByteString p1){ return null; }
    +    public final int hpackSize = 0;
    +    public int hashCode(){ return 0; }
    +    public static ByteString PSEUDO_PREFIX = null;
    +    public static ByteString RESPONSE_STATUS = null;
    +    public static ByteString TARGET_AUTHORITY = null;
    +    public static ByteString TARGET_METHOD = null;
    +    public static ByteString TARGET_PATH = null;
    +    public static ByteString TARGET_SCHEME = null;
    +    public static Header.Companion Companion = null;
    +    public static String RESPONSE_STATUS_UTF8 = null;
    +    public static String TARGET_AUTHORITY_UTF8 = null;
    +    public static String TARGET_METHOD_UTF8 = null;
    +    public static String TARGET_PATH_UTF8 = null;
    +    public static String TARGET_SCHEME_UTF8 = null;
    +    static public class Companion
    +    {
    +        protected Companion() {}
    +    }
    +}
    diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Hpack.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Hpack.java
    new file mode 100644
    index 00000000000..8c688bb64f3
    --- /dev/null
    +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Hpack.java
    @@ -0,0 +1,34 @@
    +// Generated automatically from okhttp3.internal.http2.Hpack for testing purposes
    +
    +package okhttp3.internal.http2;
    +
    +import java.util.List;
    +import java.util.Map;
    +import okhttp3.internal.http2.Header;
    +import okio.Buffer;
    +import okio.ByteString;
    +
    +public class Hpack
    +{
    +    protected Hpack() {}
    +    public final ByteString checkLowercase(ByteString p0){ return null; }
    +    public final Header[] getSTATIC_HEADER_TABLE(){ return null; }
    +    public final Map getNAME_TO_FIRST_INDEX(){ return null; }
    +    public static Hpack INSTANCE = null;
    +    static public class Writer
    +    {
    +        protected Writer() {}
    +        public Header[] dynamicTable = null;
    +        public Writer(Buffer p0){}
    +        public Writer(int p0, Buffer p1){}
    +        public Writer(int p0, boolean p1, Buffer p2){}
    +        public final void resizeHeaderTable(int p0){}
    +        public final void writeByteString(ByteString p0){}
    +        public final void writeHeaders(List
    p0){} + public final void writeInt(int p0, int p1, int p2){} + public int dynamicTableByteCount = 0; + public int headerCount = 0; + public int headerTableSizeSetting = 0; + public int maxDynamicTableByteCount = 0; + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Connection.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Connection.java new file mode 100644 index 00000000000..8e7b605f498 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Connection.java @@ -0,0 +1,153 @@ +// Generated automatically from okhttp3.internal.http2.Http2Connection for testing purposes + +package okhttp3.internal.http2; + +import java.io.Closeable; +import java.io.IOException; +import java.net.Socket; +import java.util.List; +import java.util.Map; +import kotlin.Unit; +import kotlin.jvm.functions.Function0; +import okhttp3.internal.concurrent.TaskRunner; +import okhttp3.internal.http2.ErrorCode; +import okhttp3.internal.http2.Header; +import okhttp3.internal.http2.Http2Reader; +import okhttp3.internal.http2.Http2Stream; +import okhttp3.internal.http2.Http2Writer; +import okhttp3.internal.http2.PushObserver; +import okhttp3.internal.http2.Settings; +import okio.Buffer; +import okio.BufferedSink; +import okio.BufferedSource; +import okio.ByteString; + +public class Http2Connection implements Closeable +{ + protected Http2Connection() {} + abstract static public class Listener + { + public Listener(){} + public abstract void onStream(Http2Stream p0); + public static Http2Connection.Listener REFUSE_INCOMING_STREAMS = null; + public static Http2Connection.Listener.Companion Companion = null; + public void onSettings(Http2Connection p0, Settings p1){} + static public class Companion + { + protected Companion() {} + } + } + public Http2Connection(Http2Connection.Builder p0){} + public class ReaderRunnable implements Function0, Http2Reader.Handler + { + protected ReaderRunnable() {} + public ReaderRunnable(Http2Reader p0){} + public final Http2Reader getReader$okhttp(){ return null; } + public final void applyAndAckSettings(boolean p0, Settings p1){} + public void ackSettings(){} + public void alternateService(int p0, String p1, ByteString p2, String p3, int p4, long p5){} + public void data(boolean p0, int p1, BufferedSource p2, int p3){} + public void goAway(int p0, ErrorCode p1, ByteString p2){} + public void headers(boolean p0, int p1, int p2, List
    p3){} + public Void invoke(){ return null; } + public void ping(boolean p0, int p1, int p2){} + public void priority(int p0, int p1, int p2, boolean p3){} + public void pushPromise(int p0, int p1, List
    p2){} + public void rstStream(int p0, ErrorCode p1){} + public void settings(boolean p0, Settings p1){} + public void windowUpdate(int p0, long p1){} + } + public final Http2Connection.Listener getListener$okhttp(){ return null; } + public final Http2Connection.ReaderRunnable getReaderRunnable(){ return null; } + public final Http2Stream getStream(int p0){ return null; } + public final Http2Stream newStream(List
    p0, boolean p1){ return null; } + public final Http2Stream pushStream(int p0, List
    p1, boolean p2){ return null; } + public final Http2Stream removeStream$okhttp(int p0){ return null; } + public final Http2Writer getWriter(){ return null; } + public final Map getStreams$okhttp(){ return null; } + public final Settings getOkHttpSettings(){ return null; } + public final Settings getPeerSettings(){ return null; } + public final Socket getSocket$okhttp(){ return null; } + public final String getConnectionName$okhttp(){ return null; } + public final boolean getClient$okhttp(){ return false; } + public final boolean isHealthy(long p0){ return false; } + public final boolean pushedStream$okhttp(int p0){ return false; } + public final int getLastGoodStreamId$okhttp(){ return 0; } + public final int getNextStreamId$okhttp(){ return 0; } + public final int openStreamCount(){ return 0; } + public final long getReadBytesAcknowledged(){ return 0; } + public final long getReadBytesTotal(){ return 0; } + public final long getWriteBytesMaximum(){ return 0; } + public final long getWriteBytesTotal(){ return 0; } + public final void awaitPong(){} + public final void close$okhttp(ErrorCode p0, ErrorCode p1, IOException p2){} + public final void flush(){} + public final void pushDataLater$okhttp(int p0, BufferedSource p1, int p2, boolean p3){} + public final void pushHeadersLater$okhttp(int p0, List
    p1, boolean p2){} + public final void pushRequestLater$okhttp(int p0, List
    p1){} + public final void pushResetLater$okhttp(int p0, ErrorCode p1){} + public final void sendDegradedPingLater$okhttp(){} + public final void setLastGoodStreamId$okhttp(int p0){} + public final void setNextStreamId$okhttp(int p0){} + public final void setPeerSettings(Settings p0){} + public final void setSettings(Settings p0){} + public final void shutdown(ErrorCode p0){} + public final void start(){} + public final void start(boolean p0){} + public final void start(boolean p0, TaskRunner p1){} + public final void updateConnectionFlowControl$okhttp(long p0){} + public final void writeData(int p0, boolean p1, Buffer p2, long p3){} + public final void writeHeaders$okhttp(int p0, boolean p1, List
    p2){} + public final void writePing(){} + public final void writePing(boolean p0, int p1, int p2){} + public final void writePingAndAwaitPong(){} + public final void writeSynReset$okhttp(int p0, ErrorCode p1){} + public final void writeSynResetLater$okhttp(int p0, ErrorCode p1){} + public final void writeWindowUpdateLater$okhttp(int p0, long p1){} + public static Http2Connection.Companion Companion = null; + public static int AWAIT_PING = 0; + public static int DEGRADED_PING = 0; + public static int DEGRADED_PONG_TIMEOUT_NS = 0; + public static int INTERVAL_PING = 0; + public static int OKHTTP_CLIENT_WINDOW_SIZE = 0; + public void close(){} + static public class Builder + { + protected Builder() {} + public BufferedSink sink = null; + public BufferedSource source = null; + public Builder(boolean p0, TaskRunner p1){} + public Socket socket = null; + public String connectionName = null; + public final BufferedSink getSink$okhttp(){ return null; } + public final BufferedSource getSource$okhttp(){ return null; } + public final Http2Connection build(){ return null; } + public final Http2Connection.Builder listener(Http2Connection.Listener p0){ return null; } + public final Http2Connection.Builder pingIntervalMillis(int p0){ return null; } + public final Http2Connection.Builder pushObserver(PushObserver p0){ return null; } + public final Http2Connection.Builder socket(Socket p0){ return null; } + public final Http2Connection.Builder socket(Socket p0, String p1){ return null; } + public final Http2Connection.Builder socket(Socket p0, String p1, BufferedSource p2){ return null; } + public final Http2Connection.Builder socket(Socket p0, String p1, BufferedSource p2, BufferedSink p3){ return null; } + public final Http2Connection.Listener getListener$okhttp(){ return null; } + public final PushObserver getPushObserver$okhttp(){ return null; } + public final Socket getSocket$okhttp(){ return null; } + public final String getConnectionName$okhttp(){ return null; } + public final TaskRunner getTaskRunner$okhttp(){ return null; } + public final boolean getClient$okhttp(){ return false; } + public final int getPingIntervalMillis$okhttp(){ return 0; } + public final void setClient$okhttp(boolean p0){} + public final void setConnectionName$okhttp(String p0){} + public final void setListener$okhttp(Http2Connection.Listener p0){} + public final void setPingIntervalMillis$okhttp(int p0){} + public final void setPushObserver$okhttp(PushObserver p0){} + public final void setSink$okhttp(BufferedSink p0){} + public final void setSocket$okhttp(Socket p0){} + public final void setSource$okhttp(BufferedSource p0){} + } + static public class Companion + { + protected Companion() {} + public final Settings getDEFAULT_SETTINGS(){ return null; } + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Reader.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Reader.java new file mode 100644 index 00000000000..b6aedef6d52 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Reader.java @@ -0,0 +1,42 @@ +// Generated automatically from okhttp3.internal.http2.Http2Reader for testing purposes + +package okhttp3.internal.http2; + +import java.io.Closeable; +import java.util.List; +import java.util.logging.Logger; +import okhttp3.internal.http2.ErrorCode; +import okhttp3.internal.http2.Header; +import okhttp3.internal.http2.Settings; +import okio.BufferedSource; +import okio.ByteString; + +public class Http2Reader implements Closeable +{ + protected Http2Reader() {} + public Http2Reader(BufferedSource p0, boolean p1){} + public final boolean nextFrame(boolean p0, Http2Reader.Handler p1){ return false; } + public final void readConnectionPreface(Http2Reader.Handler p0){} + public static Http2Reader.Companion Companion = null; + public void close(){} + static public class Companion + { + protected Companion() {} + public final Logger getLogger(){ return null; } + public final int lengthWithoutPadding(int p0, int p1, int p2){ return 0; } + } + static public interface Handler + { + void ackSettings(); + void alternateService(int p0, String p1, ByteString p2, String p3, int p4, long p5); + void data(boolean p0, int p1, BufferedSource p2, int p3); + void goAway(int p0, ErrorCode p1, ByteString p2); + void headers(boolean p0, int p1, int p2, List
    p3); + void ping(boolean p0, int p1, int p2); + void priority(int p0, int p1, int p2, boolean p3); + void pushPromise(int p0, int p1, List
    p2); + void rstStream(int p0, ErrorCode p1); + void settings(boolean p0, Settings p1); + void windowUpdate(int p0, long p1); + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Stream.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Stream.java new file mode 100644 index 00000000000..47b460bb385 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Stream.java @@ -0,0 +1,104 @@ +// Generated automatically from okhttp3.internal.http2.Http2Stream for testing purposes + +package okhttp3.internal.http2; + +import java.io.IOException; +import java.util.List; +import okhttp3.Headers; +import okhttp3.internal.http2.ErrorCode; +import okhttp3.internal.http2.Header; +import okhttp3.internal.http2.Http2Connection; +import okio.AsyncTimeout; +import okio.Buffer; +import okio.BufferedSource; +import okio.Sink; +import okio.Source; +import okio.Timeout; + +public class Http2Stream +{ + protected Http2Stream() {} + public Http2Stream(int p0, Http2Connection p1, boolean p2, boolean p3, Headers p4){} + public class FramingSink implements Sink + { + protected FramingSink() {} + public FramingSink(boolean p0){} + public Timeout timeout(){ return null; } + public final Headers getTrailers(){ return null; } + public final boolean getClosed(){ return false; } + public final boolean getFinished(){ return false; } + public final void setClosed(boolean p0){} + public final void setFinished(boolean p0){} + public final void setTrailers(Headers p0){} + public void close(){} + public void flush(){} + public void write(Buffer p0, long p1){} + } + public class FramingSource implements Source + { + protected FramingSource() {} + public FramingSource(long p0, boolean p1){} + public Timeout timeout(){ return null; } + public final Buffer getReadBuffer(){ return null; } + public final Buffer getReceiveBuffer(){ return null; } + public final Headers getTrailers(){ return null; } + public final boolean getClosed$okhttp(){ return false; } + public final boolean getFinished$okhttp(){ return false; } + public final void receive$okhttp(BufferedSource p0, long p1){} + public final void setClosed$okhttp(boolean p0){} + public final void setFinished$okhttp(boolean p0){} + public final void setTrailers(Headers p0){} + public long read(Buffer p0, long p1){ return 0; } + public void close(){} + } + public class StreamTimeout extends AsyncTimeout + { + protected IOException newTimeoutException(IOException p0){ return null; } + protected void timedOut(){} + public StreamTimeout(){} + public final void exitAndThrowIfTimedOut(){} + } + public final ErrorCode getErrorCode$okhttp(){ return null; } + public final Headers takeHeaders(){ return null; } + public final Headers trailers(){ return null; } + public final Http2Connection getConnection(){ return null; } + public final Http2Stream.FramingSink getSink$okhttp(){ return null; } + public final Http2Stream.FramingSource getSource$okhttp(){ return null; } + public final Http2Stream.StreamTimeout getReadTimeout$okhttp(){ return null; } + public final Http2Stream.StreamTimeout getWriteTimeout$okhttp(){ return null; } + public final IOException getErrorException$okhttp(){ return null; } + public final Sink getSink(){ return null; } + public final Source getSource(){ return null; } + public final Timeout readTimeout(){ return null; } + public final Timeout writeTimeout(){ return null; } + public final boolean isLocallyInitiated(){ return false; } + public final boolean isOpen(){ return false; } + public final int getId(){ return 0; } + public final long getReadBytesAcknowledged(){ return 0; } + public final long getReadBytesTotal(){ return 0; } + public final long getWriteBytesMaximum(){ return 0; } + public final long getWriteBytesTotal(){ return 0; } + public final void addBytesToWriteWindow(long p0){} + public final void cancelStreamIfNecessary$okhttp(){} + public final void checkOutNotClosed$okhttp(){} + public final void close(ErrorCode p0, IOException p1){} + public final void closeLater(ErrorCode p0){} + public final void enqueueTrailers(Headers p0){} + public final void receiveData(BufferedSource p0, int p1){} + public final void receiveHeaders(Headers p0, boolean p1){} + public final void receiveRstStream(ErrorCode p0){} + public final void setErrorCode$okhttp(ErrorCode p0){} + public final void setErrorException$okhttp(IOException p0){} + public final void setReadBytesAcknowledged$okhttp(long p0){} + public final void setReadBytesTotal$okhttp(long p0){} + public final void setWriteBytesMaximum$okhttp(long p0){} + public final void setWriteBytesTotal$okhttp(long p0){} + public final void waitForIo$okhttp(){} + public final void writeHeaders(List
    p0, boolean p1, boolean p2){} + public static Http2Stream.Companion Companion = null; + public static long EMIT_BUFFER_SIZE = 0; + static public class Companion + { + protected Companion() {} + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Writer.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Writer.java new file mode 100644 index 00000000000..c05713f93c2 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Http2Writer.java @@ -0,0 +1,39 @@ +// Generated automatically from okhttp3.internal.http2.Http2Writer for testing purposes + +package okhttp3.internal.http2; + +import java.io.Closeable; +import java.util.List; +import okhttp3.internal.http2.ErrorCode; +import okhttp3.internal.http2.Header; +import okhttp3.internal.http2.Hpack; +import okhttp3.internal.http2.Settings; +import okio.Buffer; +import okio.BufferedSink; + +public class Http2Writer implements Closeable +{ + protected Http2Writer() {} + public Http2Writer(BufferedSink p0, boolean p1){} + public final Hpack.Writer getHpackWriter(){ return null; } + public final int maxDataLength(){ return 0; } + public final void applyAndAckSettings(Settings p0){} + public final void connectionPreface(){} + public final void data(boolean p0, int p1, Buffer p2, int p3){} + public final void dataFrame(int p0, int p1, Buffer p2, int p3){} + public final void flush(){} + public final void frameHeader(int p0, int p1, int p2, int p3){} + public final void goAway(int p0, ErrorCode p1, byte[] p2){} + public final void headers(boolean p0, int p1, List
    p2){} + public final void ping(boolean p0, int p1, int p2){} + public final void pushPromise(int p0, int p1, List
    p2){} + public final void rstStream(int p0, ErrorCode p1){} + public final void settings(Settings p0){} + public final void windowUpdate(int p0, long p1){} + public static Http2Writer.Companion Companion = null; + public void close(){} + static public class Companion + { + protected Companion() {} + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/PushObserver.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/PushObserver.java new file mode 100644 index 00000000000..a4d88297d2a --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/PushObserver.java @@ -0,0 +1,22 @@ +// Generated automatically from okhttp3.internal.http2.PushObserver for testing purposes + +package okhttp3.internal.http2; + +import java.util.List; +import okhttp3.internal.http2.ErrorCode; +import okhttp3.internal.http2.Header; +import okio.BufferedSource; + +public interface PushObserver +{ + boolean onData(int p0, BufferedSource p1, int p2, boolean p3); + boolean onHeaders(int p0, List
    p1, boolean p2); + boolean onRequest(int p0, List
    p1); + static PushObserver CANCEL = null; + static PushObserver.Companion Companion = null; + static public class Companion + { + protected Companion() {} + } + void onReset(int p0, ErrorCode p1); +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Settings.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Settings.java new file mode 100644 index 00000000000..7078c1ad1d1 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/http2/Settings.java @@ -0,0 +1,34 @@ +// Generated automatically from okhttp3.internal.http2.Settings for testing purposes + +package okhttp3.internal.http2; + + +public class Settings +{ + public Settings(){} + public final Settings set(int p0, int p1){ return null; } + public final boolean getEnablePush(boolean p0){ return false; } + public final boolean isSet(int p0){ return false; } + public final int get(int p0){ return 0; } + public final int getHeaderTableSize(){ return 0; } + public final int getInitialWindowSize(){ return 0; } + public final int getMaxConcurrentStreams(){ return 0; } + public final int getMaxFrameSize(int p0){ return 0; } + public final int getMaxHeaderListSize(int p0){ return 0; } + public final int size(){ return 0; } + public final void clear(){} + public final void merge(Settings p0){} + public static Settings.Companion Companion = null; + public static int COUNT = 0; + public static int DEFAULT_INITIAL_WINDOW_SIZE = 0; + public static int ENABLE_PUSH = 0; + public static int HEADER_TABLE_SIZE = 0; + public static int INITIAL_WINDOW_SIZE = 0; + public static int MAX_CONCURRENT_STREAMS = 0; + public static int MAX_FRAME_SIZE = 0; + public static int MAX_HEADER_LIST_SIZE = 0; + static public class Companion + { + protected Companion() {} + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/io/FileSystem.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/io/FileSystem.java new file mode 100644 index 00000000000..1967f0d99d8 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/io/FileSystem.java @@ -0,0 +1,25 @@ +// Generated automatically from okhttp3.internal.io.FileSystem for testing purposes + +package okhttp3.internal.io; + +import java.io.File; +import okio.Sink; +import okio.Source; + +public interface FileSystem +{ + Sink appendingSink(File p0); + Sink sink(File p0); + Source source(File p0); + boolean exists(File p0); + long size(File p0); + static FileSystem SYSTEM = null; + static FileSystem.Companion Companion = null; + static public class Companion + { + protected Companion() {} + } + void delete(File p0); + void deleteContents(File p0); + void rename(File p0, File p1); +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/tls/CertificateChainCleaner.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/tls/CertificateChainCleaner.java new file mode 100644 index 00000000000..1ebaf1ee917 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/tls/CertificateChainCleaner.java @@ -0,0 +1,21 @@ +// Generated automatically from okhttp3.internal.tls.CertificateChainCleaner for testing purposes + +package okhttp3.internal.tls; + +import java.security.cert.Certificate; +import java.security.cert.X509Certificate; +import java.util.List; +import javax.net.ssl.X509TrustManager; + +abstract public class CertificateChainCleaner +{ + public CertificateChainCleaner(){} + public abstract List clean(List p0, String p1); + public static CertificateChainCleaner.Companion Companion = null; + static public class Companion + { + protected Companion() {} + public final CertificateChainCleaner get(X509Certificate... p0){ return null; } + public final CertificateChainCleaner get(X509TrustManager p0){ return null; } + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/RealWebSocket.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/RealWebSocket.java new file mode 100644 index 00000000000..87457777e0b --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/RealWebSocket.java @@ -0,0 +1,66 @@ +// Generated automatically from okhttp3.internal.ws.RealWebSocket for testing purposes + +package okhttp3.internal.ws; + +import java.io.Closeable; +import java.util.Random; +import java.util.concurrent.TimeUnit; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.WebSocket; +import okhttp3.WebSocketListener; +import okhttp3.internal.concurrent.TaskRunner; +import okhttp3.internal.connection.Exchange; +import okhttp3.internal.ws.WebSocketExtensions; +import okhttp3.internal.ws.WebSocketReader; +import okio.BufferedSink; +import okio.BufferedSource; +import okio.ByteString; + +public class RealWebSocket implements WebSocket, WebSocketReader.FrameCallback +{ + protected RealWebSocket() {} + abstract static public class Streams implements Closeable + { + protected Streams() {} + public Streams(boolean p0, BufferedSource p1, BufferedSink p2){} + public final BufferedSink getSink(){ return null; } + public final BufferedSource getSource(){ return null; } + public final boolean getClient(){ return false; } + } + public RealWebSocket(TaskRunner p0, Request p1, WebSocketListener p2, Random p3, long p4, WebSocketExtensions p5, long p6){} + public Request request(){ return null; } + public boolean close(int p0, String p1){ return false; } + public boolean send(ByteString p0){ return false; } + public boolean send(String p0){ return false; } + public final WebSocketListener getListener$okhttp(){ return null; } + public final boolean close(int p0, String p1, long p2){ return false; } + public final boolean pong(ByteString p0){ return false; } + public final boolean processNextFrame(){ return false; } + public final boolean writeOneFrame$okhttp(){ return false; } + public final int receivedPingCount(){ return 0; } + public final int receivedPongCount(){ return 0; } + public final int sentPingCount(){ return 0; } + public final void awaitTermination(long p0, TimeUnit p1){} + public final void checkUpgradeSuccess$okhttp(Response p0, Exchange p1){} + public final void connect(OkHttpClient p0){} + public final void failWebSocket(Exception p0, Response p1){} + public final void initReaderAndWriter(String p0, RealWebSocket.Streams p1){} + public final void loopReader(){} + public final void tearDown(){} + public final void writePingFrame$okhttp(){} + public long queueSize(){ return 0; } + public static RealWebSocket.Companion Companion = null; + public static long DEFAULT_MINIMUM_DEFLATE_SIZE = 0; + public void cancel(){} + public void onReadClose(int p0, String p1){} + public void onReadMessage(ByteString p0){} + public void onReadMessage(String p0){} + public void onReadPing(ByteString p0){} + public void onReadPong(ByteString p0){} + static public class Companion + { + protected Companion() {} + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/WebSocketExtensions.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/WebSocketExtensions.java new file mode 100644 index 00000000000..f2e8945f548 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/WebSocketExtensions.java @@ -0,0 +1,34 @@ +// Generated automatically from okhttp3.internal.ws.WebSocketExtensions for testing purposes + +package okhttp3.internal.ws; + +import okhttp3.Headers; + +public class WebSocketExtensions +{ + public String toString(){ return null; } + public WebSocketExtensions(){} + public WebSocketExtensions(boolean p0, Integer p1, boolean p2, Integer p3, boolean p4, boolean p5){} + public boolean equals(Object p0){ return false; } + public final Integer clientMaxWindowBits = null; + public final Integer component2(){ return null; } + public final Integer component4(){ return null; } + public final Integer serverMaxWindowBits = null; + public final WebSocketExtensions copy(boolean p0, Integer p1, boolean p2, Integer p3, boolean p4, boolean p5){ return null; } + public final boolean clientNoContextTakeover = false; + public final boolean component1(){ return false; } + public final boolean component3(){ return false; } + public final boolean component5(){ return false; } + public final boolean component6(){ return false; } + public final boolean noContextTakeover(boolean p0){ return false; } + public final boolean perMessageDeflate = false; + public final boolean serverNoContextTakeover = false; + public final boolean unknownValues = false; + public int hashCode(){ return 0; } + public static WebSocketExtensions.Companion Companion = null; + static public class Companion + { + protected Companion() {} + public final WebSocketExtensions parse(Headers p0){ return null; } + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/WebSocketReader.java b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/WebSocketReader.java new file mode 100644 index 00000000000..6dfdd507843 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okhttp3/internal/ws/WebSocketReader.java @@ -0,0 +1,24 @@ +// Generated automatically from okhttp3.internal.ws.WebSocketReader for testing purposes + +package okhttp3.internal.ws; + +import java.io.Closeable; +import okio.BufferedSource; +import okio.ByteString; + +public class WebSocketReader implements Closeable +{ + protected WebSocketReader() {} + public WebSocketReader(boolean p0, BufferedSource p1, WebSocketReader.FrameCallback p2, boolean p3, boolean p4){} + public final BufferedSource getSource(){ return null; } + public final void processNextFrame(){} + public void close(){} + static public interface FrameCallback + { + void onReadClose(int p0, String p1); + void onReadMessage(ByteString p0); + void onReadMessage(String p0); + void onReadPing(ByteString p0); + void onReadPong(ByteString p0); + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okio/AsyncTimeout.java b/java/ql/test/stubs/okhttp-4.9.3/okio/AsyncTimeout.java new file mode 100644 index 00000000000..2f341cfac25 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okio/AsyncTimeout.java @@ -0,0 +1,28 @@ +// Generated automatically from okio.AsyncTimeout for testing purposes + +package okio; + +import java.io.IOException; +import kotlin.jvm.functions.Function0; +import okio.Sink; +import okio.Source; +import okio.Timeout; + +public class AsyncTimeout extends Timeout +{ + protected IOException newTimeoutException(IOException p0){ return null; } + protected void timedOut(){} + public AsyncTimeout(){} + public final T withTimeout(Function0 p0){ return null; } + public final IOException access$newTimeoutException(IOException p0){ return null; } + public final Sink sink(Sink p0){ return null; } + public final Source source(Source p0){ return null; } + public final boolean exit(){ return false; } + public final void enter(){} + public static AsyncTimeout.Companion Companion = null; + static public class Companion + { + protected Companion() {} + public final AsyncTimeout awaitTimeout$okio(){ return null; } + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okio/Buffer.java b/java/ql/test/stubs/okhttp-4.9.3/okio/Buffer.java new file mode 100644 index 00000000000..3a270f5e9eb --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okio/Buffer.java @@ -0,0 +1,469 @@ +// Generated automatically from okio.Buffer for testing purposes + +package okio; + +import java.io.Closeable; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.ByteBuffer; +import java.nio.channels.ByteChannel; +import java.nio.charset.Charset; +import okio.BufferedSink; +import okio.BufferedSource; +import okio.ByteString; +import okio.Options; +import okio.Segment; +import okio.Sink; +import okio.Source; +import okio.Timeout; + +public class Buffer implements BufferedSink, BufferedSource, ByteChannel, Cloneable { + public Buffer buffer() { + return null; + } + + public Buffer clone() { + return null; + } + + public Buffer emit() { + return null; + } + + public Buffer emitCompleteSegments() { + return null; + } + + public Buffer getBuffer() { + return null; + } + + public Buffer write(ByteString p0) { + return null; + } + + public Buffer write(ByteString p0, int p1, int p2) { + return null; + } + + public Buffer write(Source p0, long p1) { + return null; + } + + public Buffer write(byte[] p0) { + return null; + } + + public Buffer write(byte[] p0, int p1, int p2) { + return null; + } + + public Buffer writeByte(int p0) { + return null; + } + + public Buffer writeDecimalLong(long p0) { + return null; + } + + public Buffer writeHexadecimalUnsignedLong(long p0) { + return null; + } + + public Buffer writeInt(int p0) { + return null; + } + + public Buffer writeIntLe(int p0) { + return null; + } + + public Buffer writeLong(long p0) { + return null; + } + + public Buffer writeLongLe(long p0) { + return null; + } + + public Buffer writeShort(int p0) { + return null; + } + + public Buffer writeShortLe(int p0) { + return null; + } + + public Buffer writeString(String p0, Charset p1) { + return null; + } + + public Buffer writeString(String p0, int p1, int p2, Charset p3) { + return null; + } + + public Buffer writeUtf8(String p0) { + return null; + } + + public Buffer writeUtf8(String p0, int p1, int p2) { + return null; + } + + public Buffer writeUtf8CodePoint(int p0) { + return null; + } + + public Buffer() {} + + public BufferedSource peek() { + return null; + } + + public ByteString readByteString() { + return null; + } + + public ByteString readByteString(long p0) { + return null; + } + + public InputStream inputStream() { + return null; + } + + public OutputStream outputStream() { + return null; + } + + public Segment head = null; + + public String readString(Charset p0) { + return null; + } + + public String readString(long p0, Charset p1) { + return null; + } + + public String readUtf8() { + return null; + } + + public String readUtf8(long p0) { + return null; + } + + public String readUtf8Line() { + return null; + } + + public String readUtf8LineStrict() { + return null; + } + + public String readUtf8LineStrict(long p0) { + return null; + } + + public String toString() { + return null; + } + + public Timeout timeout() { + return null; + } + + public boolean equals(Object p0) { + return false; + } + + public boolean exhausted() { + return false; + } + + public boolean isOpen() { + return false; + } + + public boolean rangeEquals(long p0, ByteString p1) { + return false; + } + + public boolean rangeEquals(long p0, ByteString p1, int p2, int p3) { + return false; + } + + public boolean request(long p0) { + return false; + } + + public byte readByte() { + return 0; + } + + public byte[] readByteArray() { + return null; + } + + public byte[] readByteArray(long p0) { + return null; + } + + public final Buffer copy() { + return null; + } + + public final Buffer copyTo(Buffer p0, long p1) { + return null; + } + + public final Buffer copyTo(Buffer p0, long p1, long p2) { + return null; + } + + public final Buffer copyTo(OutputStream p0) { + return null; + } + + public final Buffer copyTo(OutputStream p0, long p1) { + return null; + } + + public final Buffer copyTo(OutputStream p0, long p1, long p2) { + return null; + } + + public final Buffer readFrom(InputStream p0) { + return null; + } + + public final Buffer readFrom(InputStream p0, long p1) { + return null; + } + + public final Buffer writeTo(OutputStream p0) { + return null; + } + + public final Buffer writeTo(OutputStream p0, long p1) { + return null; + } + + public final Buffer.UnsafeCursor readAndWriteUnsafe() { + return null; + } + + public final Buffer.UnsafeCursor readAndWriteUnsafe(Buffer.UnsafeCursor p0) { + return null; + } + + public final Buffer.UnsafeCursor readUnsafe() { + return null; + } + + public final Buffer.UnsafeCursor readUnsafe(Buffer.UnsafeCursor p0) { + return null; + } + + public final ByteString hmacSha1(ByteString p0) { + return null; + } + + public final ByteString hmacSha256(ByteString p0) { + return null; + } + + public final ByteString hmacSha512(ByteString p0) { + return null; + } + + public final ByteString md5() { + return null; + } + + public final ByteString sha1() { + return null; + } + + public final ByteString sha256() { + return null; + } + + public final ByteString sha512() { + return null; + } + + public final ByteString snapshot() { + return null; + } + + public final ByteString snapshot(int p0) { + return null; + } + + public final Segment writableSegment$okio(int p0) { + return null; + } + + public final byte getByte(long p0) { + return 0; + } + + public final long completeSegmentByteCount() { + return 0; + } + + public final long size() { + return 0; + } + + public final void clear() {} + + public final void setSize$okio(long p0) {} + + public int hashCode() { + return 0; + } + + public int read(ByteBuffer p0) { + return 0; + } + + public int read(byte[] p0) { + return 0; + } + + public int read(byte[] p0, int p1, int p2) { + return 0; + } + + public int readInt() { + return 0; + } + + public int readIntLe() { + return 0; + } + + public int readUtf8CodePoint() { + return 0; + } + + public int select(Options p0) { + return 0; + } + + public int write(ByteBuffer p0) { + return 0; + } + + public long indexOf(ByteString p0) { + return 0; + } + + public long indexOf(ByteString p0, long p1) { + return 0; + } + + public long indexOf(byte p0) { + return 0; + } + + public long indexOf(byte p0, long p1) { + return 0; + } + + public long indexOf(byte p0, long p1, long p2) { + return 0; + } + + public long indexOfElement(ByteString p0) { + return 0; + } + + public long indexOfElement(ByteString p0, long p1) { + return 0; + } + + public long read(Buffer p0, long p1) { + return 0; + } + + public long readAll(Sink p0) { + return 0; + } + + public long readDecimalLong() { + return 0; + } + + public long readHexadecimalUnsignedLong() { + return 0; + } + + public long readLong() { + return 0; + } + + public long readLongLe() { + return 0; + } + + public long writeAll(Source p0) { + return 0; + } + + public short readShort() { + return 0; + } + + public short readShortLe() { + return 0; + } + + public void close() {} + + public void flush() {} + + public void readFully(Buffer p0, long p1) {} + + public void readFully(byte[] p0) {} + + public void require(long p0) {} + + public void skip(long p0) {} + + public void write(Buffer p0, long p1) {} + + static public class UnsafeCursor implements Closeable { + public Buffer buffer = null; + + public UnsafeCursor() {} + + public boolean readWrite = false; + public byte[] data = null; + + public final int next() { + return 0; + } + + public final int seek(long p0) { + return 0; + } + + public final long expandBuffer(int p0) { + return 0; + } + + public final long resizeBuffer(long p0) { + return 0; + } + + public int end = 0; + public int start = 0; + public long offset = 0; + + public void close() {} + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okio/BufferedSink.java b/java/ql/test/stubs/okhttp-4.9.3/okio/BufferedSink.java new file mode 100644 index 00000000000..617924163a5 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okio/BufferedSink.java @@ -0,0 +1,41 @@ +// Generated automatically from okio.BufferedSink for testing purposes + +package okio; + +import java.io.OutputStream; +import java.nio.channels.WritableByteChannel; +import java.nio.charset.Charset; +import okio.Buffer; +import okio.ByteString; +import okio.Sink; +import okio.Source; + +public interface BufferedSink extends Sink, WritableByteChannel +{ + Buffer buffer(); + Buffer getBuffer(); + BufferedSink emit(); + BufferedSink emitCompleteSegments(); + BufferedSink write(ByteString p0); + BufferedSink write(ByteString p0, int p1, int p2); + BufferedSink write(Source p0, long p1); + BufferedSink write(byte[] p0); + BufferedSink write(byte[] p0, int p1, int p2); + BufferedSink writeByte(int p0); + BufferedSink writeDecimalLong(long p0); + BufferedSink writeHexadecimalUnsignedLong(long p0); + BufferedSink writeInt(int p0); + BufferedSink writeIntLe(int p0); + BufferedSink writeLong(long p0); + BufferedSink writeLongLe(long p0); + BufferedSink writeShort(int p0); + BufferedSink writeShortLe(int p0); + BufferedSink writeString(String p0, Charset p1); + BufferedSink writeString(String p0, int p1, int p2, Charset p3); + BufferedSink writeUtf8(String p0); + BufferedSink writeUtf8(String p0, int p1, int p2); + BufferedSink writeUtf8CodePoint(int p0); + OutputStream outputStream(); + long writeAll(Source p0); + void flush(); +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okio/BufferedSource.java b/java/ql/test/stubs/okhttp-4.9.3/okio/BufferedSource.java new file mode 100644 index 00000000000..fb16e1e8cf5 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okio/BufferedSource.java @@ -0,0 +1,60 @@ +// Generated automatically from okio.BufferedSource for testing purposes + +package okio; + +import java.io.InputStream; +import java.nio.channels.ReadableByteChannel; +import java.nio.charset.Charset; +import okio.Buffer; +import okio.ByteString; +import okio.Options; +import okio.Sink; +import okio.Source; + +public interface BufferedSource extends ReadableByteChannel, Source +{ + Buffer buffer(); + Buffer getBuffer(); + BufferedSource peek(); + ByteString readByteString(); + ByteString readByteString(long p0); + InputStream inputStream(); + String readString(Charset p0); + String readString(long p0, Charset p1); + String readUtf8(); + String readUtf8(long p0); + String readUtf8Line(); + String readUtf8LineStrict(); + String readUtf8LineStrict(long p0); + boolean exhausted(); + boolean rangeEquals(long p0, ByteString p1); + boolean rangeEquals(long p0, ByteString p1, int p2, int p3); + boolean request(long p0); + byte readByte(); + byte[] readByteArray(); + byte[] readByteArray(long p0); + int read(byte[] p0); + int read(byte[] p0, int p1, int p2); + int readInt(); + int readIntLe(); + int readUtf8CodePoint(); + int select(Options p0); + long indexOf(ByteString p0); + long indexOf(ByteString p0, long p1); + long indexOf(byte p0); + long indexOf(byte p0, long p1); + long indexOf(byte p0, long p1, long p2); + long indexOfElement(ByteString p0); + long indexOfElement(ByteString p0, long p1); + long readAll(Sink p0); + long readDecimalLong(); + long readHexadecimalUnsignedLong(); + long readLong(); + long readLongLe(); + short readShort(); + short readShortLe(); + void readFully(Buffer p0, long p1); + void readFully(byte[] p0); + void require(long p0); + void skip(long p0); +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okio/ByteString.java b/java/ql/test/stubs/okhttp-4.9.3/okio/ByteString.java new file mode 100644 index 00000000000..2ac5fe9901a --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okio/ByteString.java @@ -0,0 +1,284 @@ +// Generated automatically from okio.ByteString for testing purposes + +package okio; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import okio.Buffer; + +public class ByteString implements Comparable, Serializable { + protected ByteString() {} + + public ByteBuffer asByteBuffer() { + return null; + } + + public ByteString digest$okio(String p0) { + return null; + } + + public ByteString hmac$okio(String p0, ByteString p1) { + return null; + } + + public ByteString hmacSha1(ByteString p0) { + return null; + } + + public ByteString hmacSha256(ByteString p0) { + return null; + } + + public ByteString hmacSha512(ByteString p0) { + return null; + } + + public ByteString md5() { + return null; + } + + public ByteString sha1() { + return null; + } + + public ByteString sha256() { + return null; + } + + public ByteString sha512() { + return null; + } + + public ByteString substring(int p0, int p1) { + return null; + } + + public ByteString toAsciiLowercase() { + return null; + } + + public ByteString toAsciiUppercase() { + return null; + } + + public ByteString(byte[] p0) {} + + public String base64() { + return null; + } + + public String base64Url() { + return null; + } + + public String hex() { + return null; + } + + public String string(Charset p0) { + return null; + } + + public String toString() { + return null; + } + + public String utf8() { + return null; + } + + public boolean equals(Object p0) { + return false; + } + + public boolean rangeEquals(int p0, ByteString p1, int p2, int p3) { + return false; + } + + public boolean rangeEquals(int p0, byte[] p1, int p2, int p3) { + return false; + } + + public byte internalGet$okio(int p0) { + return 0; + } + + public byte[] internalArray$okio() { + return null; + } + + public byte[] toByteArray() { + return null; + } + + public final ByteString substring() { + return null; + } + + public final ByteString substring(int p0) { + return null; + } + + public final String getUtf8$okio() { + return null; + } + + public final boolean endsWith(ByteString p0) { + return false; + } + + public final boolean endsWith(byte[] p0) { + return false; + } + + public final boolean startsWith(ByteString p0) { + return false; + } + + public final boolean startsWith(byte[] p0) { + return false; + } + + public final byte getByte(int p0) { + return 0; + } + + public final byte[] getData$okio() { + return null; + } + + public final int getHashCode$okio() { + return 0; + } + + public final int indexOf(ByteString p0) { + return 0; + } + + public final int indexOf(ByteString p0, int p1) { + return 0; + } + + public final int indexOf(byte[] p0) { + return 0; + } + + public final int lastIndexOf(ByteString p0) { + return 0; + } + + public final int lastIndexOf(ByteString p0, int p1) { + return 0; + } + + public final int lastIndexOf(byte[] p0) { + return 0; + } + + public final int size() { + return 0; + } + + public final void setHashCode$okio(int p0) {} + + public final void setUtf8$okio(String p0) {} + + public int compareTo(ByteString p0) { + return 0; + } + + public int getSize$okio() { + return 0; + } + + public int hashCode() { + return 0; + } + + public int indexOf(byte[] p0, int p1) { + return 0; + } + + public int lastIndexOf(byte[] p0, int p1) { + return 0; + } + + public static ByteString EMPTY = null; + + public static ByteString decodeBase64(String p0) { + return null; + } + + public static ByteString decodeHex(String p0) { + return null; + } + + public static ByteString encodeString(String p0, Charset p1) { + return null; + } + + public static ByteString encodeUtf8(String p0) { + return null; + } + + public static ByteString of(ByteBuffer p0) { + return null; + } + + public static ByteString of(byte... p0) { + return null; + } + + public static ByteString of(byte[] p0, int p1, int p2) { + return null; + } + + public static ByteString read(InputStream p0, int p1) { + return null; + } + + public static ByteString.Companion Companion = null; + + public void write$okio(Buffer p0, int p1, int p2) {} + + public void write(OutputStream p0) {} + + static public class Companion { + protected Companion() {} + + public final ByteString decodeBase64(String p0) { + return null; + } + + public final ByteString decodeHex(String p0) { + return null; + } + + public final ByteString encodeString(String p0, Charset p1) { + return null; + } + + public final ByteString encodeUtf8(String p0) { + return null; + } + + public final ByteString of(ByteBuffer p0) { + return null; + } + + public final ByteString of(byte... p0) { + return null; + } + + public final ByteString of(byte[] p0, int p1, int p2) { + return null; + } + + public final ByteString read(InputStream p0, int p1) { + return null; + } + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okio/Options.java b/java/ql/test/stubs/okhttp-4.9.3/okio/Options.java new file mode 100644 index 00000000000..13011a0c17a --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okio/Options.java @@ -0,0 +1,28 @@ +// Generated automatically from okio.Options for testing purposes + +package okio; + +import java.util.Collection; +import java.util.RandomAccess; +import kotlin.collections.AbstractList; +import okio.ByteString; + +public class Options extends AbstractList implements RandomAccess +{ + protected Options() {} + public ByteString get(int p0){ return null; } + public final ByteString[] getByteStrings$okio(){ return null; } + public final int[] getTrie$okio(){ return null; } + public int getSize(){ return 0; } + public static Options of(ByteString... p0){ return null; } + public static Options.Companion Companion = null; + static public class Companion + { + protected Companion() {} + public final Options of(ByteString... p0){ return null; } + } + public int size() { return 0; } + public boolean containsAll(Collection c) { return false; } + public boolean removeAll(Collection c) { return false; } + public boolean retainAll(Collection c) { return false; } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okio/Segment.java b/java/ql/test/stubs/okhttp-4.9.3/okio/Segment.java new file mode 100644 index 00000000000..4a31e4d31b3 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okio/Segment.java @@ -0,0 +1,31 @@ +// Generated automatically from okio.Segment for testing purposes + +package okio; + + +public class Segment +{ + public Segment next = null; + public Segment prev = null; + public Segment(){} + public Segment(byte[] p0, int p1, int p2, boolean p3, boolean p4){} + public boolean owner = false; + public boolean shared = false; + public final Segment pop(){ return null; } + public final Segment push(Segment p0){ return null; } + public final Segment sharedCopy(){ return null; } + public final Segment split(int p0){ return null; } + public final Segment unsharedCopy(){ return null; } + public final byte[] data = null; + public final void compact(){} + public final void writeTo(Segment p0, int p1){} + public int limit = 0; + public int pos = 0; + public static Segment.Companion Companion = null; + public static int SHARE_MINIMUM = 0; + public static int SIZE = 0; + static public class Companion + { + protected Companion() {} + } +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okio/Sink.java b/java/ql/test/stubs/okhttp-4.9.3/okio/Sink.java new file mode 100644 index 00000000000..0f6721212de --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okio/Sink.java @@ -0,0 +1,16 @@ +// Generated automatically from okio.Sink for testing purposes + +package okio; + +import java.io.Closeable; +import java.io.Flushable; +import okio.Buffer; +import okio.Timeout; + +public interface Sink extends Closeable, Flushable +{ + Timeout timeout(); + void close(); + void flush(); + void write(Buffer p0, long p1); +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okio/Source.java b/java/ql/test/stubs/okhttp-4.9.3/okio/Source.java new file mode 100644 index 00000000000..561b3b876c0 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okio/Source.java @@ -0,0 +1,14 @@ +// Generated automatically from okio.Source for testing purposes + +package okio; + +import java.io.Closeable; +import okio.Buffer; +import okio.Timeout; + +public interface Source extends Closeable +{ + Timeout timeout(); + long read(Buffer p0, long p1); + void close(); +} diff --git a/java/ql/test/stubs/okhttp-4.9.3/okio/Timeout.java b/java/ql/test/stubs/okhttp-4.9.3/okio/Timeout.java new file mode 100644 index 00000000000..0d7953fa324 --- /dev/null +++ b/java/ql/test/stubs/okhttp-4.9.3/okio/Timeout.java @@ -0,0 +1,30 @@ +// Generated automatically from okio.Timeout for testing purposes + +package okio; + +import java.util.concurrent.TimeUnit; +import kotlin.Unit; +import kotlin.jvm.functions.Function0; + +public class Timeout +{ + public Timeout clearDeadline(){ return null; } + public Timeout clearTimeout(){ return null; } + public Timeout deadlineNanoTime(long p0){ return null; } + public Timeout timeout(long p0, TimeUnit p1){ return null; } + public Timeout(){} + public boolean hasDeadline(){ return false; } + public final Timeout deadline(long p0, TimeUnit p1){ return null; } + public final void intersectWith(Timeout p0, Function0 p1){} + public final void waitUntilNotified(Object p0){} + public long deadlineNanoTime(){ return 0; } + public long timeoutNanos(){ return 0; } + public static Timeout NONE = null; + public static Timeout.Companion Companion = null; + public void throwIfReached(){} + static public class Companion + { + protected Companion() {} + public final long minTimeout(long p0, long p1){ return 0; } + } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/Function.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/Function.java new file mode 100644 index 00000000000..ec16743fa7a --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/Function.java @@ -0,0 +1,8 @@ +// Generated automatically from kotlin.Function for testing purposes + +package kotlin; + + +public interface Function +{ +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/Pair.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/Pair.java new file mode 100644 index 00000000000..74869657cb4 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/Pair.java @@ -0,0 +1,19 @@ +// Generated automatically from kotlin.Pair for testing purposes + +package kotlin; + +import java.io.Serializable; + +public class Pair implements Serializable +{ + protected Pair() {} + public Pair(A p0, B p1){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public final A component1(){ return null; } + public final A getFirst(){ return null; } + public final B component2(){ return null; } + public final B getSecond(){ return null; } + public final Pair copy(A p0, B p1){ return null; } + public int hashCode(){ return 0; } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/Unit.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/Unit.java new file mode 100644 index 00000000000..c2aeb7e3616 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/Unit.java @@ -0,0 +1,11 @@ +// Generated automatically from kotlin.Unit for testing purposes + +package kotlin; + + +public class Unit +{ + protected Unit() {} + public String toString(){ return null; } + public static Unit INSTANCE = null; +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/AbstractCollection.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/AbstractCollection.java new file mode 100644 index 00000000000..48555f6818e --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/AbstractCollection.java @@ -0,0 +1,26 @@ +// Generated automatically from kotlin.collections.AbstractCollection for testing purposes + +package kotlin.collections; + +import java.util.Collection; +import java.util.Iterator; +import kotlin.jvm.internal.markers.KMappedMarker; + +abstract public class AbstractCollection implements Collection, KMappedMarker +{ + protected AbstractCollection(){} + public T[] toArray(T[] p0){ return null; } + public Object[] toArray(){ return null; } + public String toString(){ return null; } + public abstract Iterator iterator(); + public abstract int getSize(); + public boolean add(E p0){ return false; } + public boolean addAll(Collection p0){ return false; } + public boolean contains(Object p0){ return false; } + public boolean containsAll(Collection p0){ return false; } + public boolean isEmpty(){ return false; } + public boolean remove(Object p0){ return false; } + public boolean removeAll(Collection p0){ return false; } + public boolean retainAll(Collection p0){ return false; } + public void clear(){} +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/AbstractList.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/AbstractList.java new file mode 100644 index 00000000000..1a11dbf9132 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/AbstractList.java @@ -0,0 +1,40 @@ +// Generated automatically from kotlin.collections.AbstractList for testing purposes + +package kotlin.collections; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import kotlin.collections.AbstractCollection; +import kotlin.jvm.internal.markers.KMappedMarker; + +abstract public class AbstractList extends AbstractCollection implements KMappedMarker, List +{ + protected AbstractList(){} + public E remove(int p0){ return null; } + public E set(int p0, E p1){ return null; } + public Iterator iterator(){ return null; } + public List subList(int p0, int p1){ return null; } + public ListIterator listIterator(){ return null; } + public ListIterator listIterator(int p0){ return null; } + public abstract E get(int p0); + public abstract int getSize(); + public boolean addAll(int p0, Collection p1){ return false; } + public boolean equals(Object p0){ return false; } + public int hashCode(){ return 0; } + public int indexOf(Object p0){ return 0; } + public int lastIndexOf(Object p0){ return 0; } + public static AbstractList.Companion Companion = null; + public void add(int p0, E p1){} + static public class Companion + { + protected Companion() {} + public final boolean orderedEquals$kotlin_stdlib(Collection p0, Collection p1){ return false; } + public final int orderedHashCode$kotlin_stdlib(Collection p0){ return 0; } + public final void checkBoundsIndexes$kotlin_stdlib(int p0, int p1, int p2){} + public final void checkElementIndex$kotlin_stdlib(int p0, int p1){} + public final void checkPositionIndex$kotlin_stdlib(int p0, int p1){} + public final void checkRangeIndexes$kotlin_stdlib(int p0, int p1, int p2){} + } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/IntIterator.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/IntIterator.java new file mode 100644 index 00000000000..87ed291f07d --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/collections/IntIterator.java @@ -0,0 +1,14 @@ +// Generated automatically from kotlin.collections.IntIterator for testing purposes + +package kotlin.collections; + +import java.util.Iterator; +import kotlin.jvm.internal.markers.KMappedMarker; + +abstract public class IntIterator implements Iterator, KMappedMarker +{ + public IntIterator(){} + public abstract int nextInt(); + public final Integer next(){ return null; } + public void remove(){} +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/functions/Function0.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/functions/Function0.java new file mode 100644 index 00000000000..93c5085ec5f --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/functions/Function0.java @@ -0,0 +1,10 @@ +// Generated automatically from kotlin.jvm.functions.Function0 for testing purposes + +package kotlin.jvm.functions; + +import kotlin.Function; + +public interface Function0 extends Function +{ + R invoke(); +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/functions/Function1.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/functions/Function1.java new file mode 100644 index 00000000000..775d4d8369b --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/functions/Function1.java @@ -0,0 +1,10 @@ +// Generated automatically from kotlin.jvm.functions.Function1 for testing purposes + +package kotlin.jvm.functions; + +import kotlin.Function; + +public interface Function1 extends Function +{ + R invoke(P1 p0); +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/internal/markers/KMappedMarker.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/internal/markers/KMappedMarker.java new file mode 100644 index 00000000000..08178fd7cc5 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/jvm/internal/markers/KMappedMarker.java @@ -0,0 +1,8 @@ +// Generated automatically from kotlin.jvm.internal.markers.KMappedMarker for testing purposes + +package kotlin.jvm.internal.markers; + + +public interface KMappedMarker +{ +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/ClosedRange.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/ClosedRange.java new file mode 100644 index 00000000000..36880bd56db --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/ClosedRange.java @@ -0,0 +1,12 @@ +// Generated automatically from kotlin.ranges.ClosedRange for testing purposes + +package kotlin.ranges; + + +public interface ClosedRange> +{ + T getEndInclusive(); + T getStart(); + boolean contains(T p0); + boolean isEmpty(); +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/IntProgression.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/IntProgression.java new file mode 100644 index 00000000000..3cf69027397 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/IntProgression.java @@ -0,0 +1,26 @@ +// Generated automatically from kotlin.ranges.IntProgression for testing purposes + +package kotlin.ranges; + +import kotlin.collections.IntIterator; +import kotlin.jvm.internal.markers.KMappedMarker; + +public class IntProgression implements Iterable, KMappedMarker +{ + protected IntProgression() {} + public IntIterator iterator(){ return null; } + public IntProgression(int p0, int p1, int p2){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public final int getFirst(){ return 0; } + public final int getLast(){ return 0; } + public final int getStep(){ return 0; } + public int hashCode(){ return 0; } + public static IntProgression.Companion Companion = null; + static public class Companion + { + protected Companion() {} + public final IntProgression fromClosedRange(int p0, int p1, int p2){ return null; } + } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/IntRange.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/IntRange.java new file mode 100644 index 00000000000..663437f37c7 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/ranges/IntRange.java @@ -0,0 +1,26 @@ +// Generated automatically from kotlin.ranges.IntRange for testing purposes + +package kotlin.ranges; + +import kotlin.ranges.ClosedRange; +import kotlin.ranges.IntProgression; + +public class IntRange extends IntProgression implements ClosedRange +{ + protected IntRange() {} + public IntRange(int p0, int p1){} + public Integer getEndInclusive(){ return null; } + public Integer getStart(){ return null; } + public String toString(){ return null; } + public boolean contains(int p0){ return false; } + public boolean equals(Object p0){ return false; } + public boolean isEmpty(){ return false; } + public int hashCode(){ return 0; } + public static IntRange.Companion Companion = null; + static public class Companion + { + protected Companion() {} + public final IntRange getEMPTY(){ return null; } + } + public boolean contains(Integer p0) { return false; } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/sequences/Sequence.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/sequences/Sequence.java new file mode 100644 index 00000000000..6f57a5a443a --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/sequences/Sequence.java @@ -0,0 +1,10 @@ +// Generated automatically from kotlin.sequences.Sequence for testing purposes + +package kotlin.sequences; + +import java.util.Iterator; + +public interface Sequence +{ + Iterator iterator(); +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/FlagEnum.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/FlagEnum.java new file mode 100644 index 00000000000..8ec20898544 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/FlagEnum.java @@ -0,0 +1,10 @@ +// Generated automatically from kotlin.text.FlagEnum for testing purposes + +package kotlin.text; + + +interface FlagEnum +{ + int getMask(); + int getValue(); +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchGroup.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchGroup.java new file mode 100644 index 00000000000..e90a0ea9264 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchGroup.java @@ -0,0 +1,19 @@ +// Generated automatically from kotlin.text.MatchGroup for testing purposes + +package kotlin.text; + +import kotlin.ranges.IntRange; + +public class MatchGroup +{ + protected MatchGroup() {} + public MatchGroup(String p0, IntRange p1){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public final IntRange component2(){ return null; } + public final IntRange getRange(){ return null; } + public final MatchGroup copy(String p0, IntRange p1){ return null; } + public final String component1(){ return null; } + public final String getValue(){ return null; } + public int hashCode(){ return 0; } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchGroupCollection.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchGroupCollection.java new file mode 100644 index 00000000000..ca401ed1a98 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchGroupCollection.java @@ -0,0 +1,12 @@ +// Generated automatically from kotlin.text.MatchGroupCollection for testing purposes + +package kotlin.text; + +import java.util.Collection; +import kotlin.jvm.internal.markers.KMappedMarker; +import kotlin.text.MatchGroup; + +public interface MatchGroupCollection extends Collection, KMappedMarker +{ + MatchGroup get(int p0); +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchResult.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchResult.java new file mode 100644 index 00000000000..888b629712c --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/MatchResult.java @@ -0,0 +1,24 @@ +// Generated automatically from kotlin.text.MatchResult for testing purposes + +package kotlin.text; + +import java.util.List; +import kotlin.ranges.IntRange; +import kotlin.text.MatchGroupCollection; + +public interface MatchResult +{ + IntRange getRange(); + List getGroupValues(); + MatchGroupCollection getGroups(); + MatchResult next(); + MatchResult.Destructured getDestructured(); + String getValue(); + static public class Destructured + { + protected Destructured() {} + public Destructured(MatchResult p0){} + public final List toList(){ return null; } + public final MatchResult getMatch(){ return null; } + } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/Regex.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/Regex.java new file mode 100644 index 00000000000..f587f461b2e --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/Regex.java @@ -0,0 +1,42 @@ +// Generated automatically from kotlin.text.Regex for testing purposes + +package kotlin.text; + +import java.io.Serializable; +import java.util.List; +import java.util.Set; +import java.util.regex.Pattern; +import kotlin.jvm.functions.Function1; +import kotlin.sequences.Sequence; +import kotlin.text.MatchResult; +import kotlin.text.RegexOption; + +public class Regex implements Serializable +{ + protected Regex() {} + public Regex(Pattern p0){} + public Regex(String p0){} + public Regex(String p0, RegexOption p1){} + public Regex(String p0, Set p1){} + public String toString(){ return null; } + public final List split(CharSequence p0, int p1){ return null; } + public final MatchResult find(CharSequence p0, int p1){ return null; } + public final MatchResult matchEntire(CharSequence p0){ return null; } + public final Pattern toPattern(){ return null; } + public final Sequence findAll(CharSequence p0, int p1){ return null; } + public final Set getOptions(){ return null; } + public final String getPattern(){ return null; } + public final String replace(CharSequence p0, Function1 p1){ return null; } + public final String replace(CharSequence p0, String p1){ return null; } + public final String replaceFirst(CharSequence p0, String p1){ return null; } + public final boolean containsMatchIn(CharSequence p0){ return false; } + public final boolean matches(CharSequence p0){ return false; } + public static Regex.Companion Companion = null; + static public class Companion + { + protected Companion() {} + public final Regex fromLiteral(String p0){ return null; } + public final String escape(String p0){ return null; } + public final String escapeReplacement(String p0){ return null; } + } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/RegexOption.java b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/RegexOption.java new file mode 100644 index 00000000000..7cc222eb40a --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/kotlin/text/RegexOption.java @@ -0,0 +1,12 @@ +// Generated automatically from kotlin.text.RegexOption for testing purposes + +package kotlin.text; + + +public enum RegexOption +{ + CANON_EQ, COMMENTS, DOT_MATCHES_ALL, IGNORE_CASE, LITERAL, MULTILINE, UNIX_LINES; + private RegexOption() {} + public int getMask(){ return 0; } + public int getValue(){ return 0; } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Call.java b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Call.java new file mode 100644 index 00000000000..a341e37ae74 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Call.java @@ -0,0 +1,20 @@ +// Generated automatically from retrofit2.Call for testing purposes + +package retrofit2; + +import okhttp3.Request; +import okio.Timeout; +import retrofit2.Callback; +import retrofit2.Response; + +public interface Call extends Cloneable +{ + Call clone(); + Request request(); + Response execute(); + Timeout timeout(); + boolean isCanceled(); + boolean isExecuted(); + void cancel(); + void enqueue(Callback p0); +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/retrofit2/CallAdapter.java b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/CallAdapter.java new file mode 100644 index 00000000000..7c79f2ce004 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/CallAdapter.java @@ -0,0 +1,22 @@ +// Generated automatically from retrofit2.CallAdapter for testing purposes + +package retrofit2; + +import java.lang.annotation.Annotation; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import retrofit2.Call; +import retrofit2.Retrofit; + +public interface CallAdapter +{ + T adapt(Call p0); + Type responseType(); + abstract static public class Factory + { + protected static Class getRawType(Type p0){ return null; } + protected static Type getParameterUpperBound(int p0, ParameterizedType p1){ return null; } + public Factory(){} + public abstract CallAdapter get(Type p0, Annotation[] p1, Retrofit p2); + } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Callback.java b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Callback.java new file mode 100644 index 00000000000..885dc933a0b --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Callback.java @@ -0,0 +1,12 @@ +// Generated automatically from retrofit2.Callback for testing purposes + +package retrofit2; + +import retrofit2.Call; +import retrofit2.Response; + +public interface Callback +{ + void onFailure(Call p0, Throwable p1); + void onResponse(Call p0, Response p1); +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Converter.java b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Converter.java new file mode 100644 index 00000000000..bc85c5c1015 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Converter.java @@ -0,0 +1,24 @@ +// Generated automatically from retrofit2.Converter for testing purposes + +package retrofit2; + +import java.lang.annotation.Annotation; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import okhttp3.RequestBody; +import okhttp3.ResponseBody; +import retrofit2.Retrofit; + +public interface Converter +{ + T convert(F p0); + abstract static public class Factory + { + protected static Class getRawType(Type p0){ return null; } + protected static Type getParameterUpperBound(int p0, ParameterizedType p1){ return null; } + public Converter requestBodyConverter(Type p0, Annotation[] p1, Annotation[] p2, Retrofit p3){ return null; } + public Converter stringConverter(Type p0, Annotation[] p1, Retrofit p2){ return null; } + public Converter responseBodyConverter(Type p0, Annotation[] p1, Retrofit p2){ return null; } + public Factory(){} + } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Response.java b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Response.java new file mode 100644 index 00000000000..542ce3a3ba8 --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Response.java @@ -0,0 +1,25 @@ +// Generated automatically from retrofit2.Response for testing purposes + +package retrofit2; + +import okhttp3.Headers; +import okhttp3.ResponseBody; + +public class Response +{ + protected Response() {} + public Headers headers(){ return null; } + public Response raw(){ return null; } + public ResponseBody errorBody(){ return null; } + public String message(){ return null; } + public String toString(){ return null; } + public T body(){ return null; } + public boolean isSuccessful(){ return false; } + public int code(){ return 0; } + public static Response error(ResponseBody p0, Response p1){ return null; } + public static Response error(int p0, ResponseBody p1){ return null; } + public static Response success(T p0){ return null; } + public static Response success(T p0, Headers p1){ return null; } + public static Response success(T p0, Response p1){ return null; } + public static Response success(int p0, T p1){ return null; } +} diff --git a/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Retrofit.java b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Retrofit.java new file mode 100644 index 00000000000..9d87826085c --- /dev/null +++ b/java/ql/test/stubs/retrofit-2.9.0/retrofit2/Retrofit.java @@ -0,0 +1,51 @@ +// Generated automatically from retrofit2.Retrofit for testing purposes + +package retrofit2; + +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import java.net.URL; +import java.util.List; +import java.util.concurrent.Executor; +import okhttp3.Call; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.RequestBody; +import okhttp3.ResponseBody; +import retrofit2.CallAdapter; +import retrofit2.Converter; + +public class Retrofit +{ + protected Retrofit() {} + public Converter nextResponseBodyConverter(Converter.Factory p0, Type p1, Annotation[] p2){ return null; } + public Converter responseBodyConverter(Type p0, Annotation[] p1){ return null; } + public Converter nextRequestBodyConverter(Converter.Factory p0, Type p1, Annotation[] p2, Annotation[] p3){ return null; } + public Converter requestBodyConverter(Type p0, Annotation[] p1, Annotation[] p2){ return null; } + public Converter stringConverter(Type p0, Annotation[] p1){ return null; } + public T create(Class p0){ return null; } + public Call.Factory callFactory(){ return null; } + public CallAdapter callAdapter(Type p0, Annotation[] p1){ return null; } + public CallAdapter nextCallAdapter(CallAdapter.Factory p0, Type p1, Annotation[] p2){ return null; } + public Executor callbackExecutor(){ return null; } + public HttpUrl baseUrl(){ return null; } + public List callAdapterFactories(){ return null; } + public List converterFactories(){ return null; } + public Retrofit.Builder newBuilder(){ return null; } + static public class Builder + { + public Builder(){} + public List callAdapterFactories(){ return null; } + public List converterFactories(){ return null; } + public Retrofit build(){ return null; } + public Retrofit.Builder addCallAdapterFactory(CallAdapter.Factory p0){ return null; } + public Retrofit.Builder addConverterFactory(Converter.Factory p0){ return null; } + public Retrofit.Builder baseUrl(HttpUrl p0){ return null; } + public Retrofit.Builder baseUrl(String p0){ return null; } + public Retrofit.Builder baseUrl(URL p0){ return null; } + public Retrofit.Builder callFactory(Call.Factory p0){ return null; } + public Retrofit.Builder callbackExecutor(Executor p0){ return null; } + public Retrofit.Builder client(OkHttpClient p0){ return null; } + public Retrofit.Builder validateEagerly(boolean p0){ return null; } + } +} From 1cf4b6076915178c1ae32b59b9cdf100815875b6 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 2 May 2022 15:43:07 +0200 Subject: [PATCH 0229/1618] Simplify non-https-url query --- java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql b/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql index da5d847b4dd..123313e2177 100644 --- a/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql +++ b/java/ql/src/Security/CWE/CWE-319/HttpsUrls.ql @@ -14,10 +14,7 @@ import java import semmle.code.java.security.HttpsUrlsQuery import DataFlow::PathGraph -from DataFlow::PathNode source, DataFlow::PathNode sink, MethodAccess m, HttpStringLiteral s -where - source.getNode().asExpr() = s and - sink.getNode().asExpr() = m.getQualifier() and - any(HttpStringToUrlOpenMethodFlowConfig c).hasFlowPath(source, sink) -select m, source, sink, "URL may have been constructed with HTTP protocol, using $@.", s, - "this source" +from DataFlow::PathNode source, DataFlow::PathNode sink +where any(HttpStringToUrlOpenMethodFlowConfig c).hasFlowPath(source, sink) +select sink.getNode(), source, sink, "URL may have been constructed with HTTP protocol, using $@.", + source.getNode(), "this source" From 9a35aba465aee7fe52b9213278af97810ea27095 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 2 May 2022 15:45:44 +0200 Subject: [PATCH 0230/1618] Add change notes --- .../ql/lib/change-notes/2022-05-02-okhttp-retrofit-models.md | 4 ++++ .../src/change-notes/2022-05-02-non-https-urls-simplified.md | 5 +++++ 2 files changed, 9 insertions(+) create mode 100644 java/ql/lib/change-notes/2022-05-02-okhttp-retrofit-models.md create mode 100644 java/ql/src/change-notes/2022-05-02-non-https-urls-simplified.md diff --git a/java/ql/lib/change-notes/2022-05-02-okhttp-retrofit-models.md b/java/ql/lib/change-notes/2022-05-02-okhttp-retrofit-models.md new file mode 100644 index 00000000000..f575b10cfec --- /dev/null +++ b/java/ql/lib/change-notes/2022-05-02-okhttp-retrofit-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added models for the libraries OkHttp and Retrofit. \ No newline at end of file diff --git a/java/ql/src/change-notes/2022-05-02-non-https-urls-simplified.md b/java/ql/src/change-notes/2022-05-02-non-https-urls-simplified.md new file mode 100644 index 00000000000..9baa9a9bbae --- /dev/null +++ b/java/ql/src/change-notes/2022-05-02-non-https-urls-simplified.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The query `java/non-https-urls` has been simplified +and no longer requires its sinks to be `MethodAccess`es. \ No newline at end of file From 29b430e49b7e56f58571a8ad6451148d94117892 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 2 May 2022 16:55:01 +0200 Subject: [PATCH 0231/1618] Make commits private --- java/ql/lib/semmle/code/java/frameworks/OkHttp.qll | 2 +- java/ql/lib/semmle/code/java/frameworks/Retrofit.qll | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll b/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll index 36e23d45881..12b09065183 100644 --- a/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll +++ b/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll @@ -3,7 +3,7 @@ */ import java -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow private class OkHttpOpenUrlSinks extends SinkModelCsv { override predicate row(string row) { diff --git a/java/ql/lib/semmle/code/java/frameworks/Retrofit.qll b/java/ql/lib/semmle/code/java/frameworks/Retrofit.qll index cb1aaa87667..bbbd659ee85 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Retrofit.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Retrofit.qll @@ -3,7 +3,7 @@ */ import java -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow private class RetrofitOpenUrlSinks extends SinkModelCsv { override predicate row(string row) { From de8b5f927b5eeb5ebd40bb38858a932794cd42e6 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Mon, 2 May 2022 16:55:11 +0200 Subject: [PATCH 0232/1618] Adjust test expectations --- .../security/CWE-311/CWE-319/HttpsUrls.expected | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/test/query-tests/security/CWE-311/CWE-319/HttpsUrls.expected b/java/ql/test/query-tests/security/CWE-311/CWE-319/HttpsUrls.expected index af4bc51c793..a6a8886c4b3 100644 --- a/java/ql/test/query-tests/security/CWE-311/CWE-319/HttpsUrls.expected +++ b/java/ql/test/query-tests/security/CWE-311/CWE-319/HttpsUrls.expected @@ -19,7 +19,7 @@ nodes | HttpsUrlsTest.java:92:50:92:50 | u | semmle.label | u | subpaths #select -| HttpsUrlsTest.java:28:50:28:67 | openConnection(...) | HttpsUrlsTest.java:23:23:23:31 | "http://" : String | HttpsUrlsTest.java:28:50:28:50 | u | URL may have been constructed with HTTP protocol, using $@. | HttpsUrlsTest.java:23:23:23:31 | "http://" | this source | -| HttpsUrlsTest.java:41:50:41:67 | openConnection(...) | HttpsUrlsTest.java:36:23:36:28 | "http" : String | HttpsUrlsTest.java:41:50:41:50 | u | URL may have been constructed with HTTP protocol, using $@. | HttpsUrlsTest.java:36:23:36:28 | "http" | this source | -| HttpsUrlsTest.java:55:50:55:67 | openConnection(...) | HttpsUrlsTest.java:49:23:49:31 | "http://" : String | HttpsUrlsTest.java:55:50:55:50 | u | URL may have been constructed with HTTP protocol, using $@. | HttpsUrlsTest.java:49:23:49:31 | "http://" | this source | -| HttpsUrlsTest.java:92:50:92:67 | openConnection(...) | HttpsUrlsTest.java:87:23:87:28 | "http" : String | HttpsUrlsTest.java:92:50:92:50 | u | URL may have been constructed with HTTP protocol, using $@. | HttpsUrlsTest.java:87:23:87:28 | "http" | this source | +| HttpsUrlsTest.java:28:50:28:50 | u | HttpsUrlsTest.java:23:23:23:31 | "http://" : String | HttpsUrlsTest.java:28:50:28:50 | u | URL may have been constructed with HTTP protocol, using $@. | HttpsUrlsTest.java:23:23:23:31 | "http://" | this source | +| HttpsUrlsTest.java:41:50:41:50 | u | HttpsUrlsTest.java:36:23:36:28 | "http" : String | HttpsUrlsTest.java:41:50:41:50 | u | URL may have been constructed with HTTP protocol, using $@. | HttpsUrlsTest.java:36:23:36:28 | "http" | this source | +| HttpsUrlsTest.java:55:50:55:50 | u | HttpsUrlsTest.java:49:23:49:31 | "http://" : String | HttpsUrlsTest.java:55:50:55:50 | u | URL may have been constructed with HTTP protocol, using $@. | HttpsUrlsTest.java:49:23:49:31 | "http://" | this source | +| HttpsUrlsTest.java:92:50:92:50 | u | HttpsUrlsTest.java:87:23:87:28 | "http" : String | HttpsUrlsTest.java:92:50:92:50 | u | URL may have been constructed with HTTP protocol, using $@. | HttpsUrlsTest.java:87:23:87:28 | "http" | this source | From fddb46526001f5d0db95784cfcf5a2f6c4257a77 Mon Sep 17 00:00:00 2001 From: Daniel Santos Date: Mon, 2 May 2022 14:00:45 -0500 Subject: [PATCH 0233/1618] Update javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll Co-authored-by: Erik Krogh Kristensen --- .../security/dataflow/XssThroughDomCustomizations.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll index a387607229a..14cb9fecc2e 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll @@ -219,7 +219,7 @@ module XssThroughDom { /** - * A call to window.getSelection + * Gets a reference to a value obtained by calling `window.getSelection()`. * https://developer.mozilla.org/en-US/docs/Web/API/Selection */ DataFlow::SourceNode getSelectionCall(DataFlow::TypeTracker t) { From 433beaf6378f38c2aa3f16b191b767ce0d6fb395 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 3 May 2022 00:15:34 +0000 Subject: [PATCH 0234/1618] Add changed framework coverage reports --- java/documentation/library-coverage/coverage.csv | 4 ++-- java/documentation/library-coverage/coverage.rst | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java/documentation/library-coverage/coverage.csv b/java/documentation/library-coverage/coverage.csv index e1c948a3f6a..839d201b63d 100644 --- a/java/documentation/library-coverage/coverage.csv +++ b/java/documentation/library-coverage/coverage.csv @@ -31,7 +31,7 @@ jakarta.ws.rs.client,1,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,, jakarta.ws.rs.container,,9,,,,,,,,,,,,,,,,,,,,,,,,,,,9,, jakarta.ws.rs.core,2,,149,,,,,,,,,,,,,,,,,,,2,,,,,,,,94,55 java.beans,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,1, -java.io,37,,35,,15,,,,,,,,,,,,,,,,,,22,,,,,,,35, +java.io,37,,39,,15,,,,,,,,,,,,,,,,,,22,,,,,,,39, java.lang,8,,58,,,,,,,,,,,8,,,,,,,,,,,,,,,,46,12 java.net,10,3,7,,,,,,,,,,,,,,10,,,,,,,,,,,,3,7, java.nio,15,,6,,13,,,,,,,,,,,,,,,,,,2,,,,,,,6, @@ -70,7 +70,7 @@ org.apache.hc.core5.http,1,2,39,,,,,,,,,,,,,,,,,,,,,,,1,,,2,39, org.apache.hc.core5.net,,,2,,,,,,,,,,,,,,,,,,,,,,,,,,,2, org.apache.hc.core5.util,,,24,,,,,,,,,,,,,,,,,,,,,,,,,,,18,6 org.apache.http,27,3,70,,,,,,,,,,,,,,25,,,,,,,,,2,,,3,62,8 -org.apache.ibatis.jdbc,6,,,,,,,,,,,,,,,,,,,6,,,,,,,,,,, +org.apache.ibatis.jdbc,6,,57,,,,,,,,,,,,,,,,,6,,,,,,,,,,57, org.apache.log4j,11,,,,,,,,,,,,,11,,,,,,,,,,,,,,,,, org.apache.logging.log4j,359,,8,,,,,,,,,,,359,,,,,,,,,,,,,,,,4,4 org.apache.shiro.codec,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,1, diff --git a/java/documentation/library-coverage/coverage.rst b/java/documentation/library-coverage/coverage.rst index 58786d30291..069f0d450f8 100644 --- a/java/documentation/library-coverage/coverage.rst +++ b/java/documentation/library-coverage/coverage.rst @@ -15,9 +15,9 @@ Java framework & library support `Apache HttpComponents `_,"``org.apache.hc.core5.*``, ``org.apache.http``",5,136,28,,,3,,,,25 `Google Guava `_,``com.google.common.*``,,728,35,,6,,,,, `JSON-java `_,``org.json``,,236,,,,,,,, - Java Standard Library,``java.*``,3,545,115,28,,,7,,,10 + Java Standard Library,``java.*``,3,549,115,28,,,7,,,10 Java extensions,"``javax.*``, ``jakarta.*``",63,609,32,,,4,,1,1,2 `Spring `_,``org.springframework.*``,29,476,101,,,,19,14,,29 - Others,"``androidx.slice``, ``cn.hutool.core.codec``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.rabbitmq.client``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.logging``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.log4j``, ``org.apache.logging.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jboss.logging``, ``org.jdbi.v3.core``, ``org.jooq``, ``org.mvel2``, ``org.scijava.log``, ``org.slf4j``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``",65,290,929,,,,14,18,, - Totals,,213,6305,1441,106,6,10,107,33,1,81 + Others,"``androidx.slice``, ``cn.hutool.core.codec``, ``com.esotericsoftware.kryo.io``, ``com.esotericsoftware.kryo5.io``, ``com.fasterxml.jackson.core``, ``com.fasterxml.jackson.databind``, ``com.opensymphony.xwork2.ognl``, ``com.rabbitmq.client``, ``com.unboundid.ldap.sdk``, ``com.zaxxer.hikari``, ``flexjson``, ``groovy.lang``, ``groovy.util``, ``jodd.json``, ``net.sf.saxon.s9api``, ``ognl``, ``org.apache.commons.codec``, ``org.apache.commons.jexl2``, ``org.apache.commons.jexl3``, ``org.apache.commons.logging``, ``org.apache.commons.ognl``, ``org.apache.directory.ldap.client.api``, ``org.apache.ibatis.jdbc``, ``org.apache.log4j``, ``org.apache.logging.log4j``, ``org.apache.shiro.codec``, ``org.apache.shiro.jndi``, ``org.codehaus.groovy.control``, ``org.dom4j``, ``org.hibernate``, ``org.jboss.logging``, ``org.jdbi.v3.core``, ``org.jooq``, ``org.mvel2``, ``org.scijava.log``, ``org.slf4j``, ``org.xml.sax``, ``org.xmlpull.v1``, ``play.mvc``, ``ratpack.core.form``, ``ratpack.core.handling``, ``ratpack.core.http``, ``ratpack.exec``, ``ratpack.form``, ``ratpack.func``, ``ratpack.handling``, ``ratpack.http``, ``ratpack.util``",65,347,929,,,,14,18,, + Totals,,213,6366,1441,106,6,10,107,33,1,81 From 19e4d34581533e1c78fb248a99d19005f12315d2 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 3 May 2022 10:08:29 +0200 Subject: [PATCH 0235/1618] Update ruby/ql/lib/change-notes/2022-04-30-update-grammar.md Co-authored-by: intrigus-lgtm <60750685+intrigus-lgtm@users.noreply.github.com> --- ruby/ql/lib/change-notes/2022-04-30-update-grammar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/ql/lib/change-notes/2022-04-30-update-grammar.md b/ruby/ql/lib/change-notes/2022-04-30-update-grammar.md index 34a485c94e6..a5190ee7368 100644 --- a/ruby/ql/lib/change-notes/2022-04-30-update-grammar.md +++ b/ruby/ql/lib/change-notes/2022-04-30-update-grammar.md @@ -1,4 +1,4 @@ --- category: fix --- -The TreeSitter Ruby grammar has been updated; this fixes several issues where Ruby code was parsed incorrectly. +The Tree-sitter Ruby grammar has been updated; this fixes several issues where Ruby code was parsed incorrectly. From c66e583aea0f97ff68c2e63721cb9bc49d0a7a83 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 3 May 2022 09:32:43 +0200 Subject: [PATCH 0236/1618] Make more ExternalFlow imports private --- .../java/security/CleartextStorageAndroidFilesystemQuery.qll | 2 +- java/ql/lib/semmle/code/java/security/Files.qll | 2 +- java/ql/lib/semmle/code/java/security/InformationLeak.qll | 2 +- java/ql/lib/semmle/code/java/security/LogInjection.qll | 2 +- java/ql/lib/semmle/code/java/security/QueryInjection.qll | 2 +- java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll | 2 +- java/ql/lib/semmle/code/java/security/UrlRedirect.qll | 2 +- java/ql/lib/semmle/code/java/security/XPath.qll | 2 +- java/ql/lib/semmle/code/java/security/XSS.qll | 2 +- java/ql/lib/semmle/code/java/security/XsltInjection.qll | 2 +- .../experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll | 2 +- .../experimental/Security/CWE/CWE-400/ThreadResourceAbuse.qll | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll index 649b684f06d..5b836e4c01f 100644 --- a/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll +++ b/java/ql/lib/semmle/code/java/security/CleartextStorageAndroidFilesystemQuery.qll @@ -5,7 +5,7 @@ import java import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.security.CleartextStorageQuery import semmle.code.java.security.Files import semmle.code.xml.AndroidManifest diff --git a/java/ql/lib/semmle/code/java/security/Files.qll b/java/ql/lib/semmle/code/java/security/Files.qll index c017f0cedc1..8d802325792 100644 --- a/java/ql/lib/semmle/code/java/security/Files.qll +++ b/java/ql/lib/semmle/code/java/security/Files.qll @@ -1,7 +1,7 @@ /** Provides classes and predicates to work with File objects. */ import java -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow private class CreateFileSinkModels extends SinkModelCsv { override predicate row(string row) { diff --git a/java/ql/lib/semmle/code/java/security/InformationLeak.qll b/java/ql/lib/semmle/code/java/security/InformationLeak.qll index 3ea674521a0..f111f70719b 100644 --- a/java/ql/lib/semmle/code/java/security/InformationLeak.qll +++ b/java/ql/lib/semmle/code/java/security/InformationLeak.qll @@ -2,7 +2,7 @@ import java import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.security.XSS /** CSV sink models representing methods not susceptible to XSS but outputing to an HTTP response body. */ diff --git a/java/ql/lib/semmle/code/java/security/LogInjection.qll b/java/ql/lib/semmle/code/java/security/LogInjection.qll index f446a7edee8..55e4a785d4b 100644 --- a/java/ql/lib/semmle/code/java/security/LogInjection.qll +++ b/java/ql/lib/semmle/code/java/security/LogInjection.qll @@ -2,7 +2,7 @@ import java import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow /** A data flow sink for unvalidated user input that is used to log messages. */ abstract class LogInjectionSink extends DataFlow::Node { } diff --git a/java/ql/lib/semmle/code/java/security/QueryInjection.qll b/java/ql/lib/semmle/code/java/security/QueryInjection.qll index f4fe51969b9..ed81c12074f 100644 --- a/java/ql/lib/semmle/code/java/security/QueryInjection.qll +++ b/java/ql/lib/semmle/code/java/security/QueryInjection.qll @@ -4,7 +4,7 @@ import java import semmle.code.java.dataflow.DataFlow import semmle.code.java.frameworks.javaee.Persistence private import semmle.code.java.frameworks.MyBatis -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow /** A sink for database query language injection vulnerabilities. */ abstract class QueryInjectionSink extends DataFlow::Node { } diff --git a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll index df0db54f159..7c87cec5aa5 100644 --- a/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll +++ b/java/ql/lib/semmle/code/java/security/SensitiveLoggingQuery.qll @@ -1,7 +1,7 @@ /** Provides configurations for sensitive logging queries. */ import java -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.dataflow.TaintTracking import semmle.code.java.security.SensitiveActions import DataFlow diff --git a/java/ql/lib/semmle/code/java/security/UrlRedirect.qll b/java/ql/lib/semmle/code/java/security/UrlRedirect.qll index 254ea873fcc..f4fc862ab53 100644 --- a/java/ql/lib/semmle/code/java/security/UrlRedirect.qll +++ b/java/ql/lib/semmle/code/java/security/UrlRedirect.qll @@ -2,7 +2,7 @@ import java import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.frameworks.Servlets import semmle.code.java.frameworks.ApacheHttp private import semmle.code.java.frameworks.JaxWS diff --git a/java/ql/lib/semmle/code/java/security/XPath.qll b/java/ql/lib/semmle/code/java/security/XPath.qll index 374fbcdbebe..4678d7572c7 100644 --- a/java/ql/lib/semmle/code/java/security/XPath.qll +++ b/java/ql/lib/semmle/code/java/security/XPath.qll @@ -2,7 +2,7 @@ import java import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow /** * A sink that represents a method that interprets XPath expressions. diff --git a/java/ql/lib/semmle/code/java/security/XSS.qll b/java/ql/lib/semmle/code/java/security/XSS.qll index 23bda5b9964..fa94fe09cac 100644 --- a/java/ql/lib/semmle/code/java/security/XSS.qll +++ b/java/ql/lib/semmle/code/java/security/XSS.qll @@ -8,7 +8,7 @@ import semmle.code.java.frameworks.spring.SpringHttp import semmle.code.java.frameworks.javaee.jsf.JSFRenderer import semmle.code.java.dataflow.DataFlow import semmle.code.java.dataflow.TaintTracking2 -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow /** A sink that represent a method that outputs data without applying contextual output encoding. */ abstract class XssSink extends DataFlow::Node { } diff --git a/java/ql/lib/semmle/code/java/security/XsltInjection.qll b/java/ql/lib/semmle/code/java/security/XsltInjection.qll index db96879181c..84a2f79a06a 100644 --- a/java/ql/lib/semmle/code/java/security/XsltInjection.qll +++ b/java/ql/lib/semmle/code/java/security/XsltInjection.qll @@ -2,7 +2,7 @@ import java import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow /** * A data flow sink for unvalidated user input that is used in XSLT transformation. diff --git a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll index b6d799c9266..e8795a25431 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-200/AndroidFileIntentSink.qll @@ -2,7 +2,7 @@ import java import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.frameworks.android.Android import semmle.code.java.frameworks.android.Intent diff --git a/java/ql/src/experimental/Security/CWE/CWE-400/ThreadResourceAbuse.qll b/java/ql/src/experimental/Security/CWE/CWE-400/ThreadResourceAbuse.qll index b44ffa3b812..4f654374b17 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-400/ThreadResourceAbuse.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-400/ThreadResourceAbuse.qll @@ -2,7 +2,7 @@ import java import semmle.code.java.dataflow.DataFlow -import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.dataflow.ExternalFlow import semmle.code.java.dataflow.FlowSteps /** `java.lang.Math` data model for value comparison in the new CSV format. */ From 00bf352b50559258010c5b5253c0e3beb4f9670a Mon Sep 17 00:00:00 2001 From: Nick Rolfe Date: Fri, 29 Apr 2022 16:43:22 +0100 Subject: [PATCH 0237/1618] Ruby: fix some flow summary join orders The flow summaries that are implemented with an abstract base class restricting the method name, and child classes using that method name, had unfortunate join orders: r1 = JOIN Call::MethodCall::getMethodName#dispred#f0820431#ff WITH Call::MethodCall::getMethodName#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.0, (Lhs.1 ++ "_arg"), Rhs.1 --- .../lib/codeql/ruby/frameworks/core/Array.qll | 65 +++++++++++++------ 1 file changed, 45 insertions(+), 20 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll index cbd633286c4..489856102af 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll @@ -192,12 +192,17 @@ module Array { } } + private class ElementReferenceReadMethodName extends string { + ElementReferenceReadMethodName() { this = ["[]", "slice"] } + } + /** A call to `[]`, or its alias, `slice`. */ abstract private class ElementReferenceReadSummary extends SummarizedCallable { MethodCall mc; + ElementReferenceReadMethodName methodName; bindingset[this] - ElementReferenceReadSummary() { mc.getMethodName() = ["[]", "slice"] } + ElementReferenceReadSummary() { mc.getMethodName() = methodName } override MethodCall getACall() { result = mc } } @@ -207,7 +212,7 @@ module Array { private ConstantValue cv; ElementReferenceReadKnownSummary() { - this = mc.getMethodName() + "(" + cv.serialize() + ")" and + this = methodName + "(" + cv.serialize() + ")" and mc.getNumberOfArguments() = 1 and cv = getKnownElementIndex(mc.getArgument(0)) } @@ -225,7 +230,7 @@ module Array { */ private class ElementReferenceReadUnknownSummary extends ElementReferenceReadSummary { ElementReferenceReadUnknownSummary() { - this = mc.getMethodName() + "(index)" and + this = methodName + "(index)" and mc.getNumberOfArguments() = 1 and isUnknownElementIndex(mc.getArgument(0)) } @@ -267,7 +272,7 @@ module Array { or rl.isExclusive() and end = e - 1 ) and - this = "[](" + start + ".." + end + ")" + this = methodName + "(" + start + ".." + end + ")" ) } @@ -291,7 +296,7 @@ module Array { */ private class ElementReferenceRangeReadUnknownSummary extends ElementReferenceReadSummary { ElementReferenceRangeReadUnknownSummary() { - this = "[](range_unknown)" and + this = methodName + "(range_unknown)" and ( mc.getNumberOfArguments() = 2 and ( @@ -2007,17 +2012,22 @@ module Enumerable { } } + private class GrepMethodName extends string { + GrepMethodName() { this = ["grep", "grep_v"] } + } + abstract private class GrepSummary extends SummarizedCallable { MethodCall mc; + GrepMethodName methodName; bindingset[this] - GrepSummary() { mc.getMethodName() = ["grep", "grep_v"] } + GrepSummary() { mc.getMethodName() = methodName } override MethodCall getACall() { result = mc } } private class GrepBlockSummary extends GrepSummary { - GrepBlockSummary() { this = mc.getMethodName() + "(block)" and exists(mc.getBlock()) } + GrepBlockSummary() { this = methodName + "(block)" and exists(mc.getBlock()) } override predicate propagatesFlowExt(string input, string output, boolean preservesValue) { ( @@ -2032,7 +2042,7 @@ module Enumerable { } private class GrepNoBlockSummary extends GrepSummary { - GrepNoBlockSummary() { this = mc.getMethodName() + "(no_block)" and not exists(mc.getBlock()) } + GrepNoBlockSummary() { this = methodName + "(no_block)" and not exists(mc.getBlock()) } override predicate propagatesFlowExt(string input, string output, boolean preservesValue) { input = "Argument[self].Element[any]" and @@ -2052,18 +2062,23 @@ module Enumerable { } } + private class InjectMethodName extends string { + // `reduce` is an alias for `inject`. + InjectMethodName() { this = ["inject", "reduce"] } + } + abstract private class InjectSummary extends SummarizedCallable { MethodCall mc; + InjectMethodName methodName; // adding this as a field helps give a better join order - // `reduce` is an alias for `inject`. bindingset[this] - InjectSummary() { mc.getMethodName() = ["inject", "reduce"] } + InjectSummary() { mc.getMethodName() = methodName } override MethodCall getACall() { result = mc } } private class InjectNoArgSummary extends InjectSummary { - InjectNoArgSummary() { this = mc.getMethodName() + "_no_arg" and mc.getNumberOfArguments() = 0 } + InjectNoArgSummary() { this = methodName + "_no_arg" and mc.getNumberOfArguments() = 0 } override predicate propagatesFlowExt(string input, string output, boolean preservesValue) { // The no-argument variant of inject passes element 0 to the first block @@ -2083,7 +2098,7 @@ module Enumerable { } private class InjectArgSummary extends InjectSummary { - InjectArgSummary() { this = mc.getMethodName() + "_arg" and mc.getNumberOfArguments() > 0 } + InjectArgSummary() { this = methodName + "_arg" and mc.getNumberOfArguments() > 0 } override predicate propagatesFlowExt(string input, string output, boolean preservesValue) { ( @@ -2101,18 +2116,23 @@ module Enumerable { } } + private class MinOrMaxByMethodName extends string { + MinOrMaxByMethodName() { this = ["min_by", "max_by"] } + } + abstract private class MinOrMaxBySummary extends SummarizedCallable { MethodCall mc; + MinOrMaxByMethodName methodName; // adding this as a field helps give a better join order bindingset[this] - MinOrMaxBySummary() { mc.getMethodName() = ["min_by", "max_by"] } + MinOrMaxBySummary() { mc.getMethodName() = methodName } override MethodCall getACall() { result = mc } } private class MinOrMaxByNoArgSummary extends MinOrMaxBySummary { MinOrMaxByNoArgSummary() { - this = mc.getMethodName() + "_no_arg" and + this = methodName + "_no_arg" and mc.getNumberOfArguments() = 0 } @@ -2125,7 +2145,7 @@ module Enumerable { private class MinOrMaxByArgSummary extends MinOrMaxBySummary { MinOrMaxByArgSummary() { - this = mc.getMethodName() + "_arg" and + this = methodName + "_arg" and mc.getNumberOfArguments() > 0 } @@ -2136,18 +2156,23 @@ module Enumerable { } } + private class MinOrMaxMethodName extends string { + MinOrMaxMethodName() { this = ["min", "max"] } + } + abstract private class MinOrMaxSummary extends SummarizedCallable { MethodCall mc; + MinOrMaxMethodName methodName; bindingset[this] - MinOrMaxSummary() { mc.getMethodName() = ["min", "max"] } + MinOrMaxSummary() { mc.getMethodName() = methodName } override MethodCall getACall() { result = mc } } private class MinOrMaxNoArgNoBlockSummary extends MinOrMaxSummary { MinOrMaxNoArgNoBlockSummary() { - this = mc.getMethodName() + "_no_arg_no_block" and + this = methodName + "_no_arg_no_block" and mc.getNumberOfArguments() = 0 and not exists(mc.getBlock()) } @@ -2161,7 +2186,7 @@ module Enumerable { private class MinOrMaxArgNoBlockSummary extends MinOrMaxSummary { MinOrMaxArgNoBlockSummary() { - this = mc.getMethodName() + "_arg_no_block" and + this = methodName + "_arg_no_block" and mc.getNumberOfArguments() > 0 and not exists(mc.getBlock()) } @@ -2175,7 +2200,7 @@ module Enumerable { private class MinOrMaxNoArgBlockSummary extends MinOrMaxSummary { MinOrMaxNoArgBlockSummary() { - this = mc.getMethodName() + "_no_arg_block" and + this = methodName + "_no_arg_block" and mc.getNumberOfArguments() = 0 and exists(mc.getBlock()) } @@ -2189,7 +2214,7 @@ module Enumerable { private class MinOrMaxArgBlockSummary extends MinOrMaxSummary { MinOrMaxArgBlockSummary() { - this = mc.getMethodName() + "_arg_block" and + this = methodName + "_arg_block" and mc.getNumberOfArguments() > 0 and exists(mc.getBlock()) } From 2b4fde74bbc3497df374a553e1439c79b3978e83 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 3 May 2022 11:31:58 +0200 Subject: [PATCH 0238/1618] Data flow: Speedup `subpaths` predicate Before ``` [2022-05-02 15:47:16] (1280s) Tuple counts for DataFlowImpl::Subpaths::subpaths#656de156#ffff/4@c5f3dclb after 3m22s: 8389013 ~4% {5} r1 = JOIN DataFlowImpl::Subpaths::subpaths#656de156#ffff#shared WITH DataFlowImpl::PathNode::getASuccessor#dispred#f0820431#ff_10#join_rhs ON FIRST 1 OUTPUT Rhs.1 'arg', Lhs.1, Lhs.2, Lhs.3, Lhs.4 'out' 6689751 ~0% {4} r2 = JOIN r1 WITH DataFlowImpl::Subpaths::subpaths03#656de156#ffffff_034512#join_rhs ON FIRST 4 OUTPUT Rhs.4, Lhs.4 'out', Lhs.0 'arg', Rhs.5 'ret' 1513839768 ~1% {5} r3 = JOIN r2 WITH DataFlowImpl::PathNodeImpl::getNodeEx#dispred#f0820431#ff_10#join_rhs ON FIRST 1 OUTPUT Lhs.1 'out', Lhs.2 'arg', Lhs.3 'ret', Rhs.1 'par', Lhs.3 'ret' 1513839768 ~1% {5} r4 = r3 AND NOT DataFlowImpl::PathNodeImpl::isHidden#dispred#f0820431#f(Lhs.4 'ret') 1513839768 ~5% {4} r5 = SCAN r4 OUTPUT In.1 'arg', In.3 'par', In.0 'out', In.4 'ret' 1513839768 ~2% {4} r6 = JOIN r2 WITH DataFlowImpl::PathNodeImpl::getNodeEx#dispred#f0820431#ff_10#join_rhs ON FIRST 1 OUTPUT Lhs.3 'ret', Lhs.1 'out', Lhs.2 'arg', Rhs.1 'par' 0 ~0% {5} r7 = JOIN r6 WITH boundedFastTC(DataFlowImpl::Subpaths::localStepToHidden#656de156#ff_10#higher_order_body,DataFlowImpl::Subpaths::subpaths#656de156#ffff#higher_order_body) ON FIRST 1 OUTPUT Lhs.1 'out', Lhs.2 'arg', Lhs.0, Lhs.3 'par', Rhs.1 'ret' 0 ~0% {5} r8 = r7 AND NOT DataFlowImpl::PathNodeImpl::isHidden#dispred#f0820431#f(Lhs.4 'ret') 0 ~0% {4} r9 = SCAN r8 OUTPUT In.1 'arg', In.3 'par', In.0 'out', In.4 'ret' 1513839768 ~5% {4} r10 = r5 UNION r9 6689751 ~0% {4} r11 = JOIN r10 WITH DataFlowImpl::PathNode::getASuccessor#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.0 'arg', Lhs.1 'par', Lhs.3 'ret', Lhs.2 'out' return r11 ``` After ``` [2022-05-03 11:44:10] (969s) Tuple counts for DataFlowImpl::Subpaths::subpaths#656de156#ffff/4@b26b969r after 11.8s: 8372525 ~0% {3} r1 = JOIN DataFlowImpl::PathNode::getASuccessor#dispred#f0820431#ff_10#join_rhs WITH DataFlowImpl::PathNodeImpl::getNodeEx#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.1 'arg', Rhs.1, Rhs.0 6673799 ~6% {9} r2 = JOIN r1 WITH DataFlowImpl::Subpaths::subpaths03#656de156#fffffffff ON FIRST 2 OUTPUT Rhs.3, Rhs.4, Rhs.5, Rhs.7, Rhs.6, Rhs.8, Lhs.2 'par', Lhs.0 'arg', Rhs.2 'ret' 6637884 ~0% {5} r3 = JOIN r2 WITH project#DataFlowImpl::pathNode#656de156#ffffffff_1234560#join_rhs ON FIRST 6 OUTPUT Lhs.6 'par', Lhs.7 'arg', Lhs.8 'ret', Rhs.6 'out', Lhs.8 'ret' 6637884 ~0% {4} r4 = JOIN r2 WITH project#DataFlowImpl::pathNode#656de156#ffffffff_1234560#join_rhs ON FIRST 6 OUTPUT Rhs.6 'out', Lhs.6 'par', Lhs.7 'arg', Lhs.8 'ret' 51867 ~0% {5} r5 = JOIN r4 WITH DataFlowImpl::PathNodeMid::projectToSink#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.1 'par', Lhs.2 'arg', Lhs.3 'ret', Rhs.1 'out', Lhs.3 'ret' 6689751 ~0% {5} r6 = r3 UNION r5 6689751 ~0% {5} r7 = r6 AND NOT DataFlowImpl::PathNodeImpl::isHidden#dispred#f0820431#f(Lhs.4 'ret') 6689751 ~0% {4} r8 = SCAN r7 OUTPUT In.1 'arg', In.0 'par', In.4 'ret', In.3 'out' 6637884 ~0% {4} r9 = JOIN r2 WITH project#DataFlowImpl::pathNode#656de156#ffffffff_1234560#join_rhs ON FIRST 6 OUTPUT Lhs.8 'ret', Lhs.6 'par', Lhs.7 'arg', Rhs.6 'out' 51867 ~0% {4} r10 = JOIN r4 WITH DataFlowImpl::PathNodeMid::projectToSink#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.3 'ret', Lhs.1 'par', Lhs.2 'arg', Rhs.1 'out' 6689751 ~0% {4} r11 = r9 UNION r10 0 ~0% {5} r12 = JOIN r11 WITH boundedFastTC(DataFlowImpl::Subpaths::localStepToHidden#656de156#ff_10#higher_order_body,DataFlowImpl::Subpaths::subpaths#656de156#ffff#higher_order_body) ON FIRST 1 OUTPUT Lhs.1 'par', Lhs.2 'arg', Lhs.0, Lhs.3 'out', Rhs.1 'ret' 0 ~0% {5} r13 = r12 AND NOT DataFlowImpl::PathNodeImpl::isHidden#dispred#f0820431#f(Lhs.4 'ret') 0 ~0% {4} r14 = SCAN r13 OUTPUT In.1 'arg', In.0 'par', In.4 'ret', In.3 'out' 6689751 ~0% {4} r15 = r8 UNION r14 return r15 ``` --- .../csharp/dataflow/internal/DataFlowImpl.qll | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index f49d975ccf9..afde881c9d2 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } From e9c8f979f9a485d89e6b42bcc81c352383c6097b Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 3 May 2022 11:46:51 +0200 Subject: [PATCH 0239/1618] Data flow: Sync files --- .../cpp/dataflow/internal/DataFlowImpl.qll | 39 +++++++++++-------- .../cpp/dataflow/internal/DataFlowImpl2.qll | 39 +++++++++++-------- .../cpp/dataflow/internal/DataFlowImpl3.qll | 39 +++++++++++-------- .../cpp/dataflow/internal/DataFlowImpl4.qll | 39 +++++++++++-------- .../dataflow/internal/DataFlowImplLocal.qll | 39 +++++++++++-------- .../cpp/ir/dataflow/internal/DataFlowImpl.qll | 39 +++++++++++-------- .../ir/dataflow/internal/DataFlowImpl2.qll | 39 +++++++++++-------- .../ir/dataflow/internal/DataFlowImpl3.qll | 39 +++++++++++-------- .../ir/dataflow/internal/DataFlowImpl4.qll | 39 +++++++++++-------- .../dataflow/internal/DataFlowImpl2.qll | 39 +++++++++++-------- .../dataflow/internal/DataFlowImpl3.qll | 39 +++++++++++-------- .../dataflow/internal/DataFlowImpl4.qll | 39 +++++++++++-------- .../dataflow/internal/DataFlowImpl5.qll | 39 +++++++++++-------- .../java/dataflow/internal/DataFlowImpl.qll | 39 +++++++++++-------- .../java/dataflow/internal/DataFlowImpl2.qll | 39 +++++++++++-------- .../java/dataflow/internal/DataFlowImpl3.qll | 39 +++++++++++-------- .../java/dataflow/internal/DataFlowImpl4.qll | 39 +++++++++++-------- .../java/dataflow/internal/DataFlowImpl5.qll | 39 +++++++++++-------- .../java/dataflow/internal/DataFlowImpl6.qll | 39 +++++++++++-------- .../DataFlowImplForOnActivityResult.qll | 39 +++++++++++-------- .../DataFlowImplForSerializability.qll | 39 +++++++++++-------- .../dataflow/new/internal/DataFlowImpl.qll | 39 +++++++++++-------- .../dataflow/new/internal/DataFlowImpl2.qll | 39 +++++++++++-------- .../dataflow/new/internal/DataFlowImpl3.qll | 39 +++++++++++-------- .../dataflow/new/internal/DataFlowImpl4.qll | 39 +++++++++++-------- .../ruby/dataflow/internal/DataFlowImpl.qll | 39 +++++++++++-------- .../ruby/dataflow/internal/DataFlowImpl2.qll | 39 +++++++++++-------- .../internal/DataFlowImplForLibraries.qll | 39 +++++++++++-------- 28 files changed, 616 insertions(+), 476 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index f49d975ccf9..afde881c9d2 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index f49d975ccf9..afde881c9d2 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index f49d975ccf9..afde881c9d2 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index f49d975ccf9..afde881c9d2 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index f49d975ccf9..afde881c9d2 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index f49d975ccf9..afde881c9d2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index f49d975ccf9..afde881c9d2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index f49d975ccf9..afde881c9d2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index f49d975ccf9..afde881c9d2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index f49d975ccf9..afde881c9d2 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index f49d975ccf9..afde881c9d2 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index f49d975ccf9..afde881c9d2 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index f49d975ccf9..afde881c9d2 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index f49d975ccf9..afde881c9d2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index f49d975ccf9..afde881c9d2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index f49d975ccf9..afde881c9d2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index f49d975ccf9..afde881c9d2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index f49d975ccf9..afde881c9d2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index f49d975ccf9..afde881c9d2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll index f49d975ccf9..afde881c9d2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index f49d975ccf9..afde881c9d2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index f49d975ccf9..afde881c9d2 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index f49d975ccf9..afde881c9d2 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index f49d975ccf9..afde881c9d2 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index f49d975ccf9..afde881c9d2 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll index f49d975ccf9..afde881c9d2 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll index f49d975ccf9..afde881c9d2 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll index f49d975ccf9..afde881c9d2 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll @@ -4206,10 +4206,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, + pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4224,10 +4225,11 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, AccessPath apout + NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and - out.asNode() = kind.getAnOutNode(_) + subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and + out.asNode() = kind.getAnOutNode(_) and + config = getPathNodeConf(arg) } pragma[nomagic] @@ -4238,12 +4240,14 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout + PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, + CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and - pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and - kind = retnode.getKind() + subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and + pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and + kind = retnode.getKind() and + scout = arg.getSummaryCtx() ) } @@ -4263,16 +4267,17 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + exists( + ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, + SummaryCtx scout, PathNodeMid out0, Configuration config + | pragma[only_bind_into](arg).getASuccessor() = par and - pragma[only_bind_into](arg).getASuccessor() = out0 and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, apout) and + subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and + pathNode(out0, o, sout, ccout, scout, apout, config, _) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + par.getNodeEx() = p + | + out = out0 or out = out0.projectToSink() ) } From 9faa8253049789d6a2646bc0d4aaad30854855a0 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 29 Apr 2022 13:21:37 +0100 Subject: [PATCH 0240/1618] C++: Add support for libxml2 in the query. --- cpp/ql/src/Security/CWE/CWE-611/XXE.ql | 60 +++++++++++++++++++ .../Security/CWE/CWE-611/XXE.expected | 10 ++++ .../Security/CWE/CWE-611/tests4.cpp | 10 ++-- 3 files changed, 75 insertions(+), 5 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql index 805f3a61277..5ed1c3a9bda 100644 --- a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql @@ -188,6 +188,42 @@ class CreateLSParser extends Function { } } +/** + * A call to a `libxml2` function that parses XML. + */ +class Libxml2ParseCall extends FunctionCall { + int optionsArg; + + Libxml2ParseCall() { + exists(string fname | this.getTarget().getName() = fname | + fname = ["xmlCtxtUseOptions"] and optionsArg = 1 + or + fname = ["xmlReadFile"] and optionsArg = 2 + or + fname = ["xmlCtxtReadFile", "xmlParseInNodeContext", "xmlReadDoc", "xmlReadFd"] and + optionsArg = 3 + or + fname = ["xmlCtxtReadDoc", "xmlCtxtReadFd", "xmlReadMemory"] and optionsArg = 4 + or + fname = ["xmlCtxtReadMemory", "xmlReadIO"] and optionsArg = 5 + or + fname = ["xmlCtxtReadIO"] and optionsArg = 6 + ) + } + + /** + * Gets the argument that specifies `xmlParserOption`s. + */ + Expr getOptions() { result = this.getArgument(optionsArg) } +} + +/** + * An `xmlParserOption` for `libxml2` that is considered unsafe. + */ +class Libxml2BadOption extends EnumConstant { + Libxml2BadOption() { this.getName().matches(["XML_PARSE_NOENT", "XML_PARSE_DTDLOAD"]) } +} + /** * A configuration for tracking XML objects and their states. */ @@ -219,6 +255,23 @@ class XXEConfiguration extends DataFlow::Configuration { call.getThisArgument() and encodeXercesFlowState(flowstate, 0, 1) // default configuration ) + or + // source is an `options` argument on a `libxml2` parse call that specifies + // at least one unsafe option. + // + // note: we don't need to track an XML object for `libxml2`, so we don't + // really need data flow. Nevertheless we jam it into this configuration, + // with matching sources and sinks. This allows results to be presented by + // the same query, in a consistent way as other results with flow paths. + exists(Libxml2ParseCall call, Expr options | + options = call.getOptions() and + node.asExpr() = options and + flowstate = "libxml2" and + exists(Libxml2BadOption opt | + globalValueNumber(options).getAnExpr().getValue().toInt().bitAnd(opt.getValue().toInt()) != + 0 + ) + ) } override predicate isSink(DataFlow::Node node, string flowstate) { @@ -229,6 +282,13 @@ class XXEConfiguration extends DataFlow::Configuration { ) and flowstate instanceof XercesFlowState and not encodeXercesFlowState(flowstate, 1, 1) // safe configuration + or + // sink is the `options` argument on a `libxml2` parse call. + exists(Libxml2ParseCall call, Expr options | + options = call.getOptions() and + node.asExpr() = options and + flowstate = "libxml2" + ) } override predicate isAdditionalFlowStep( diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected index 25f1ad8e1ab..63436106d82 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected @@ -33,6 +33,11 @@ nodes | tests2.cpp:22:2:22:2 | p | semmle.label | p | | tests2.cpp:33:17:33:31 | SAXParser output argument | semmle.label | SAXParser output argument | | tests2.cpp:37:2:37:2 | p | semmle.label | p | +| tests4.cpp:26:34:26:48 | (int)... | semmle.label | (int)... | +| tests4.cpp:36:34:36:50 | (int)... | semmle.label | (int)... | +| tests4.cpp:46:34:46:68 | ... \| ... | semmle.label | ... \| ... | +| tests4.cpp:77:34:77:38 | flags | semmle.label | flags | +| tests4.cpp:130:39:130:55 | (int)... | semmle.label | (int)... | | tests.cpp:33:23:33:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | | tests.cpp:35:2:35:2 | p | semmle.label | p | | tests.cpp:46:23:46:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | @@ -74,6 +79,11 @@ subpaths #select | tests2.cpp:22:2:22:2 | p | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:20:17:20:31 | SAXParser output argument | XML parser | | tests2.cpp:37:2:37:2 | p | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:33:17:33:31 | SAXParser output argument | XML parser | +| tests4.cpp:26:34:26:48 | (int)... | tests4.cpp:26:34:26:48 | (int)... | tests4.cpp:26:34:26:48 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:26:34:26:48 | (int)... | XML parser | +| tests4.cpp:36:34:36:50 | (int)... | tests4.cpp:36:34:36:50 | (int)... | tests4.cpp:36:34:36:50 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:36:34:36:50 | (int)... | XML parser | +| tests4.cpp:46:34:46:68 | ... \| ... | tests4.cpp:46:34:46:68 | ... \| ... | tests4.cpp:46:34:46:68 | ... \| ... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:46:34:46:68 | ... \| ... | XML parser | +| tests4.cpp:77:34:77:38 | flags | tests4.cpp:77:34:77:38 | flags | tests4.cpp:77:34:77:38 | flags | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:77:34:77:38 | flags | XML parser | +| tests4.cpp:130:39:130:55 | (int)... | tests4.cpp:130:39:130:55 | (int)... | tests4.cpp:130:39:130:55 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:130:39:130:55 | (int)... | XML parser | | tests.cpp:35:2:35:2 | p | tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:33:23:33:43 | XercesDOMParser output argument | XML parser | | tests.cpp:49:2:49:2 | p | tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:46:23:46:43 | XercesDOMParser output argument | XML parser | | tests.cpp:57:2:57:2 | p | tests.cpp:53:23:53:43 | XercesDOMParser output argument | tests.cpp:57:2:57:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:53:23:53:43 | XercesDOMParser output argument | XML parser | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests4.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests4.cpp index 40197d2c0ee..642c1866629 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests4.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests4.cpp @@ -23,7 +23,7 @@ void xmlFreeDoc(xmlDoc *ptr); void test4_1(const char *fileName) { xmlDoc *p; - p = xmlReadFile(fileName, NULL, XML_PARSE_NOENT); // BAD (parser not correctly configured) [NOT DETECTED] + p = xmlReadFile(fileName, NULL, XML_PARSE_NOENT); // BAD (parser not correctly configured) if (p != NULL) { xmlFreeDoc(p); @@ -33,7 +33,7 @@ void test4_1(const char *fileName) { void test4_2(const char *fileName) { xmlDoc *p; - p = xmlReadFile(fileName, NULL, XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) [NOT DETECTED] + p = xmlReadFile(fileName, NULL, XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) if (p != NULL) { xmlFreeDoc(p); @@ -43,7 +43,7 @@ void test4_2(const char *fileName) { void test4_3(const char *fileName) { xmlDoc *p; - p = xmlReadFile(fileName, NULL, XML_PARSE_NOENT | XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) [NOT DETECTED] + p = xmlReadFile(fileName, NULL, XML_PARSE_NOENT | XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) if (p != NULL) { xmlFreeDoc(p); @@ -74,7 +74,7 @@ void test4_6(const char *fileName) { xmlDoc *p; int flags = XML_PARSE_NOENT; - p = xmlReadFile(fileName, NULL, flags); // BAD (parser not correctly configured) [NOT DETECTED] + p = xmlReadFile(fileName, NULL, flags); // BAD (parser not correctly configured) if (p != NULL) { xmlFreeDoc(p); @@ -127,7 +127,7 @@ void test4_10(const char *ptr, int sz) { void test4_11(const char *ptr, int sz) { xmlDoc *p; - p = xmlReadMemory(ptr, sz, "", NULL, XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) [NOT DETECTED] + p = xmlReadMemory(ptr, sz, "", NULL, XML_PARSE_DTDLOAD); // BAD (parser not correctly configured) if (p != NULL) { xmlFreeDoc(p); From c2be267febcf6fea68645574cee7155f125f9211 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 3 May 2022 09:54:15 +0200 Subject: [PATCH 0241/1618] Swift: enable dynamic mode Providing `--dynamic_mode=fully` (for example setting it in `local.bazelrc`) will now work. All runfiles are now copied in the extractor pack: in dynamic mode, those will be the executable and the dynamic libraries, while in static mode only the executable will be part of the runfiles. Setting the correct `LD_LIBRARY_PATH` in `qltest.sh` then allows to run tests with this pakcage. If we need something more, we can switch to a wrapper script in place of `extractor` in the future. Notice that `LD_LIBRARY_PATH` is also set in static mode, but that has no consequence. --- .gitignore | 3 ++ misc/bazel/pkg_runfiles.bzl | 33 +++++++++++++++++++ misc/bazel/workspace.bzl | 3 +- swift/BUILD.bazel | 14 ++------ swift/extractor/BUILD.bazel | 10 +----- swift/tools/prebuilt/BUILD.bazel | 11 +++++++ .../prebuilt}/BUILD.swift-prebuilt.bazel | 0 swift/tools/qltest.sh | 2 ++ 8 files changed, 54 insertions(+), 22 deletions(-) create mode 100644 misc/bazel/pkg_runfiles.bzl create mode 100644 swift/tools/prebuilt/BUILD.bazel rename swift/{extractor => tools/prebuilt}/BUILD.swift-prebuilt.bazel (100%) diff --git a/.gitignore b/.gitignore index 5642399a5f6..9dd2effe951 100644 --- a/.gitignore +++ b/.gitignore @@ -37,5 +37,8 @@ csharp/extractor/Semmle.Extraction.CSharp.Driver/Properties/launchSettings.json # links created by bazel /bazel-* +# local bazel options +/local.bazelrc + # CLion project files /.clwb diff --git a/misc/bazel/pkg_runfiles.bzl b/misc/bazel/pkg_runfiles.bzl new file mode 100644 index 00000000000..a8f215e8a55 --- /dev/null +++ b/misc/bazel/pkg_runfiles.bzl @@ -0,0 +1,33 @@ +load("@rules_pkg//:mappings.bzl", "pkg_attributes", "pkg_files") + +def _runfiles_group_impl(ctx): + files = [] + for src in ctx.attr.srcs: + rf = src[DefaultInfo].default_runfiles + if rf != None: + files.append(rf.files) + return [ + DefaultInfo( + files = depset(transitive = files), + ), + ] + +_runfiles_group = rule( + implementation = _runfiles_group_impl, + attrs = { + "srcs": attr.label_list(), + }, +) + +def pkg_runfiles(*, name, srcs, **kwargs): + internal_name = "_%s_runfiles" % name + _runfiles_group( + name = internal_name, + srcs = srcs, + ) + kwargs.setdefault("attributes", pkg_attributes(mode = "0755")) + pkg_files( + name = name, + srcs = [internal_name], + **kwargs + ) diff --git a/misc/bazel/workspace.bzl b/misc/bazel/workspace.bzl index c7ac65d3d2a..7b89bff5693 100644 --- a/misc/bazel/workspace.bzl +++ b/misc/bazel/workspace.bzl @@ -22,7 +22,7 @@ def codeql_workspace(repository_name = "codeql"): _swift_prebuilt_version, repo_arch, ), - build_file = "@%s//swift/extractor:BUILD.swift-prebuilt.bazel" % repository_name, + build_file = "@%s//swift/tools/prebuilt:BUILD.swift-prebuilt.bazel" % repository_name, sha256 = sha256, ) @@ -55,4 +55,3 @@ def codeql_workspace(repository_name = "codeql"): "https://github.com/bazelbuild/rules_python/archive/refs/tags/0.8.1.tar.gz", ], ) - diff --git a/swift/BUILD.bazel b/swift/BUILD.bazel index 91779d830d8..ef95c3c006f 100644 --- a/swift/BUILD.bazel +++ b/swift/BUILD.bazel @@ -1,6 +1,7 @@ load("@rules_pkg//:mappings.bzl", "pkg_attributes", "pkg_filegroup", "pkg_files", "strip_prefix") load("@rules_pkg//:install.bzl", "pkg_install") load("//:defs.bzl", "codeql_platform") +load("//misc/bazel:pkg_runfiles.bzl", "pkg_runfiles") filegroup( name = "dbscheme", @@ -45,24 +46,15 @@ pkg_filegroup( visibility = ["//visibility:public"], ) -pkg_files( +pkg_runfiles( name = "extractor", srcs = ["//swift/extractor"], - attributes = pkg_attributes(mode = "0755"), prefix = "tools/" + codeql_platform, ) -alias( - name = "swift-test-sdk", - actual = select({ - "@bazel_tools//src/conditions:%s" % arch: "@swift_prebuilt_%s//:swift-test-sdk" % arch - for arch in ("linux", "darwin_x86_64", "darwin_arm64") - }), -) - pkg_files( name = "swift-test-sdk-arch", - srcs = [":swift-test-sdk"], + srcs = ["//swift/tools/prebuilt:swift-test-sdk"], prefix = "qltest/" + codeql_platform, strip_prefix = strip_prefix.from_pkg(), ) diff --git a/swift/extractor/BUILD.bazel b/swift/extractor/BUILD.bazel index 6ae8be83a59..011183d8dac 100644 --- a/swift/extractor/BUILD.bazel +++ b/swift/extractor/BUILD.bazel @@ -1,13 +1,5 @@ load("//swift:rules.bzl", "swift_cc_binary") -alias( - name = "swift-llvm-support", - actual = select({ - "@bazel_tools//src/conditions:%s" % arch: "@swift_prebuilt_%s//:swift-llvm-support" % arch - for arch in ("linux", "darwin_x86_64", "darwin_arm64") - }), -) - swift_cc_binary( name = "extractor", srcs = [ @@ -18,7 +10,7 @@ swift_cc_binary( ], visibility = ["//swift:__pkg__"], deps = [ - ":swift-llvm-support", + "//swift/tools/prebuilt:swift-llvm-support", "//swift/extractor/trap", ], ) diff --git a/swift/tools/prebuilt/BUILD.bazel b/swift/tools/prebuilt/BUILD.bazel new file mode 100644 index 00000000000..1abd461f9e8 --- /dev/null +++ b/swift/tools/prebuilt/BUILD.bazel @@ -0,0 +1,11 @@ +package(default_visibility = ["//swift:__subpackages__"]) + +[ + alias( + name = name, + actual = select({ + "@bazel_tools//src/conditions:%s" % arch: "@swift_prebuilt_%s//:%s" % (arch, name) + for arch in ("linux", "darwin_x86_64", "darwin_arm64") + }), + ) for name in ("swift-llvm-support", "swift-test-sdk") +] diff --git a/swift/extractor/BUILD.swift-prebuilt.bazel b/swift/tools/prebuilt/BUILD.swift-prebuilt.bazel similarity index 100% rename from swift/extractor/BUILD.swift-prebuilt.bazel rename to swift/tools/prebuilt/BUILD.swift-prebuilt.bazel diff --git a/swift/tools/qltest.sh b/swift/tools/qltest.sh index 22043cf940e..9da3a32b6d7 100755 --- a/swift/tools/qltest.sh +++ b/swift/tools/qltest.sh @@ -4,4 +4,6 @@ mkdir -p "$CODEQL_EXTRACTOR_SWIFT_TRAP_DIR" QLTEST_LOG="$CODEQL_EXTRACTOR_SWIFT_LOG_DIR"/qltest.log +export LD_LIBRARY_PATH="$CODEQL_EXTRACTOR_SWIFT_ROOT/tools/$CODEQL_PLATFORM" + exec "$CODEQL_EXTRACTOR_SWIFT_ROOT/tools/$CODEQL_PLATFORM/extractor" -sdk "$CODEQL_EXTRACTOR_SWIFT_ROOT/qltest/$CODEQL_PLATFORM/sdk" -c *.swift >> $QLTEST_LOG 2>&1 From 42a78a27e05639782e916a74bdffc92d8159fc1f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 3 May 2022 11:48:03 +0100 Subject: [PATCH 0242/1618] C++: Fixup spacing in tests. --- .../Security/CWE/CWE-611/XXE.expected | 134 +++++++++--------- .../Security/CWE/CWE-611/tests.cpp | 18 --- .../Security/CWE/CWE-611/tests3.cpp | 8 -- 3 files changed, 67 insertions(+), 93 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected index dcf334d5bfe..13b68b84783 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected @@ -1,84 +1,84 @@ edges | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | -| tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p | -| tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p | -| tests.cpp:53:19:53:19 | VariableAddress [post update] | tests.cpp:55:2:55:2 | p | -| tests.cpp:53:23:53:43 | XercesDOMParser output argument | tests.cpp:53:19:53:19 | VariableAddress [post update] | +| tests.cpp:15:23:15:43 | XercesDOMParser output argument | tests.cpp:17:2:17:2 | p | +| tests.cpp:28:23:28:43 | XercesDOMParser output argument | tests.cpp:31:2:31:2 | p | +| tests.cpp:35:19:35:19 | VariableAddress [post update] | tests.cpp:37:2:37:2 | p | +| tests.cpp:35:23:35:43 | XercesDOMParser output argument | tests.cpp:35:19:35:19 | VariableAddress [post update] | +| tests.cpp:37:2:37:2 | p | tests.cpp:38:2:38:2 | p | +| tests.cpp:38:2:38:2 | p | tests.cpp:39:2:39:2 | p | +| tests.cpp:51:19:51:19 | VariableAddress [post update] | tests.cpp:53:2:53:2 | p | +| tests.cpp:51:23:51:43 | XercesDOMParser output argument | tests.cpp:51:19:51:19 | VariableAddress [post update] | +| tests.cpp:53:2:53:2 | p | tests.cpp:54:2:54:2 | p | +| tests.cpp:54:2:54:2 | p | tests.cpp:55:2:55:2 | p | +| tests.cpp:55:2:55:2 | p | tests.cpp:56:2:56:2 | p | | tests.cpp:55:2:55:2 | p | tests.cpp:56:2:56:2 | p | | tests.cpp:56:2:56:2 | p | tests.cpp:57:2:57:2 | p | -| tests.cpp:69:19:69:19 | VariableAddress [post update] | tests.cpp:71:2:71:2 | p | -| tests.cpp:69:23:69:43 | XercesDOMParser output argument | tests.cpp:69:19:69:19 | VariableAddress [post update] | -| tests.cpp:71:2:71:2 | p | tests.cpp:72:2:72:2 | p | -| tests.cpp:72:2:72:2 | p | tests.cpp:73:2:73:2 | p | -| tests.cpp:73:2:73:2 | p | tests.cpp:74:2:74:2 | p | -| tests.cpp:73:2:73:2 | p | tests.cpp:74:2:74:2 | p | -| tests.cpp:74:2:74:2 | p | tests.cpp:75:2:75:2 | p | -| tests.cpp:75:2:75:2 | p | tests.cpp:76:2:76:2 | p | -| tests.cpp:76:2:76:2 | p | tests.cpp:77:2:77:2 | p | -| tests.cpp:77:2:77:2 | p | tests.cpp:78:2:78:2 | p | -| tests.cpp:84:23:84:43 | XercesDOMParser output argument | tests.cpp:87:2:87:2 | p | -| tests.cpp:91:23:91:43 | XercesDOMParser output argument | tests.cpp:98:2:98:2 | p | -| tests.cpp:103:24:103:44 | XercesDOMParser output argument | tests.cpp:106:3:106:3 | q | -| tests.cpp:118:24:118:44 | XercesDOMParser output argument | tests.cpp:122:3:122:3 | q | -| tests.cpp:130:39:130:39 | p | tests.cpp:131:2:131:2 | p | -| tests.cpp:134:39:134:39 | p | tests.cpp:135:2:135:2 | p | -| tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:144:18:144:18 | q | -| tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:146:18:146:18 | q | -| tests.cpp:144:18:144:18 | q | tests.cpp:130:39:130:39 | p | -| tests.cpp:146:18:146:18 | q | tests.cpp:134:39:134:39 | p | +| tests.cpp:57:2:57:2 | p | tests.cpp:58:2:58:2 | p | +| tests.cpp:58:2:58:2 | p | tests.cpp:59:2:59:2 | p | +| tests.cpp:59:2:59:2 | p | tests.cpp:60:2:60:2 | p | +| tests.cpp:66:23:66:43 | XercesDOMParser output argument | tests.cpp:69:2:69:2 | p | +| tests.cpp:73:23:73:43 | XercesDOMParser output argument | tests.cpp:80:2:80:2 | p | +| tests.cpp:85:24:85:44 | XercesDOMParser output argument | tests.cpp:88:3:88:3 | q | +| tests.cpp:100:24:100:44 | XercesDOMParser output argument | tests.cpp:104:3:104:3 | q | +| tests.cpp:112:39:112:39 | p | tests.cpp:113:2:113:2 | p | +| tests.cpp:116:39:116:39 | p | tests.cpp:117:2:117:2 | p | +| tests.cpp:122:23:122:43 | XercesDOMParser output argument | tests.cpp:126:18:126:18 | q | +| tests.cpp:122:23:122:43 | XercesDOMParser output argument | tests.cpp:128:18:128:18 | q | +| tests.cpp:126:18:126:18 | q | tests.cpp:112:39:112:39 | p | +| tests.cpp:128:18:128:18 | q | tests.cpp:116:39:116:39 | p | nodes | tests2.cpp:20:17:20:31 | SAXParser output argument | semmle.label | SAXParser output argument | | tests2.cpp:22:2:22:2 | p | semmle.label | p | | tests2.cpp:33:17:33:31 | SAXParser output argument | semmle.label | SAXParser output argument | | tests2.cpp:37:2:37:2 | p | semmle.label | p | -| tests.cpp:33:23:33:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | -| tests.cpp:35:2:35:2 | p | semmle.label | p | -| tests.cpp:46:23:46:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | -| tests.cpp:49:2:49:2 | p | semmle.label | p | -| tests.cpp:53:19:53:19 | VariableAddress [post update] | semmle.label | VariableAddress [post update] | -| tests.cpp:53:23:53:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:15:23:15:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:17:2:17:2 | p | semmle.label | p | +| tests.cpp:28:23:28:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:31:2:31:2 | p | semmle.label | p | +| tests.cpp:35:19:35:19 | VariableAddress [post update] | semmle.label | VariableAddress [post update] | +| tests.cpp:35:23:35:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:37:2:37:2 | p | semmle.label | p | +| tests.cpp:38:2:38:2 | p | semmle.label | p | +| tests.cpp:39:2:39:2 | p | semmle.label | p | +| tests.cpp:51:19:51:19 | VariableAddress [post update] | semmle.label | VariableAddress [post update] | +| tests.cpp:51:23:51:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:53:2:53:2 | p | semmle.label | p | +| tests.cpp:54:2:54:2 | p | semmle.label | p | | tests.cpp:55:2:55:2 | p | semmle.label | p | | tests.cpp:56:2:56:2 | p | semmle.label | p | +| tests.cpp:56:2:56:2 | p | semmle.label | p | | tests.cpp:57:2:57:2 | p | semmle.label | p | -| tests.cpp:69:19:69:19 | VariableAddress [post update] | semmle.label | VariableAddress [post update] | -| tests.cpp:69:23:69:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | -| tests.cpp:71:2:71:2 | p | semmle.label | p | -| tests.cpp:72:2:72:2 | p | semmle.label | p | -| tests.cpp:73:2:73:2 | p | semmle.label | p | -| tests.cpp:74:2:74:2 | p | semmle.label | p | -| tests.cpp:74:2:74:2 | p | semmle.label | p | -| tests.cpp:75:2:75:2 | p | semmle.label | p | -| tests.cpp:76:2:76:2 | p | semmle.label | p | -| tests.cpp:77:2:77:2 | p | semmle.label | p | -| tests.cpp:78:2:78:2 | p | semmle.label | p | -| tests.cpp:84:23:84:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | -| tests.cpp:87:2:87:2 | p | semmle.label | p | -| tests.cpp:91:23:91:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | -| tests.cpp:98:2:98:2 | p | semmle.label | p | -| tests.cpp:103:24:103:44 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | -| tests.cpp:106:3:106:3 | q | semmle.label | q | -| tests.cpp:118:24:118:44 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | -| tests.cpp:122:3:122:3 | q | semmle.label | q | -| tests.cpp:130:39:130:39 | p | semmle.label | p | -| tests.cpp:131:2:131:2 | p | semmle.label | p | -| tests.cpp:134:39:134:39 | p | semmle.label | p | -| tests.cpp:135:2:135:2 | p | semmle.label | p | -| tests.cpp:140:23:140:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | -| tests.cpp:144:18:144:18 | q | semmle.label | q | -| tests.cpp:146:18:146:18 | q | semmle.label | q | +| tests.cpp:58:2:58:2 | p | semmle.label | p | +| tests.cpp:59:2:59:2 | p | semmle.label | p | +| tests.cpp:60:2:60:2 | p | semmle.label | p | +| tests.cpp:66:23:66:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:69:2:69:2 | p | semmle.label | p | +| tests.cpp:73:23:73:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:80:2:80:2 | p | semmle.label | p | +| tests.cpp:85:24:85:44 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:88:3:88:3 | q | semmle.label | q | +| tests.cpp:100:24:100:44 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:104:3:104:3 | q | semmle.label | q | +| tests.cpp:112:39:112:39 | p | semmle.label | p | +| tests.cpp:113:2:113:2 | p | semmle.label | p | +| tests.cpp:116:39:116:39 | p | semmle.label | p | +| tests.cpp:117:2:117:2 | p | semmle.label | p | +| tests.cpp:122:23:122:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | +| tests.cpp:126:18:126:18 | q | semmle.label | q | +| tests.cpp:128:18:128:18 | q | semmle.label | q | subpaths #select | tests2.cpp:22:2:22:2 | p | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:20:17:20:31 | SAXParser output argument | XML parser | | tests2.cpp:37:2:37:2 | p | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:33:17:33:31 | SAXParser output argument | XML parser | -| tests.cpp:35:2:35:2 | p | tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:33:23:33:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:49:2:49:2 | p | tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:46:23:46:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:57:2:57:2 | p | tests.cpp:53:23:53:43 | XercesDOMParser output argument | tests.cpp:57:2:57:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:53:23:53:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:74:2:74:2 | p | tests.cpp:69:23:69:43 | XercesDOMParser output argument | tests.cpp:74:2:74:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:69:23:69:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:78:2:78:2 | p | tests.cpp:69:23:69:43 | XercesDOMParser output argument | tests.cpp:78:2:78:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:69:23:69:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:87:2:87:2 | p | tests.cpp:84:23:84:43 | XercesDOMParser output argument | tests.cpp:87:2:87:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:84:23:84:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:98:2:98:2 | p | tests.cpp:91:23:91:43 | XercesDOMParser output argument | tests.cpp:98:2:98:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:91:23:91:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:106:3:106:3 | q | tests.cpp:103:24:103:44 | XercesDOMParser output argument | tests.cpp:106:3:106:3 | q | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:103:24:103:44 | XercesDOMParser output argument | XML parser | -| tests.cpp:122:3:122:3 | q | tests.cpp:118:24:118:44 | XercesDOMParser output argument | tests.cpp:122:3:122:3 | q | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:118:24:118:44 | XercesDOMParser output argument | XML parser | -| tests.cpp:131:2:131:2 | p | tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:131:2:131:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:140:23:140:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:135:2:135:2 | p | tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:135:2:135:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:140:23:140:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:17:2:17:2 | p | tests.cpp:15:23:15:43 | XercesDOMParser output argument | tests.cpp:17:2:17:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:15:23:15:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:31:2:31:2 | p | tests.cpp:28:23:28:43 | XercesDOMParser output argument | tests.cpp:31:2:31:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:28:23:28:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:39:2:39:2 | p | tests.cpp:35:23:35:43 | XercesDOMParser output argument | tests.cpp:39:2:39:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:35:23:35:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:56:2:56:2 | p | tests.cpp:51:23:51:43 | XercesDOMParser output argument | tests.cpp:56:2:56:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:51:23:51:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:60:2:60:2 | p | tests.cpp:51:23:51:43 | XercesDOMParser output argument | tests.cpp:60:2:60:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:51:23:51:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:69:2:69:2 | p | tests.cpp:66:23:66:43 | XercesDOMParser output argument | tests.cpp:69:2:69:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:66:23:66:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:80:2:80:2 | p | tests.cpp:73:23:73:43 | XercesDOMParser output argument | tests.cpp:80:2:80:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:73:23:73:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:88:3:88:3 | q | tests.cpp:85:24:85:44 | XercesDOMParser output argument | tests.cpp:88:3:88:3 | q | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:85:24:85:44 | XercesDOMParser output argument | XML parser | +| tests.cpp:104:3:104:3 | q | tests.cpp:100:24:100:44 | XercesDOMParser output argument | tests.cpp:104:3:104:3 | q | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:100:24:100:44 | XercesDOMParser output argument | XML parser | +| tests.cpp:113:2:113:2 | p | tests.cpp:122:23:122:43 | XercesDOMParser output argument | tests.cpp:113:2:113:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:122:23:122:43 | XercesDOMParser output argument | XML parser | +| tests.cpp:117:2:117:2 | p | tests.cpp:122:23:122:43 | XercesDOMParser output argument | tests.cpp:117:2:117:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:122:23:122:43 | XercesDOMParser output argument | XML parser | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp index a2d767e19bd..51ae57f54d9 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.cpp @@ -9,24 +9,6 @@ public: XercesDOMParser(); }; - - - - - - - - - - - - - - - - - - // --- void test1(InputSource &data) { diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp index 3bff5d77866..96f8dbaef06 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp @@ -17,14 +17,6 @@ public: static SAX2XMLReader *createXMLReader(); }; - - - - - - - - // --- void test3_1(InputSource &data) { From f7d0884db11a845e9130e4e8ee91f2f1c20790d2 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 3 May 2022 12:28:14 +0100 Subject: [PATCH 0243/1618] Java: Add cwe-377 tag to predictable-seed --- java/ql/src/Security/CWE/CWE-335/PredictableSeed.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/java/ql/src/Security/CWE/CWE-335/PredictableSeed.ql b/java/ql/src/Security/CWE/CWE-335/PredictableSeed.ql index cf9b5bbbb50..1941b8fd10c 100644 --- a/java/ql/src/Security/CWE/CWE-335/PredictableSeed.ql +++ b/java/ql/src/Security/CWE/CWE-335/PredictableSeed.ql @@ -8,6 +8,7 @@ * @id java/predictable-seed * @tags security * external/cwe/cwe-335 + * external/cwe/cwe-337 */ import java From 89c4b6c235a04aba06afadea359d70907fd93252 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 3 May 2022 14:06:15 +0200 Subject: [PATCH 0244/1618] Ruby: Fix `isLocalSourceNode` implementation The old code was equivalent with the code below, which seems wrong ``` not n instanceof ExprNode or n instanceof ExprNode and localFlowStepTypeTracker+(..., n) ``` From running on real DB I found that this meant that the following node types were also included as local source nodes: - `TReturningNode` - `TSynthReturnNode` - `TSummaryNode` - `TSsaDefinitionNode` My understanding is that the first 3 should not be included. I would guess that SsaDefinitionNode should indeed be included as a LocalSourceNode, but I'm not 100% sure, so I'll see what the test results say before making further changes. --- ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index d5b2f44c82f..6eeec53f141 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -303,11 +303,12 @@ private module Cached { n instanceof PostUpdateNodes::ExprPostUpdateNode or // Expressions that can't be reached from another entry definition or expression. + n instanceof ExprNode and not localFlowStepTypeTracker+(any(Node n0 | n0 instanceof ExprNode or entrySsaDefinition(n0) - ), n.(ExprNode)) + ), n) or // Ensure all entry SSA definitions are local sources -- for parameters, this // is needed by type tracking. Note that when the parameter has a default value, From d012eaa8924b69a6a897dce071e2aac6d0c0bbe6 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 3 May 2022 14:26:23 +0200 Subject: [PATCH 0245/1618] Python: Clarify `getArg` is about positional arguments --- python/ql/lib/semmle/python/Flow.qll | 2 +- .../lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/lib/semmle/python/Flow.qll b/python/ql/lib/semmle/python/Flow.qll index 4805a63cc48..ce886151135 100755 --- a/python/ql/lib/semmle/python/Flow.qll +++ b/python/ql/lib/semmle/python/Flow.qll @@ -363,7 +363,7 @@ class CallNode extends ControlFlowNode { ) } - /** Gets the flow node corresponding to the nth argument of the call corresponding to this flow node */ + /** Gets the flow node corresponding to the n'th positional argument of the call corresponding to this flow node */ ControlFlowNode getArg(int n) { exists(Call c | this.getNode() = c and diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll index 20d2447cc80..12120b3e5a7 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPublic.qll @@ -211,7 +211,7 @@ class CallCfgNode extends CfgNode, LocalSourceNode { */ Node getFunction() { result.asCfgNode() = node.getFunction() } - /** Gets the data-flow node corresponding to the i'th argument of the call corresponding to this data-flow node */ + /** Gets the data-flow node corresponding to the i'th positional argument of the call corresponding to this data-flow node */ Node getArg(int i) { result.asCfgNode() = node.getArg(i) } /** Gets the data-flow node corresponding to the named argument of the call corresponding to this data-flow node */ From fbceb8de5798b0918dde367377754a8d7526886b Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 3 May 2022 14:40:40 +0200 Subject: [PATCH 0246/1618] Update java/ql/lib/semmle/code/java/frameworks/OkHttp.qll Co-authored-by: Chris Smowton --- java/ql/lib/semmle/code/java/frameworks/OkHttp.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll b/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll index 12b09065183..cc4557bcd03 100644 --- a/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll +++ b/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll @@ -35,7 +35,6 @@ private class OKHttpSummaries extends SummaryModelCsv { "okhttp3;HttpUrl$Builder;false;encodedQuery;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;encodedUsername;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;fragment;;;Argument[-1];ReturnValue;value", - "okhttp3;HttpUrl$Builder;false;fragment;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;host;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;password;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;port;;;Argument[-1];ReturnValue;value", From 6cacf7b9a62476df69eea519b25a67c4eba74d66 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 3 May 2022 14:43:31 +0200 Subject: [PATCH 0247/1618] Ruby: `isLocalSourceNode` needs `SynthReturnNode` --- .../ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 6eeec53f141..8072083ff65 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -302,6 +302,11 @@ private module Cached { or n instanceof PostUpdateNodes::ExprPostUpdateNode or + // TODO: Explain why SynthReturnNode is needed! + // if we don't include this, we are not able to find this call: + // https://github.com/github/codeql/blob/976daddd36a63bf46836d141d04172e90bb4b33c/ruby/ql/test/library-tests/frameworks/http_clients/NetHttp.rb#L24 + n instanceof SynthReturnNode + or // Expressions that can't be reached from another entry definition or expression. n instanceof ExprNode and not localFlowStepTypeTracker+(any(Node n0 | From a7b43f73569ce0eeb9b4581b1f72052762e9e8ad Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Tue, 3 May 2022 14:45:33 +0200 Subject: [PATCH 0248/1618] Ruby: Accept changes to TypeTracker tests Since this is not using inline-expectation-tests, I'm not entirely sure whether these changes are OK or not, so hope to get someone else to signoff on that. --- .../dataflow/type-tracker/TypeTracker.expected | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected b/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected index 3c77ddc8b02..efbf76dfc76 100644 --- a/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected +++ b/ruby/ql/test/library-tests/dataflow/type-tracker/TypeTracker.expected @@ -43,10 +43,6 @@ track | type_tracker.rb:12:1:16:3 | self in m | type tracker with call steps | type_tracker.rb:12:1:16:3 | self (m) | | type_tracker.rb:12:1:16:3 | self in m | type tracker without call steps | type_tracker.rb:12:1:16:3 | self in m | | type_tracker.rb:13:5:13:7 | var | type tracker without call steps | type_tracker.rb:13:5:13:7 | var | -| type_tracker.rb:13:5:13:23 | ... = ... | type tracker with call steps | type_tracker.rb:2:5:5:7 | self (field=) | -| type_tracker.rb:13:5:13:23 | ... = ... | type tracker with call steps | type_tracker.rb:2:5:5:7 | self in field= | -| type_tracker.rb:13:5:13:23 | ... = ... | type tracker with call steps | type_tracker.rb:7:5:9:7 | self in field | -| type_tracker.rb:13:5:13:23 | ... = ... | type tracker without call steps | type_tracker.rb:13:5:13:23 | ... = ... | | type_tracker.rb:13:11:13:19 | Container | type tracker without call steps | type_tracker.rb:13:11:13:19 | Container | | type_tracker.rb:13:11:13:19 | [post] Container | type tracker without call steps | type_tracker.rb:13:11:13:19 | [post] Container | | type_tracker.rb:13:11:13:23 | call to new | type tracker with call steps | type_tracker.rb:2:5:5:7 | self (field=) | @@ -63,7 +59,6 @@ track | type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps | type_tracker.rb:14:17:14:23 | "hello" | | type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps | type_tracker.rb:15:10:15:18 | call to field | | type_tracker.rb:14:17:14:23 | "hello" | type tracker without call steps with content field | type_tracker.rb:14:5:14:7 | [post] var | -| type_tracker.rb:14:17:14:23 | ... = ... | type tracker without call steps | type_tracker.rb:14:17:14:23 | ... = ... | | type_tracker.rb:14:17:14:23 | [post] ... = ... | type tracker without call steps | type_tracker.rb:14:17:14:23 | [post] ... = ... | | type_tracker.rb:14:17:14:23 | __synth__0 | type tracker without call steps | type_tracker.rb:14:17:14:23 | __synth__0 | | type_tracker.rb:15:5:15:18 | [post] self | type tracker without call steps | type_tracker.rb:15:5:15:18 | [post] self | @@ -245,14 +240,6 @@ trackEnd | type_tracker.rb:12:1:16:3 | self in m | type_tracker.rb:12:1:16:3 | self in m | | type_tracker.rb:12:1:16:3 | self in m | type_tracker.rb:15:5:15:18 | self | | type_tracker.rb:13:5:13:7 | var | type_tracker.rb:13:5:13:7 | var | -| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:2:5:5:7 | self (field=) | -| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:2:5:5:7 | self in field= | -| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:3:9:3:23 | self | -| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:3:14:3:17 | self | -| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:7:5:9:7 | self in field | -| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:13:5:13:23 | ... = ... | -| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:14:5:14:7 | var | -| type_tracker.rb:13:5:13:23 | ... = ... | type_tracker.rb:15:10:15:12 | var | | type_tracker.rb:13:11:13:19 | Container | type_tracker.rb:13:11:13:19 | Container | | type_tracker.rb:13:11:13:19 | [post] Container | type_tracker.rb:13:11:13:19 | [post] Container | | type_tracker.rb:13:11:13:23 | call to new | type_tracker.rb:2:5:5:7 | self (field=) | @@ -280,9 +267,6 @@ trackEnd | type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:14:17:14:23 | ... = ... | | type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:14:17:14:23 | ... = ... | | type_tracker.rb:14:17:14:23 | "hello" | type_tracker.rb:15:10:15:18 | call to field | -| type_tracker.rb:14:17:14:23 | ... = ... | type_tracker.rb:14:5:14:13 | __synth__0 | -| type_tracker.rb:14:17:14:23 | ... = ... | type_tracker.rb:14:5:14:23 | ... | -| type_tracker.rb:14:17:14:23 | ... = ... | type_tracker.rb:14:17:14:23 | ... = ... | | type_tracker.rb:14:17:14:23 | [post] ... = ... | type_tracker.rb:14:17:14:23 | [post] ... = ... | | type_tracker.rb:14:17:14:23 | __synth__0 | type_tracker.rb:14:17:14:23 | __synth__0 | | type_tracker.rb:15:5:15:18 | [post] self | type_tracker.rb:15:5:15:18 | [post] self | From d5be11bf14c1d6e543268283986d53ef70517507 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 3 May 2022 14:08:19 +0100 Subject: [PATCH 0249/1618] C++: Address review comments. --- cpp/ql/src/Security/CWE/CWE-611/XXE.ql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql index 5ed1c3a9bda..43b4d0c0c01 100644 --- a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql @@ -196,9 +196,9 @@ class Libxml2ParseCall extends FunctionCall { Libxml2ParseCall() { exists(string fname | this.getTarget().getName() = fname | - fname = ["xmlCtxtUseOptions"] and optionsArg = 1 + fname = "xmlCtxtUseOptions" and optionsArg = 1 or - fname = ["xmlReadFile"] and optionsArg = 2 + fname = "xmlReadFile" and optionsArg = 2 or fname = ["xmlCtxtReadFile", "xmlParseInNodeContext", "xmlReadDoc", "xmlReadFd"] and optionsArg = 3 @@ -207,7 +207,7 @@ class Libxml2ParseCall extends FunctionCall { or fname = ["xmlCtxtReadMemory", "xmlReadIO"] and optionsArg = 5 or - fname = ["xmlCtxtReadIO"] and optionsArg = 6 + fname = "xmlCtxtReadIO" and optionsArg = 6 ) } @@ -221,7 +221,7 @@ class Libxml2ParseCall extends FunctionCall { * An `xmlParserOption` for `libxml2` that is considered unsafe. */ class Libxml2BadOption extends EnumConstant { - Libxml2BadOption() { this.getName().matches(["XML_PARSE_NOENT", "XML_PARSE_DTDLOAD"]) } + Libxml2BadOption() { this.getName() = ["XML_PARSE_NOENT", "XML_PARSE_DTDLOAD"] } } /** From 61f13817cf4a7bdb20ca3dbd92a6a22e0a0d2e38 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 3 May 2022 14:27:47 +0100 Subject: [PATCH 0250/1618] Add change note --- java/ql/src/change-notes/2022-05-03-predictable-seed-tag.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/src/change-notes/2022-05-03-predictable-seed-tag.md diff --git a/java/ql/src/change-notes/2022-05-03-predictable-seed-tag.md b/java/ql/src/change-notes/2022-05-03-predictable-seed-tag.md new file mode 100644 index 00000000000..3133c82ef95 --- /dev/null +++ b/java/ql/src/change-notes/2022-05-03-predictable-seed-tag.md @@ -0,0 +1,4 @@ +--- +category: queryMetadata +--- +* Query `java/predictable-seed` now has a tag for CWE-337. \ No newline at end of file From 7b3a803d19eac50694def9acd919f252a35fad88 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 26 Apr 2022 11:16:51 +0200 Subject: [PATCH 0251/1618] Add flow step from startActivity to getIntent --- .../code/java/frameworks/android/Intent.qll | 19 ++++++++++++++ .../android/intent/AndroidManifest.xml | 22 ++++++++++++++++ .../intent/TestStartActivityToGetIntent.java | 25 +++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 java/ql/test/library-tests/frameworks/android/intent/AndroidManifest.xml create mode 100644 java/ql/test/library-tests/frameworks/android/intent/TestStartActivityToGetIntent.java diff --git a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll index a92d2665213..7aaa6519075 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/Intent.qll @@ -176,6 +176,25 @@ class GrantWriteUriPermissionFlag extends GrantUriPermissionFlag { GrantWriteUriPermissionFlag() { this.hasName("FLAG_GRANT_WRITE_URI_PERMISSION") } } +/** + * A value-preserving step from the Intent argument of a `startActivity` call to + * a `getIntent` call in the Activity the Intent pointed to in its constructor. + */ +private class StartActivityIntentStep extends AdditionalValueStep { + override predicate step(DataFlow::Node n1, DataFlow::Node n2) { + exists(MethodAccess startActivity, MethodAccess getIntent, ClassInstanceExpr newIntent | + startActivity.getMethod().overrides*(any(ContextStartActivityMethod m)) and + getIntent.getMethod().overrides*(any(AndroidGetIntentMethod m)) and + newIntent.getConstructedType() instanceof TypeIntent and + DataFlow::localExprFlow(newIntent, startActivity.getArgument(0)) and + newIntent.getArgument(1).getType().(ParameterizedType).getATypeArgument() = + getIntent.getReceiverType() and + n1.asExpr() = startActivity.getArgument(0) and + n2.asExpr() = getIntent + ) + } +} + private class IntentBundleFlowSteps extends SummaryModelCsv { override predicate row(string row) { row = diff --git a/java/ql/test/library-tests/frameworks/android/intent/AndroidManifest.xml b/java/ql/test/library-tests/frameworks/android/intent/AndroidManifest.xml new file mode 100644 index 00000000000..0be6a0ae8f8 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/intent/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + diff --git a/java/ql/test/library-tests/frameworks/android/intent/TestStartActivityToGetIntent.java b/java/ql/test/library-tests/frameworks/android/intent/TestStartActivityToGetIntent.java new file mode 100644 index 00000000000..3d497aac93d --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/intent/TestStartActivityToGetIntent.java @@ -0,0 +1,25 @@ +import android.app.Activity; +import android.content.Context; +import android.content.Intent; + +public class TestStartActivityToGetIntent { + + static Object source() { + return null; + } + + static void sink(Object sink) {} + + public void test(Context ctx) { + Intent intent = new Intent(null, SomeActivity.class); + intent.putExtra("data", (String) source()); + ctx.startActivity(intent); + } + + static class SomeActivity extends Activity { + + public void test() { + sink(getIntent().getStringExtra("data")); // $ hasValueFlow + } + } +} From cf55f180c4ac94b41c9dd71beb78cf35d0c580e3 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 26 Apr 2022 11:26:58 +0200 Subject: [PATCH 0252/1618] Add change note --- .../ql/lib/change-notes/2022-04-26-startactivity-flow-step.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/lib/change-notes/2022-04-26-startactivity-flow-step.md diff --git a/java/ql/lib/change-notes/2022-04-26-startactivity-flow-step.md b/java/ql/lib/change-notes/2022-04-26-startactivity-flow-step.md new file mode 100644 index 00000000000..82d58183edd --- /dev/null +++ b/java/ql/lib/change-notes/2022-04-26-startactivity-flow-step.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +Added a data flow step for tainted Android intents that are sent to other activities and accessed there via `getIntent()`. \ No newline at end of file From 94b046c5542e8ca536576e66c73f774c146b6d9e Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 27 Apr 2022 09:49:50 +0200 Subject: [PATCH 0253/1618] C#: Upgrade dotnet to 6.0.202. --- .github/workflows/codeql-analysis.yml | 2 +- csharp/ql/src/Stubs/make_stubs_nuget.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 912afffdb77..73826e30f9e 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -30,7 +30,7 @@ jobs: - name: Setup dotnet uses: actions/setup-dotnet@v2 with: - dotnet-version: 6.0.101 + dotnet-version: 6.0.202 - name: Checkout repository uses: actions/checkout@v3 diff --git a/csharp/ql/src/Stubs/make_stubs_nuget.py b/csharp/ql/src/Stubs/make_stubs_nuget.py index c95ab3a0258..f06fc75e0de 100644 --- a/csharp/ql/src/Stubs/make_stubs_nuget.py +++ b/csharp/ql/src/Stubs/make_stubs_nuget.py @@ -71,7 +71,7 @@ if (version != "latest"): cmd.append(version) run_cmd(cmd) -sdk_version = '6.0.101' +sdk_version = '6.0.202' print("\n* Creating new global.json file and setting SDK to " + sdk_version) run_cmd(['dotnet', 'new', 'globaljson', '--force', '--sdk-version', sdk_version, '--output', workDir]) From b8ec2254e84b47c4e844ac3562c7589c214f163f Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 27 Apr 2022 15:31:51 +0200 Subject: [PATCH 0254/1618] C#: Update unit tests (looks like new NFloat operator has been introduced). --- .../library-tests/cil/attributes/attribute.expected | 2 +- .../cil/typeAnnotations/typeAnnotations.expected | 3 +++ .../conversion/operator/Operator.expected | 13 +++++++++++++ .../library-tests/dispatch/viableCallable.expected | 3 +++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/csharp/ql/test/library-tests/cil/attributes/attribute.expected b/csharp/ql/test/library-tests/cil/attributes/attribute.expected index 8c2a9d89762..caf7df91c55 100644 --- a/csharp/ql/test/library-tests/cil/attributes/attribute.expected +++ b/csharp/ql/test/library-tests/cil/attributes/attribute.expected @@ -2342,7 +2342,7 @@ attrArgPositional | System.Number.BigInteger | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | | System.Number.BigInteger | [ObsoleteAttribute(...)] | 1 | True | | System.Number.BigInteger._blocks | [FixedBufferAttribute(...)] | 0 | System.UInt32 | -| System.Number.BigInteger._blocks | [FixedBufferAttribute(...)] | 1 | 115 | +| System.Number.BigInteger._blocks | [FixedBufferAttribute(...)] | 1 | 116 | | System.Number.DiyFp | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | | System.Number.DiyFp | [ObsoleteAttribute(...)] | 1 | True | | System.Number.NumberBuffer | [ObsoleteAttribute(...)] | 0 | Types with embedded references are not supported in this version of your compiler. | diff --git a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected index e7a5bdfbdaa..26409836c35 100644 --- a/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected +++ b/csharp/ql/test/library-tests/cil/typeAnnotations/typeAnnotations.expected @@ -1178,6 +1178,7 @@ | Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryRead | parameter | 32 | | Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.TryWrite | parameter | 32 | | Parameter 1 of System.Runtime.InteropServices.MemoryMarshal.Write | parameter | 32 | +| Parameter 1 of System.Runtime.InteropServices.NFloat.TryParse | parameter | 32 | | Parameter 1 of System.Runtime.InteropServices.NativeLibrary.TryLoad | parameter | 32 | | Parameter 1 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.CreateReferenceTrackingHandle | parameter | 32 | | Parameter 1 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.UnhandledExceptionPropagationHandler.EndInvoke | parameter | 32 | @@ -1673,6 +1674,7 @@ | Parameter 2 of System.Runtime.InteropServices.Marshal.QueryInterface | parameter | 32 | | Parameter 2 of System.Runtime.InteropServices.MemoryMarshal.TryGetMemoryManager | parameter | 32 | | Parameter 2 of System.Runtime.InteropServices.MemoryMarshal.TryGetString | parameter | 32 | +| Parameter 2 of System.Runtime.InteropServices.NFloat.TryFormat | parameter | 32 | | Parameter 2 of System.Runtime.InteropServices.NativeLibrary.TryGetExport | parameter | 32 | | Parameter 2 of System.Runtime.Serialization.SerializationInfo.GetElement | parameter | 32 | | Parameter 2 of System.Runtime.Serialization.SerializationInfo.GetElementNoThrow | parameter | 32 | @@ -1971,6 +1973,7 @@ | Parameter 3 of System.Runtime.InteropServices.ComWrappers.TryGetOrCreateComInterfaceForObjectInternal | parameter | 32 | | Parameter 3 of System.Runtime.InteropServices.MemoryMarshal.TryGetMemoryManager | parameter | 32 | | Parameter 3 of System.Runtime.InteropServices.MemoryMarshal.TryGetString | parameter | 32 | +| Parameter 3 of System.Runtime.InteropServices.NFloat.TryParse | parameter | 32 | | Parameter 3 of System.Runtime.InteropServices.NativeLibrary.TryLoad | parameter | 32 | | Parameter 3 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.UnhandledExceptionPropagationHandler.BeginInvoke | parameter | 32 | | Parameter 3 of System.Runtime.InteropServices.ObjectiveC.ObjectiveCMarshal.UnhandledExceptionPropagationHandler.Invoke | parameter | 32 | diff --git a/csharp/ql/test/library-tests/conversion/operator/Operator.expected b/csharp/ql/test/library-tests/conversion/operator/Operator.expected index bc9b3aae5b4..fb03f013375 100644 --- a/csharp/ql/test/library-tests/conversion/operator/Operator.expected +++ b/csharp/ql/test/library-tests/conversion/operator/Operator.expected @@ -3,18 +3,27 @@ | ArraySegment | ReadOnlySpan<> | | ArraySegment | Span<> | | Byte | Decimal | +| Byte | NFloat | | Char | Decimal | +| Char | NFloat | | Char | StandardFormat | | DateTime | DateTimeOffset | | Int16 | Decimal | +| Int16 | NFloat | | Int32 | C | | Int32 | Decimal | | Int32 | Index | | Int32 | MetadataToken | +| Int32 | NFloat | | Int64 | Decimal | +| Int64 | NFloat | +| IntPtr | NFloat | | Memory<> | ReadOnlyMemory | | MetadataToken | Int32 | +| NFloat | Double | | SByte | Decimal | +| SByte | NFloat | +| Single | NFloat | | Span<> | ReadOnlySpan | | String | ReadOnlySpan | | T | Nullable<> | @@ -24,5 +33,9 @@ | T[] | ReadOnlySpan<> | | T[] | Span<> | | UInt16 | Decimal | +| UInt16 | NFloat | | UInt32 | Decimal | +| UInt32 | NFloat | | UInt64 | Decimal | +| UInt64 | NFloat | +| UIntPtr | NFloat | diff --git a/csharp/ql/test/library-tests/dispatch/viableCallable.expected b/csharp/ql/test/library-tests/dispatch/viableCallable.expected index 74028980ba8..5a78d028b6c 100644 --- a/csharp/ql/test/library-tests/dispatch/viableCallable.expected +++ b/csharp/ql/test/library-tests/dispatch/viableCallable.expected @@ -216,16 +216,19 @@ | ViableCallable.cs:178:13:178:17 | dynamic call to operator + | + | Double | | ViableCallable.cs:178:13:178:17 | dynamic call to operator + | + | Int32 | | ViableCallable.cs:178:13:178:17 | dynamic call to operator + | + | Int64 | +| ViableCallable.cs:178:13:178:17 | dynamic call to operator + | + | NFloat | | ViableCallable.cs:178:13:178:17 | dynamic call to operator + | + | Single | | ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | Decimal | | ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | Double | | ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | Int32 | | ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | Int64 | +| ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | NFloat | | ViableCallable.cs:180:13:180:17 | dynamic call to operator - | - | Single | | ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | Decimal | | ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | Double | | ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | Int32 | | ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | Int64 | +| ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | NFloat | | ViableCallable.cs:182:13:182:18 | dynamic call to operator + | + | Single | | ViableCallable.cs:185:17:185:25 | object creation of type C10 | C10 | C10 | | ViableCallable.cs:186:9:186:153 | call to method InvokeMember | + | C10 | From 5aa862acfd411943e38c3b932144b556e47e684d Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 3 May 2022 16:12:42 +0100 Subject: [PATCH 0255/1618] C++: Fixup after merge. --- .../Security/CWE/CWE-611/XXE.expected | 38 +++++-------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected index 531914fdd69..9e005341b9a 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected @@ -32,6 +32,11 @@ nodes | tests2.cpp:22:2:22:2 | p | semmle.label | p | | tests2.cpp:33:17:33:31 | SAXParser output argument | semmle.label | SAXParser output argument | | tests2.cpp:37:2:37:2 | p | semmle.label | p | +| tests4.cpp:26:34:26:48 | (int)... | semmle.label | (int)... | +| tests4.cpp:36:34:36:50 | (int)... | semmle.label | (int)... | +| tests4.cpp:46:34:46:68 | ... \| ... | semmle.label | ... \| ... | +| tests4.cpp:77:34:77:38 | flags | semmle.label | flags | +| tests4.cpp:130:39:130:55 | (int)... | semmle.label | (int)... | | tests.cpp:15:23:15:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | | tests.cpp:17:2:17:2 | p | semmle.label | p | | tests.cpp:28:23:28:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | @@ -45,17 +50,6 @@ nodes | tests.cpp:51:23:51:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | | tests.cpp:53:2:53:2 | p | semmle.label | p | | tests.cpp:54:2:54:2 | p | semmle.label | p | -| tests4.cpp:26:34:26:48 | (int)... | semmle.label | (int)... | -| tests4.cpp:36:34:36:50 | (int)... | semmle.label | (int)... | -| tests4.cpp:46:34:46:68 | ... \| ... | semmle.label | ... \| ... | -| tests4.cpp:77:34:77:38 | flags | semmle.label | flags | -| tests4.cpp:130:39:130:55 | (int)... | semmle.label | (int)... | -| tests.cpp:33:23:33:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | -| tests.cpp:35:2:35:2 | p | semmle.label | p | -| tests.cpp:46:23:46:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | -| tests.cpp:49:2:49:2 | p | semmle.label | p | -| tests.cpp:53:19:53:19 | VariableAddress [post update] | semmle.label | VariableAddress [post update] | -| tests.cpp:53:23:53:43 | XercesDOMParser output argument | semmle.label | XercesDOMParser output argument | | tests.cpp:55:2:55:2 | p | semmle.label | p | | tests.cpp:56:2:56:2 | p | semmle.label | p | | tests.cpp:56:2:56:2 | p | semmle.label | p | @@ -82,6 +76,11 @@ subpaths #select | tests2.cpp:22:2:22:2 | p | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:20:17:20:31 | SAXParser output argument | XML parser | | tests2.cpp:37:2:37:2 | p | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:33:17:33:31 | SAXParser output argument | XML parser | +| tests4.cpp:26:34:26:48 | (int)... | tests4.cpp:26:34:26:48 | (int)... | tests4.cpp:26:34:26:48 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:26:34:26:48 | (int)... | XML parser | +| tests4.cpp:36:34:36:50 | (int)... | tests4.cpp:36:34:36:50 | (int)... | tests4.cpp:36:34:36:50 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:36:34:36:50 | (int)... | XML parser | +| tests4.cpp:46:34:46:68 | ... \| ... | tests4.cpp:46:34:46:68 | ... \| ... | tests4.cpp:46:34:46:68 | ... \| ... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:46:34:46:68 | ... \| ... | XML parser | +| tests4.cpp:77:34:77:38 | flags | tests4.cpp:77:34:77:38 | flags | tests4.cpp:77:34:77:38 | flags | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:77:34:77:38 | flags | XML parser | +| tests4.cpp:130:39:130:55 | (int)... | tests4.cpp:130:39:130:55 | (int)... | tests4.cpp:130:39:130:55 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:130:39:130:55 | (int)... | XML parser | | tests.cpp:17:2:17:2 | p | tests.cpp:15:23:15:43 | XercesDOMParser output argument | tests.cpp:17:2:17:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:15:23:15:43 | XercesDOMParser output argument | XML parser | | tests.cpp:31:2:31:2 | p | tests.cpp:28:23:28:43 | XercesDOMParser output argument | tests.cpp:31:2:31:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:28:23:28:43 | XercesDOMParser output argument | XML parser | | tests.cpp:39:2:39:2 | p | tests.cpp:35:23:35:43 | XercesDOMParser output argument | tests.cpp:39:2:39:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:35:23:35:43 | XercesDOMParser output argument | XML parser | @@ -93,20 +92,3 @@ subpaths | tests.cpp:104:3:104:3 | q | tests.cpp:100:24:100:44 | XercesDOMParser output argument | tests.cpp:104:3:104:3 | q | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:100:24:100:44 | XercesDOMParser output argument | XML parser | | tests.cpp:113:2:113:2 | p | tests.cpp:122:23:122:43 | XercesDOMParser output argument | tests.cpp:113:2:113:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:122:23:122:43 | XercesDOMParser output argument | XML parser | | tests.cpp:117:2:117:2 | p | tests.cpp:122:23:122:43 | XercesDOMParser output argument | tests.cpp:117:2:117:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:122:23:122:43 | XercesDOMParser output argument | XML parser | -| tests4.cpp:26:34:26:48 | (int)... | tests4.cpp:26:34:26:48 | (int)... | tests4.cpp:26:34:26:48 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:26:34:26:48 | (int)... | XML parser | -| tests4.cpp:36:34:36:50 | (int)... | tests4.cpp:36:34:36:50 | (int)... | tests4.cpp:36:34:36:50 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:36:34:36:50 | (int)... | XML parser | -| tests4.cpp:46:34:46:68 | ... \| ... | tests4.cpp:46:34:46:68 | ... \| ... | tests4.cpp:46:34:46:68 | ... \| ... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:46:34:46:68 | ... \| ... | XML parser | -| tests4.cpp:77:34:77:38 | flags | tests4.cpp:77:34:77:38 | flags | tests4.cpp:77:34:77:38 | flags | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:77:34:77:38 | flags | XML parser | -| tests4.cpp:130:39:130:55 | (int)... | tests4.cpp:130:39:130:55 | (int)... | tests4.cpp:130:39:130:55 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:130:39:130:55 | (int)... | XML parser | -| tests.cpp:35:2:35:2 | p | tests.cpp:33:23:33:43 | XercesDOMParser output argument | tests.cpp:35:2:35:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:33:23:33:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:49:2:49:2 | p | tests.cpp:46:23:46:43 | XercesDOMParser output argument | tests.cpp:49:2:49:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:46:23:46:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:57:2:57:2 | p | tests.cpp:53:23:53:43 | XercesDOMParser output argument | tests.cpp:57:2:57:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:53:23:53:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:74:2:74:2 | p | tests.cpp:69:23:69:43 | XercesDOMParser output argument | tests.cpp:74:2:74:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:69:23:69:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:78:2:78:2 | p | tests.cpp:69:23:69:43 | XercesDOMParser output argument | tests.cpp:78:2:78:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:69:23:69:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:87:2:87:2 | p | tests.cpp:84:23:84:43 | XercesDOMParser output argument | tests.cpp:87:2:87:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:84:23:84:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:98:2:98:2 | p | tests.cpp:91:23:91:43 | XercesDOMParser output argument | tests.cpp:98:2:98:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:91:23:91:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:106:3:106:3 | q | tests.cpp:103:24:103:44 | XercesDOMParser output argument | tests.cpp:106:3:106:3 | q | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:103:24:103:44 | XercesDOMParser output argument | XML parser | -| tests.cpp:122:3:122:3 | q | tests.cpp:118:24:118:44 | XercesDOMParser output argument | tests.cpp:122:3:122:3 | q | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:118:24:118:44 | XercesDOMParser output argument | XML parser | -| tests.cpp:131:2:131:2 | p | tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:131:2:131:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:140:23:140:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:135:2:135:2 | p | tests.cpp:140:23:140:43 | XercesDOMParser output argument | tests.cpp:135:2:135:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:140:23:140:43 | XercesDOMParser output argument | XML parser | -| tests.cpp:152:2:152:2 | p | tests.cpp:150:19:150:32 | call to createLSParser | tests.cpp:152:2:152:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests.cpp:150:19:150:32 | call to createLSParser | XML parser | From b7cdc4ae1fb1a24f0e80aff9920a466f033988ee Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 3 May 2022 17:39:34 +0200 Subject: [PATCH 0256/1618] Swift: set @github/codeql-c as owner --- CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/CODEOWNERS b/CODEOWNERS index ac59130db0a..2c468b290bf 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -4,6 +4,7 @@ /javascript/ @github/codeql-javascript /python/ @github/codeql-python /ruby/ @github/codeql-ruby +/swift/ @github/codeql-c # ML-powered queries /javascript/ql/experimental/adaptivethreatmodeling/ @github/codeql-ml-powered-queries-reviewers From d52980573a64777fbcccf965937061d0349dd918 Mon Sep 17 00:00:00 2001 From: Daniel Santos Date: Tue, 3 May 2022 11:37:26 -0500 Subject: [PATCH 0257/1618] Update javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll Co-authored-by: Erik Krogh Kristensen --- .../security/dataflow/XssThroughDomCustomizations.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll index 14cb9fecc2e..f1ceb84e5ff 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll @@ -226,6 +226,8 @@ module XssThroughDom { t.start() and exists(DataFlow::CallNode call | call = DataFlow::globalVarRef("getSelection").getACall() + or + call = DOM::documentRef().getAMemberCall("getSelection") | result = call ) From 4cd6dcc4d0271d1ddbb11dbebf90685e865e0ce1 Mon Sep 17 00:00:00 2001 From: Daniel Santos Date: Tue, 3 May 2022 11:37:45 -0500 Subject: [PATCH 0258/1618] Update javascript/ql/lib/change-notes/2022-04-30-xss-selection-source.md Co-authored-by: Erik Krogh Kristensen --- .../ql/lib/change-notes/2022-04-30-xss-selection-source.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/change-notes/2022-04-30-xss-selection-source.md b/javascript/ql/lib/change-notes/2022-04-30-xss-selection-source.md index 4b7ed054b74..ac6e2c0ce06 100644 --- a/javascript/ql/lib/change-notes/2022-04-30-xss-selection-source.md +++ b/javascript/ql/lib/change-notes/2022-04-30-xss-selection-source.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Added the `Selection` api as a DOM text source in the `XssThroughDomCustomizations` library. \ No newline at end of file +* Added the `Selection` api as a DOM text source in the `js/xss-through-dom` query. \ No newline at end of file From 880e3e188581f5f38d66716179cfb469cf3784c7 Mon Sep 17 00:00:00 2001 From: Daniel Santos Date: Tue, 3 May 2022 11:38:32 -0500 Subject: [PATCH 0259/1618] Update javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll Co-authored-by: Erik Krogh Kristensen --- .../security/dataflow/XssThroughDomCustomizations.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll index f1ceb84e5ff..7d3d7bdfc48 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll @@ -236,7 +236,8 @@ module XssThroughDom { } /** - * A source for text from the DOM from a Selection object toString method call + * A source for text from the DOM from calling `toString()` on a `Selection` object. + * The `toString()` method returns the currently selected text in the DOM. * https://developer.mozilla.org/en-US/docs/Web/API/Selection */ class SelectionSource extends Source { From 2e2d4c6e1f53bdf4eba365821f7b89dbec9cb0f3 Mon Sep 17 00:00:00 2001 From: bananabr Date: Tue, 3 May 2022 21:03:35 -0500 Subject: [PATCH 0260/1618] updated tests to consider document.getSelection() --- .../XssThroughDom/XssThroughDom.expected | 37 +++++++++++++------ .../CWE-079/XssThroughDom/xss-through-dom.js | 6 ++- 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected index 0cf59fe99c1..cc1988e5adf 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected @@ -139,12 +139,17 @@ nodes | xss-through-dom.js:122:53:122:67 | ev.target.files | | xss-through-dom.js:122:53:122:67 | ev.target.files | | xss-through-dom.js:122:53:122:70 | ev.target.files[0] | -| xss-through-dom.js:129:6:129:42 | linkText | -| xss-through-dom.js:129:17:129:36 | selection.toString() | -| xss-through-dom.js:129:17:129:36 | selection.toString() | -| xss-through-dom.js:129:17:129:42 | selecti ... ) \|\| '' | -| xss-through-dom.js:130:19:130:26 | linkText | -| xss-through-dom.js:130:19:130:26 | linkText | +| xss-through-dom.js:130:6:130:68 | linkText | +| xss-through-dom.js:130:17:130:37 | wSelect ... tring() | +| xss-through-dom.js:130:17:130:37 | wSelect ... tring() | +| xss-through-dom.js:130:17:130:62 | wSelect ... tring() | +| xss-through-dom.js:130:17:130:68 | wSelect ... ) \|\| '' | +| xss-through-dom.js:130:42:130:62 | dSelect ... tring() | +| xss-through-dom.js:130:42:130:62 | dSelect ... tring() | +| xss-through-dom.js:131:19:131:26 | linkText | +| xss-through-dom.js:131:19:131:26 | linkText | +| xss-through-dom.js:132:16:132:23 | linkText | +| xss-through-dom.js:132:16:132:23 | linkText | edges | forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values | | forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values | @@ -231,11 +236,16 @@ edges | xss-through-dom.js:122:53:122:67 | ev.target.files | xss-through-dom.js:122:53:122:70 | ev.target.files[0] | | xss-through-dom.js:122:53:122:70 | ev.target.files[0] | xss-through-dom.js:122:33:122:71 | URL.cre ... les[0]) | | xss-through-dom.js:122:53:122:70 | ev.target.files[0] | xss-through-dom.js:122:33:122:71 | URL.cre ... les[0]) | -| xss-through-dom.js:129:6:129:42 | linkText | xss-through-dom.js:130:19:130:26 | linkText | -| xss-through-dom.js:129:6:129:42 | linkText | xss-through-dom.js:130:19:130:26 | linkText | -| xss-through-dom.js:129:17:129:36 | selection.toString() | xss-through-dom.js:129:17:129:42 | selecti ... ) \|\| '' | -| xss-through-dom.js:129:17:129:36 | selection.toString() | xss-through-dom.js:129:17:129:42 | selecti ... ) \|\| '' | -| xss-through-dom.js:129:17:129:42 | selecti ... ) \|\| '' | xss-through-dom.js:129:6:129:42 | linkText | +| xss-through-dom.js:130:6:130:68 | linkText | xss-through-dom.js:131:19:131:26 | linkText | +| xss-through-dom.js:130:6:130:68 | linkText | xss-through-dom.js:131:19:131:26 | linkText | +| xss-through-dom.js:130:6:130:68 | linkText | xss-through-dom.js:132:16:132:23 | linkText | +| xss-through-dom.js:130:6:130:68 | linkText | xss-through-dom.js:132:16:132:23 | linkText | +| xss-through-dom.js:130:17:130:37 | wSelect ... tring() | xss-through-dom.js:130:17:130:62 | wSelect ... tring() | +| xss-through-dom.js:130:17:130:37 | wSelect ... tring() | xss-through-dom.js:130:17:130:62 | wSelect ... tring() | +| xss-through-dom.js:130:17:130:62 | wSelect ... tring() | xss-through-dom.js:130:17:130:68 | wSelect ... ) \|\| '' | +| xss-through-dom.js:130:17:130:68 | wSelect ... ) \|\| '' | xss-through-dom.js:130:6:130:68 | linkText | +| xss-through-dom.js:130:42:130:62 | dSelect ... tring() | xss-through-dom.js:130:17:130:62 | wSelect ... tring() | +| xss-through-dom.js:130:42:130:62 | dSelect ... tring() | xss-through-dom.js:130:17:130:62 | wSelect ... tring() | #select | forms.js:9:31:9:40 | values.foo | forms.js:8:23:8:28 | values | forms.js:9:31:9:40 | values.foo | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:8:23:8:28 | values | DOM text | | forms.js:12:31:12:40 | values.bar | forms.js:11:24:11:29 | values | forms.js:12:31:12:40 | values.bar | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:11:24:11:29 | values | DOM text | @@ -273,4 +283,7 @@ edges | xss-through-dom.js:115:16:115:18 | src | xss-through-dom.js:114:17:114:52 | documen ... k").src | xss-through-dom.js:115:16:115:18 | src | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:114:17:114:52 | documen ... k").src | DOM text | | xss-through-dom.js:120:23:120:45 | ev.targ ... 0].name | xss-through-dom.js:120:23:120:37 | ev.target.files | xss-through-dom.js:120:23:120:45 | ev.targ ... 0].name | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:120:23:120:37 | ev.target.files | DOM text | | xss-through-dom.js:122:33:122:71 | URL.cre ... les[0]) | xss-through-dom.js:122:53:122:67 | ev.target.files | xss-through-dom.js:122:33:122:71 | URL.cre ... les[0]) | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:122:53:122:67 | ev.target.files | DOM text | -| xss-through-dom.js:130:19:130:26 | linkText | xss-through-dom.js:129:17:129:36 | selection.toString() | xss-through-dom.js:130:19:130:26 | linkText | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:129:17:129:36 | selection.toString() | DOM text | +| xss-through-dom.js:131:19:131:26 | linkText | xss-through-dom.js:130:17:130:37 | wSelect ... tring() | xss-through-dom.js:131:19:131:26 | linkText | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:130:17:130:37 | wSelect ... tring() | DOM text | +| xss-through-dom.js:131:19:131:26 | linkText | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | xss-through-dom.js:131:19:131:26 | linkText | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | DOM text | +| xss-through-dom.js:132:16:132:23 | linkText | xss-through-dom.js:130:17:130:37 | wSelect ... tring() | xss-through-dom.js:132:16:132:23 | linkText | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:130:17:130:37 | wSelect ... tring() | DOM text | +| xss-through-dom.js:132:16:132:23 | linkText | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | xss-through-dom.js:132:16:132:23 | linkText | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | DOM text | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js index 55f4e80436c..8e89affa0a9 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js +++ b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js @@ -125,8 +125,10 @@ class Sub extends Super { (function () { let elem = document.createElement('a'); - const selection = getSelection(); - let linkText = selection.toString() || ''; + const wSelection = getSelection(); + const dSelection = document.getSelection(); + let linkText = wSelection.toString() || dSelection.toString() || ''; elem.innerHTML = linkText; // NOT OK + $("#id").html(linkText); // NOT OK elem.innerText = linkText; // OK })(); \ No newline at end of file From a50f18ab5087b830a29b12c608e613aa5e7bb9ef Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 22 Apr 2022 12:05:13 +0200 Subject: [PATCH 0261/1618] Data flow: Introduce `expectsContent` --- .../ruby/dataflow/internal/DataFlowImpl.qll | 65 +++++++++++++++++-- .../dataflow/internal/DataFlowImplCommon.qll | 3 + 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll index f49d975ccf9..9c945f4e83d 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll index 100ffde2616..e60505d9248 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplCommon.qll @@ -328,6 +328,9 @@ private module Cached { cached predicate clearsContentCached(Node n, ContentSet c) { clearsContent(n, c) } + cached + predicate expectsContentCached(Node n, ContentSet c) { expectsContent(n, c) } + cached predicate isUnreachableInCallCached(Node n, DataFlowCall call) { isUnreachableInCall(n, call) } From 6e2e8440ebbe37ccdac21f905cf776ca93a271a1 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 22 Apr 2022 12:17:22 +0200 Subject: [PATCH 0262/1618] Data flow: Sync files --- .../cpp/dataflow/internal/DataFlowImpl.qll | 65 +++++++++++++++++-- .../cpp/dataflow/internal/DataFlowImpl2.qll | 65 +++++++++++++++++-- .../cpp/dataflow/internal/DataFlowImpl3.qll | 65 +++++++++++++++++-- .../cpp/dataflow/internal/DataFlowImpl4.qll | 65 +++++++++++++++++-- .../dataflow/internal/DataFlowImplCommon.qll | 3 + .../dataflow/internal/DataFlowImplLocal.qll | 65 +++++++++++++++++-- .../cpp/ir/dataflow/internal/DataFlowImpl.qll | 65 +++++++++++++++++-- .../ir/dataflow/internal/DataFlowImpl2.qll | 65 +++++++++++++++++-- .../ir/dataflow/internal/DataFlowImpl3.qll | 65 +++++++++++++++++-- .../ir/dataflow/internal/DataFlowImpl4.qll | 65 +++++++++++++++++-- .../dataflow/internal/DataFlowImplCommon.qll | 3 + .../csharp/dataflow/internal/DataFlowImpl.qll | 65 +++++++++++++++++-- .../dataflow/internal/DataFlowImpl2.qll | 65 +++++++++++++++++-- .../dataflow/internal/DataFlowImpl3.qll | 65 +++++++++++++++++-- .../dataflow/internal/DataFlowImpl4.qll | 65 +++++++++++++++++-- .../dataflow/internal/DataFlowImpl5.qll | 65 +++++++++++++++++-- .../dataflow/internal/DataFlowImplCommon.qll | 3 + .../java/dataflow/internal/DataFlowImpl.qll | 65 +++++++++++++++++-- .../java/dataflow/internal/DataFlowImpl2.qll | 65 +++++++++++++++++-- .../java/dataflow/internal/DataFlowImpl3.qll | 65 +++++++++++++++++-- .../java/dataflow/internal/DataFlowImpl4.qll | 65 +++++++++++++++++-- .../java/dataflow/internal/DataFlowImpl5.qll | 65 +++++++++++++++++-- .../java/dataflow/internal/DataFlowImpl6.qll | 65 +++++++++++++++++-- .../dataflow/internal/DataFlowImplCommon.qll | 3 + .../DataFlowImplForOnActivityResult.qll | 65 +++++++++++++++++-- .../DataFlowImplForSerializability.qll | 65 +++++++++++++++++-- .../dataflow/new/internal/DataFlowImpl.qll | 65 +++++++++++++++++-- .../dataflow/new/internal/DataFlowImpl2.qll | 65 +++++++++++++++++-- .../dataflow/new/internal/DataFlowImpl3.qll | 65 +++++++++++++++++-- .../dataflow/new/internal/DataFlowImpl4.qll | 65 +++++++++++++++++-- .../new/internal/DataFlowImplCommon.qll | 3 + .../ruby/dataflow/internal/DataFlowImpl2.qll | 65 +++++++++++++++++-- .../internal/DataFlowImplForLibraries.qll | 65 +++++++++++++++++-- 33 files changed, 1639 insertions(+), 196 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index f49d975ccf9..9c945f4e83d 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index f49d975ccf9..9c945f4e83d 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index f49d975ccf9..9c945f4e83d 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index f49d975ccf9..9c945f4e83d 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll index 100ffde2616..e60505d9248 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplCommon.qll @@ -328,6 +328,9 @@ private module Cached { cached predicate clearsContentCached(Node n, ContentSet c) { clearsContent(n, c) } + cached + predicate expectsContentCached(Node n, ContentSet c) { expectsContent(n, c) } + cached predicate isUnreachableInCallCached(Node n, DataFlowCall call) { isUnreachableInCall(n, call) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index f49d975ccf9..9c945f4e83d 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index f49d975ccf9..9c945f4e83d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index f49d975ccf9..9c945f4e83d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index f49d975ccf9..9c945f4e83d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index f49d975ccf9..9c945f4e83d 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll index 100ffde2616..e60505d9248 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImplCommon.qll @@ -328,6 +328,9 @@ private module Cached { cached predicate clearsContentCached(Node n, ContentSet c) { clearsContent(n, c) } + cached + predicate expectsContentCached(Node n, ContentSet c) { expectsContent(n, c) } + cached predicate isUnreachableInCallCached(Node n, DataFlowCall call) { isUnreachableInCall(n, call) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index f49d975ccf9..9c945f4e83d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index f49d975ccf9..9c945f4e83d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index f49d975ccf9..9c945f4e83d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index f49d975ccf9..9c945f4e83d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index f49d975ccf9..9c945f4e83d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll index 100ffde2616..e60505d9248 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImplCommon.qll @@ -328,6 +328,9 @@ private module Cached { cached predicate clearsContentCached(Node n, ContentSet c) { clearsContent(n, c) } + cached + predicate expectsContentCached(Node n, ContentSet c) { expectsContent(n, c) } + cached predicate isUnreachableInCallCached(Node n, DataFlowCall call) { isUnreachableInCall(n, call) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index f49d975ccf9..9c945f4e83d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index f49d975ccf9..9c945f4e83d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index f49d975ccf9..9c945f4e83d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index f49d975ccf9..9c945f4e83d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index f49d975ccf9..9c945f4e83d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index f49d975ccf9..9c945f4e83d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll index 100ffde2616..e60505d9248 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll @@ -328,6 +328,9 @@ private module Cached { cached predicate clearsContentCached(Node n, ContentSet c) { clearsContent(n, c) } + cached + predicate expectsContentCached(Node n, ContentSet c) { expectsContent(n, c) } + cached predicate isUnreachableInCallCached(Node n, DataFlowCall call) { isUnreachableInCall(n, call) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll index f49d975ccf9..9c945f4e83d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index f49d975ccf9..9c945f4e83d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index f49d975ccf9..9c945f4e83d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index f49d975ccf9..9c945f4e83d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index f49d975ccf9..9c945f4e83d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index f49d975ccf9..9c945f4e83d 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll index 100ffde2616..e60505d9248 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImplCommon.qll @@ -328,6 +328,9 @@ private module Cached { cached predicate clearsContentCached(Node n, ContentSet c) { clearsContent(n, c) } + cached + predicate expectsContentCached(Node n, ContentSet c) { expectsContent(n, c) } + cached predicate isUnreachableInCallCached(Node n, DataFlowCall call) { isUnreachableInCall(n, call) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll index f49d975ccf9..9c945f4e83d 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll index f49d975ccf9..9c945f4e83d 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll @@ -502,7 +502,7 @@ pragma[inline] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } @@ -511,10 +511,22 @@ pragma[inline] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and - c = cs.getAReadContent() + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() ) } +// inline to reduce fan-out via `getAReadContent` +pragma[inline] +private predicate expectsContentEx(NodeEx n, Content c) { + exists(ContentSet cs | + expectsContentCached(n.asNode(), cs) and + pragma[only_bind_out](c) = pragma[only_bind_into](cs).getAReadContent() + ) +} + +pragma[nomagic] +private predicate notExpectsContent(NodeEx n) { not expectsContentCached(n.asNode(), _) } + pragma[nomagic] private predicate store( NodeEx node1, TypedContent tc, NodeEx node2, DataFlowType contentType, Configuration config @@ -793,7 +805,7 @@ private module Stage1 { * by `revFlow`. */ pragma[nomagic] - private predicate revFlowIsReadAndStored(Content c, Configuration conf) { + predicate revFlowIsReadAndStored(Content c, Configuration conf) { revFlowConsCand(c, conf) and revFlowStore(c, _, _, conf) } @@ -891,7 +903,7 @@ private module Stage1 { pragma[nomagic] predicate readStepCand(NodeEx n1, Content c, NodeEx n2, Configuration config) { - revFlowIsReadAndStored(pragma[only_bind_into](c), pragma[only_bind_into](config)) and + revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and read(n1, c, n2, pragma[only_bind_into](config)) and revFlow(n2, pragma[only_bind_into](config)) } @@ -1181,11 +1193,26 @@ private module Stage2 { private predicate flowIntoCall = flowIntoCallNodeCand1/5; + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::revFlowIsReadAndStored(c, pragma[only_bind_into](config)) and + expectsContentEx(node, c) + ) + } + bindingset[node, state, ap, config] private predicate filter(NodeEx node, FlowState state, Ap ap, Configuration config) { PrevStage::revFlowState(state, pragma[only_bind_into](config)) and exists(ap) and - not stateBarrier(node, state, config) + not stateBarrier(node, state, config) and + ( + notExpectsContent(node) + or + ap = true and + expectsContentCand(node, config) + ) } bindingset[ap, contentType] @@ -1740,7 +1767,8 @@ private module LocalFlowBigStep { private class FlowCheckNode extends NodeEx { FlowCheckNode() { castNode(this.asNode()) or - clearsContentCached(this.asNode(), _) + clearsContentCached(this.asNode(), _) or + expectsContentCached(this.asNode(), _) } } @@ -1979,6 +2007,16 @@ private module Stage3 { clearContent(node, ap.getHead().getContent(), config) } + pragma[nomagic] + private predicate expectsContentCand(NodeEx node, Ap ap, Configuration config) { + exists(Content c | + PrevStage::revFlow(node, pragma[only_bind_into](config)) and + PrevStage::readStepCand(_, c, _, pragma[only_bind_into](config)) and + expectsContentEx(node, c) and + c = ap.getHead().getContent() + ) + } + pragma[nomagic] private predicate castingNodeEx(NodeEx node) { node.asNode() instanceof CastingNode } @@ -1987,7 +2025,12 @@ private module Stage3 { exists(state) and exists(config) and not clear(node, ap, config) and - if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() + (if castingNodeEx(node) then compatibleTypes(node.getDataFlowType(), ap.getType()) else any()) and + ( + notExpectsContent(node) + or + expectsContentCand(node, ap, config) + ) } bindingset[ap, contentType] @@ -4609,6 +4652,10 @@ private module FlowExploration { exists(PartialPathNodeRev mid | revPartialPathStep(mid, node, state, sc1, sc2, sc3, ap, config) and not clearsContentEx(node, ap.getHead()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead()) + ) and not fullBarrier(node, config) and not stateBarrier(node, state, config) and distSink(node.getEnclosingCallable(), config) <= config.explorationLimit() @@ -4625,6 +4672,10 @@ private module FlowExploration { not fullBarrier(node, config) and not stateBarrier(node, state, config) and not clearsContentEx(node, ap.getHead().getContent()) and + ( + notExpectsContent(node) or + expectsContentEx(node, ap.getHead().getContent()) + ) and if node.asNode() instanceof CastingNode then compatibleTypes(node.getDataFlowType(), ap.getType()) else any() From da72ba46d461d799b12e191e177c729f4ce69168 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 22 Apr 2022 12:17:40 +0200 Subject: [PATCH 0263/1618] Data flow: Add stub `expectsContent` for all languages --- .../semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll | 6 ++++++ .../code/cpp/ir/dataflow/internal/DataFlowPrivate.qll | 6 ++++++ .../code/csharp/dataflow/internal/DataFlowPrivate.qll | 6 ++++++ .../semmle/code/java/dataflow/internal/DataFlowPrivate.qll | 6 ++++++ .../semmle/python/dataflow/new/internal/DataFlowPrivate.qll | 6 ++++++ .../lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll | 6 ++++++ 6 files changed, 36 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll index 0a44ec3336b..9ad3e835c38 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowPrivate.qll @@ -198,6 +198,12 @@ predicate clearsContent(Node n, Content c) { none() // stub implementation } +/** + * Holds if the value that is being tracked is expected to be stored inside content `c` + * at node `n`. + */ +predicate expectsContent(Node n, ContentSet c) { none() } + /** Gets the type of `n` used for type pruning. */ Type getNodeType(Node n) { suppressUnusedNode(n) and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index b065f400fa6..9dcd7f176df 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -279,6 +279,12 @@ predicate clearsContent(Node n, Content c) { none() // stub implementation } +/** + * Holds if the value that is being tracked is expected to be stored inside content `c` + * at node `n`. + */ +predicate expectsContent(Node n, ContentSet c) { none() } + /** Gets the type of `n` used for type pruning. */ IRType getNodeType(Node n) { suppressUnusedNode(n) and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index 60825ea4667..b958415bbee 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -1714,6 +1714,12 @@ predicate clearsContent(Node n, Content c) { ) } +/** + * Holds if the value that is being tracked is expected to be stored inside content `c` + * at node `n`. + */ +predicate expectsContent(Node n, ContentSet c) { none() } + /** * Holds if the node `n` is unreachable when the call context is `call`. */ diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 30031931ed9..3111abc2ad7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -160,6 +160,12 @@ predicate clearsContent(Node n, Content c) { FlowSummaryImpl::Private::Steps::summaryClearsContent(n, c) } +/** + * Holds if the value that is being tracked is expected to be stored inside content `c` + * at node `n`. + */ +predicate expectsContent(Node n, ContentSet c) { none() } + /** * Gets a representative (boxed) type for `t` for the purpose of pruning * possible flow. A single type is used for all numeric types to account for diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll index da0c6ef171b..a8e812a6972 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowPrivate.qll @@ -813,6 +813,12 @@ predicate clearsContent(Node n, Content c) { attributeClearStep(n, c) } +/** + * Holds if the value that is being tracked is expected to be stored inside content `c` + * at node `n`. + */ +predicate expectsContent(Node n, ContentSet c) { none() } + /** * Holds if values stored inside attribute `c` are cleared at node `n`. * diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index d5b2f44c82f..228b04caae5 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -800,6 +800,12 @@ predicate clearsContent(Node n, ContentSet c) { FlowSummaryImpl::Private::Steps::summaryClearsContent(n, c) } +/** + * Holds if the value that is being tracked is expected to be stored inside content `c` + * at node `n`. + */ +predicate expectsContent(Node n, ContentSet c) { none() } + private newtype TDataFlowType = TTodoDataFlowType() or TTodoDataFlowType2() // Add a dummy value to prevent bad functionality-induced joins arising from a type of size 1. From ac3bfa1788468b69422ee7042c1495e52e37ebfb Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 22 Apr 2022 12:19:38 +0200 Subject: [PATCH 0264/1618] Data flow: Mention `expectsContent` in `dataflow.md` --- docs/ql-libraries/dataflow/dataflow.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/ql-libraries/dataflow/dataflow.md b/docs/ql-libraries/dataflow/dataflow.md index 2ce0e308a16..1b6d52ee994 100644 --- a/docs/ql-libraries/dataflow/dataflow.md +++ b/docs/ql-libraries/dataflow/dataflow.md @@ -509,6 +509,12 @@ use-use steps. If local flow is implemented using def-use steps, then Note that `clearsContent(n, cs)` is interpreted using `cs.getAReadContent()`. +Dually, there exists a predicate +```ql +predicate expectsContent(Node n, ContentSet c); +``` +which acts as a barrier when data is _not_ stored inside one of `c.getAReadContent()`. + ## Type pruning The library supports pruning paths when a sequence of value-preserving steps From 74e99302d6f8b5453afff91c0734a73fc46acd69 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 3 May 2022 16:13:50 +0200 Subject: [PATCH 0265/1618] Address review comments --- .../lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll | 6 +++--- .../lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll | 6 +++--- .../lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll | 6 +++--- .../lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll | 6 +++--- .../semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll | 6 +++--- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll | 6 +++--- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll | 6 +++--- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll | 6 +++--- .../semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll | 6 +++--- .../semmle/code/csharp/dataflow/internal/DataFlowImpl.qll | 6 +++--- .../semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll | 6 +++--- .../semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll | 6 +++--- .../semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll | 6 +++--- .../semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll | 6 +++--- .../lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll | 6 +++--- .../semmle/code/java/dataflow/internal/DataFlowImpl2.qll | 6 +++--- .../semmle/code/java/dataflow/internal/DataFlowImpl3.qll | 6 +++--- .../semmle/code/java/dataflow/internal/DataFlowImpl4.qll | 6 +++--- .../semmle/code/java/dataflow/internal/DataFlowImpl5.qll | 6 +++--- .../semmle/code/java/dataflow/internal/DataFlowImpl6.qll | 6 +++--- .../dataflow/internal/DataFlowImplForOnActivityResult.qll | 6 +++--- .../dataflow/internal/DataFlowImplForSerializability.qll | 6 +++--- .../semmle/python/dataflow/new/internal/DataFlowImpl.qll | 6 +++--- .../semmle/python/dataflow/new/internal/DataFlowImpl2.qll | 6 +++--- .../semmle/python/dataflow/new/internal/DataFlowImpl3.qll | 6 +++--- .../semmle/python/dataflow/new/internal/DataFlowImpl4.qll | 6 +++--- ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll | 6 +++--- ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll | 6 +++--- .../ruby/dataflow/internal/DataFlowImplForLibraries.qll | 6 +++--- 29 files changed, 87 insertions(+), 87 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll index 9c945f4e83d..c7b4e5e4cff 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll @@ -498,7 +498,7 @@ private predicate readSet(NodeEx node1, ContentSet c, NodeEx node2, Configuratio } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration config) { exists(ContentSet cs | readSet(node1, cs, node2, config) and @@ -507,7 +507,7 @@ private predicate read(NodeEx node1, Content c, NodeEx node2, Configuration conf } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate clearsContentEx(NodeEx n, Content c) { exists(ContentSet cs | clearsContentCached(n.asNode(), cs) and @@ -516,7 +516,7 @@ private predicate clearsContentEx(NodeEx n, Content c) { } // inline to reduce fan-out via `getAReadContent` -pragma[inline] +bindingset[c] private predicate expectsContentEx(NodeEx n, Content c) { exists(ContentSet cs | expectsContentCached(n.asNode(), cs) and From 91bdb4299f7e6db31c08b7fdf0a84d1016706af3 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 28 Jan 2022 17:49:12 +0100 Subject: [PATCH 0266/1618] Improvements to UnsafeAndroidAccess --- .../code/java/dataflow/ExternalFlow.qll | 1 + .../code/java/frameworks/android/WebView.qll | 106 ++++++++++++++++++ .../java/security/UnsafeAndroidAccess.qll | 106 ++++++++++-------- 3 files changed, 168 insertions(+), 45 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index a6a31559260..e3edc04078b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -86,6 +86,7 @@ private module Frameworks { private import semmle.code.java.frameworks.android.Slice private import semmle.code.java.frameworks.android.SQLite private import semmle.code.java.frameworks.android.Widget + private import semmle.code.java.frameworks.android.WebView private import semmle.code.java.frameworks.android.XssSinks private import semmle.code.java.frameworks.ApacheHttp private import semmle.code.java.frameworks.apache.Collections diff --git a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll index 6717eed4f63..d2a504bbecf 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll @@ -1,17 +1,23 @@ import java +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.dataflow.ExternalFlow +/** The class `android.webkit.WebView`. */ class TypeWebView extends Class { TypeWebView() { this.hasQualifiedName("android.webkit", "WebView") } } +/** The class `android.webkit.WebViewClient`. */ class TypeWebViewClient extends Class { TypeWebViewClient() { this.hasQualifiedName("android.webkit", "WebViewClient") } } +/** The class `android.webkit.WebSettings`. */ class TypeWebSettings extends Class { TypeWebSettings() { this.hasQualifiedName("android.webkit", "WebSettings") } } +/** The method `getSettings` of the class `android.webkit.WebView`. */ class WebViewGetSettingsMethod extends Method { WebViewGetSettingsMethod() { this.hasName("getSettings") and @@ -19,6 +25,7 @@ class WebViewGetSettingsMethod extends Method { } } +/** The method `loadUrl` or `postUrl` of the class `android.webkit.WebView`. */ class WebViewLoadUrlMethod extends Method { WebViewLoadUrlMethod() { this.getDeclaringType() instanceof TypeWebView and @@ -26,9 +33,108 @@ class WebViewLoadUrlMethod extends Method { } } +/** The method `getUrl` or `getOriginalUrl` of the class `android.webkit.WebView`. */ class WebViewGetUrlMethod extends Method { WebViewGetUrlMethod() { this.getDeclaringType() instanceof TypeWebView and (this.getName() = "getUrl" or this.getName() = "getOriginalUrl") } } + +/** + * A method allowing any-local-file and cross-origin access in the class `android.webkit.WebSettings`. + */ +class CrossOriginAccessMethod extends Method { + CrossOriginAccessMethod() { + this.getDeclaringType() instanceof TypeWebSettings and + this.hasName(["setAllowUniversalAccessFromFileURLs", "setAllowFileAccessFromFileURLs"]) + } +} + +/** + * The method `setJavaScriptEnabled` of the class `android.webkit.WebSettings`. + */ +class AllowJavaScriptMethod extends Method { + AllowJavaScriptMethod() { + this.getDeclaringType() instanceof TypeWebSettings and + this.hasName("setJavaScriptEnabled") + } +} + +/** The method `setWebViewClient` of the class `android.webkit.WebView`. */ +class WebViewSetWebViewClientMethod extends Method { + WebViewSetWebViewClientMethod() { + this.getDeclaringType() instanceof TypeWebView and + this.hasName("setWebViewClient") + } +} + +/** The method `shouldOverrideUrlLoading` of the class `android.webkit.WebViewClient`. */ +class ShouldOverrideUrlLoading extends Method { + ShouldOverrideUrlLoading() { + this.getDeclaringType().getASupertype*() instanceof TypeWebViewClient and + this.hasName("shouldOverrideUrlLoading") + } +} + +/** + * Holds if `webview` is a `WebView` and its option `setJavascriptEnabled` + * has been set to `true` via a `WebSettings` object obtained from it. + */ +predicate isJSEnabled(Expr webview) { + webview.getType().(RefType).getASupertype*() instanceof TypeWebView and + exists(MethodAccess allowJs | + allowJs.getMethod() instanceof AllowJavaScriptMethod and + allowJs.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and + exists(MethodAccess settings | + settings.getMethod() instanceof WebViewGetSettingsMethod and + DataFlow::localExprFlow(settings, allowJs.getQualifier()) and + DataFlow::localExprFlow(webview, settings.getQualifier()) + ) + ) +} + +/** + * Holds if `webview` is a `WebView` and its options `setAllowUniversalAccessFromFileURLs` or + * `setAllowFileAccessFromFileURLs` have been set to `true`. + */ +predicate isAllowFileAccessEnabled(Expr webview) { + exists(MethodAccess allowFileAccess | + allowFileAccess.getMethod() instanceof CrossOriginAccessMethod and + allowFileAccess.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and + exists(MethodAccess settings | + settings.getMethod() instanceof WebViewGetSettingsMethod and + DataFlow::localExprFlow(settings, allowFileAccess.getQualifier()) and + DataFlow::localExprFlow(webview, settings.getQualifier()) + ) + ) +} + +private class WebkitSourceModels extends SourceModelCsv { + override predicate row(string row) { + row = + [ + "android.webkit;WebResourceRequest;true;doUpdateVisitedHistory;;;Parameter[1];remote", + "android.webkit;WebResourceRequest;true;onLoadResource;;;Parameter[1];remote", + "android.webkit;WebResourceRequest;true;onPageCommitVisible;;;Parameter[1];remote", + "android.webkit;WebResourceRequest;true;onPageFinished;;;Parameter[1];remote", + "android.webkit;WebResourceRequest;true;onPageStarted;;;Parameter[1];remote", + "android.webkit;WebResourceRequest;true;onReceivedError;(WebView,int,String,String);;Parameter[3];remote", + "android.webkit;WebResourceRequest;true;onReceivedError;(WebView,WebResourceRequest,WebResourceError);;Parameter[1];remote", + "android.webkit;WebResourceRequest;true;onReceivedHttpError;;;Parameter[1];remote", + "android.webkit;WebResourceRequest;true;onSafeBrowsingHit;;;Parameter[1];remote", + "android.webkit;WebResourceRequest;true;shouldInterceptRequest;;;Parameter[1];remote", + "android.webkit;WebResourceRequest;true;shouldOverrideUrlLoading;;;Parameter[1];remote" + ] + } +} + +private class WebkitSummaryModels extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + "android.webkit;WebResourceRequest;true;getRequestHeaders;;;Argument[-1];ReturnValue;taint", + "android.webkit;WebResourceRequest;true;getUrl;;;Argument[-1];ReturnValue;taint" + ] + } +} diff --git a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll index d25f5c4a05c..185b8052ea2 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll @@ -26,11 +26,9 @@ abstract class UrlResourceSink extends DataFlow::Node { */ private class CrossOriginUrlResourceSink extends JavaScriptEnabledUrlResourceSink { CrossOriginUrlResourceSink() { - exists(Variable settings, MethodAccess ma | - webViewLoadUrl(this.asExpr(), settings) and - ma.getMethod() instanceof CrossOriginAccessMethod and - ma.getArgument(0).(BooleanLiteral).getBooleanValue() = true and - ma.getQualifier() = settings.getAnAccess() + exists(WebViewRef webview | + webViewLoadUrl(this.asExpr(), webview.getAnAccess()) and + isAllowFileAccessEnabled(webview.getAnAccess()) ) } @@ -44,57 +42,75 @@ private class CrossOriginUrlResourceSink extends JavaScriptEnabledUrlResourceSin */ private class JavaScriptEnabledUrlResourceSink extends UrlResourceSink { JavaScriptEnabledUrlResourceSink() { - exists(Variable settings | - webViewLoadUrl(this.asExpr(), settings) and - isJSEnabled(settings) + exists(WebViewRef webview | + isJSEnabled(webview.getAnAccess()) and + webViewLoadUrl(this.asExpr(), webview.getAnAccess()) ) } override string getSinkType() { result = "user input vulnerable to XSS attacks" } } +private class WebViewRef extends Element { + WebViewRef() { + this.(RefType).getASourceSupertype*() instanceof TypeWebView or + this.(Variable).getType().(RefType).getASourceSupertype*() instanceof TypeWebView + } + + /** Gets an access to this WebView. */ + Expr getAnAccess() { + exists(ThisAccess t | t.getType() = this and result = t | + t.isOwnInstanceAccess() or + t.isEnclosingInstanceAccess(this) + ) + or + result = this.(Variable).getAnAccess() + } +} + +private Expr getUnderlyingExpr(Expr e) { + if e instanceof CastExpr or e instanceof UnaryExpr + then + result = getUnderlyingExpr(e.(CastExpr).getExpr()) or + result = getUnderlyingExpr(e.(UnaryExpr).getExpr()) + else result = e +} + /** - * Holds if a `WebViewLoadUrlMethod` method is called with the given `urlArg` on a - * WebView with settings stored in `settings`. + * Holds if `WebViewLoadUrlMethod` is called on `webview` + * with `urlArg` as its first argument. */ -private predicate webViewLoadUrl(Expr urlArg, Variable settings) { - exists(MethodAccess loadUrl, Variable webview, MethodAccess getSettings | +private predicate webViewLoadUrl(Argument urlArg, Expr webview) { + exists(MethodAccess loadUrl | loadUrl.getArgument(0) = urlArg and - loadUrl.getMethod() instanceof WebViewLoadUrlMethod and - loadUrl.getQualifier() = webview.getAnAccess() and - getSettings.getMethod() instanceof WebViewGetSettingsMethod and - webview.getAnAccess() = getSettings.getQualifier() and - settings.getAnAssignedValue() = getSettings + loadUrl.getMethod() instanceof WebViewLoadUrlMethod + | + getUnderlyingExpr(loadUrl.getQualifier()) = webview + or + // `webview` is received as a parameter of an event method in a custom `WebViewClient`, + // so we need to find WebViews that use that specific `WebViewClient`. + exists(WebViewClientEventMethod eventMethod, MethodAccess setWebClient | + setWebClient.getMethod() instanceof WebViewSetWebViewClientMethod and + setWebClient.getArgument(0).getType() = eventMethod.getDeclaringType() and + getUnderlyingExpr(setWebClient.getQualifier()) = webview and + getUnderlyingExpr(loadUrl.getQualifier()) = eventMethod.getWebViewParameter().getAnAccess() + ) ) } -/** - * A method allowing any-local-file and cross-origin access in the WebSettings class. - */ -private class CrossOriginAccessMethod extends Method { - CrossOriginAccessMethod() { - this.getDeclaringType() instanceof TypeWebSettings and - this.hasName(["setAllowUniversalAccessFromFileURLs", "setAllowFileAccessFromFileURLs"]) +/** A method of the class `WebViewClient` that handles an event. */ +private class WebViewClientEventMethod extends Method { + WebViewClientEventMethod() { + this.getDeclaringType().getASupertype*() instanceof TypeWebViewClient and + this.hasName([ + "shouldOverrideUrlLoading", "shouldInterceptRequest", "onPageStarted", "onPageFinished", + "onLoadResource", "onPageCommitVisible", "onTooManyRedirects" + ]) + } + + /** Gets a `WebView` parameter of this method. */ + Parameter getWebViewParameter() { + result = this.getAParameter() and + result.getType() instanceof TypeWebView } } - -/** - * The `setJavaScriptEnabled` method for the webview. - */ -private class AllowJavaScriptMethod extends Method { - AllowJavaScriptMethod() { - this.getDeclaringType() instanceof TypeWebSettings and - this.hasName("setJavaScriptEnabled") - } -} - -/** - * Holds if a call to `v.setJavaScriptEnabled(true)` exists. - */ -private predicate isJSEnabled(Variable v) { - exists(MethodAccess jsa | - v.getAnAccess() = jsa.getQualifier() and - jsa.getMethod() instanceof AllowJavaScriptMethod and - jsa.getArgument(0).(BooleanLiteral).getBooleanValue() = true - ) -} From b9859fe165b76519bbe4168d8eaaa4f9d76bb91c Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Thu, 24 Mar 2022 09:43:34 +0100 Subject: [PATCH 0267/1618] Add change note --- .../2022-03-24-unsafe-android-access-improvements.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 java/ql/src/change-notes/2022-03-24-unsafe-android-access-improvements.md diff --git a/java/ql/src/change-notes/2022-03-24-unsafe-android-access-improvements.md b/java/ql/src/change-notes/2022-03-24-unsafe-android-access-improvements.md new file mode 100644 index 00000000000..cd9ebf32b98 --- /dev/null +++ b/java/ql/src/change-notes/2022-03-24-unsafe-android-access-improvements.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- + * The logic to detect WebViews with JavaScript (and optionally file access) enabled in the query `java/android/unsafe-android-webview-fetch` has been improved. + \ No newline at end of file From 51dfebf4c9dec1d22bceb14743a483d767000cba Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 25 Mar 2022 10:51:26 +0100 Subject: [PATCH 0268/1618] Apply suggestions from code review Co-authored-by: Chris Smowton --- .../code/java/frameworks/android/WebView.qll | 20 ++++++++----------- .../java/security/UnsafeAndroidAccess.qll | 2 +- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll index d2a504bbecf..9de4c047e83 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll @@ -83,14 +83,12 @@ class ShouldOverrideUrlLoading extends Method { */ predicate isJSEnabled(Expr webview) { webview.getType().(RefType).getASupertype*() instanceof TypeWebView and - exists(MethodAccess allowJs | + exists(MethodAccess allowJs, MethodAccess settings | allowJs.getMethod() instanceof AllowJavaScriptMethod and allowJs.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and - exists(MethodAccess settings | - settings.getMethod() instanceof WebViewGetSettingsMethod and - DataFlow::localExprFlow(settings, allowJs.getQualifier()) and - DataFlow::localExprFlow(webview, settings.getQualifier()) - ) + settings.getMethod() instanceof WebViewGetSettingsMethod and + DataFlow::localExprFlow(settings, allowJs.getQualifier()) and + DataFlow::localExprFlow(webview, settings.getQualifier()) ) } @@ -99,14 +97,12 @@ predicate isJSEnabled(Expr webview) { * `setAllowFileAccessFromFileURLs` have been set to `true`. */ predicate isAllowFileAccessEnabled(Expr webview) { - exists(MethodAccess allowFileAccess | + exists(MethodAccess allowFileAccess, MethodAccess settings | allowFileAccess.getMethod() instanceof CrossOriginAccessMethod and allowFileAccess.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and - exists(MethodAccess settings | - settings.getMethod() instanceof WebViewGetSettingsMethod and - DataFlow::localExprFlow(settings, allowFileAccess.getQualifier()) and - DataFlow::localExprFlow(webview, settings.getQualifier()) - ) + settings.getMethod() instanceof WebViewGetSettingsMethod and + DataFlow::localExprFlow(settings, allowFileAccess.getQualifier()) and + DataFlow::localExprFlow(webview, settings.getQualifier()) ) } diff --git a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll index 185b8052ea2..e80224b7352 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll @@ -77,7 +77,7 @@ private Expr getUnderlyingExpr(Expr e) { } /** - * Holds if `WebViewLoadUrlMethod` is called on `webview` + * Holds if a `WebViewLoadUrlMethod` is called on `webview` * with `urlArg` as its first argument. */ private predicate webViewLoadUrl(Argument urlArg, Expr webview) { From d68311e26d37798d40143376120d517e66d42828 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 25 Mar 2022 10:53:09 +0100 Subject: [PATCH 0269/1618] Consider implicit this accesses in WebViewRef --- .../code/java/frameworks/android/WebView.qll | 8 +++---- .../java/security/UnsafeAndroidAccess.qll | 22 +++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll index 9de4c047e83..53347a0d1e3 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll @@ -81,14 +81,14 @@ class ShouldOverrideUrlLoading extends Method { * Holds if `webview` is a `WebView` and its option `setJavascriptEnabled` * has been set to `true` via a `WebSettings` object obtained from it. */ -predicate isJSEnabled(Expr webview) { +predicate isJSEnabled(DataFlow::Node webview) { webview.getType().(RefType).getASupertype*() instanceof TypeWebView and exists(MethodAccess allowJs, MethodAccess settings | allowJs.getMethod() instanceof AllowJavaScriptMethod and allowJs.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and settings.getMethod() instanceof WebViewGetSettingsMethod and DataFlow::localExprFlow(settings, allowJs.getQualifier()) and - DataFlow::localExprFlow(webview, settings.getQualifier()) + DataFlow::localFlow(webview, DataFlow::getInstanceArgument(settings)) ) } @@ -96,13 +96,13 @@ predicate isJSEnabled(Expr webview) { * Holds if `webview` is a `WebView` and its options `setAllowUniversalAccessFromFileURLs` or * `setAllowFileAccessFromFileURLs` have been set to `true`. */ -predicate isAllowFileAccessEnabled(Expr webview) { +predicate isAllowFileAccessEnabled(DataFlow::Node webview) { exists(MethodAccess allowFileAccess, MethodAccess settings | allowFileAccess.getMethod() instanceof CrossOriginAccessMethod and allowFileAccess.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and settings.getMethod() instanceof WebViewGetSettingsMethod and DataFlow::localExprFlow(settings, allowFileAccess.getQualifier()) and - DataFlow::localExprFlow(webview, settings.getQualifier()) + DataFlow::localFlow(webview, DataFlow::getInstanceArgument(settings)) ) } diff --git a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll index e80224b7352..342fa1f34fe 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll @@ -57,14 +57,13 @@ private class WebViewRef extends Element { this.(Variable).getType().(RefType).getASourceSupertype*() instanceof TypeWebView } - /** Gets an access to this WebView. */ - Expr getAnAccess() { - exists(ThisAccess t | t.getType() = this and result = t | - t.isOwnInstanceAccess() or - t.isEnclosingInstanceAccess(this) + /** Gets an access to this WebView as a data flow node. */ + DataFlow::Node getAnAccess() { + exists(DataFlow::InstanceAccessNode t | t.getType() = this and result = t | + t.isOwnInstanceAccess() or t.getInstanceAccess().isEnclosingInstanceAccess(this) ) or - result = this.(Variable).getAnAccess() + result = DataFlow::exprNode(this.(Variable).getAnAccess()) } } @@ -80,20 +79,25 @@ private Expr getUnderlyingExpr(Expr e) { * Holds if a `WebViewLoadUrlMethod` is called on `webview` * with `urlArg` as its first argument. */ -private predicate webViewLoadUrl(Argument urlArg, Expr webview) { +private predicate webViewLoadUrl(Argument urlArg, DataFlow::Node webview) { exists(MethodAccess loadUrl | loadUrl.getArgument(0) = urlArg and loadUrl.getMethod() instanceof WebViewLoadUrlMethod | - getUnderlyingExpr(loadUrl.getQualifier()) = webview + webview = DataFlow::exprNode(getUnderlyingExpr(loadUrl.getQualifier())) + or + webview = DataFlow::getInstanceArgument(loadUrl) or // `webview` is received as a parameter of an event method in a custom `WebViewClient`, // so we need to find WebViews that use that specific `WebViewClient`. exists(WebViewClientEventMethod eventMethod, MethodAccess setWebClient | setWebClient.getMethod() instanceof WebViewSetWebViewClientMethod and setWebClient.getArgument(0).getType() = eventMethod.getDeclaringType() and - getUnderlyingExpr(setWebClient.getQualifier()) = webview and getUnderlyingExpr(loadUrl.getQualifier()) = eventMethod.getWebViewParameter().getAnAccess() + | + webview = DataFlow::exprNode(getUnderlyingExpr(setWebClient.getQualifier())) + or + webview = DataFlow::getInstanceArgument(setWebClient) ) ) } From b678467e9dffc755daaaa1ba8f7c54d0e79e9f68 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 25 Mar 2022 11:00:05 +0100 Subject: [PATCH 0270/1618] Move things around --- .../code/java/frameworks/android/WebView.qll | 29 ---------------- .../java/security/UnsafeAndroidAccess.qll | 33 +++++++++++++++++-- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll index 53347a0d1e3..f6d573e94b1 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll @@ -77,35 +77,6 @@ class ShouldOverrideUrlLoading extends Method { } } -/** - * Holds if `webview` is a `WebView` and its option `setJavascriptEnabled` - * has been set to `true` via a `WebSettings` object obtained from it. - */ -predicate isJSEnabled(DataFlow::Node webview) { - webview.getType().(RefType).getASupertype*() instanceof TypeWebView and - exists(MethodAccess allowJs, MethodAccess settings | - allowJs.getMethod() instanceof AllowJavaScriptMethod and - allowJs.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and - settings.getMethod() instanceof WebViewGetSettingsMethod and - DataFlow::localExprFlow(settings, allowJs.getQualifier()) and - DataFlow::localFlow(webview, DataFlow::getInstanceArgument(settings)) - ) -} - -/** - * Holds if `webview` is a `WebView` and its options `setAllowUniversalAccessFromFileURLs` or - * `setAllowFileAccessFromFileURLs` have been set to `true`. - */ -predicate isAllowFileAccessEnabled(DataFlow::Node webview) { - exists(MethodAccess allowFileAccess, MethodAccess settings | - allowFileAccess.getMethod() instanceof CrossOriginAccessMethod and - allowFileAccess.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and - settings.getMethod() instanceof WebViewGetSettingsMethod and - DataFlow::localExprFlow(settings, allowFileAccess.getQualifier()) and - DataFlow::localFlow(webview, DataFlow::getInstanceArgument(settings)) - ) -} - private class WebkitSourceModels extends SourceModelCsv { override predicate row(string row) { row = diff --git a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll index 342fa1f34fe..61ffd3de158 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll @@ -43,8 +43,8 @@ private class CrossOriginUrlResourceSink extends JavaScriptEnabledUrlResourceSin private class JavaScriptEnabledUrlResourceSink extends UrlResourceSink { JavaScriptEnabledUrlResourceSink() { exists(WebViewRef webview | - isJSEnabled(webview.getAnAccess()) and - webViewLoadUrl(this.asExpr(), webview.getAnAccess()) + webViewLoadUrl(this.asExpr(), webview.getAnAccess()) and + isJSEnabled(webview.getAnAccess()) ) } @@ -102,6 +102,35 @@ private predicate webViewLoadUrl(Argument urlArg, DataFlow::Node webview) { ) } +/** + * Holds if `webview` is a `WebView` and its option `setJavascriptEnabled` + * has been set to `true` via a `WebSettings` object obtained from it. + */ +private predicate isJSEnabled(DataFlow::Node webview) { + webview.getType().(RefType).getASupertype*() instanceof TypeWebView and + exists(MethodAccess allowJs, MethodAccess settings | + allowJs.getMethod() instanceof AllowJavaScriptMethod and + allowJs.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and + settings.getMethod() instanceof WebViewGetSettingsMethod and + DataFlow::localExprFlow(settings, allowJs.getQualifier()) and + DataFlow::localFlow(webview, DataFlow::getInstanceArgument(settings)) + ) +} + +/** + * Holds if `webview` is a `WebView` and its options `setAllowUniversalAccessFromFileURLs` or + * `setAllowFileAccessFromFileURLs` have been set to `true`. + */ +private predicate isAllowFileAccessEnabled(DataFlow::Node webview) { + exists(MethodAccess allowFileAccess, MethodAccess settings | + allowFileAccess.getMethod() instanceof CrossOriginAccessMethod and + allowFileAccess.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and + settings.getMethod() instanceof WebViewGetSettingsMethod and + DataFlow::localExprFlow(settings, allowFileAccess.getQualifier()) and + DataFlow::localFlow(webview, DataFlow::getInstanceArgument(settings)) + ) +} + /** A method of the class `WebViewClient` that handles an event. */ private class WebViewClientEventMethod extends Method { WebViewClientEventMethod() { From 7ba5a032ce6a552c60e2ba60958a694e03c9520d Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 25 Mar 2022 11:44:54 +0100 Subject: [PATCH 0271/1618] Add tests and stubs for the new sources and flow steps --- .../code/java/frameworks/android/WebView.qll | 22 +- .../flow-steps/{Test.java => ParcelTest.java} | 2 +- .../flow-steps/WebResourceRequestTest.java | 35 + ...t.expected => AndroidSourcesTest.expected} | 0 ...ultSourceTest.ql => AndroidSourcesTest.ql} | 0 .../{Test.java => OnActivityResult.java} | 2 +- ... OnActivityResultActivityAndFragment.java} | 2 +- ...ent.java => OnActivityResultFragment.java} | 2 +- ...sing.java => OnActivityResultMissing.java} | 2 +- .../{Safe.java => OnActivityResultSafe.java} | 2 +- ...{Safe2.java => OnActivityResultSafe2.java} | 2 +- .../android/sources/WebViewSources.java | 101 ++ .../android/content/ComponentCallbacks2.java | 6 +- .../android/net/http/SslCertificate.java | 34 + .../android/net/http/SslError.java | 28 + .../android/print/PageRange.java | 21 + .../android/print/PrintAttributes.java | 162 ++ .../android/print/PrintDocumentAdapter.java | 32 + .../android/print/PrintDocumentInfo.java | 25 + .../view/textclassifier/TextLinks.java | 16 + .../android/webkit/ClientCertRequest.java | 19 + .../android/webkit/ConsoleMessage.java | 19 + .../android/webkit/DownloadListener.java | 9 + .../webkit/GeolocationPermissions.java | 20 + .../android/webkit/HttpAuthHandler.java | 12 + .../android/webkit/JsPromptResult.java | 10 + .../android/webkit/JsResult.java | 10 + .../android/webkit/PermissionRequest.java | 18 + .../webkit/RenderProcessGoneDetail.java | 11 + .../android/webkit/SafeBrowsingResponse.java | 12 + .../android/webkit/SslErrorHandler.java | 11 + .../android/webkit/ValueCallback.java | 9 + .../android/webkit/WebBackForwardList.java | 16 + .../android/webkit/WebChromeClient.java | 67 + .../android/webkit/WebHistoryItem.java | 15 + .../android/webkit/WebMessage.java | 14 + .../android/webkit/WebMessagePort.java | 19 + .../android/webkit/WebResourceError.java | 10 + .../android/webkit/WebResourceRequest.java | 76 +- .../android/webkit/WebResourceResponse.java | 187 +- .../android/webkit/WebSettings.java | 1507 ++--------------- .../android/webkit/WebStorage.java | 21 + .../android/webkit/WebView.java | 388 +++-- .../android/webkit/WebViewClient.java | 289 +--- .../android/webkit/WebViewRenderProcess.java | 10 + .../webkit/WebViewRenderProcessClient.java | 13 + .../android/widget/AbsoluteLayout.java | 23 + 47 files changed, 1322 insertions(+), 1989 deletions(-) rename java/ql/test/library-tests/frameworks/android/flow-steps/{Test.java => ParcelTest.java} (99%) create mode 100644 java/ql/test/library-tests/frameworks/android/flow-steps/WebResourceRequestTest.java rename java/ql/test/library-tests/frameworks/android/sources/{OnActivityResultSourceTest.expected => AndroidSourcesTest.expected} (100%) rename java/ql/test/library-tests/frameworks/android/sources/{OnActivityResultSourceTest.ql => AndroidSourcesTest.ql} (100%) rename java/ql/test/library-tests/frameworks/android/sources/{Test.java => OnActivityResult.java} (90%) rename java/ql/test/library-tests/frameworks/android/sources/{TestActivityAndFragment.java => OnActivityResultActivityAndFragment.java} (91%) rename java/ql/test/library-tests/frameworks/android/sources/{TestFragment.java => OnActivityResultFragment.java} (90%) rename java/ql/test/library-tests/frameworks/android/sources/{TestMissing.java => OnActivityResultMissing.java} (91%) rename java/ql/test/library-tests/frameworks/android/sources/{Safe.java => OnActivityResultSafe.java} (89%) rename java/ql/test/library-tests/frameworks/android/sources/{Safe2.java => OnActivityResultSafe2.java} (87%) create mode 100644 java/ql/test/library-tests/frameworks/android/sources/WebViewSources.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/net/http/SslCertificate.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/net/http/SslError.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/print/PageRange.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/print/PrintAttributes.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentAdapter.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentInfo.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/ClientCertRequest.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/ConsoleMessage.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/DownloadListener.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/GeolocationPermissions.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/HttpAuthHandler.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/JsPromptResult.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/JsResult.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/PermissionRequest.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/RenderProcessGoneDetail.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/SafeBrowsingResponse.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/SslErrorHandler.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/ValueCallback.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebBackForwardList.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebChromeClient.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebHistoryItem.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessage.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessagePort.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceError.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebStorage.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcess.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcessClient.java create mode 100644 java/ql/test/stubs/google-android-9.0.0/android/widget/AbsoluteLayout.java diff --git a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll index f6d573e94b1..5810150bf3e 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll @@ -81,17 +81,17 @@ private class WebkitSourceModels extends SourceModelCsv { override predicate row(string row) { row = [ - "android.webkit;WebResourceRequest;true;doUpdateVisitedHistory;;;Parameter[1];remote", - "android.webkit;WebResourceRequest;true;onLoadResource;;;Parameter[1];remote", - "android.webkit;WebResourceRequest;true;onPageCommitVisible;;;Parameter[1];remote", - "android.webkit;WebResourceRequest;true;onPageFinished;;;Parameter[1];remote", - "android.webkit;WebResourceRequest;true;onPageStarted;;;Parameter[1];remote", - "android.webkit;WebResourceRequest;true;onReceivedError;(WebView,int,String,String);;Parameter[3];remote", - "android.webkit;WebResourceRequest;true;onReceivedError;(WebView,WebResourceRequest,WebResourceError);;Parameter[1];remote", - "android.webkit;WebResourceRequest;true;onReceivedHttpError;;;Parameter[1];remote", - "android.webkit;WebResourceRequest;true;onSafeBrowsingHit;;;Parameter[1];remote", - "android.webkit;WebResourceRequest;true;shouldInterceptRequest;;;Parameter[1];remote", - "android.webkit;WebResourceRequest;true;shouldOverrideUrlLoading;;;Parameter[1];remote" + "android.webkit;WebViewClient;true;doUpdateVisitedHistory;;;Parameter[1];remote", + "android.webkit;WebViewClient;true;onLoadResource;;;Parameter[1];remote", + "android.webkit;WebViewClient;true;onPageCommitVisible;;;Parameter[1];remote", + "android.webkit;WebViewClient;true;onPageFinished;;;Parameter[1];remote", + "android.webkit;WebViewClient;true;onPageStarted;;;Parameter[1];remote", + "android.webkit;WebViewClient;true;onReceivedError;(WebView,int,String,String);;Parameter[3];remote", + "android.webkit;WebViewClient;true;onReceivedError;(WebView,WebResourceRequest,WebResourceError);;Parameter[1];remote", + "android.webkit;WebViewClient;true;onReceivedHttpError;;;Parameter[1];remote", + "android.webkit;WebViewClient;true;onSafeBrowsingHit;;;Parameter[1];remote", + "android.webkit;WebViewClient;true;shouldInterceptRequest;;;Parameter[1];remote", + "android.webkit;WebViewClient;true;shouldOverrideUrlLoading;;;Parameter[1];remote" ] } } diff --git a/java/ql/test/library-tests/frameworks/android/flow-steps/Test.java b/java/ql/test/library-tests/frameworks/android/flow-steps/ParcelTest.java similarity index 99% rename from java/ql/test/library-tests/frameworks/android/flow-steps/Test.java rename to java/ql/test/library-tests/frameworks/android/flow-steps/ParcelTest.java index 7ac9f2a8490..c65efb537d4 100644 --- a/java/ql/test/library-tests/frameworks/android/flow-steps/Test.java +++ b/java/ql/test/library-tests/frameworks/android/flow-steps/ParcelTest.java @@ -19,7 +19,7 @@ import java.util.List; import java.util.Map; // Test case generated by GenerateFlowTestCase.ql -public class Test { +public class ParcelTest { Object source() { return null; } void sink(Object o) { } diff --git a/java/ql/test/library-tests/frameworks/android/flow-steps/WebResourceRequestTest.java b/java/ql/test/library-tests/frameworks/android/flow-steps/WebResourceRequestTest.java new file mode 100644 index 00000000000..6c66612b092 --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/flow-steps/WebResourceRequestTest.java @@ -0,0 +1,35 @@ +package generatedtest; + +import android.net.Uri; +import android.webkit.WebResourceRequest; +import java.util.Map; + +// Test case generated by GenerateFlowTestCase.ql +public class WebResourceRequestTest { + + Object source() { + return null; + } + + void sink(Object o) {} + + public void test() throws Exception { + + { + // "android.webkit;WebResourceRequest;true;getRequestHeaders;;;Argument[-1];ReturnValue;taint" + Map out = null; + WebResourceRequest in = (WebResourceRequest) source(); + out = in.getRequestHeaders(); + sink(out); // $ hasTaintFlow + } + { + // "android.webkit;WebResourceRequest;true;getUrl;;;Argument[-1];ReturnValue;taint" + Uri out = null; + WebResourceRequest in = (WebResourceRequest) source(); + out = in.getUrl(); + sink(out); // $ hasTaintFlow + } + + } + +} diff --git a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.expected b/java/ql/test/library-tests/frameworks/android/sources/AndroidSourcesTest.expected similarity index 100% rename from java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.expected rename to java/ql/test/library-tests/frameworks/android/sources/AndroidSourcesTest.expected diff --git a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.ql b/java/ql/test/library-tests/frameworks/android/sources/AndroidSourcesTest.ql similarity index 100% rename from java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.ql rename to java/ql/test/library-tests/frameworks/android/sources/AndroidSourcesTest.ql diff --git a/java/ql/test/library-tests/frameworks/android/sources/Test.java b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResult.java similarity index 90% rename from java/ql/test/library-tests/frameworks/android/sources/Test.java rename to java/ql/test/library-tests/frameworks/android/sources/OnActivityResult.java index ee694ef7697..55378fd4f44 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/Test.java +++ b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResult.java @@ -4,7 +4,7 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; -public class Test extends Activity { +public class OnActivityResult extends Activity { void sink(Object o) {} diff --git a/java/ql/test/library-tests/frameworks/android/sources/TestActivityAndFragment.java b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultActivityAndFragment.java similarity index 91% rename from java/ql/test/library-tests/frameworks/android/sources/TestActivityAndFragment.java rename to java/ql/test/library-tests/frameworks/android/sources/OnActivityResultActivityAndFragment.java index bfa657c6d00..99349d67126 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/TestActivityAndFragment.java +++ b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultActivityAndFragment.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.os.Bundle; import androidx.fragment.app.FragmentTransaction; -public class TestActivityAndFragment extends Activity { +public class OnActivityResultActivityAndFragment extends Activity { private TestFragment frag; diff --git a/java/ql/test/library-tests/frameworks/android/sources/TestFragment.java b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultFragment.java similarity index 90% rename from java/ql/test/library-tests/frameworks/android/sources/TestFragment.java rename to java/ql/test/library-tests/frameworks/android/sources/OnActivityResultFragment.java index a2073f9b781..38a952c6e2d 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/TestFragment.java +++ b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultFragment.java @@ -4,7 +4,7 @@ import android.app.Fragment; import android.content.Intent; import android.os.Bundle; -public class TestFragment extends Fragment { +public class OnActivityResultFragment extends Fragment { void sink(Object o) {} diff --git a/java/ql/test/library-tests/frameworks/android/sources/TestMissing.java b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultMissing.java similarity index 91% rename from java/ql/test/library-tests/frameworks/android/sources/TestMissing.java rename to java/ql/test/library-tests/frameworks/android/sources/OnActivityResultMissing.java index 4dbbfd9ca24..8b9317a0872 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/TestMissing.java +++ b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultMissing.java @@ -5,7 +5,7 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; -public class TestMissing extends Activity { +public class OnActivityResultMissing extends Activity { void sink(Object o) {} diff --git a/java/ql/test/library-tests/frameworks/android/sources/Safe.java b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe.java similarity index 89% rename from java/ql/test/library-tests/frameworks/android/sources/Safe.java rename to java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe.java index 7a213f5edb0..8928c9c362b 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/Safe.java +++ b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe.java @@ -4,7 +4,7 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; -public class Safe extends Activity { +public class OnActivityResultSafe extends Activity { void sink(Object o) {} diff --git a/java/ql/test/library-tests/frameworks/android/sources/Safe2.java b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe2.java similarity index 87% rename from java/ql/test/library-tests/frameworks/android/sources/Safe2.java rename to java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe2.java index 9a2e4a6074f..c860001f4de 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/Safe2.java +++ b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe2.java @@ -4,7 +4,7 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; -public class Safe2 extends Activity { +public class OnActivityResultSafe2 extends Activity { void sink(Object o) {} diff --git a/java/ql/test/library-tests/frameworks/android/sources/WebViewSources.java b/java/ql/test/library-tests/frameworks/android/sources/WebViewSources.java new file mode 100644 index 00000000000..45da71c1c1a --- /dev/null +++ b/java/ql/test/library-tests/frameworks/android/sources/WebViewSources.java @@ -0,0 +1,101 @@ +import android.graphics.Bitmap; +import android.webkit.SafeBrowsingResponse; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; +import android.webkit.WebResourceError; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +public class WebViewSources { + + private static void sink(Object o) {} + + public static void test() { + new WebViewClient() { + // "android.webkit;WebViewClient;true;doUpdateVisitedHistory;;;Parameter[1];remote", + @Override + public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { + sink(url); // $ hasValueFlow + } + + // "android.webkit;WebViewClient;true;onLoadResource;;;Parameter[1];remote", + @Override + public void onLoadResource(WebView view, String url) { + sink(url); // $ hasValueFlow + } + + // "android.webkit;WebViewClient;true;onPageCommitVisible;;;Parameter[1];remote", + @Override + public void onPageCommitVisible(WebView view, String url) { + sink(url); // $ hasValueFlow + } + + // "android.webkit;WebViewClient;true;onPageFinished;;;Parameter[1];remote", + @Override + public void onPageFinished(WebView view, String url) { + sink(url); // $ hasValueFlow + } + + // "android.webkit;WebViewClient;true;onPageStarted;;;Parameter[1];remote", + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + sink(url); // $ hasValueFlow + } + + // "android.webkit;WebViewClient;true;onReceivedError;(WebView,int,String,String);;Parameter[3];remote", + @Override + public void onReceivedError(WebView view, int errorCode, String description, + String failingUrl) { + sink(failingUrl); // $ hasValueFlow + } + + // "android.webkit;WebViewClient;true;onReceivedError;(WebView,WebResourceRequest,WebResourceError);;Parameter[1];remote", + @Override + public void onReceivedError(WebView view, WebResourceRequest request, + WebResourceError error) { + sink(request); // $ hasValueFlow + } + + // "android.webkit;WebViewClient;true;onReceivedHttpError;;;Parameter[1];remote", + @Override + public void onReceivedHttpError(WebView view, WebResourceRequest request, + WebResourceResponse errorResponse) { + sink(request); // $ hasValueFlow + } + + // "android.webkit;WebViewClient;true;onSafeBrowsingHit;;;Parameter[1];remote", + @Override + public void onSafeBrowsingHit(WebView view, WebResourceRequest request, int threatType, + SafeBrowsingResponse callback) { + sink(request); // $ hasValueFlow + } + + // "android.webkit;WebViewClient;true;shouldInterceptRequest;;;Parameter[1];remote", + @Override + public WebResourceResponse shouldInterceptRequest(WebView view, + WebResourceRequest request) { + sink(request); // $ hasValueFlow + return null; + } + + @Override + public WebResourceResponse shouldInterceptRequest(WebView view, String url) { + sink(url); // $ hasValueFlow + return null; + } + + // "android.webkit;WebViewClient;true;shouldOverrideUrlLoading;;;Parameter[1];remote" + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + sink(request); // $ hasValueFlow + return false; + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + sink(url); // $ hasValueFlow + return false; + } + }; + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/content/ComponentCallbacks2.java b/java/ql/test/stubs/google-android-9.0.0/android/content/ComponentCallbacks2.java index d70ac92ec20..f8c83ab104d 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/content/ComponentCallbacks2.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/content/ComponentCallbacks2.java @@ -2,7 +2,10 @@ package android.content; -public interface ComponentCallbacks2 extends ComponentCallbacks { +import android.content.ComponentCallbacks; + +public interface ComponentCallbacks2 extends ComponentCallbacks +{ static int TRIM_MEMORY_BACKGROUND = 0; static int TRIM_MEMORY_COMPLETE = 0; static int TRIM_MEMORY_MODERATE = 0; @@ -10,6 +13,5 @@ public interface ComponentCallbacks2 extends ComponentCallbacks { static int TRIM_MEMORY_RUNNING_LOW = 0; static int TRIM_MEMORY_RUNNING_MODERATE = 0; static int TRIM_MEMORY_UI_HIDDEN = 0; - void onTrimMemory(int p0); } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslCertificate.java b/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslCertificate.java new file mode 100644 index 00000000000..8c22fcb0a49 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslCertificate.java @@ -0,0 +1,34 @@ +// Generated automatically from android.net.http.SslCertificate for testing purposes + +package android.net.http; + +import android.os.Bundle; +import java.security.cert.X509Certificate; +import java.util.Date; + +public class SslCertificate +{ + protected SslCertificate() {} + public Date getValidNotAfterDate(){ return null; } + public Date getValidNotBeforeDate(){ return null; } + public SslCertificate(String p0, String p1, Date p2, Date p3){} + public SslCertificate(String p0, String p1, String p2, String p3){} + public SslCertificate(X509Certificate p0){} + public SslCertificate.DName getIssuedBy(){ return null; } + public SslCertificate.DName getIssuedTo(){ return null; } + public String getValidNotAfter(){ return null; } + public String getValidNotBefore(){ return null; } + public String toString(){ return null; } + public X509Certificate getX509Certificate(){ return null; } + public class DName + { + protected DName() {} + public DName(String p0){} + public String getCName(){ return null; } + public String getDName(){ return null; } + public String getOName(){ return null; } + public String getUName(){ return null; } + } + public static Bundle saveState(SslCertificate p0){ return null; } + public static SslCertificate restoreState(Bundle p0){ return null; } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslError.java b/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslError.java new file mode 100644 index 00000000000..62feb4a498d --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslError.java @@ -0,0 +1,28 @@ +// Generated automatically from android.net.http.SslError for testing purposes + +package android.net.http; + +import android.net.http.SslCertificate; +import java.security.cert.X509Certificate; + +public class SslError +{ + protected SslError() {} + public SslCertificate getCertificate(){ return null; } + public SslError(int p0, SslCertificate p1){} + public SslError(int p0, SslCertificate p1, String p2){} + public SslError(int p0, X509Certificate p1){} + public SslError(int p0, X509Certificate p1, String p2){} + public String getUrl(){ return null; } + public String toString(){ return null; } + public boolean addError(int p0){ return false; } + public boolean hasError(int p0){ return false; } + public int getPrimaryError(){ return 0; } + public static int SSL_DATE_INVALID = 0; + public static int SSL_EXPIRED = 0; + public static int SSL_IDMISMATCH = 0; + public static int SSL_INVALID = 0; + public static int SSL_MAX_ERROR = 0; + public static int SSL_NOTYETVALID = 0; + public static int SSL_UNTRUSTED = 0; +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/print/PageRange.java b/java/ql/test/stubs/google-android-9.0.0/android/print/PageRange.java new file mode 100644 index 00000000000..7e8a182c81d --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/print/PageRange.java @@ -0,0 +1,21 @@ +// Generated automatically from android.print.PageRange for testing purposes + +package android.print; + +import android.os.Parcel; +import android.os.Parcelable; + +public class PageRange implements Parcelable +{ + protected PageRange() {} + public PageRange(int p0, int p1){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int describeContents(){ return 0; } + public int getEnd(){ return 0; } + public int getStart(){ return 0; } + public int hashCode(){ return 0; } + public static PageRange ALL_PAGES = null; + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/print/PrintAttributes.java b/java/ql/test/stubs/google-android-9.0.0/android/print/PrintAttributes.java new file mode 100644 index 00000000000..82578cf9f76 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/print/PrintAttributes.java @@ -0,0 +1,162 @@ +// Generated automatically from android.print.PrintAttributes for testing purposes + +package android.print; + +import android.content.pm.PackageManager; +import android.os.Parcel; +import android.os.Parcelable; + +public class PrintAttributes implements Parcelable +{ + public PrintAttributes.Margins getMinMargins(){ return null; } + public PrintAttributes.MediaSize getMediaSize(){ return null; } + public PrintAttributes.Resolution getResolution(){ return null; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int describeContents(){ return 0; } + public int getColorMode(){ return 0; } + public int getDuplexMode(){ return 0; } + public int hashCode(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static int COLOR_MODE_COLOR = 0; + public static int COLOR_MODE_MONOCHROME = 0; + public static int DUPLEX_MODE_LONG_EDGE = 0; + public static int DUPLEX_MODE_NONE = 0; + public static int DUPLEX_MODE_SHORT_EDGE = 0; + public void writeToParcel(Parcel p0, int p1){} + static public class Margins + { + protected Margins() {} + public Margins(int p0, int p1, int p2, int p3){} + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int getBottomMils(){ return 0; } + public int getLeftMils(){ return 0; } + public int getRightMils(){ return 0; } + public int getTopMils(){ return 0; } + public int hashCode(){ return 0; } + public static PrintAttributes.Margins NO_MARGINS = null; + } + static public class MediaSize + { + protected MediaSize() {} + public MediaSize(String p0, String p1, int p2, int p3){} + public PrintAttributes.MediaSize asLandscape(){ return null; } + public PrintAttributes.MediaSize asPortrait(){ return null; } + public String getId(){ return null; } + public String getLabel(PackageManager p0){ return null; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public boolean isPortrait(){ return false; } + public int getHeightMils(){ return 0; } + public int getWidthMils(){ return 0; } + public int hashCode(){ return 0; } + public static PrintAttributes.MediaSize ANSI_C = null; + public static PrintAttributes.MediaSize ANSI_D = null; + public static PrintAttributes.MediaSize ANSI_E = null; + public static PrintAttributes.MediaSize ANSI_F = null; + public static PrintAttributes.MediaSize ISO_A0 = null; + public static PrintAttributes.MediaSize ISO_A1 = null; + public static PrintAttributes.MediaSize ISO_A10 = null; + public static PrintAttributes.MediaSize ISO_A2 = null; + public static PrintAttributes.MediaSize ISO_A3 = null; + public static PrintAttributes.MediaSize ISO_A4 = null; + public static PrintAttributes.MediaSize ISO_A5 = null; + public static PrintAttributes.MediaSize ISO_A6 = null; + public static PrintAttributes.MediaSize ISO_A7 = null; + public static PrintAttributes.MediaSize ISO_A8 = null; + public static PrintAttributes.MediaSize ISO_A9 = null; + public static PrintAttributes.MediaSize ISO_B0 = null; + public static PrintAttributes.MediaSize ISO_B1 = null; + public static PrintAttributes.MediaSize ISO_B10 = null; + public static PrintAttributes.MediaSize ISO_B2 = null; + public static PrintAttributes.MediaSize ISO_B3 = null; + public static PrintAttributes.MediaSize ISO_B4 = null; + public static PrintAttributes.MediaSize ISO_B5 = null; + public static PrintAttributes.MediaSize ISO_B6 = null; + public static PrintAttributes.MediaSize ISO_B7 = null; + public static PrintAttributes.MediaSize ISO_B8 = null; + public static PrintAttributes.MediaSize ISO_B9 = null; + public static PrintAttributes.MediaSize ISO_C0 = null; + public static PrintAttributes.MediaSize ISO_C1 = null; + public static PrintAttributes.MediaSize ISO_C10 = null; + public static PrintAttributes.MediaSize ISO_C2 = null; + public static PrintAttributes.MediaSize ISO_C3 = null; + public static PrintAttributes.MediaSize ISO_C4 = null; + public static PrintAttributes.MediaSize ISO_C5 = null; + public static PrintAttributes.MediaSize ISO_C6 = null; + public static PrintAttributes.MediaSize ISO_C7 = null; + public static PrintAttributes.MediaSize ISO_C8 = null; + public static PrintAttributes.MediaSize ISO_C9 = null; + public static PrintAttributes.MediaSize JIS_B0 = null; + public static PrintAttributes.MediaSize JIS_B1 = null; + public static PrintAttributes.MediaSize JIS_B10 = null; + public static PrintAttributes.MediaSize JIS_B2 = null; + public static PrintAttributes.MediaSize JIS_B3 = null; + public static PrintAttributes.MediaSize JIS_B4 = null; + public static PrintAttributes.MediaSize JIS_B5 = null; + public static PrintAttributes.MediaSize JIS_B6 = null; + public static PrintAttributes.MediaSize JIS_B7 = null; + public static PrintAttributes.MediaSize JIS_B8 = null; + public static PrintAttributes.MediaSize JIS_B9 = null; + public static PrintAttributes.MediaSize JIS_EXEC = null; + public static PrintAttributes.MediaSize JPN_CHOU2 = null; + public static PrintAttributes.MediaSize JPN_CHOU3 = null; + public static PrintAttributes.MediaSize JPN_CHOU4 = null; + public static PrintAttributes.MediaSize JPN_HAGAKI = null; + public static PrintAttributes.MediaSize JPN_KAHU = null; + public static PrintAttributes.MediaSize JPN_KAKU2 = null; + public static PrintAttributes.MediaSize JPN_OE_PHOTO_L = null; + public static PrintAttributes.MediaSize JPN_OUFUKU = null; + public static PrintAttributes.MediaSize JPN_YOU4 = null; + public static PrintAttributes.MediaSize NA_ARCH_A = null; + public static PrintAttributes.MediaSize NA_ARCH_B = null; + public static PrintAttributes.MediaSize NA_ARCH_C = null; + public static PrintAttributes.MediaSize NA_ARCH_D = null; + public static PrintAttributes.MediaSize NA_ARCH_E = null; + public static PrintAttributes.MediaSize NA_ARCH_E1 = null; + public static PrintAttributes.MediaSize NA_FOOLSCAP = null; + public static PrintAttributes.MediaSize NA_GOVT_LETTER = null; + public static PrintAttributes.MediaSize NA_INDEX_3X5 = null; + public static PrintAttributes.MediaSize NA_INDEX_4X6 = null; + public static PrintAttributes.MediaSize NA_INDEX_5X8 = null; + public static PrintAttributes.MediaSize NA_JUNIOR_LEGAL = null; + public static PrintAttributes.MediaSize NA_LEDGER = null; + public static PrintAttributes.MediaSize NA_LEGAL = null; + public static PrintAttributes.MediaSize NA_LETTER = null; + public static PrintAttributes.MediaSize NA_MONARCH = null; + public static PrintAttributes.MediaSize NA_QUARTO = null; + public static PrintAttributes.MediaSize NA_SUPER_B = null; + public static PrintAttributes.MediaSize NA_TABLOID = null; + public static PrintAttributes.MediaSize OM_DAI_PA_KAI = null; + public static PrintAttributes.MediaSize OM_JUURO_KU_KAI = null; + public static PrintAttributes.MediaSize OM_PA_KAI = null; + public static PrintAttributes.MediaSize PRC_1 = null; + public static PrintAttributes.MediaSize PRC_10 = null; + public static PrintAttributes.MediaSize PRC_16K = null; + public static PrintAttributes.MediaSize PRC_2 = null; + public static PrintAttributes.MediaSize PRC_3 = null; + public static PrintAttributes.MediaSize PRC_4 = null; + public static PrintAttributes.MediaSize PRC_5 = null; + public static PrintAttributes.MediaSize PRC_6 = null; + public static PrintAttributes.MediaSize PRC_7 = null; + public static PrintAttributes.MediaSize PRC_8 = null; + public static PrintAttributes.MediaSize PRC_9 = null; + public static PrintAttributes.MediaSize ROC_16K = null; + public static PrintAttributes.MediaSize ROC_8K = null; + public static PrintAttributes.MediaSize UNKNOWN_LANDSCAPE = null; + public static PrintAttributes.MediaSize UNKNOWN_PORTRAIT = null; + } + static public class Resolution + { + protected Resolution() {} + public Resolution(String p0, String p1, int p2, int p3){} + public String getId(){ return null; } + public String getLabel(){ return null; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int getHorizontalDpi(){ return 0; } + public int getVerticalDpi(){ return 0; } + public int hashCode(){ return 0; } + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentAdapter.java b/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentAdapter.java new file mode 100644 index 00000000000..bee84a4361f --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentAdapter.java @@ -0,0 +1,32 @@ +// Generated automatically from android.print.PrintDocumentAdapter for testing purposes + +package android.print; + +import android.os.Bundle; +import android.os.CancellationSignal; +import android.os.ParcelFileDescriptor; +import android.print.PageRange; +import android.print.PrintAttributes; +import android.print.PrintDocumentInfo; + +abstract public class PrintDocumentAdapter +{ + abstract static public class LayoutResultCallback + { + public void onLayoutCancelled(){} + public void onLayoutFailed(CharSequence p0){} + public void onLayoutFinished(PrintDocumentInfo p0, boolean p1){} + } + abstract static public class WriteResultCallback + { + public void onWriteCancelled(){} + public void onWriteFailed(CharSequence p0){} + public void onWriteFinished(PageRange[] p0){} + } + public PrintDocumentAdapter(){} + public abstract void onLayout(PrintAttributes p0, PrintAttributes p1, CancellationSignal p2, PrintDocumentAdapter.LayoutResultCallback p3, Bundle p4); + public abstract void onWrite(PageRange[] p0, ParcelFileDescriptor p1, CancellationSignal p2, PrintDocumentAdapter.WriteResultCallback p3); + public static String EXTRA_PRINT_PREVIEW = null; + public void onFinish(){} + public void onStart(){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentInfo.java b/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentInfo.java new file mode 100644 index 00000000000..bc42c86d4f2 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentInfo.java @@ -0,0 +1,25 @@ +// Generated automatically from android.print.PrintDocumentInfo for testing purposes + +package android.print; + +import android.os.Parcel; +import android.os.Parcelable; + +public class PrintDocumentInfo implements Parcelable +{ + protected PrintDocumentInfo() {} + public String getName(){ return null; } + public String toString(){ return null; } + public boolean equals(Object p0){ return false; } + public int describeContents(){ return 0; } + public int getContentType(){ return 0; } + public int getPageCount(){ return 0; } + public int hashCode(){ return 0; } + public long getDataSize(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public static int CONTENT_TYPE_DOCUMENT = 0; + public static int CONTENT_TYPE_PHOTO = 0; + public static int CONTENT_TYPE_UNKNOWN = 0; + public static int PAGE_COUNT_UNKNOWN = 0; + public void writeToParcel(Parcel p0, int p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLinks.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLinks.java index 597d751996e..1e36d672717 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLinks.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLinks.java @@ -3,11 +3,14 @@ package android.view.textclassifier; import android.os.Bundle; +import android.os.LocaleList; import android.os.Parcel; import android.os.Parcelable; import android.text.Spannable; import android.text.style.ClickableSpan; import android.view.View; +import android.view.textclassifier.TextClassifier; +import java.time.ZonedDateTime; import java.util.Collection; import java.util.function.Function; @@ -29,6 +32,19 @@ public class TextLinks implements Parcelable public static int STATUS_NO_LINKS_FOUND = 0; public static int STATUS_UNSUPPORTED_CHARACTER = 0; public void writeToParcel(Parcel p0, int p1){} + static public class Request implements Parcelable + { + protected Request() {} + public Bundle getExtras(){ return null; } + public CharSequence getText(){ return null; } + public LocaleList getDefaultLocales(){ return null; } + public String getCallingPackageName(){ return null; } + public TextClassifier.EntityConfig getEntityConfig(){ return null; } + public ZonedDateTime getReferenceTime(){ return null; } + public int describeContents(){ return 0; } + public static Parcelable.Creator CREATOR = null; + public void writeToParcel(Parcel p0, int p1){} + } static public class TextLink implements Parcelable { protected TextLink() {} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/ClientCertRequest.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/ClientCertRequest.java new file mode 100644 index 00000000000..0af0587e29d --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/ClientCertRequest.java @@ -0,0 +1,19 @@ +// Generated automatically from android.webkit.ClientCertRequest for testing purposes + +package android.webkit; + +import java.security.Principal; +import java.security.PrivateKey; +import java.security.cert.X509Certificate; + +abstract public class ClientCertRequest +{ + public ClientCertRequest(){} + public abstract Principal[] getPrincipals(); + public abstract String getHost(); + public abstract String[] getKeyTypes(); + public abstract int getPort(); + public abstract void cancel(); + public abstract void ignore(); + public abstract void proceed(PrivateKey p0, X509Certificate[] p1); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/ConsoleMessage.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/ConsoleMessage.java new file mode 100644 index 00000000000..9b50c6f7e6e --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/ConsoleMessage.java @@ -0,0 +1,19 @@ +// Generated automatically from android.webkit.ConsoleMessage for testing purposes + +package android.webkit; + + +public class ConsoleMessage +{ + protected ConsoleMessage() {} + public ConsoleMessage(String p0, String p1, int p2, ConsoleMessage.MessageLevel p3){} + public ConsoleMessage.MessageLevel messageLevel(){ return null; } + public String message(){ return null; } + public String sourceId(){ return null; } + public int lineNumber(){ return 0; } + static public enum MessageLevel + { + DEBUG, ERROR, LOG, TIP, WARNING; + private MessageLevel() {} + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/DownloadListener.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/DownloadListener.java new file mode 100644 index 00000000000..2620faf369c --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/DownloadListener.java @@ -0,0 +1,9 @@ +// Generated automatically from android.webkit.DownloadListener for testing purposes + +package android.webkit; + + +public interface DownloadListener +{ + void onDownloadStart(String p0, String p1, String p2, String p3, long p4); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/GeolocationPermissions.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/GeolocationPermissions.java new file mode 100644 index 00000000000..8edb6b2f3dd --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/GeolocationPermissions.java @@ -0,0 +1,20 @@ +// Generated automatically from android.webkit.GeolocationPermissions for testing purposes + +package android.webkit; + +import android.webkit.ValueCallback; +import java.util.Set; + +public class GeolocationPermissions +{ + public static GeolocationPermissions getInstance(){ return null; } + public void allow(String p0){} + public void clear(String p0){} + public void clearAll(){} + public void getAllowed(String p0, ValueCallback p1){} + public void getOrigins(ValueCallback> p0){} + static public interface Callback + { + void invoke(String p0, boolean p1, boolean p2); + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/HttpAuthHandler.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/HttpAuthHandler.java new file mode 100644 index 00000000000..c2bde7e3ffc --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/HttpAuthHandler.java @@ -0,0 +1,12 @@ +// Generated automatically from android.webkit.HttpAuthHandler for testing purposes + +package android.webkit; + +import android.os.Handler; + +public class HttpAuthHandler extends Handler +{ + public boolean useHttpAuthUsernamePassword(){ return false; } + public void cancel(){} + public void proceed(String p0, String p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsPromptResult.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsPromptResult.java new file mode 100644 index 00000000000..835d76105a0 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsPromptResult.java @@ -0,0 +1,10 @@ +// Generated automatically from android.webkit.JsPromptResult for testing purposes + +package android.webkit; + +import android.webkit.JsResult; + +public class JsPromptResult extends JsResult +{ + public void confirm(String p0){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsResult.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsResult.java new file mode 100644 index 00000000000..c8168438130 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsResult.java @@ -0,0 +1,10 @@ +// Generated automatically from android.webkit.JsResult for testing purposes + +package android.webkit; + + +public class JsResult +{ + public final void cancel(){} + public final void confirm(){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/PermissionRequest.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/PermissionRequest.java new file mode 100644 index 00000000000..da64b442084 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/PermissionRequest.java @@ -0,0 +1,18 @@ +// Generated automatically from android.webkit.PermissionRequest for testing purposes + +package android.webkit; + +import android.net.Uri; + +abstract public class PermissionRequest +{ + public PermissionRequest(){} + public abstract String[] getResources(); + public abstract Uri getOrigin(); + public abstract void deny(); + public abstract void grant(String[] p0); + public static String RESOURCE_AUDIO_CAPTURE = null; + public static String RESOURCE_MIDI_SYSEX = null; + public static String RESOURCE_PROTECTED_MEDIA_ID = null; + public static String RESOURCE_VIDEO_CAPTURE = null; +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/RenderProcessGoneDetail.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/RenderProcessGoneDetail.java new file mode 100644 index 00000000000..1e2086fdf3b --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/RenderProcessGoneDetail.java @@ -0,0 +1,11 @@ +// Generated automatically from android.webkit.RenderProcessGoneDetail for testing purposes + +package android.webkit; + + +abstract public class RenderProcessGoneDetail +{ + public RenderProcessGoneDetail(){} + public abstract boolean didCrash(); + public abstract int rendererPriorityAtExit(); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/SafeBrowsingResponse.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/SafeBrowsingResponse.java new file mode 100644 index 00000000000..751d7e76530 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/SafeBrowsingResponse.java @@ -0,0 +1,12 @@ +// Generated automatically from android.webkit.SafeBrowsingResponse for testing purposes + +package android.webkit; + + +abstract public class SafeBrowsingResponse +{ + public SafeBrowsingResponse(){} + public abstract void backToSafety(boolean p0); + public abstract void proceed(boolean p0); + public abstract void showInterstitial(boolean p0); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/SslErrorHandler.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/SslErrorHandler.java new file mode 100644 index 00000000000..ab56fed23fa --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/SslErrorHandler.java @@ -0,0 +1,11 @@ +// Generated automatically from android.webkit.SslErrorHandler for testing purposes + +package android.webkit; + +import android.os.Handler; + +public class SslErrorHandler extends Handler +{ + public void cancel(){} + public void proceed(){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/ValueCallback.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/ValueCallback.java new file mode 100644 index 00000000000..0cdf8831825 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/ValueCallback.java @@ -0,0 +1,9 @@ +// Generated automatically from android.webkit.ValueCallback for testing purposes + +package android.webkit; + + +public interface ValueCallback +{ + void onReceiveValue(T p0); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebBackForwardList.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebBackForwardList.java new file mode 100644 index 00000000000..4fe7956b562 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebBackForwardList.java @@ -0,0 +1,16 @@ +// Generated automatically from android.webkit.WebBackForwardList for testing purposes + +package android.webkit; + +import android.webkit.WebHistoryItem; +import java.io.Serializable; + +abstract public class WebBackForwardList implements Cloneable, Serializable +{ + protected abstract WebBackForwardList clone(); + public WebBackForwardList(){} + public abstract WebHistoryItem getCurrentItem(); + public abstract WebHistoryItem getItemAtIndex(int p0); + public abstract int getCurrentIndex(); + public abstract int getSize(); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebChromeClient.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebChromeClient.java new file mode 100644 index 00000000000..75b1f938d2d --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebChromeClient.java @@ -0,0 +1,67 @@ +// Generated automatically from android.webkit.WebChromeClient for testing purposes + +package android.webkit; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Message; +import android.view.View; +import android.webkit.ConsoleMessage; +import android.webkit.GeolocationPermissions; +import android.webkit.JsPromptResult; +import android.webkit.JsResult; +import android.webkit.PermissionRequest; +import android.webkit.ValueCallback; +import android.webkit.WebStorage; +import android.webkit.WebView; + +public class WebChromeClient +{ + abstract static public class FileChooserParams + { + public FileChooserParams(){} + public abstract CharSequence getTitle(); + public abstract Intent createIntent(); + public abstract String getFilenameHint(); + public abstract String[] getAcceptTypes(); + public abstract boolean isCaptureEnabled(); + public abstract int getMode(); + public static Uri[] parseResult(int p0, Intent p1){ return null; } + public static int MODE_OPEN = 0; + public static int MODE_OPEN_MULTIPLE = 0; + public static int MODE_SAVE = 0; + } + public Bitmap getDefaultVideoPoster(){ return null; } + public View getVideoLoadingProgressView(){ return null; } + public WebChromeClient(){} + public boolean onConsoleMessage(ConsoleMessage p0){ return false; } + public boolean onCreateWindow(WebView p0, boolean p1, boolean p2, Message p3){ return false; } + public boolean onJsAlert(WebView p0, String p1, String p2, JsResult p3){ return false; } + public boolean onJsBeforeUnload(WebView p0, String p1, String p2, JsResult p3){ return false; } + public boolean onJsConfirm(WebView p0, String p1, String p2, JsResult p3){ return false; } + public boolean onJsPrompt(WebView p0, String p1, String p2, String p3, JsPromptResult p4){ return false; } + public boolean onJsTimeout(){ return false; } + public boolean onShowFileChooser(WebView p0, ValueCallback p1, WebChromeClient.FileChooserParams p2){ return false; } + public void getVisitedHistory(ValueCallback p0){} + public void onCloseWindow(WebView p0){} + public void onConsoleMessage(String p0, int p1, String p2){} + public void onExceededDatabaseQuota(String p0, String p1, long p2, long p3, long p4, WebStorage.QuotaUpdater p5){} + public void onGeolocationPermissionsHidePrompt(){} + public void onGeolocationPermissionsShowPrompt(String p0, GeolocationPermissions.Callback p1){} + public void onHideCustomView(){} + public void onPermissionRequest(PermissionRequest p0){} + public void onPermissionRequestCanceled(PermissionRequest p0){} + public void onProgressChanged(WebView p0, int p1){} + public void onReachedMaxAppCacheSize(long p0, long p1, WebStorage.QuotaUpdater p2){} + public void onReceivedIcon(WebView p0, Bitmap p1){} + public void onReceivedTitle(WebView p0, String p1){} + public void onReceivedTouchIconUrl(WebView p0, String p1, boolean p2){} + public void onRequestFocus(WebView p0){} + public void onShowCustomView(View p0, WebChromeClient.CustomViewCallback p1){} + public void onShowCustomView(View p0, int p1, WebChromeClient.CustomViewCallback p2){} + static public interface CustomViewCallback + { + void onCustomViewHidden(); + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebHistoryItem.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebHistoryItem.java new file mode 100644 index 00000000000..637467d888f --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebHistoryItem.java @@ -0,0 +1,15 @@ +// Generated automatically from android.webkit.WebHistoryItem for testing purposes + +package android.webkit; + +import android.graphics.Bitmap; + +abstract public class WebHistoryItem implements Cloneable +{ + protected abstract WebHistoryItem clone(); + public WebHistoryItem(){} + public abstract Bitmap getFavicon(); + public abstract String getOriginalUrl(); + public abstract String getTitle(); + public abstract String getUrl(); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessage.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessage.java new file mode 100644 index 00000000000..6e02214c1df --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessage.java @@ -0,0 +1,14 @@ +// Generated automatically from android.webkit.WebMessage for testing purposes + +package android.webkit; + +import android.webkit.WebMessagePort; + +public class WebMessage +{ + protected WebMessage() {} + public String getData(){ return null; } + public WebMessage(String p0){} + public WebMessage(String p0, WebMessagePort[] p1){} + public WebMessagePort[] getPorts(){ return null; } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessagePort.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessagePort.java new file mode 100644 index 00000000000..05ece05e0a3 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessagePort.java @@ -0,0 +1,19 @@ +// Generated automatically from android.webkit.WebMessagePort for testing purposes + +package android.webkit; + +import android.os.Handler; +import android.webkit.WebMessage; + +abstract public class WebMessagePort +{ + abstract static public class WebMessageCallback + { + public WebMessageCallback(){} + public void onMessage(WebMessagePort p0, WebMessage p1){} + } + public abstract void close(); + public abstract void postMessage(WebMessage p0); + public abstract void setWebMessageCallback(WebMessagePort.WebMessageCallback p0); + public abstract void setWebMessageCallback(WebMessagePort.WebMessageCallback p0, Handler p1); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceError.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceError.java new file mode 100644 index 00000000000..115aaff3dec --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceError.java @@ -0,0 +1,10 @@ +// Generated automatically from android.webkit.WebResourceError for testing purposes + +package android.webkit; + + +abstract public class WebResourceError +{ + public abstract CharSequence getDescription(); + public abstract int getErrorCode(); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceRequest.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceRequest.java index 9732ca67ae0..7a195a1518a 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceRequest.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceRequest.java @@ -1,72 +1,16 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Generated automatically from android.webkit.WebResourceRequest for testing purposes + package android.webkit; import android.net.Uri; import java.util.Map; -/** - * Encompasses parameters to the {@link WebViewClient#shouldInterceptRequest} - * method. - */ -public interface WebResourceRequest { - /** - * Gets the URL for which the resource request was made. - * - * @return the URL for which the resource request was made. - */ - Uri getUrl(); - - /** - * Gets whether the request was made for the main frame. - * - * @return whether the request was made for the main frame. Will be - * {@code false} for iframes, for example. - */ - boolean isForMainFrame(); - - /** - * Gets whether the request was a result of a server-side redirect. - * - * @return whether the request was a result of a server-side redirect. - */ - boolean isRedirect(); - - /** - * Gets whether a gesture (such as a click) was associated with the request. For - * security reasons in certain situations this method may return {@code false} - * even though the sequence of events which caused the request to be created was - * initiated by a user gesture. - * - * @return whether a gesture was associated with the request. - */ - boolean hasGesture(); - - /** - * Gets the method associated with the request, for example "GET". - * - * @return the method associated with the request. - */ - String getMethod(); - - /** - * Gets the headers associated with the request. These are represented as a - * mapping of header name to header value. - * - * @return the headers associated with the request. - */ +public interface WebResourceRequest +{ Map getRequestHeaders(); -} \ No newline at end of file + String getMethod(); + Uri getUrl(); + boolean hasGesture(); + boolean isForMainFrame(); + boolean isRedirect(); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java index 1a2ff3cc1da..9e0e0225644 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java @@ -1,173 +1,24 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Generated automatically from android.webkit.WebResourceResponse for testing purposes + package android.webkit; import java.io.InputStream; import java.util.Map; -/** - * Encapsulates a resource response. Applications can return an instance of this - * class from {@link WebViewClient#shouldInterceptRequest} to provide a custom - * response when the WebView requests a particular resource. - */ -public class WebResourceResponse { - /** - * Constructs a resource response with the given MIME type, encoding, and input - * stream. Callers must implement {@link InputStream#read(byte[]) - * InputStream.read(byte[])} for the input stream. - * - * @param mimeType the resource response's MIME type, for example text/html - * @param encoding the resource response's encoding - * @param data the input stream that provides the resource response's data. - * Must not be a StringBufferInputStream. - */ - public WebResourceResponse(String mimeType, String encoding, InputStream data) { - } - - /** - * Constructs a resource response with the given parameters. Callers must - * implement {@link InputStream#read(byte[]) InputStream.read(byte[])} for the - * input stream. - * - * @param mimeType the resource response's MIME type, for example - * text/html - * @param encoding the resource response's encoding - * @param statusCode the status code needs to be in the ranges [100, 299], - * [400, 599]. Causing a redirect by specifying a 3xx - * code is not supported. - * @param reasonPhrase the phrase describing the status code, for example - * "OK". Must be non-empty. - * @param responseHeaders the resource response's headers represented as a - * mapping of header name -> header value. - * @param data the input stream that provides the resource response's - * data. Must not be a StringBufferInputStream. - */ - public WebResourceResponse(String mimeType, String encoding, int statusCode, String reasonPhrase, - Map responseHeaders, InputStream data) { - } - - /** - * Sets the resource response's MIME type, for example "text/html". - * - * @param mimeType The resource response's MIME type - */ - public void setMimeType(String mimeType) { - } - - /** - * Gets the resource response's MIME type. - * - * @return The resource response's MIME type - */ - public String getMimeType() { - return null; - } - - /** - * Sets the resource response's encoding, for example "UTF-8". This is - * used to decode the data from the input stream. - * - * @param encoding The resource response's encoding - */ - public void setEncoding(String encoding) { - } - - /** - * Gets the resource response's encoding. - * - * @return The resource response's encoding - */ - public String getEncoding() { - return null; - } - - /** - * Sets the resource response's status code and reason phrase. - * - * @param statusCode the status code needs to be in the ranges [100, 299], - * [400, 599]. Causing a redirect by specifying a 3xx code - * is not supported. - * @param reasonPhrase the phrase describing the status code, for example "OK". - * Must be non-empty. - */ - public void setStatusCodeAndReasonPhrase(int statusCode, String reasonPhrase) { - } - - /** - * Gets the resource response's status code. - * - * @return The resource response's status code. - */ - public int getStatusCode() { - return -1; - } - - /** - * Gets the description of the resource response's status code. - * - * @return The description of the resource response's status code. - */ - public String getReasonPhrase() { - return null; - } - - /** - * Sets the headers for the resource response. - * - * @param headers Mapping of header name -> header value. - */ - public void setResponseHeaders(Map headers) { - } - - /** - * Gets the headers for the resource response. - * - * @return The headers for the resource response. - */ - public Map getResponseHeaders() { - return null; - } - - /** - * Sets the input stream that provides the resource response's data. Callers - * must implement {@link InputStream#read(byte[]) InputStream.read(byte[])}. - * - * @param data the input stream that provides the resource response's data. Must - * not be a StringBufferInputStream. - */ - public void setData(InputStream data) { - } - - /** - * Gets the input stream that provides the resource response's data. - * - * @return The input stream that provides the resource response's data - */ - public InputStream getData() { - return null; - } - - /** - * The internal version of the constructor that doesn't perform arguments - * checks. - * - * @hide - */ - public WebResourceResponse(boolean immutable, String mimeType, String encoding, int statusCode, String reasonPhrase, - Map responseHeaders, InputStream data) { - } - -} \ No newline at end of file +public class WebResourceResponse +{ + protected WebResourceResponse() {} + public InputStream getData(){ return null; } + public Map getResponseHeaders(){ return null; } + public String getEncoding(){ return null; } + public String getMimeType(){ return null; } + public String getReasonPhrase(){ return null; } + public WebResourceResponse(String p0, String p1, InputStream p2){} + public WebResourceResponse(String p0, String p1, int p2, String p3, Map p4, InputStream p5){} + public int getStatusCode(){ return 0; } + public void setData(InputStream p0){} + public void setEncoding(String p0){} + public void setMimeType(String p0){} + public void setResponseHeaders(Map p0){} + public void setStatusCodeAndReasonPhrase(int p0, String p1){} +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java index 33c9a1b8a57..60d01fe2b97 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java @@ -1,1379 +1,150 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Generated automatically from android.webkit.WebSettings for testing purposes + package android.webkit; -import java.net.CookieManager; import android.content.Context; -/** - * Manages settings state for a WebView. When a WebView is first created, it - * obtains a set of default settings. These default settings will be returned - * from any getter call. A {@code WebSettings} object obtained from - * {@link WebView#getSettings()} is tied to the life of the WebView. If a - * WebView has been destroyed, any method call on {@code WebSettings} will throw - * an {@link IllegalStateException}. - */ -// This is an abstract base class: concrete WebViewProviders must -// create a class derived from this, and return an instance of it in the -// WebViewProvider.getWebSettingsProvider() method implementation. -public abstract class WebSettings { - /** - * Enum for controlling the layout of html. - *
      - *
    • {@code NORMAL} means no rendering changes. This is the recommended choice - * for maximum compatibility across different platforms and Android - * versions.
    • - *
    • {@code SINGLE_COLUMN} moves all content into one column that is the width - * of the view.
    • - *
    • {@code NARROW_COLUMNS} makes all columns no wider than the screen if - * possible. Only use this for API levels prior to - * {@link android.os.Build.VERSION_CODES#KITKAT}.
    • - *
    • {@code TEXT_AUTOSIZING} boosts font size of paragraphs based on - * heuristics to make the text readable when viewing a wide-viewport layout in - * the overview mode. It is recommended to enable zoom support - * {@link #setSupportZoom} when using this mode. Supported from API level - * {@link android.os.Build.VERSION_CODES#KITKAT}
    • - *
    - */ - // XXX: These must match LayoutAlgorithm in Settings.h in WebCore. - public enum LayoutAlgorithm { - NORMAL, - /** - * @deprecated This algorithm is now obsolete. - */ - @Deprecated - SINGLE_COLUMN, - /** - * @deprecated This algorithm is now obsolete. - */ - @Deprecated - NARROW_COLUMNS, TEXT_AUTOSIZING - } - - /** - * Enum for specifying the text size. - *
      - *
    • SMALLEST is 50%
    • - *
    • SMALLER is 75%
    • - *
    • NORMAL is 100%
    • - *
    • LARGER is 150%
    • - *
    • LARGEST is 200%
    • - *
    - * - * @deprecated Use {@link WebSettings#setTextZoom(int)} and - * {@link WebSettings#getTextZoom()} instead. - */ - @Deprecated - public enum TextSize { - SMALLEST(50), SMALLER(75), NORMAL(100), LARGER(150), LARGEST(200); - - TextSize(int size) { - value = size; - } - - int value; - } - - /** - * Enum for specifying the WebView's desired density. - *
      - *
    • {@code FAR} makes 100% looking like in 240dpi
    • - *
    • {@code MEDIUM} makes 100% looking like in 160dpi
    • - *
    • {@code CLOSE} makes 100% looking like in 120dpi
    • - *
    - */ - public enum ZoomDensity { - FAR(150), // 240dpi - MEDIUM(100), // 160dpi - CLOSE(75); // 120dpi - - ZoomDensity(int size) { - value = size; - } - - /** - * @hide Only for use by WebViewProvider implementations - */ - public int getValue() { - return value; - } - - int value; - } - - public @interface CacheMode { - } - - /** - * Default cache usage mode. If the navigation type doesn't impose any specific - * behavior, use cached resources when they are available and not expired, - * otherwise load resources from the network. Use with {@link #setCacheMode}. - */ - public static final int LOAD_DEFAULT = -1; - /** - * Normal cache usage mode. Use with {@link #setCacheMode}. - * - * @deprecated This value is obsolete, as from API level - * {@link android.os.Build.VERSION_CODES#HONEYCOMB} and onwards it - * has the same effect as {@link #LOAD_DEFAULT}. - */ - @Deprecated - public static final int LOAD_NORMAL = 0; - /** - * Use cached resources when they are available, even if they have expired. - * Otherwise load resources from the network. Use with {@link #setCacheMode}. - */ - public static final int LOAD_CACHE_ELSE_NETWORK = 1; - /** - * Don't use the cache, load from the network. Use with {@link #setCacheMode}. - */ - public static final int LOAD_NO_CACHE = 2; - /** - * Don't use the network, load from the cache. Use with {@link #setCacheMode}. - */ - public static final int LOAD_CACHE_ONLY = 3; - - public enum RenderPriority { - NORMAL, HIGH, LOW - } - - /** - * The plugin state effects how plugins are treated on a page. ON means that any - * object will be loaded even if a plugin does not exist to handle the content. - * ON_DEMAND means that if there is a plugin installed that can handle the - * content, a placeholder is shown until the user clicks on the placeholder. - * Once clicked, the plugin will be enabled on the page. OFF means that all - * plugins will be turned off and any fallback content will be used. - */ - public enum PluginState { - ON, ON_DEMAND, OFF - } - - /** - * Used with {@link #setMixedContentMode} - * - * In this mode, the WebView will allow a secure origin to load content from any - * other origin, even if that origin is insecure. This is the least secure mode - * of operation for the WebView, and where possible apps should not set this - * mode. - */ - public static final int MIXED_CONTENT_ALWAYS_ALLOW = 0; - /** - * Used with {@link #setMixedContentMode} - * - * In this mode, the WebView will not allow a secure origin to load content from - * an insecure origin. This is the preferred and most secure mode of operation - * for the WebView and apps are strongly advised to use this mode. - */ - public static final int MIXED_CONTENT_NEVER_ALLOW = 1; - /** - * Used with {@link #setMixedContentMode} - * - * In this mode, the WebView will attempt to be compatible with the approach of - * a modern web browser with regard to mixed content. Some insecure content may - * be allowed to be loaded by a secure origin and other types of content will be - * blocked. The types of content are allowed or blocked may change release to - * release and are not explicitly defined. - * - * This mode is intended to be used by apps that are not in control of the - * content that they render but desire to operate in a reasonably secure - * environment. For highest security, apps are recommended to use - * {@link #MIXED_CONTENT_NEVER_ALLOW}. - */ - public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2; - - /** - * Enables dumping the pages navigation cache to a text file. The default is - * {@code false}. - * - * @deprecated This method is now obsolete. - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} - */ - @Deprecated - public abstract void setNavDump(boolean enabled); - - /** - * Gets whether dumping the navigation cache is enabled. - * - * @return whether dumping the navigation cache is enabled - * @see #setNavDump - * @deprecated This method is now obsolete. - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} - */ - @Deprecated - public abstract boolean getNavDump(); - - /** - * Sets whether the WebView should support zooming using its on-screen zoom - * controls and gestures. The particular zoom mechanisms that should be used can - * be set with {@link #setBuiltInZoomControls}. This setting does not affect - * zooming performed using the {@link WebView#zoomIn()} and - * {@link WebView#zoomOut()} methods. The default is {@code true}. - * - * @param support whether the WebView should support zoom - */ - public abstract void setSupportZoom(boolean support); - - /** - * Gets whether the WebView supports zoom. - * - * @return {@code true} if the WebView supports zoom - * @see #setSupportZoom - */ - public abstract boolean supportZoom(); - - /** - * Sets whether the WebView requires a user gesture to play media. The default - * is {@code true}. - * - * @param require whether the WebView requires a user gesture to play media - */ - public abstract void setMediaPlaybackRequiresUserGesture(boolean require); - - /** - * Gets whether the WebView requires a user gesture to play media. - * - * @return {@code true} if the WebView requires a user gesture to play media - * @see #setMediaPlaybackRequiresUserGesture - */ - public abstract boolean getMediaPlaybackRequiresUserGesture(); - - /** - * Sets whether the WebView should use its built-in zoom mechanisms. The - * built-in zoom mechanisms comprise on-screen zoom controls, which are - * displayed over the WebView's content, and the use of a pinch gesture to - * control zooming. Whether or not these on-screen controls are displayed can be - * set with {@link #setDisplayZoomControls}. The default is {@code false}. - *

    - * The built-in mechanisms are the only currently supported zoom mechanisms, so - * it is recommended that this setting is always enabled. - * - * @param enabled whether the WebView should use its built-in zoom mechanisms - */ - // This method was intended to select between the built-in zoom mechanisms - // and the separate zoom controls. The latter were obtained using - // {@link WebView#getZoomControls}, which is now hidden. - public abstract void setBuiltInZoomControls(boolean enabled); - - /** - * Gets whether the zoom mechanisms built into WebView are being used. - * - * @return {@code true} if the zoom mechanisms built into WebView are being used - * @see #setBuiltInZoomControls - */ - public abstract boolean getBuiltInZoomControls(); - - /** - * Sets whether the WebView should display on-screen zoom controls when using - * the built-in zoom mechanisms. See {@link #setBuiltInZoomControls}. The - * default is {@code true}. - * - * @param enabled whether the WebView should display on-screen zoom controls - */ - public abstract void setDisplayZoomControls(boolean enabled); - - /** - * Gets whether the WebView displays on-screen zoom controls when using the - * built-in zoom mechanisms. - * - * @return {@code true} if the WebView displays on-screen zoom controls when - * using the built-in zoom mechanisms - * @see #setDisplayZoomControls - */ - public abstract boolean getDisplayZoomControls(); - - /** - * Enables or disables file access within WebView. File access is enabled by - * default. Note that this enables or disables file system access only. Assets - * and resources are still accessible using file:///android_asset and - * file:///android_res. - */ - public abstract void setAllowFileAccess(boolean allow); - - /** - * Gets whether this WebView supports file access. - * - * @see #setAllowFileAccess - */ - public abstract boolean getAllowFileAccess(); - - /** - * Enables or disables content URL access within WebView. Content URL access - * allows WebView to load content from a content provider installed in the - * system. The default is enabled. - */ - public abstract void setAllowContentAccess(boolean allow); - - /** - * Gets whether this WebView supports content URL access. - * - * @see #setAllowContentAccess - */ - public abstract boolean getAllowContentAccess(); - - /** - * Sets whether the WebView loads pages in overview mode, that is, zooms out the - * content to fit on screen by width. This setting is taken into account when - * the content width is greater than the width of the WebView control, for - * example, when {@link #getUseWideViewPort} is enabled. The default is - * {@code false}. - */ - public abstract void setLoadWithOverviewMode(boolean overview); - - /** - * Gets whether this WebView loads pages in overview mode. - * - * @return whether this WebView loads pages in overview mode - * @see #setLoadWithOverviewMode - */ - public abstract boolean getLoadWithOverviewMode(); - - /** - * Sets whether the WebView will enable smooth transition while panning or - * zooming or while the window hosting the WebView does not have focus. If it is - * {@code true}, WebView will choose a solution to maximize the performance. - * e.g. the WebView's content may not be updated during the transition. If it is - * false, WebView will keep its fidelity. The default value is {@code false}. - * - * @deprecated This method is now obsolete, and will become a no-op in future. - */ - @Deprecated - public abstract void setEnableSmoothTransition(boolean enable); - - /** - * Gets whether the WebView enables smooth transition while panning or zooming. - * - * @see #setEnableSmoothTransition - * - * @deprecated This method is now obsolete, and will become a no-op in future. - */ - @Deprecated - public abstract boolean enableSmoothTransition(); - - /** - * Sets whether the WebView uses its background for over scroll background. If - * {@code true}, it will use the WebView's background. If {@code false}, it will - * use an internal pattern. Default is {@code true}. - * - * @deprecated This method is now obsolete. - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} - */ - @Deprecated - public abstract void setUseWebViewBackgroundForOverscrollBackground(boolean view); - - /** - * Gets whether this WebView uses WebView's background instead of internal - * pattern for over scroll background. - * - * @see #setUseWebViewBackgroundForOverscrollBackground - * @deprecated This method is now obsolete. - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} - */ - @Deprecated - public abstract boolean getUseWebViewBackgroundForOverscrollBackground(); - - /** - * Sets whether the WebView should save form data. In Android O, the platform - * has implemented a fully functional Autofill feature to store form data. - * Therefore, the Webview form data save feature is disabled. - * - * Note that the feature will continue to be supported on older versions of - * Android as before. - * - * This function does not have any effect. - */ - @Deprecated - public abstract void setSaveFormData(boolean save); - - /** - * Gets whether the WebView saves form data. - * - * @return whether the WebView saves form data - * @see #setSaveFormData - */ - @Deprecated - public abstract boolean getSaveFormData(); - - /** - * Sets whether the WebView should save passwords. The default is {@code true}. - * - * @deprecated Saving passwords in WebView will not be supported in future - * versions. - */ - @Deprecated - public abstract void setSavePassword(boolean save); - - /** - * Gets whether the WebView saves passwords. - * - * @return whether the WebView saves passwords - * @see #setSavePassword - * @deprecated Saving passwords in WebView will not be supported in future - * versions. - */ - @Deprecated - public abstract boolean getSavePassword(); - - /** - * Sets the text zoom of the page in percent. The default is 100. - * - * @param textZoom the text zoom in percent - */ - public abstract void setTextZoom(int textZoom); - - /** - * Gets the text zoom of the page in percent. - * - * @return the text zoom of the page in percent - * @see #setTextZoom - */ - public abstract int getTextZoom(); - - /** - * Sets policy for third party cookies. Developers should access this via - * {@link CookieManager#setShouldAcceptThirdPartyCookies}. - * - * @hide Internal API. - */ - public abstract void setAcceptThirdPartyCookies(boolean accept); - - /** - * Gets policy for third party cookies. Developers should access this via - * {@link CookieManager#getShouldAcceptThirdPartyCookies}. - * - * @hide Internal API - */ - public abstract boolean getAcceptThirdPartyCookies(); - - /** - * Sets the text size of the page. The default is {@link TextSize#NORMAL}. - * - * @param t the text size as a {@link TextSize} value - * @deprecated Use {@link #setTextZoom} instead. - */ - @Deprecated - public synchronized void setTextSize(TextSize t) { - setTextZoom(t.value); - } - - /** - * Gets the text size of the page. If the text size was previously specified in - * percent using {@link #setTextZoom}, this will return the closest matching - * {@link TextSize}. - * - * @return the text size as a {@link TextSize} value - * @see #setTextSize - * @deprecated Use {@link #getTextZoom} instead. - */ - @Deprecated - public synchronized TextSize getTextSize() { - return null; - } - - /** - * Sets the default zoom density of the page. This must be called from the UI - * thread. The default is {@link ZoomDensity#MEDIUM}. - * - * This setting is not recommended for use in new applications. If the WebView - * is utilized to display mobile-oriented pages, the desired effect can be - * achieved by adjusting 'width' and 'initial-scale' attributes of page's 'meta - * viewport' tag. For pages lacking the tag, - * {@link android.webkit.WebView#setInitialScale} and - * {@link #setUseWideViewPort} can be used. - * - * @param zoom the zoom density - * @deprecated This method is no longer supported, see the function - * documentation for recommended alternatives. - */ - @Deprecated - public abstract void setDefaultZoom(ZoomDensity zoom); - - /** - * Gets the default zoom density of the page. This should be called from the UI - * thread. - * - * This setting is not recommended for use in new applications. - * - * @return the zoom density - * @see #setDefaultZoom - * @deprecated Will only return the default value. - */ - @Deprecated - public abstract ZoomDensity getDefaultZoom(); - - /** - * Enables using light touches to make a selection and activate mouseovers. - * - * @deprecated From {@link android.os.Build.VERSION_CODES#JELLY_BEAN} this - * setting is obsolete and has no effect. - */ - @Deprecated - public abstract void setLightTouchEnabled(boolean enabled); - - /** - * Gets whether light touches are enabled. - * - * @see #setLightTouchEnabled - * @deprecated This setting is obsolete. - */ - @Deprecated - public abstract boolean getLightTouchEnabled(); - - /** - * Controlled a rendering optimization that is no longer present. Setting it now - * has no effect. - * - * @deprecated This setting now has no effect. - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} - */ - @Deprecated - public void setUseDoubleTree(boolean use) { - // Specified to do nothing, so no need for derived classes to override. - } - - /** - * Controlled a rendering optimization that is no longer present. Setting it now - * has no effect. - * - * @deprecated This setting now has no effect. - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} - */ - @Deprecated - public boolean getUseDoubleTree() { - // Returns false unconditionally, so no need for derived classes to override. - return false; - } - - /** - * Sets the user-agent string using an integer code. - *

      - *
    • 0 means the WebView should use an Android user-agent string
    • - *
    • 1 means the WebView should use a desktop user-agent string
    • - *
    - * Other values are ignored. The default is an Android user-agent string, i.e. - * code value 0. - * - * @param ua the integer code for the user-agent string - * @deprecated Please use {@link #setUserAgentString} instead. - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} - */ - @Deprecated - public abstract void setUserAgent(int ua); - - /** - * Gets the user-agent as an integer code. - *
      - *
    • -1 means the WebView is using a custom user-agent string set with - * {@link #setUserAgentString}
    • - *
    • 0 means the WebView should use an Android user-agent string
    • - *
    • 1 means the WebView should use a desktop user-agent string
    • - *
    - * - * @return the integer code for the user-agent string - * @see #setUserAgent - * @deprecated Please use {@link #getUserAgentString} instead. - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} - */ - @Deprecated - public abstract int getUserAgent(); - - /** - * Sets whether the WebView should enable support for the "viewport" - * HTML meta tag or should use a wide viewport. When the value of the setting is - * {@code false}, the layout width is always set to the width of the WebView - * control in device-independent (CSS) pixels. When the value is {@code true} - * and the page contains the viewport meta tag, the value of the width specified - * in the tag is used. If the page does not contain the tag or does not provide - * a width, then a wide viewport will be used. - * - * @param use whether to enable support for the viewport meta tag - */ - public abstract void setUseWideViewPort(boolean use); - - /** - * Gets whether the WebView supports the "viewport" HTML meta tag or - * will use a wide viewport. - * - * @return {@code true} if the WebView supports the viewport meta tag - * @see #setUseWideViewPort - */ - public abstract boolean getUseWideViewPort(); - - /** - * Sets whether the WebView whether supports multiple windows. If set to true, - * {@link WebChromeClient#onCreateWindow} must be implemented by the host - * application. The default is {@code false}. - * - * @param support whether to support multiple windows - */ - public abstract void setSupportMultipleWindows(boolean support); - - /** - * Gets whether the WebView supports multiple windows. - * - * @return {@code true} if the WebView supports multiple windows - * @see #setSupportMultipleWindows - */ - public abstract boolean supportMultipleWindows(); - - /** - * Sets the underlying layout algorithm. This will cause a re-layout of the - * WebView. The default is {@link LayoutAlgorithm#NARROW_COLUMNS}. - * - * @param l the layout algorithm to use, as a {@link LayoutAlgorithm} value - */ - public abstract void setLayoutAlgorithm(LayoutAlgorithm l); - - /** - * Gets the current layout algorithm. - * - * @return the layout algorithm in use, as a {@link LayoutAlgorithm} value - * @see #setLayoutAlgorithm - */ - public abstract LayoutAlgorithm getLayoutAlgorithm(); - - /** - * Sets the standard font family name. The default is "sans-serif". - * - * @param font a font family name - */ - public abstract void setStandardFontFamily(String font); - - /** - * Gets the standard font family name. - * - * @return the standard font family name as a string - * @see #setStandardFontFamily - */ - public abstract String getStandardFontFamily(); - - /** - * Sets the fixed font family name. The default is "monospace". - * - * @param font a font family name - */ - public abstract void setFixedFontFamily(String font); - - /** - * Gets the fixed font family name. - * - * @return the fixed font family name as a string - * @see #setFixedFontFamily - */ - public abstract String getFixedFontFamily(); - - /** - * Sets the sans-serif font family name. The default is "sans-serif". - * - * @param font a font family name - */ - public abstract void setSansSerifFontFamily(String font); - - /** - * Gets the sans-serif font family name. - * - * @return the sans-serif font family name as a string - * @see #setSansSerifFontFamily - */ - public abstract String getSansSerifFontFamily(); - - /** - * Sets the serif font family name. The default is "sans-serif". - * - * @param font a font family name - */ - public abstract void setSerifFontFamily(String font); - - /** - * Gets the serif font family name. The default is "serif". - * - * @return the serif font family name as a string - * @see #setSerifFontFamily - */ - public abstract String getSerifFontFamily(); - - /** - * Sets the cursive font family name. The default is "cursive". - * - * @param font a font family name - */ - public abstract void setCursiveFontFamily(String font); - - /** - * Gets the cursive font family name. - * - * @return the cursive font family name as a string - * @see #setCursiveFontFamily - */ +abstract public class WebSettings +{ + public WebSettings(){} + public WebSettings.TextSize getTextSize(){ return null; } public abstract String getCursiveFontFamily(); - - /** - * Sets the fantasy font family name. The default is "fantasy". - * - * @param font a font family name - */ - public abstract void setFantasyFontFamily(String font); - - /** - * Gets the fantasy font family name. - * - * @return the fantasy font family name as a string - * @see #setFantasyFontFamily - */ - public abstract String getFantasyFontFamily(); - - /** - * Sets the minimum font size. The default is 8. - * - * @param size a non-negative integer between 1 and 72. Any number outside the - * specified range will be pinned. - */ - public abstract void setMinimumFontSize(int size); - - /** - * Gets the minimum font size. - * - * @return a non-negative integer between 1 and 72 - * @see #setMinimumFontSize - */ - public abstract int getMinimumFontSize(); - - /** - * Sets the minimum logical font size. The default is 8. - * - * @param size a non-negative integer between 1 and 72. Any number outside the - * specified range will be pinned. - */ - public abstract void setMinimumLogicalFontSize(int size); - - /** - * Gets the minimum logical font size. - * - * @return a non-negative integer between 1 and 72 - * @see #setMinimumLogicalFontSize - */ - public abstract int getMinimumLogicalFontSize(); - - /** - * Sets the default font size. The default is 16. - * - * @param size a non-negative integer between 1 and 72. Any number outside the - * specified range will be pinned. - */ - public abstract void setDefaultFontSize(int size); - - /** - * Gets the default font size. - * - * @return a non-negative integer between 1 and 72 - * @see #setDefaultFontSize - */ - public abstract int getDefaultFontSize(); - - /** - * Sets the default fixed font size. The default is 16. - * - * @param size a non-negative integer between 1 and 72. Any number outside the - * specified range will be pinned. - */ - public abstract void setDefaultFixedFontSize(int size); - - /** - * Gets the default fixed font size. - * - * @return a non-negative integer between 1 and 72 - * @see #setDefaultFixedFontSize - */ - public abstract int getDefaultFixedFontSize(); - - /** - * Sets whether the WebView should load image resources. Note that this method - * controls loading of all images, including those embedded using the data URI - * scheme. Use {@link #setBlockNetworkImage} to control loading only of images - * specified using network URI schemes. Note that if the value of this setting - * is changed from {@code false} to {@code true}, all images resources - * referenced by content currently displayed by the WebView are loaded - * automatically. The default is {@code true}. - * - * @param flag whether the WebView should load image resources - */ - public abstract void setLoadsImagesAutomatically(boolean flag); - - /** - * Gets whether the WebView loads image resources. This includes images embedded - * using the data URI scheme. - * - * @return {@code true} if the WebView loads image resources - * @see #setLoadsImagesAutomatically - */ - public abstract boolean getLoadsImagesAutomatically(); - - /** - * Sets whether the WebView should not load image resources from the network - * (resources accessed via http and https URI schemes). Note that this method - * has no effect unless {@link #getLoadsImagesAutomatically} returns - * {@code true}. Also note that disabling all network loads using - * {@link #setBlockNetworkLoads} will also prevent network images from loading, - * even if this flag is set to false. When the value of this setting is changed - * from {@code true} to {@code false}, network images resources referenced by - * content currently displayed by the WebView are fetched automatically. The - * default is {@code false}. - * - * @param flag whether the WebView should not load image resources from the - * network - * @see #setBlockNetworkLoads - */ - public abstract void setBlockNetworkImage(boolean flag); - - /** - * Gets whether the WebView does not load image resources from the network. - * - * @return {@code true} if the WebView does not load image resources from the - * network - * @see #setBlockNetworkImage - */ - public abstract boolean getBlockNetworkImage(); - - /** - * Sets whether the WebView should not load resources from the network. Use - * {@link #setBlockNetworkImage} to only avoid loading image resources. Note - * that if the value of this setting is changed from {@code true} to - * {@code false}, network resources referenced by content currently displayed by - * the WebView are not fetched until {@link android.webkit.WebView#reload} is - * called. If the application does not have the - * {@link android.Manifest.permission#INTERNET} permission, attempts to set a - * value of {@code false} will cause a {@link java.lang.SecurityException} to be - * thrown. The default value is {@code false} if the application has the - * {@link android.Manifest.permission#INTERNET} permission, otherwise it is - * {@code true}. - * - * @param flag {@code true} means block network loads by the WebView - * @see android.webkit.WebView#reload - */ - public abstract void setBlockNetworkLoads(boolean flag); - - /** - * Gets whether the WebView does not load any resources from the network. - * - * @return {@code true} if the WebView does not load any resources from the - * network - * @see #setBlockNetworkLoads - */ - public abstract boolean getBlockNetworkLoads(); - - /** - * Tells the WebView to enable JavaScript execution. The default is - * {@code false}. - * - * @param flag {@code true} if the WebView should execute JavaScript - */ - public abstract void setJavaScriptEnabled(boolean flag); - - /** - * Sets whether JavaScript running in the context of a file scheme URL should be - * allowed to access content from any origin. This includes access to content - * from other file scheme URLs. See {@link #setAllowFileAccessFromFileURLs}. To - * enable the most restrictive, and therefore secure policy, this setting should - * be disabled. Note that this setting affects only JavaScript access to file - * scheme resources. Other access to such resources, for example, from image - * HTML elements, is unaffected. To prevent possible violation of same domain - * policy when targeting - * {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and earlier, - * you should explicitly set this value to {@code false}. - *

    - * The default value is {@code true} for apps targeting - * {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and below, and - * {@code false} when targeting - * {@link android.os.Build.VERSION_CODES#JELLY_BEAN} and above. - * - * @param flag whether JavaScript running in the context of a file scheme URL - * should be allowed to access content from any origin - */ - public abstract void setAllowUniversalAccessFromFileURLs(boolean flag); - - /** - * Sets whether JavaScript running in the context of a file scheme URL should be - * allowed to access content from other file scheme URLs. To enable the most - * restrictive, and therefore secure, policy this setting should be disabled. - * Note that the value of this setting is ignored if the value of - * {@link #getAllowUniversalAccessFromFileURLs} is {@code true}. Note too, that - * this setting affects only JavaScript access to file scheme resources. Other - * access to such resources, for example, from image HTML elements, is - * unaffected. To prevent possible violation of same domain policy when - * targeting {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and - * earlier, you should explicitly set this value to {@code false}. - *

    - * The default value is {@code true} for apps targeting - * {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and below, and - * {@code false} when targeting - * {@link android.os.Build.VERSION_CODES#JELLY_BEAN} and above. - * - * @param flag whether JavaScript running in the context of a file scheme URL - * should be allowed to access content from other file scheme URLs - */ - public abstract void setAllowFileAccessFromFileURLs(boolean flag); - - /** - * Sets whether the WebView should enable plugins. The default is {@code false}. - * - * @param flag {@code true} if plugins should be enabled - * @deprecated This method has been deprecated in favor of - * {@link #setPluginState} - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} - */ - @Deprecated - public abstract void setPluginsEnabled(boolean flag); - - /** - * Tells the WebView to enable, disable, or have plugins on demand. On demand - * mode means that if a plugin exists that can handle the embedded content, a - * placeholder icon will be shown instead of the plugin. When the placeholder is - * clicked, the plugin will be enabled. The default is {@link PluginState#OFF}. - * - * @param state a PluginState value - * @deprecated Plugins will not be supported in future, and should not be used. - */ - @Deprecated - public abstract void setPluginState(PluginState state); - - /** - * Sets a custom path to plugins used by the WebView. This method is obsolete - * since each plugin is now loaded from its own package. - * - * @param pluginsPath a String path to the directory containing plugins - * @deprecated This method is no longer used as plugins are loaded from their - * own APK via the system's package manager. - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} - */ - @Deprecated - public void setPluginsPath(String pluginsPath) { - // Specified to do nothing, so no need for derived classes to override. - } - - /** - * Sets the path to where database storage API databases should be saved. In - * order for the database storage API to function correctly, this method must be - * called with a path to which the application can write. This method should - * only be called once: repeated calls are ignored. - * - * @param databasePath a path to the directory where databases should be saved. - * @deprecated Database paths are managed by the implementation and calling this - * method will have no effect. - */ - @Deprecated - public abstract void setDatabasePath(String databasePath); - - /** - * Sets the path where the Geolocation databases should be saved. In order for - * Geolocation permissions and cached positions to be persisted, this method - * must be called with a path to which the application can write. - * - * @param databasePath a path to the directory where databases should be saved. - * @deprecated Geolocation database are managed by the implementation and - * calling this method will have no effect. - */ - @Deprecated - public abstract void setGeolocationDatabasePath(String databasePath); - - /** - * Sets whether the Application Caches API should be enabled. The default is - * {@code false}. Note that in order for the Application Caches API to be - * enabled, a valid database path must also be supplied to - * {@link #setAppCachePath}. - * - * @param flag {@code true} if the WebView should enable Application Caches - */ - public abstract void setAppCacheEnabled(boolean flag); - - /** - * Sets the path to the Application Caches files. In order for the Application - * Caches API to be enabled, this method must be called with a path to which the - * application can write. This method should only be called once: repeated calls - * are ignored. - * - * @param appCachePath a String path to the directory containing Application - * Caches files. - * @see #setAppCacheEnabled - */ - public abstract void setAppCachePath(String appCachePath); - - /** - * Sets the maximum size for the Application Cache content. The passed size will - * be rounded to the nearest value that the database can support, so this should - * be viewed as a guide, not a hard limit. Setting the size to a value less than - * current database size does not cause the database to be trimmed. The default - * size is {@link Long#MAX_VALUE}. It is recommended to leave the maximum size - * set to the default value. - * - * @param appCacheMaxSize the maximum size in bytes - * @deprecated In future quota will be managed automatically. - */ - @Deprecated - public abstract void setAppCacheMaxSize(long appCacheMaxSize); - - /** - * Sets whether the database storage API is enabled. The default value is false. - * See also {@link #setDatabasePath} for how to correctly set up the database - * storage API. - * - * This setting is global in effect, across all WebView instances in a process. - * Note you should only modify this setting prior to making any WebView - * page load within a given process, as the WebView implementation may ignore - * changes to this setting after that point. - * - * @param flag {@code true} if the WebView should use the database storage API - */ - public abstract void setDatabaseEnabled(boolean flag); - - /** - * Sets whether the DOM storage API is enabled. The default value is - * {@code false}. - * - * @param flag {@code true} if the WebView should use the DOM storage API - */ - public abstract void setDomStorageEnabled(boolean flag); - - /** - * Gets whether the DOM Storage APIs are enabled. - * - * @return {@code true} if the DOM Storage APIs are enabled - * @see #setDomStorageEnabled - */ - public abstract boolean getDomStorageEnabled(); - - /** - * Gets the path to where database storage API databases are saved. - * - * @return the String path to the database storage API databases - * @see #setDatabasePath - * @deprecated Database paths are managed by the implementation this method is - * obsolete. - */ - @Deprecated public abstract String getDatabasePath(); - - /** - * Gets whether the database storage API is enabled. - * - * @return {@code true} if the database storage API is enabled - * @see #setDatabaseEnabled - */ - public abstract boolean getDatabaseEnabled(); - - /** - * Sets whether Geolocation is enabled. The default is {@code true}. - *

    - * Please note that in order for the Geolocation API to be usable by a page in - * the WebView, the following requirements must be met: - *

      - *
    • an application must have permission to access the device location, see - * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}, - * {@link android.Manifest.permission#ACCESS_FINE_LOCATION}; - *
    • an application must provide an implementation of the - * {@link WebChromeClient#onGeolocationPermissionsShowPrompt} callback to - * receive notifications that a page is requesting access to location via the - * JavaScript Geolocation API. - *
    - *

    - * - * @param flag whether Geolocation should be enabled - */ - public abstract void setGeolocationEnabled(boolean flag); - - /** - * Gets whether JavaScript is enabled. - * - * @return {@code true} if JavaScript is enabled - * @see #setJavaScriptEnabled - */ - public abstract boolean getJavaScriptEnabled(); - - /** - * Gets whether JavaScript running in the context of a file scheme URL can - * access content from any origin. This includes access to content from other - * file scheme URLs. - * - * @return whether JavaScript running in the context of a file scheme URL can - * access content from any origin - * @see #setAllowUniversalAccessFromFileURLs - */ - public abstract boolean getAllowUniversalAccessFromFileURLs(); - - /** - * Gets whether JavaScript running in the context of a file scheme URL can - * access content from other file scheme URLs. - * - * @return whether JavaScript running in the context of a file scheme URL can - * access content from other file scheme URLs - * @see #setAllowFileAccessFromFileURLs - */ - public abstract boolean getAllowFileAccessFromFileURLs(); - - /** - * Gets whether plugins are enabled. - * - * @return {@code true} if plugins are enabled - * @see #setPluginsEnabled - * @deprecated This method has been replaced by {@link #getPluginState} - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} - */ - @Deprecated - public abstract boolean getPluginsEnabled(); - - /** - * Gets the current state regarding whether plugins are enabled. - * - * @return the plugin state as a {@link PluginState} value - * @see #setPluginState - * @deprecated Plugins will not be supported in future, and should not be used. - */ - @Deprecated - public abstract PluginState getPluginState(); - - /** - * Gets the directory that contains the plugin libraries. This method is - * obsolete since each plugin is now loaded from its own package. - * - * @return an empty string - * @deprecated This method is no longer used as plugins are loaded from their - * own APK via the system's package manager. - * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} - */ - @Deprecated - public String getPluginsPath() { - // Unconditionally returns empty string, so no need for derived classes to - // override. - return ""; - } - - /** - * Tells JavaScript to open windows automatically. This applies to the - * JavaScript function {@code window.open()}. The default is {@code false}. - * - * @param flag {@code true} if JavaScript can open windows automatically - */ - public abstract void setJavaScriptCanOpenWindowsAutomatically(boolean flag); - - /** - * Gets whether JavaScript can open windows automatically. - * - * @return {@code true} if JavaScript can open windows automatically during - * {@code window.open()} - * @see #setJavaScriptCanOpenWindowsAutomatically - */ - public abstract boolean getJavaScriptCanOpenWindowsAutomatically(); - - /** - * Sets the default text encoding name to use when decoding html pages. The - * default is "UTF-8". - * - * @param encoding the text encoding name - */ - public abstract void setDefaultTextEncodingName(String encoding); - - /** - * Gets the default text encoding name. - * - * @return the default text encoding name as a string - * @see #setDefaultTextEncodingName - */ public abstract String getDefaultTextEncodingName(); - - /** - * Sets the WebView's user-agent string. If the string is {@code null} or empty, - * the system default value will be used. - * - * Note that starting from {@link android.os.Build.VERSION_CODES#KITKAT} Android - * version, changing the user-agent while loading a web page causes WebView to - * initiate loading once again. - * - * @param ua new user-agent string - */ - public abstract void setUserAgentString(String ua); - - /** - * Gets the WebView's user-agent string. - * - * @return the WebView's user-agent string - * @see #setUserAgentString - */ + public abstract String getFantasyFontFamily(); + public abstract String getFixedFontFamily(); + public abstract String getSansSerifFontFamily(); + public abstract String getSerifFontFamily(); + public abstract String getStandardFontFamily(); public abstract String getUserAgentString(); - - /** - * Returns the default User-Agent used by a WebView. An instance of WebView - * could use a different User-Agent if a call is made to - * {@link WebSettings#setUserAgentString(String)}. - * - * @param context a Context object used to access application assets - */ - public static String getDefaultUserAgent(Context context) { - return null; - } - - /** - * Tells the WebView whether it needs to set a node to have focus when - * {@link WebView#requestFocus(int, android.graphics.Rect)} is called. The - * default value is {@code true}. - * - * @param flag whether the WebView needs to set a node - */ - public abstract void setNeedInitialFocus(boolean flag); - - /** - * Sets the priority of the Render thread. Unlike the other settings, this one - * only needs to be called once per process. The default value is - * {@link RenderPriority#NORMAL}. - * - * @param priority the priority - * @deprecated It is not recommended to adjust thread priorities, and this will - * not be supported in future versions. - */ - @Deprecated - public abstract void setRenderPriority(RenderPriority priority); - - /** - * Overrides the way the cache is used. The way the cache is used is based on - * the navigation type. For a normal page load, the cache is checked and content - * is re-validated as needed. When navigating back, content is not revalidated, - * instead the content is just retrieved from the cache. This method allows the - * client to override this behavior by specifying one of {@link #LOAD_DEFAULT}, - * {@link #LOAD_CACHE_ELSE_NETWORK}, {@link #LOAD_NO_CACHE} or - * {@link #LOAD_CACHE_ONLY}. The default value is {@link #LOAD_DEFAULT}. - * - * @param mode the mode to use - */ - public abstract void setCacheMode(@CacheMode int mode); - - /** - * Gets the current setting for overriding the cache mode. - * - * @return the current setting for overriding the cache mode - * @see #setCacheMode - */ - public abstract int getCacheMode(); - - /** - * Configures the WebView's behavior when a secure origin attempts to load a - * resource from an insecure origin. - * - * By default, apps that target {@link android.os.Build.VERSION_CODES#KITKAT} or - * below default to {@link #MIXED_CONTENT_ALWAYS_ALLOW}. Apps targeting - * {@link android.os.Build.VERSION_CODES#LOLLIPOP} default to - * {@link #MIXED_CONTENT_NEVER_ALLOW}. - * - * The preferred and most secure mode of operation for the WebView is - * {@link #MIXED_CONTENT_NEVER_ALLOW} and use of - * {@link #MIXED_CONTENT_ALWAYS_ALLOW} is strongly discouraged. - * - * @param mode The mixed content mode to use. One of - * {@link #MIXED_CONTENT_NEVER_ALLOW}, - * {@link #MIXED_CONTENT_ALWAYS_ALLOW} or - * {@link #MIXED_CONTENT_COMPATIBILITY_MODE}. - */ - public abstract void setMixedContentMode(int mode); - - /** - * Gets the current behavior of the WebView with regard to loading insecure - * content from a secure origin. - * - * @return The current setting, one of {@link #MIXED_CONTENT_NEVER_ALLOW}, - * {@link #MIXED_CONTENT_ALWAYS_ALLOW} or - * {@link #MIXED_CONTENT_COMPATIBILITY_MODE}. - */ - public abstract int getMixedContentMode(); - - /** - * Sets whether to use a video overlay for embedded encrypted video. In API - * levels prior to {@link android.os.Build.VERSION_CODES#LOLLIPOP}, encrypted - * video can only be rendered directly on a secure video surface, so it had been - * a hard problem to play encrypted video in HTML. When this flag is on, WebView - * can play encrypted video (MSE/EME) by using a video overlay (aka - * hole-punching) for videos embedded using HTML <video> tag.
    - * Caution: This setting is intended for use only in a narrow set of - * circumstances and apps should only enable it if they require playback of - * encrypted video content. It will impose the following limitations on the - * WebView: - *

      - *
    • Only one video overlay can be played at a time. - *
    • Changes made to position or dimensions of a video element may be - * propagated to the corresponding video overlay with a noticeable delay. - *
    • The video overlay is not visible to web APIs and as such may not interact - * with script or styling. For example, CSS styles applied to the <video> - * tag may be ignored. - *
    - * This is not an exhaustive set of constraints and it may vary with new - * versions of the WebView. - * - * @hide - */ - public abstract void setVideoOverlayForEmbeddedEncryptedVideoEnabled(boolean flag); - - /** - * Gets whether a video overlay will be used for embedded encrypted video. - * - * @return {@code true} if WebView uses a video overlay for embedded encrypted - * video. - * @see #setVideoOverlayForEmbeddedEncryptedVideoEnabled - * @hide - */ - public abstract boolean getVideoOverlayForEmbeddedEncryptedVideoEnabled(); - - /** - * Sets whether this WebView should raster tiles when it is offscreen but - * attached to a window. Turning this on can avoid rendering artifacts when - * animating an offscreen WebView on-screen. Offscreen WebViews in this mode use - * more memory. The default value is false.
    - * Please follow these guidelines to limit memory usage: - *
      - *
    • WebView size should be not be larger than the device screen size. - *
    • Limit use of this mode to a small number of WebViews. Use it for visible - * WebViews and WebViews about to be animated to visible. - *
    - */ - public abstract void setOffscreenPreRaster(boolean enabled); - - /** - * Gets whether this WebView should raster tiles when it is offscreen but - * attached to a window. - * - * @return {@code true} if this WebView will raster tiles when it is offscreen - * but attached to a window. - */ + public abstract WebSettings.LayoutAlgorithm getLayoutAlgorithm(); + public abstract WebSettings.PluginState getPluginState(); + public abstract WebSettings.ZoomDensity getDefaultZoom(); + public abstract boolean enableSmoothTransition(); + public abstract boolean getAllowContentAccess(); + public abstract boolean getAllowFileAccess(); + public abstract boolean getAllowFileAccessFromFileURLs(); + public abstract boolean getAllowUniversalAccessFromFileURLs(); + public abstract boolean getBlockNetworkImage(); + public abstract boolean getBlockNetworkLoads(); + public abstract boolean getBuiltInZoomControls(); + public abstract boolean getDatabaseEnabled(); + public abstract boolean getDisplayZoomControls(); + public abstract boolean getDomStorageEnabled(); + public abstract boolean getJavaScriptCanOpenWindowsAutomatically(); + public abstract boolean getJavaScriptEnabled(); + public abstract boolean getLightTouchEnabled(); + public abstract boolean getLoadWithOverviewMode(); + public abstract boolean getLoadsImagesAutomatically(); + public abstract boolean getMediaPlaybackRequiresUserGesture(); public abstract boolean getOffscreenPreRaster(); - - /** - * Sets whether Safe Browsing is enabled. Safe Browsing allows WebView to - * protect against malware and phishing attacks by verifying the links. - * - *

    - * Safe Browsing can be disabled for all WebViews using a manifest tag (read - * general Safe - * Browsing info). The manifest tag has a lower precedence than this API. - * - *

    - * Safe Browsing is enabled by default for devices which support it. - * - * @param enabled Whether Safe Browsing is enabled. - */ - public abstract void setSafeBrowsingEnabled(boolean enabled); - - /** - * Gets whether Safe Browsing is enabled. See {@link #setSafeBrowsingEnabled}. - * - * @return {@code true} if Safe Browsing is enabled and {@code false} otherwise. - */ public abstract boolean getSafeBrowsingEnabled(); + public abstract boolean getSaveFormData(); + public abstract boolean getSavePassword(); + public abstract boolean getUseWideViewPort(); + public abstract boolean supportMultipleWindows(); + public abstract boolean supportZoom(); + public abstract int getCacheMode(); + public abstract int getDefaultFixedFontSize(); + public abstract int getDefaultFontSize(); + public abstract int getDisabledActionModeMenuItems(); + public abstract int getMinimumFontSize(); + public abstract int getMinimumLogicalFontSize(); + public abstract int getMixedContentMode(); + public abstract int getTextZoom(); + public abstract void setAllowContentAccess(boolean p0); + public abstract void setAllowFileAccess(boolean p0); + public abstract void setAllowFileAccessFromFileURLs(boolean p0); + public abstract void setAllowUniversalAccessFromFileURLs(boolean p0); + public abstract void setAppCacheEnabled(boolean p0); + public abstract void setAppCacheMaxSize(long p0); + public abstract void setAppCachePath(String p0); + public abstract void setBlockNetworkImage(boolean p0); + public abstract void setBlockNetworkLoads(boolean p0); + public abstract void setBuiltInZoomControls(boolean p0); + public abstract void setCacheMode(int p0); + public abstract void setCursiveFontFamily(String p0); + public abstract void setDatabaseEnabled(boolean p0); + public abstract void setDatabasePath(String p0); + public abstract void setDefaultFixedFontSize(int p0); + public abstract void setDefaultFontSize(int p0); + public abstract void setDefaultTextEncodingName(String p0); + public abstract void setDefaultZoom(WebSettings.ZoomDensity p0); + public abstract void setDisabledActionModeMenuItems(int p0); + public abstract void setDisplayZoomControls(boolean p0); + public abstract void setDomStorageEnabled(boolean p0); + public abstract void setEnableSmoothTransition(boolean p0); + public abstract void setFantasyFontFamily(String p0); + public abstract void setFixedFontFamily(String p0); + public abstract void setGeolocationDatabasePath(String p0); + public abstract void setGeolocationEnabled(boolean p0); + public abstract void setJavaScriptCanOpenWindowsAutomatically(boolean p0); + public abstract void setJavaScriptEnabled(boolean p0); + public abstract void setLayoutAlgorithm(WebSettings.LayoutAlgorithm p0); + public abstract void setLightTouchEnabled(boolean p0); + public abstract void setLoadWithOverviewMode(boolean p0); + public abstract void setLoadsImagesAutomatically(boolean p0); + public abstract void setMediaPlaybackRequiresUserGesture(boolean p0); + public abstract void setMinimumFontSize(int p0); + public abstract void setMinimumLogicalFontSize(int p0); + public abstract void setMixedContentMode(int p0); + public abstract void setNeedInitialFocus(boolean p0); + public abstract void setOffscreenPreRaster(boolean p0); + public abstract void setPluginState(WebSettings.PluginState p0); + public abstract void setRenderPriority(WebSettings.RenderPriority p0); + public abstract void setSafeBrowsingEnabled(boolean p0); + public abstract void setSansSerifFontFamily(String p0); + public abstract void setSaveFormData(boolean p0); + public abstract void setSavePassword(boolean p0); + public abstract void setSerifFontFamily(String p0); + public abstract void setStandardFontFamily(String p0); + public abstract void setSupportMultipleWindows(boolean p0); + public abstract void setSupportZoom(boolean p0); + public abstract void setTextZoom(int p0); + public abstract void setUseWideViewPort(boolean p0); + public abstract void setUserAgentString(String p0); + public int getForceDark(){ return 0; } + public static String getDefaultUserAgent(Context p0){ return null; } + public static int FORCE_DARK_AUTO = 0; + public static int FORCE_DARK_OFF = 0; + public static int FORCE_DARK_ON = 0; + public static int LOAD_CACHE_ELSE_NETWORK = 0; + public static int LOAD_CACHE_ONLY = 0; + public static int LOAD_DEFAULT = 0; + public static int LOAD_NORMAL = 0; + public static int LOAD_NO_CACHE = 0; + public static int MENU_ITEM_NONE = 0; + public static int MENU_ITEM_PROCESS_TEXT = 0; + public static int MENU_ITEM_SHARE = 0; + public static int MENU_ITEM_WEB_SEARCH = 0; + public static int MIXED_CONTENT_ALWAYS_ALLOW = 0; + public static int MIXED_CONTENT_COMPATIBILITY_MODE = 0; + public static int MIXED_CONTENT_NEVER_ALLOW = 0; + public void setForceDark(int p0){} + public void setTextSize(WebSettings.TextSize p0){} + static public enum LayoutAlgorithm + { + NARROW_COLUMNS, NORMAL, SINGLE_COLUMN, TEXT_AUTOSIZING; + private LayoutAlgorithm() {} + } + static public enum PluginState + { + OFF, ON, ON_DEMAND; + private PluginState() {} + } + static public enum RenderPriority + { + HIGH, LOW, NORMAL; + private RenderPriority() {} + } + static public enum TextSize + { + LARGER, LARGEST, NORMAL, SMALLER, SMALLEST; + private TextSize() {} + } + static public enum ZoomDensity + { + CLOSE, FAR, MEDIUM; + private ZoomDensity() {} + } } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebStorage.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebStorage.java new file mode 100644 index 00000000000..c63a282b454 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebStorage.java @@ -0,0 +1,21 @@ +// Generated automatically from android.webkit.WebStorage for testing purposes + +package android.webkit; + +import android.webkit.ValueCallback; +import java.util.Map; + +public class WebStorage +{ + public static WebStorage getInstance(){ return null; } + public void deleteAllData(){} + public void deleteOrigin(String p0){} + public void getOrigins(ValueCallback p0){} + public void getQuotaForOrigin(String p0, ValueCallback p1){} + public void getUsageForOrigin(String p0, ValueCallback p1){} + public void setQuotaForOrigin(String p0, long p1){} + static public interface QuotaUpdater + { + void updateQuota(long p0); + } +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java index 3065a9df966..b654cc05f61 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java @@ -1,151 +1,259 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ +// Generated automatically from android.webkit.WebView for testing purposes package android.webkit; import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Picture; +import android.graphics.Rect; +import android.net.Uri; +import android.net.http.SslCertificate; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.print.PrintDocumentAdapter; +import android.util.AttributeSet; +import android.util.LongSparseArray; +import android.util.SparseArray; +import android.view.DragEvent; +import android.view.KeyEvent; +import android.view.MotionEvent; import android.view.View; +import android.view.ViewGroup; +import android.view.ViewStructure; +import android.view.ViewTreeObserver; +import android.view.WindowInsets; +import android.view.accessibility.AccessibilityNodeProvider; +import android.view.autofill.AutofillId; +import android.view.autofill.AutofillValue; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputConnection; +import android.view.textclassifier.TextClassifier; +import android.view.translation.TranslationCapability; +import android.view.translation.ViewTranslationRequest; +import android.view.translation.ViewTranslationResponse; +import android.webkit.DownloadListener; +import android.webkit.ValueCallback; +import android.webkit.WebBackForwardList; +import android.webkit.WebChromeClient; +import android.webkit.WebMessage; +import android.webkit.WebMessagePort; +import android.webkit.WebSettings; +import android.webkit.WebViewClient; +import android.webkit.WebViewRenderProcess; +import android.webkit.WebViewRenderProcessClient; +import android.widget.AbsoluteLayout; +import java.util.List; +import java.util.Map; +import java.util.concurrent.Executor; +import java.util.function.Consumer; -public class WebView extends View { - - public WebView(Context context) { - super(context); +public class WebView extends AbsoluteLayout implements ViewGroup.OnHierarchyChangeListener, ViewTreeObserver.OnGlobalFocusChangeListener +{ + protected WebView() {} + abstract static public class VisualStateCallback + { + public VisualStateCallback(){} + public abstract void onComplete(long p0); } - - public void setHorizontalScrollbarOverlay(boolean overlay) {} - - public void setVerticalScrollbarOverlay(boolean overlay) {} - - public boolean overlayHorizontalScrollbar() { - return false; + protected int computeHorizontalScrollOffset(){ return 0; } + protected int computeHorizontalScrollRange(){ return 0; } + protected int computeVerticalScrollExtent(){ return 0; } + protected int computeVerticalScrollOffset(){ return 0; } + protected int computeVerticalScrollRange(){ return 0; } + protected void dispatchDraw(Canvas p0){} + protected void onAttachedToWindow(){} + protected void onConfigurationChanged(Configuration p0){} + protected void onDraw(Canvas p0){} + protected void onFocusChanged(boolean p0, int p1, Rect p2){} + protected void onMeasure(int p0, int p1){} + protected void onOverScrolled(int p0, int p1, boolean p2, boolean p3){} + protected void onScrollChanged(int p0, int p1, int p2, int p3){} + protected void onSizeChanged(int p0, int p1, int p2, int p3){} + protected void onVisibilityChanged(View p0, int p1){} + protected void onWindowVisibilityChanged(int p0){} + public AccessibilityNodeProvider getAccessibilityNodeProvider(){ return null; } + public Bitmap getFavicon(){ return null; } + public CharSequence getAccessibilityClassName(){ return null; } + public Handler getHandler(){ return null; } + public InputConnection onCreateInputConnection(EditorInfo p0){ return null; } + public Looper getWebViewLooper(){ return null; } + public Picture capturePicture(){ return null; } + public PrintDocumentAdapter createPrintDocumentAdapter(){ return null; } + public PrintDocumentAdapter createPrintDocumentAdapter(String p0){ return null; } + public SslCertificate getCertificate(){ return null; } + public String getOriginalUrl(){ return null; } + public String getTitle(){ return null; } + public String getUrl(){ return null; } + public String[] getHttpAuthUsernamePassword(String p0, String p1){ return null; } + public TextClassifier getTextClassifier(){ return null; } + public View findFocus(){ return null; } + public WebBackForwardList copyBackForwardList(){ return null; } + public WebBackForwardList restoreState(Bundle p0){ return null; } + public WebBackForwardList saveState(Bundle p0){ return null; } + public WebChromeClient getWebChromeClient(){ return null; } + public WebMessagePort[] createWebMessageChannel(){ return null; } + public WebSettings getSettings(){ return null; } + public WebView(Context p0){} + public WebView(Context p0, AttributeSet p1){} + public WebView(Context p0, AttributeSet p1, int p2){} + public WebView(Context p0, AttributeSet p1, int p2, boolean p3){} + public WebView(Context p0, AttributeSet p1, int p2, int p3){} + public WebView.HitTestResult getHitTestResult(){ return null; } + public WebViewClient getWebViewClient(){ return null; } + public WebViewRenderProcess getWebViewRenderProcess(){ return null; } + public WebViewRenderProcessClient getWebViewRenderProcessClient(){ return null; } + public WindowInsets onApplyWindowInsets(WindowInsets p0){ return null; } + public boolean canGoBack(){ return false; } + public boolean canGoBackOrForward(int p0){ return false; } + public boolean canGoForward(){ return false; } + public boolean canZoomIn(){ return false; } + public boolean canZoomOut(){ return false; } + public boolean dispatchKeyEvent(KeyEvent p0){ return false; } + public boolean getRendererPriorityWaivedWhenNotVisible(){ return false; } + public boolean isPrivateBrowsingEnabled(){ return false; } + public boolean isVisibleToUserForAutofill(int p0){ return false; } + public boolean onCheckIsTextEditor(){ return false; } + public boolean onDragEvent(DragEvent p0){ return false; } + public boolean onGenericMotionEvent(MotionEvent p0){ return false; } + public boolean onHoverEvent(MotionEvent p0){ return false; } + public boolean onKeyDown(int p0, KeyEvent p1){ return false; } + public boolean onKeyMultiple(int p0, int p1, KeyEvent p2){ return false; } + public boolean onKeyUp(int p0, KeyEvent p1){ return false; } + public boolean onTouchEvent(MotionEvent p0){ return false; } + public boolean onTrackballEvent(MotionEvent p0){ return false; } + public boolean overlayHorizontalScrollbar(){ return false; } + public boolean overlayVerticalScrollbar(){ return false; } + public boolean pageDown(boolean p0){ return false; } + public boolean pageUp(boolean p0){ return false; } + public boolean performLongClick(){ return false; } + public boolean requestChildRectangleOnScreen(View p0, Rect p1, boolean p2){ return false; } + public boolean requestFocus(int p0, Rect p1){ return false; } + public boolean shouldDelayChildPressedState(){ return false; } + public boolean showFindDialog(String p0, boolean p1){ return false; } + public boolean zoomIn(){ return false; } + public boolean zoomOut(){ return false; } + public float getScale(){ return 0; } + public int findAll(String p0){ return 0; } + public int getContentHeight(){ return 0; } + public int getProgress(){ return 0; } + public int getRendererRequestedPriority(){ return 0; } + public static ClassLoader getWebViewClassLoader(){ return null; } + public static PackageInfo getCurrentWebViewPackage(){ return null; } + public static String SCHEME_GEO = null; + public static String SCHEME_MAILTO = null; + public static String SCHEME_TEL = null; + public static String findAddress(String p0){ return null; } + public static Uri getSafeBrowsingPrivacyPolicyUrl(){ return null; } + public static int RENDERER_PRIORITY_BOUND = 0; + public static int RENDERER_PRIORITY_IMPORTANT = 0; + public static int RENDERER_PRIORITY_WAIVED = 0; + public static void clearClientCertPreferences(Runnable p0){} + public static void disableWebView(){} + public static void enableSlowWholeDocumentDraw(){} + public static void setDataDirectorySuffix(String p0){} + public static void setSafeBrowsingWhitelist(List p0, ValueCallback p1){} + public static void setWebContentsDebuggingEnabled(boolean p0){} + public static void startSafeBrowsing(Context p0, ValueCallback p1){} + public void addJavascriptInterface(Object p0, String p1){} + public void autofill(SparseArray p0){} + public void clearCache(boolean p0){} + public void clearFormData(){} + public void clearHistory(){} + public void clearMatches(){} + public void clearSslPreferences(){} + public void clearView(){} + public void computeScroll(){} + public void destroy(){} + public void dispatchCreateViewTranslationRequest(Map p0, int[] p1, TranslationCapability p2, List p3){} + public void documentHasImages(Message p0){} + public void evaluateJavascript(String p0, ValueCallback p1){} + public void findAllAsync(String p0){} + public void findNext(boolean p0){} + public void flingScroll(int p0, int p1){} + public void freeMemory(){} + public void goBack(){} + public void goBackOrForward(int p0){} + public void goForward(){} + public void invokeZoomPicker(){} + public void loadData(String p0, String p1, String p2){} + public void loadDataWithBaseURL(String p0, String p1, String p2, String p3, String p4){} + public void loadUrl(String p0){} + public void loadUrl(String p0, Map p1){} + public void onChildViewAdded(View p0, View p1){} + public void onChildViewRemoved(View p0, View p1){} + public void onCreateVirtualViewTranslationRequests(long[] p0, int[] p1, Consumer p2){} + public void onFinishTemporaryDetach(){} + public void onGlobalFocusChanged(View p0, View p1){} + public void onPause(){} + public void onProvideAutofillVirtualStructure(ViewStructure p0, int p1){} + public void onProvideContentCaptureStructure(ViewStructure p0, int p1){} + public void onProvideVirtualStructure(ViewStructure p0){} + public void onResume(){} + public void onStartTemporaryDetach(){} + public void onVirtualViewTranslationResponses(LongSparseArray p0){} + public void onWindowFocusChanged(boolean p0){} + public void pauseTimers(){} + public void postUrl(String p0, byte[] p1){} + public void postVisualStateCallback(long p0, WebView.VisualStateCallback p1){} + public void postWebMessage(WebMessage p0, Uri p1){} + public void reload(){} + public void removeJavascriptInterface(String p0){} + public void requestFocusNodeHref(Message p0){} + public void requestImageRef(Message p0){} + public void resumeTimers(){} + public void savePassword(String p0, String p1, String p2){} + public void saveWebArchive(String p0){} + public void saveWebArchive(String p0, boolean p1, ValueCallback p2){} + public void setBackgroundColor(int p0){} + public void setCertificate(SslCertificate p0){} + public void setDownloadListener(DownloadListener p0){} + public void setFindListener(WebView.FindListener p0){} + public void setHorizontalScrollbarOverlay(boolean p0){} + public void setHttpAuthUsernamePassword(String p0, String p1, String p2, String p3){} + public void setInitialScale(int p0){} + public void setLayerType(int p0, Paint p1){} + public void setLayoutParams(ViewGroup.LayoutParams p0){} + public void setMapTrackballToArrowKeys(boolean p0){} + public void setNetworkAvailable(boolean p0){} + public void setOverScrollMode(int p0){} + public void setPictureListener(WebView.PictureListener p0){} + public void setRendererPriorityPolicy(int p0, boolean p1){} + public void setScrollBarStyle(int p0){} + public void setTextClassifier(TextClassifier p0){} + public void setVerticalScrollbarOverlay(boolean p0){} + public void setWebChromeClient(WebChromeClient p0){} + public void setWebViewClient(WebViewClient p0){} + public void setWebViewRenderProcessClient(Executor p0, WebViewRenderProcessClient p1){} + public void setWebViewRenderProcessClient(WebViewRenderProcessClient p0){} + public void stopLoading(){} + public void zoomBy(float p0){} + static public class HitTestResult + { + public String getExtra(){ return null; } + public int getType(){ return 0; } + public static int ANCHOR_TYPE = 0; + public static int EDIT_TEXT_TYPE = 0; + public static int EMAIL_TYPE = 0; + public static int GEO_TYPE = 0; + public static int IMAGE_ANCHOR_TYPE = 0; + public static int IMAGE_TYPE = 0; + public static int PHONE_TYPE = 0; + public static int SRC_ANCHOR_TYPE = 0; + public static int SRC_IMAGE_ANCHOR_TYPE = 0; + public static int UNKNOWN_TYPE = 0; } - - public boolean overlayVerticalScrollbar() { - return false; + static public interface FindListener + { + void onFindResultReceived(int p0, int p1, boolean p2); } - - public void savePassword(String host, String username, String password) {} - - public void setHttpAuthUsernamePassword(String host, String realm, String username, - String password) {} - - public String[] getHttpAuthUsernamePassword(String host, String realm) { - return null; - } - - public void destroy() {} - - public static void enablePlatformNotifications() {} - - public static void disablePlatformNotifications() {} - - public void loadUrl(String url) {} - - public void loadData(String data, String mimeType, String encoding) {} - - public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, - String failUrl) {} - - public void stopLoading() {} - - public void reload() {} - - public boolean canGoBack() { - return false; - } - - public void goBack() {} - - public boolean canGoForward() { - return false; - } - - public void goForward() {} - - public boolean canGoBackOrForward(int steps) { - return false; - } - - public void goBackOrForward(int steps) {} - - public boolean pageUp(boolean top) { - return false; - } - - public boolean pageDown(boolean bottom) { - return false; - } - - public void clearView() {} - - public float getScale() { - return 0; - } - - public void setInitialScale(int scaleInPercent) {} - - public void invokeZoomPicker() {} - - public String getUrl() { - return null; - } - - public String getTitle() { - return null; - } - - public int getProgress() { - return 0; - } - - public int getContentHeight() { - return 0; - } - - public void pauseTimers() {} - - public void resumeTimers() {} - - public void clearCache() {} - - public void clearFormData() {} - - public void clearHistory() {} - - public void clearSslPreferences() {} - - public static String findAddress(String addr) { - return null; - } - - public void setWebViewClient(WebViewClient client) {} - - public void addJavascriptInterface(Object obj, String interfaceName) {} - - public View getZoomControls() { - return null; - } - - public boolean zoomIn() { - return false; - } - - public boolean zoomOut() { - return false; - } - - public WebSettings getSettings() { - return null; + static public interface PictureListener + { + void onNewPicture(WebView p0, Picture p1); } } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java index 03a98480210..e63cf85c9c8 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java @@ -1,231 +1,66 @@ -/* - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Generated automatically from android.webkit.WebViewClient for testing purposes + package android.webkit; -public class WebViewClient { - /** - * Give the host application a chance to take over the control when a new url is - * about to be loaded in the current WebView. If WebViewClient is not provided, - * by default WebView will ask Activity Manager to choose the proper handler for - * the url. If WebViewClient is provided, return {@code true} means the host - * application handles the url, while return {@code false} means the current - * WebView handles the url. This method is not called for requests using the - * POST "method". - * - * @param view The WebView that is initiating the callback. - * @param url The url to be loaded. - * @return {@code true} if the host application wants to leave the current - * WebView and handle the url itself, otherwise return {@code false}. - * @deprecated Use {@link #shouldOverrideUrlLoading(WebView, WebResourceRequest) - * shouldOverrideUrlLoading(WebView, WebResourceRequest)} instead. - */ - @Deprecated - public boolean shouldOverrideUrlLoading(WebView view, String url) { - return false; - } - - /** - * Give the host application a chance to take over the control when a new url is - * about to be loaded in the current WebView. If WebViewClient is not provided, - * by default WebView will ask Activity Manager to choose the proper handler for - * the url. If WebViewClient is provided, return {@code true} means the host - * application handles the url, while return {@code false} means the current - * WebView handles the url. - * - *

    - * Notes: - *

      - *
    • This method is not called for requests using the POST - * "method".
    • - *
    • This method is also called for subframes with non-http schemes, thus it - * is strongly disadvised to unconditionally call - * {@link WebView#loadUrl(String)} with the request's url from inside the method - * and then return {@code true}, as this will make WebView to attempt loading a - * non-http url, and thus fail.
    • - *
    - * - * @param view The WebView that is initiating the callback. - * @param request Object containing the details of the request. - * @return {@code true} if the host application wants to leave the current - * WebView and handle the url itself, otherwise return {@code false}. - */ - public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { - return false; - } - - /** - * Notify the host application that a page has finished loading. This method is - * called only for main frame. When onPageFinished() is called, the rendering - * picture may not be updated yet. To get the notification for the new Picture, - * use {@link WebView.PictureListener#onNewPicture}. - * - * @param view The WebView that is initiating the callback. - * @param url The url of the page. - */ - public void onPageFinished(WebView view, String url) { - } - - /** - * Notify the host application that the WebView will load the resource specified - * by the given url. - * - * @param view The WebView that is initiating the callback. - * @param url The url of the resource the WebView will load. - */ - public void onLoadResource(WebView view, String url) { - } - - /** - * Notify the host application that {@link android.webkit.WebView} content left - * over from previous page navigations will no longer be drawn. - * - *

    - * This callback can be used to determine the point at which it is safe to make - * a recycled {@link android.webkit.WebView} visible, ensuring that no stale - * content is shown. It is called at the earliest point at which it can be - * guaranteed that {@link WebView#onDraw} will no longer draw any content from - * previous navigations. The next draw will display either the - * {@link WebView#setBackgroundColor background color} of the {@link WebView}, - * or some of the contents of the newly loaded page. - * - *

    - * This method is called when the body of the HTTP response has started loading, - * is reflected in the DOM, and will be visible in subsequent draws. This - * callback occurs early in the document loading process, and as such you should - * expect that linked resources (for example, CSS and images) may not be - * available. - * - *

    - * For more fine-grained notification of visual state updates, see - * {@link WebView#postVisualStateCallback}. - * - *

    - * Please note that all the conditions and recommendations applicable to - * {@link WebView#postVisualStateCallback} also apply to this API. - * - *

    - * This callback is only called for main frame navigations. - * - * @param view The {@link android.webkit.WebView} for which the navigation - * occurred. - * @param url The URL corresponding to the page navigation that triggered this - * callback. - */ - public void onPageCommitVisible(WebView view, String url) { - } - - /** - * Notify the host application of a resource request and allow the application - * to return the data. If the return value is {@code null}, the WebView will - * continue to load the resource as usual. Otherwise, the return response and - * data will be used. - * - *

    - * This callback is invoked for a variety of URL schemes (e.g., - * {@code http(s):}, {@code - * data:}, {@code file:}, etc.), not only those schemes which send requests over - * the network. This is not called for {@code javascript:} URLs, {@code blob:} - * URLs, or for assets accessed via {@code file:///android_asset/} or - * {@code file:///android_res/} URLs. - * - *

    - * In the case of redirects, this is only called for the initial resource URL, - * not any subsequent redirect URLs. - * - *

    - * Note: This method is called on a thread other than the UI thread so - * clients should exercise caution when accessing private data or the view - * system. - * - *

    - * Note: When Safe Browsing is enabled, these URLs still undergo Safe - * Browsing checks. If this is undesired, whitelist the URL with - * {@link WebView#setSafeBrowsingWhitelist} or ignore the warning with - * {@link #onSafeBrowsingHit}. - * - * @param view The {@link android.webkit.WebView} that is requesting the - * resource. - * @param url The raw url of the resource. - * @return A {@link android.webkit.WebResourceResponse} containing the response - * information or {@code null} if the WebView should load the resource - * itself. - * @deprecated Use {@link #shouldInterceptRequest(WebView, WebResourceRequest) - * shouldInterceptRequest(WebView, WebResourceRequest)} instead. - */ - @Deprecated - public WebResourceResponse shouldInterceptRequest(WebView view, String url) { - return null; - } - - /** - * Notify the host application of a resource request and allow the application - * to return the data. If the return value is {@code null}, the WebView will - * continue to load the resource as usual. Otherwise, the return response and - * data will be used. - * - *

    - * This callback is invoked for a variety of URL schemes (e.g., - * {@code http(s):}, {@code - * data:}, {@code file:}, etc.), not only those schemes which send requests over - * the network. This is not called for {@code javascript:} URLs, {@code blob:} - * URLs, or for assets accessed via {@code file:///android_asset/} or - * {@code file:///android_res/} URLs. - * - *

    - * In the case of redirects, this is only called for the initial resource URL, - * not any subsequent redirect URLs. - * - *

    - * Note: This method is called on a thread other than the UI thread so - * clients should exercise caution when accessing private data or the view - * system. - * - *

    - * Note: When Safe Browsing is enabled, these URLs still undergo Safe - * Browsing checks. If this is undesired, whitelist the URL with - * {@link WebView#setSafeBrowsingWhitelist} or ignore the warning with - * {@link #onSafeBrowsingHit}. - * - * @param view The {@link android.webkit.WebView} that is requesting the - * resource. - * @param request Object containing the details of the request. - * @return A {@link android.webkit.WebResourceResponse} containing the response - * information or {@code null} if the WebView should load the resource - * itself. - */ - public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { - return null; - } - - /** - * Report an error to the host application. These errors are unrecoverable (i.e. - * the main resource is unavailable). The {@code errorCode} parameter - * corresponds to one of the {@code ERROR_*} constants. - * - * @param view The WebView that is initiating the callback. - * @param errorCode The error code corresponding to an ERROR_* value. - * @param description A String describing the error. - * @param failingUrl The url that failed to load. - * @deprecated Use - * {@link #onReceivedError(WebView, WebResourceRequest, WebResourceError) - * onReceivedError(WebView, WebResourceRequest, WebResourceError)} - * instead. - */ - @Deprecated - public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { - } +import android.graphics.Bitmap; +import android.net.http.SslError; +import android.os.Message; +import android.view.KeyEvent; +import android.webkit.ClientCertRequest; +import android.webkit.HttpAuthHandler; +import android.webkit.RenderProcessGoneDetail; +import android.webkit.SafeBrowsingResponse; +import android.webkit.SslErrorHandler; +import android.webkit.WebResourceError; +import android.webkit.WebResourceRequest; +import android.webkit.WebResourceResponse; +import android.webkit.WebView; +public class WebViewClient +{ + public WebResourceResponse shouldInterceptRequest(WebView p0, String p1){ return null; } + public WebResourceResponse shouldInterceptRequest(WebView p0, WebResourceRequest p1){ return null; } + public WebViewClient(){} + public boolean onRenderProcessGone(WebView p0, RenderProcessGoneDetail p1){ return false; } + public boolean shouldOverrideKeyEvent(WebView p0, KeyEvent p1){ return false; } + public boolean shouldOverrideUrlLoading(WebView p0, String p1){ return false; } + public boolean shouldOverrideUrlLoading(WebView p0, WebResourceRequest p1){ return false; } + public static int ERROR_AUTHENTICATION = 0; + public static int ERROR_BAD_URL = 0; + public static int ERROR_CONNECT = 0; + public static int ERROR_FAILED_SSL_HANDSHAKE = 0; + public static int ERROR_FILE = 0; + public static int ERROR_FILE_NOT_FOUND = 0; + public static int ERROR_HOST_LOOKUP = 0; + public static int ERROR_IO = 0; + public static int ERROR_PROXY_AUTHENTICATION = 0; + public static int ERROR_REDIRECT_LOOP = 0; + public static int ERROR_TIMEOUT = 0; + public static int ERROR_TOO_MANY_REQUESTS = 0; + public static int ERROR_UNKNOWN = 0; + public static int ERROR_UNSAFE_RESOURCE = 0; + public static int ERROR_UNSUPPORTED_AUTH_SCHEME = 0; + public static int ERROR_UNSUPPORTED_SCHEME = 0; + public static int SAFE_BROWSING_THREAT_BILLING = 0; + public static int SAFE_BROWSING_THREAT_MALWARE = 0; + public static int SAFE_BROWSING_THREAT_PHISHING = 0; + public static int SAFE_BROWSING_THREAT_UNKNOWN = 0; + public static int SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE = 0; + public void doUpdateVisitedHistory(WebView p0, String p1, boolean p2){} + public void onFormResubmission(WebView p0, Message p1, Message p2){} + public void onLoadResource(WebView p0, String p1){} + public void onPageCommitVisible(WebView p0, String p1){} + public void onPageFinished(WebView p0, String p1){} + public void onPageStarted(WebView p0, String p1, Bitmap p2){} + public void onReceivedClientCertRequest(WebView p0, ClientCertRequest p1){} + public void onReceivedError(WebView p0, WebResourceRequest p1, WebResourceError p2){} + public void onReceivedError(WebView p0, int p1, String p2, String p3){} + public void onReceivedHttpAuthRequest(WebView p0, HttpAuthHandler p1, String p2, String p3){} + public void onReceivedHttpError(WebView p0, WebResourceRequest p1, WebResourceResponse p2){} + public void onReceivedLoginRequest(WebView p0, String p1, String p2, String p3){} + public void onReceivedSslError(WebView p0, SslErrorHandler p1, SslError p2){} + public void onSafeBrowsingHit(WebView p0, WebResourceRequest p1, int p2, SafeBrowsingResponse p3){} + public void onScaleChanged(WebView p0, float p1, float p2){} + public void onTooManyRedirects(WebView p0, Message p1, Message p2){} + public void onUnhandledKeyEvent(WebView p0, KeyEvent p1){} } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcess.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcess.java new file mode 100644 index 00000000000..0c9d0d1385c --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcess.java @@ -0,0 +1,10 @@ +// Generated automatically from android.webkit.WebViewRenderProcess for testing purposes + +package android.webkit; + + +abstract public class WebViewRenderProcess +{ + public WebViewRenderProcess(){} + public abstract boolean terminate(); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcessClient.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcessClient.java new file mode 100644 index 00000000000..742a6ed1438 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcessClient.java @@ -0,0 +1,13 @@ +// Generated automatically from android.webkit.WebViewRenderProcessClient for testing purposes + +package android.webkit; + +import android.webkit.WebView; +import android.webkit.WebViewRenderProcess; + +abstract public class WebViewRenderProcessClient +{ + public WebViewRenderProcessClient(){} + public abstract void onRenderProcessResponsive(WebView p0, WebViewRenderProcess p1); + public abstract void onRenderProcessUnresponsive(WebView p0, WebViewRenderProcess p1); +} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/widget/AbsoluteLayout.java b/java/ql/test/stubs/google-android-9.0.0/android/widget/AbsoluteLayout.java new file mode 100644 index 00000000000..438d8feca86 --- /dev/null +++ b/java/ql/test/stubs/google-android-9.0.0/android/widget/AbsoluteLayout.java @@ -0,0 +1,23 @@ +// Generated automatically from android.widget.AbsoluteLayout for testing purposes + +package android.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.ViewGroup; + +public class AbsoluteLayout extends ViewGroup +{ + protected AbsoluteLayout() {} + protected ViewGroup.LayoutParams generateDefaultLayoutParams(){ return null; } + protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p0){ return null; } + protected boolean checkLayoutParams(ViewGroup.LayoutParams p0){ return false; } + protected void onLayout(boolean p0, int p1, int p2, int p3, int p4){} + protected void onMeasure(int p0, int p1){} + public AbsoluteLayout(Context p0){} + public AbsoluteLayout(Context p0, AttributeSet p1){} + public AbsoluteLayout(Context p0, AttributeSet p1, int p2){} + public AbsoluteLayout(Context p0, AttributeSet p1, int p2, int p3){} + public ViewGroup.LayoutParams generateLayoutParams(AttributeSet p0){ return null; } + public boolean shouldDelayChildPressedState(){ return false; } +} From f5e72e6e334f668d205e70c49cd18b9de04d6c6f Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 25 Mar 2022 11:51:26 +0100 Subject: [PATCH 0272/1618] Remove getUnderlyingExpr --- .../code/java/security/UnsafeAndroidAccess.qll | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll index 61ffd3de158..3072ad708a4 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll @@ -67,14 +67,6 @@ private class WebViewRef extends Element { } } -private Expr getUnderlyingExpr(Expr e) { - if e instanceof CastExpr or e instanceof UnaryExpr - then - result = getUnderlyingExpr(e.(CastExpr).getExpr()) or - result = getUnderlyingExpr(e.(UnaryExpr).getExpr()) - else result = e -} - /** * Holds if a `WebViewLoadUrlMethod` is called on `webview` * with `urlArg` as its first argument. @@ -84,8 +76,6 @@ private predicate webViewLoadUrl(Argument urlArg, DataFlow::Node webview) { loadUrl.getArgument(0) = urlArg and loadUrl.getMethod() instanceof WebViewLoadUrlMethod | - webview = DataFlow::exprNode(getUnderlyingExpr(loadUrl.getQualifier())) - or webview = DataFlow::getInstanceArgument(loadUrl) or // `webview` is received as a parameter of an event method in a custom `WebViewClient`, @@ -93,10 +83,8 @@ private predicate webViewLoadUrl(Argument urlArg, DataFlow::Node webview) { exists(WebViewClientEventMethod eventMethod, MethodAccess setWebClient | setWebClient.getMethod() instanceof WebViewSetWebViewClientMethod and setWebClient.getArgument(0).getType() = eventMethod.getDeclaringType() and - getUnderlyingExpr(loadUrl.getQualifier()) = eventMethod.getWebViewParameter().getAnAccess() + loadUrl.getQualifier() = eventMethod.getWebViewParameter().getAnAccess() | - webview = DataFlow::exprNode(getUnderlyingExpr(setWebClient.getQualifier())) - or webview = DataFlow::getInstanceArgument(setWebClient) ) ) From dce11f3984f676dc48ef049bc63fc9035b9a1cff Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Fri, 25 Mar 2022 11:55:08 +0100 Subject: [PATCH 0273/1618] Removed unnecessary imports --- java/ql/lib/semmle/code/java/frameworks/android/WebView.qll | 1 - java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll index 5810150bf3e..739fbdc03d8 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll @@ -1,5 +1,4 @@ import java -private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.ExternalFlow /** The class `android.webkit.WebView`. */ diff --git a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll index 3072ad708a4..da6c847d6c0 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll @@ -3,9 +3,8 @@ */ import java -private import semmle.code.java.frameworks.android.WebView private import semmle.code.java.dataflow.DataFlow -private import semmle.code.java.dataflow.ExternalFlow +private import semmle.code.java.frameworks.android.WebView /** * A sink that represents a method that fetches a web resource in Android. From 49259a65750b8687c6bb6963b9272d8c9a8a9c57 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 29 Mar 2022 10:37:57 +0200 Subject: [PATCH 0274/1618] Remove everything related to WebView CSV models This reverts commit c6c72eb. --- .../code/java/dataflow/ExternalFlow.qll | 1 - .../code/java/frameworks/android/WebView.qll | 30 - .../flow-steps/{ParcelTest.java => Test.java} | 2 +- .../flow-steps/WebResourceRequestTest.java | 35 - ...ed => OnActivityResultSourceTest.expected} | 0 ...sTest.ql => OnActivityResultSourceTest.ql} | 0 .../{OnActivityResultSafe.java => Safe.java} | 2 +- ...{OnActivityResultSafe2.java => Safe2.java} | 2 +- .../{OnActivityResult.java => Test.java} | 2 +- ...ment.java => TestActivityAndFragment.java} | 2 +- ...yResultFragment.java => TestFragment.java} | 2 +- ...ityResultMissing.java => TestMissing.java} | 2 +- .../android/sources/WebViewSources.java | 101 -- .../android/app/RemoteAction.java | 30 - .../android/content/ComponentCallbacks2.java | 6 +- .../android/net/http/SslCertificate.java | 34 - .../android/net/http/SslError.java | 28 - .../android/print/PageRange.java | 21 - .../android/print/PrintAttributes.java | 162 -- .../android/print/PrintDocumentAdapter.java | 32 - .../android/print/PrintDocumentInfo.java | 25 - .../textclassifier/ConversationAction.java | 31 - .../textclassifier/ConversationActions.java | 51 - .../view/textclassifier/SelectionEvent.java | 61 - .../textclassifier/TextClassification.java | 48 - .../TextClassificationContext.java | 18 - .../TextClassificationSessionId.java | 17 - .../view/textclassifier/TextClassifier.java | 68 - .../textclassifier/TextClassifierEvent.java | 54 - .../view/textclassifier/TextLanguage.java | 32 - .../view/textclassifier/TextLinks.java | 16 - .../view/textclassifier/TextSelection.java | 40 - .../android/webkit/ClientCertRequest.java | 19 - .../android/webkit/ConsoleMessage.java | 19 - .../android/webkit/DownloadListener.java | 9 - .../webkit/GeolocationPermissions.java | 20 - .../android/webkit/HttpAuthHandler.java | 12 - .../android/webkit/JsPromptResult.java | 10 - .../android/webkit/JsResult.java | 10 - .../android/webkit/PermissionRequest.java | 18 - .../webkit/RenderProcessGoneDetail.java | 11 - .../android/webkit/SafeBrowsingResponse.java | 12 - .../android/webkit/SslErrorHandler.java | 11 - .../android/webkit/ValueCallback.java | 9 - .../android/webkit/WebBackForwardList.java | 16 - .../android/webkit/WebChromeClient.java | 67 - .../android/webkit/WebHistoryItem.java | 15 - .../android/webkit/WebMessage.java | 14 - .../android/webkit/WebMessagePort.java | 19 - .../android/webkit/WebResourceError.java | 10 - .../android/webkit/WebResourceRequest.java | 72 +- .../android/webkit/WebResourceResponse.java | 187 +- .../android/webkit/WebSettings.java | 1505 +++++++++++++++-- .../android/webkit/WebStorage.java | 21 - .../android/webkit/WebView.java | 388 ++--- .../android/webkit/WebViewClient.java | 289 +++- .../android/webkit/WebViewRenderProcess.java | 10 - .../webkit/WebViewRenderProcessClient.java | 13 - .../android/widget/AbsoluteLayout.java | 23 - 59 files changed, 1975 insertions(+), 1789 deletions(-) rename java/ql/test/library-tests/frameworks/android/flow-steps/{ParcelTest.java => Test.java} (99%) delete mode 100644 java/ql/test/library-tests/frameworks/android/flow-steps/WebResourceRequestTest.java rename java/ql/test/library-tests/frameworks/android/sources/{AndroidSourcesTest.expected => OnActivityResultSourceTest.expected} (100%) rename java/ql/test/library-tests/frameworks/android/sources/{AndroidSourcesTest.ql => OnActivityResultSourceTest.ql} (100%) rename java/ql/test/library-tests/frameworks/android/sources/{OnActivityResultSafe.java => Safe.java} (89%) rename java/ql/test/library-tests/frameworks/android/sources/{OnActivityResultSafe2.java => Safe2.java} (87%) rename java/ql/test/library-tests/frameworks/android/sources/{OnActivityResult.java => Test.java} (90%) rename java/ql/test/library-tests/frameworks/android/sources/{OnActivityResultActivityAndFragment.java => TestActivityAndFragment.java} (91%) rename java/ql/test/library-tests/frameworks/android/sources/{OnActivityResultFragment.java => TestFragment.java} (90%) rename java/ql/test/library-tests/frameworks/android/sources/{OnActivityResultMissing.java => TestMissing.java} (91%) delete mode 100644 java/ql/test/library-tests/frameworks/android/sources/WebViewSources.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/app/RemoteAction.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/net/http/SslCertificate.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/net/http/SslError.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/print/PageRange.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/print/PrintAttributes.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentAdapter.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentInfo.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationAction.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationActions.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/SelectionEvent.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassification.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationContext.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationSessionId.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifier.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifierEvent.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLanguage.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextSelection.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/ClientCertRequest.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/ConsoleMessage.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/DownloadListener.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/GeolocationPermissions.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/HttpAuthHandler.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/JsPromptResult.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/JsResult.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/PermissionRequest.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/RenderProcessGoneDetail.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/SafeBrowsingResponse.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/SslErrorHandler.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/ValueCallback.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebBackForwardList.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebChromeClient.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebHistoryItem.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessage.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessagePort.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceError.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebStorage.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcess.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcessClient.java delete mode 100644 java/ql/test/stubs/google-android-9.0.0/android/widget/AbsoluteLayout.java diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index e3edc04078b..a6a31559260 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -86,7 +86,6 @@ private module Frameworks { private import semmle.code.java.frameworks.android.Slice private import semmle.code.java.frameworks.android.SQLite private import semmle.code.java.frameworks.android.Widget - private import semmle.code.java.frameworks.android.WebView private import semmle.code.java.frameworks.android.XssSinks private import semmle.code.java.frameworks.ApacheHttp private import semmle.code.java.frameworks.apache.Collections diff --git a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll index 739fbdc03d8..8dd91f73f65 100644 --- a/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll +++ b/java/ql/lib/semmle/code/java/frameworks/android/WebView.qll @@ -1,5 +1,4 @@ import java -private import semmle.code.java.dataflow.ExternalFlow /** The class `android.webkit.WebView`. */ class TypeWebView extends Class { @@ -75,32 +74,3 @@ class ShouldOverrideUrlLoading extends Method { this.hasName("shouldOverrideUrlLoading") } } - -private class WebkitSourceModels extends SourceModelCsv { - override predicate row(string row) { - row = - [ - "android.webkit;WebViewClient;true;doUpdateVisitedHistory;;;Parameter[1];remote", - "android.webkit;WebViewClient;true;onLoadResource;;;Parameter[1];remote", - "android.webkit;WebViewClient;true;onPageCommitVisible;;;Parameter[1];remote", - "android.webkit;WebViewClient;true;onPageFinished;;;Parameter[1];remote", - "android.webkit;WebViewClient;true;onPageStarted;;;Parameter[1];remote", - "android.webkit;WebViewClient;true;onReceivedError;(WebView,int,String,String);;Parameter[3];remote", - "android.webkit;WebViewClient;true;onReceivedError;(WebView,WebResourceRequest,WebResourceError);;Parameter[1];remote", - "android.webkit;WebViewClient;true;onReceivedHttpError;;;Parameter[1];remote", - "android.webkit;WebViewClient;true;onSafeBrowsingHit;;;Parameter[1];remote", - "android.webkit;WebViewClient;true;shouldInterceptRequest;;;Parameter[1];remote", - "android.webkit;WebViewClient;true;shouldOverrideUrlLoading;;;Parameter[1];remote" - ] - } -} - -private class WebkitSummaryModels extends SummaryModelCsv { - override predicate row(string row) { - row = - [ - "android.webkit;WebResourceRequest;true;getRequestHeaders;;;Argument[-1];ReturnValue;taint", - "android.webkit;WebResourceRequest;true;getUrl;;;Argument[-1];ReturnValue;taint" - ] - } -} diff --git a/java/ql/test/library-tests/frameworks/android/flow-steps/ParcelTest.java b/java/ql/test/library-tests/frameworks/android/flow-steps/Test.java similarity index 99% rename from java/ql/test/library-tests/frameworks/android/flow-steps/ParcelTest.java rename to java/ql/test/library-tests/frameworks/android/flow-steps/Test.java index c65efb537d4..7ac9f2a8490 100644 --- a/java/ql/test/library-tests/frameworks/android/flow-steps/ParcelTest.java +++ b/java/ql/test/library-tests/frameworks/android/flow-steps/Test.java @@ -19,7 +19,7 @@ import java.util.List; import java.util.Map; // Test case generated by GenerateFlowTestCase.ql -public class ParcelTest { +public class Test { Object source() { return null; } void sink(Object o) { } diff --git a/java/ql/test/library-tests/frameworks/android/flow-steps/WebResourceRequestTest.java b/java/ql/test/library-tests/frameworks/android/flow-steps/WebResourceRequestTest.java deleted file mode 100644 index 6c66612b092..00000000000 --- a/java/ql/test/library-tests/frameworks/android/flow-steps/WebResourceRequestTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package generatedtest; - -import android.net.Uri; -import android.webkit.WebResourceRequest; -import java.util.Map; - -// Test case generated by GenerateFlowTestCase.ql -public class WebResourceRequestTest { - - Object source() { - return null; - } - - void sink(Object o) {} - - public void test() throws Exception { - - { - // "android.webkit;WebResourceRequest;true;getRequestHeaders;;;Argument[-1];ReturnValue;taint" - Map out = null; - WebResourceRequest in = (WebResourceRequest) source(); - out = in.getRequestHeaders(); - sink(out); // $ hasTaintFlow - } - { - // "android.webkit;WebResourceRequest;true;getUrl;;;Argument[-1];ReturnValue;taint" - Uri out = null; - WebResourceRequest in = (WebResourceRequest) source(); - out = in.getUrl(); - sink(out); // $ hasTaintFlow - } - - } - -} diff --git a/java/ql/test/library-tests/frameworks/android/sources/AndroidSourcesTest.expected b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.expected similarity index 100% rename from java/ql/test/library-tests/frameworks/android/sources/AndroidSourcesTest.expected rename to java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.expected diff --git a/java/ql/test/library-tests/frameworks/android/sources/AndroidSourcesTest.ql b/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.ql similarity index 100% rename from java/ql/test/library-tests/frameworks/android/sources/AndroidSourcesTest.ql rename to java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSourceTest.ql diff --git a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe.java b/java/ql/test/library-tests/frameworks/android/sources/Safe.java similarity index 89% rename from java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe.java rename to java/ql/test/library-tests/frameworks/android/sources/Safe.java index 8928c9c362b..7a213f5edb0 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe.java +++ b/java/ql/test/library-tests/frameworks/android/sources/Safe.java @@ -4,7 +4,7 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; -public class OnActivityResultSafe extends Activity { +public class Safe extends Activity { void sink(Object o) {} diff --git a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe2.java b/java/ql/test/library-tests/frameworks/android/sources/Safe2.java similarity index 87% rename from java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe2.java rename to java/ql/test/library-tests/frameworks/android/sources/Safe2.java index c860001f4de..9a2e4a6074f 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultSafe2.java +++ b/java/ql/test/library-tests/frameworks/android/sources/Safe2.java @@ -4,7 +4,7 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; -public class OnActivityResultSafe2 extends Activity { +public class Safe2 extends Activity { void sink(Object o) {} diff --git a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResult.java b/java/ql/test/library-tests/frameworks/android/sources/Test.java similarity index 90% rename from java/ql/test/library-tests/frameworks/android/sources/OnActivityResult.java rename to java/ql/test/library-tests/frameworks/android/sources/Test.java index 55378fd4f44..ee694ef7697 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResult.java +++ b/java/ql/test/library-tests/frameworks/android/sources/Test.java @@ -4,7 +4,7 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; -public class OnActivityResult extends Activity { +public class Test extends Activity { void sink(Object o) {} diff --git a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultActivityAndFragment.java b/java/ql/test/library-tests/frameworks/android/sources/TestActivityAndFragment.java similarity index 91% rename from java/ql/test/library-tests/frameworks/android/sources/OnActivityResultActivityAndFragment.java rename to java/ql/test/library-tests/frameworks/android/sources/TestActivityAndFragment.java index 99349d67126..bfa657c6d00 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultActivityAndFragment.java +++ b/java/ql/test/library-tests/frameworks/android/sources/TestActivityAndFragment.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.os.Bundle; import androidx.fragment.app.FragmentTransaction; -public class OnActivityResultActivityAndFragment extends Activity { +public class TestActivityAndFragment extends Activity { private TestFragment frag; diff --git a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultFragment.java b/java/ql/test/library-tests/frameworks/android/sources/TestFragment.java similarity index 90% rename from java/ql/test/library-tests/frameworks/android/sources/OnActivityResultFragment.java rename to java/ql/test/library-tests/frameworks/android/sources/TestFragment.java index 38a952c6e2d..a2073f9b781 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultFragment.java +++ b/java/ql/test/library-tests/frameworks/android/sources/TestFragment.java @@ -4,7 +4,7 @@ import android.app.Fragment; import android.content.Intent; import android.os.Bundle; -public class OnActivityResultFragment extends Fragment { +public class TestFragment extends Fragment { void sink(Object o) {} diff --git a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultMissing.java b/java/ql/test/library-tests/frameworks/android/sources/TestMissing.java similarity index 91% rename from java/ql/test/library-tests/frameworks/android/sources/OnActivityResultMissing.java rename to java/ql/test/library-tests/frameworks/android/sources/TestMissing.java index 8b9317a0872..4dbbfd9ca24 100644 --- a/java/ql/test/library-tests/frameworks/android/sources/OnActivityResultMissing.java +++ b/java/ql/test/library-tests/frameworks/android/sources/TestMissing.java @@ -5,7 +5,7 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; -public class OnActivityResultMissing extends Activity { +public class TestMissing extends Activity { void sink(Object o) {} diff --git a/java/ql/test/library-tests/frameworks/android/sources/WebViewSources.java b/java/ql/test/library-tests/frameworks/android/sources/WebViewSources.java deleted file mode 100644 index 45da71c1c1a..00000000000 --- a/java/ql/test/library-tests/frameworks/android/sources/WebViewSources.java +++ /dev/null @@ -1,101 +0,0 @@ -import android.graphics.Bitmap; -import android.webkit.SafeBrowsingResponse; -import android.webkit.WebResourceRequest; -import android.webkit.WebResourceResponse; -import android.webkit.WebResourceError; -import android.webkit.WebView; -import android.webkit.WebViewClient; - -public class WebViewSources { - - private static void sink(Object o) {} - - public static void test() { - new WebViewClient() { - // "android.webkit;WebViewClient;true;doUpdateVisitedHistory;;;Parameter[1];remote", - @Override - public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { - sink(url); // $ hasValueFlow - } - - // "android.webkit;WebViewClient;true;onLoadResource;;;Parameter[1];remote", - @Override - public void onLoadResource(WebView view, String url) { - sink(url); // $ hasValueFlow - } - - // "android.webkit;WebViewClient;true;onPageCommitVisible;;;Parameter[1];remote", - @Override - public void onPageCommitVisible(WebView view, String url) { - sink(url); // $ hasValueFlow - } - - // "android.webkit;WebViewClient;true;onPageFinished;;;Parameter[1];remote", - @Override - public void onPageFinished(WebView view, String url) { - sink(url); // $ hasValueFlow - } - - // "android.webkit;WebViewClient;true;onPageStarted;;;Parameter[1];remote", - @Override - public void onPageStarted(WebView view, String url, Bitmap favicon) { - sink(url); // $ hasValueFlow - } - - // "android.webkit;WebViewClient;true;onReceivedError;(WebView,int,String,String);;Parameter[3];remote", - @Override - public void onReceivedError(WebView view, int errorCode, String description, - String failingUrl) { - sink(failingUrl); // $ hasValueFlow - } - - // "android.webkit;WebViewClient;true;onReceivedError;(WebView,WebResourceRequest,WebResourceError);;Parameter[1];remote", - @Override - public void onReceivedError(WebView view, WebResourceRequest request, - WebResourceError error) { - sink(request); // $ hasValueFlow - } - - // "android.webkit;WebViewClient;true;onReceivedHttpError;;;Parameter[1];remote", - @Override - public void onReceivedHttpError(WebView view, WebResourceRequest request, - WebResourceResponse errorResponse) { - sink(request); // $ hasValueFlow - } - - // "android.webkit;WebViewClient;true;onSafeBrowsingHit;;;Parameter[1];remote", - @Override - public void onSafeBrowsingHit(WebView view, WebResourceRequest request, int threatType, - SafeBrowsingResponse callback) { - sink(request); // $ hasValueFlow - } - - // "android.webkit;WebViewClient;true;shouldInterceptRequest;;;Parameter[1];remote", - @Override - public WebResourceResponse shouldInterceptRequest(WebView view, - WebResourceRequest request) { - sink(request); // $ hasValueFlow - return null; - } - - @Override - public WebResourceResponse shouldInterceptRequest(WebView view, String url) { - sink(url); // $ hasValueFlow - return null; - } - - // "android.webkit;WebViewClient;true;shouldOverrideUrlLoading;;;Parameter[1];remote" - @Override - public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { - sink(request); // $ hasValueFlow - return false; - } - - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - sink(url); // $ hasValueFlow - return false; - } - }; - } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/app/RemoteAction.java b/java/ql/test/stubs/google-android-9.0.0/android/app/RemoteAction.java deleted file mode 100644 index 58dec2cc81a..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/app/RemoteAction.java +++ /dev/null @@ -1,30 +0,0 @@ -// Generated automatically from android.app.RemoteAction for testing purposes - -package android.app; - -import android.app.PendingIntent; -import android.graphics.drawable.Icon; -import android.os.Parcel; -import android.os.Parcelable; -import java.io.PrintWriter; - -public class RemoteAction implements Parcelable -{ - protected RemoteAction() {} - public CharSequence getContentDescription(){ return null; } - public CharSequence getTitle(){ return null; } - public Icon getIcon(){ return null; } - public PendingIntent getActionIntent(){ return null; } - public RemoteAction clone(){ return null; } - public RemoteAction(Icon p0, CharSequence p1, CharSequence p2, PendingIntent p3){} - public boolean equals(Object p0){ return false; } - public boolean isEnabled(){ return false; } - public boolean shouldShowIcon(){ return false; } - public int describeContents(){ return 0; } - public int hashCode(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public void dump(String p0, PrintWriter p1){} - public void setEnabled(boolean p0){} - public void setShouldShowIcon(boolean p0){} - public void writeToParcel(Parcel p0, int p1){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/content/ComponentCallbacks2.java b/java/ql/test/stubs/google-android-9.0.0/android/content/ComponentCallbacks2.java index f8c83ab104d..d70ac92ec20 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/content/ComponentCallbacks2.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/content/ComponentCallbacks2.java @@ -2,10 +2,7 @@ package android.content; -import android.content.ComponentCallbacks; - -public interface ComponentCallbacks2 extends ComponentCallbacks -{ +public interface ComponentCallbacks2 extends ComponentCallbacks { static int TRIM_MEMORY_BACKGROUND = 0; static int TRIM_MEMORY_COMPLETE = 0; static int TRIM_MEMORY_MODERATE = 0; @@ -13,5 +10,6 @@ public interface ComponentCallbacks2 extends ComponentCallbacks static int TRIM_MEMORY_RUNNING_LOW = 0; static int TRIM_MEMORY_RUNNING_MODERATE = 0; static int TRIM_MEMORY_UI_HIDDEN = 0; + void onTrimMemory(int p0); } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslCertificate.java b/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslCertificate.java deleted file mode 100644 index 8c22fcb0a49..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslCertificate.java +++ /dev/null @@ -1,34 +0,0 @@ -// Generated automatically from android.net.http.SslCertificate for testing purposes - -package android.net.http; - -import android.os.Bundle; -import java.security.cert.X509Certificate; -import java.util.Date; - -public class SslCertificate -{ - protected SslCertificate() {} - public Date getValidNotAfterDate(){ return null; } - public Date getValidNotBeforeDate(){ return null; } - public SslCertificate(String p0, String p1, Date p2, Date p3){} - public SslCertificate(String p0, String p1, String p2, String p3){} - public SslCertificate(X509Certificate p0){} - public SslCertificate.DName getIssuedBy(){ return null; } - public SslCertificate.DName getIssuedTo(){ return null; } - public String getValidNotAfter(){ return null; } - public String getValidNotBefore(){ return null; } - public String toString(){ return null; } - public X509Certificate getX509Certificate(){ return null; } - public class DName - { - protected DName() {} - public DName(String p0){} - public String getCName(){ return null; } - public String getDName(){ return null; } - public String getOName(){ return null; } - public String getUName(){ return null; } - } - public static Bundle saveState(SslCertificate p0){ return null; } - public static SslCertificate restoreState(Bundle p0){ return null; } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslError.java b/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslError.java deleted file mode 100644 index 62feb4a498d..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/net/http/SslError.java +++ /dev/null @@ -1,28 +0,0 @@ -// Generated automatically from android.net.http.SslError for testing purposes - -package android.net.http; - -import android.net.http.SslCertificate; -import java.security.cert.X509Certificate; - -public class SslError -{ - protected SslError() {} - public SslCertificate getCertificate(){ return null; } - public SslError(int p0, SslCertificate p1){} - public SslError(int p0, SslCertificate p1, String p2){} - public SslError(int p0, X509Certificate p1){} - public SslError(int p0, X509Certificate p1, String p2){} - public String getUrl(){ return null; } - public String toString(){ return null; } - public boolean addError(int p0){ return false; } - public boolean hasError(int p0){ return false; } - public int getPrimaryError(){ return 0; } - public static int SSL_DATE_INVALID = 0; - public static int SSL_EXPIRED = 0; - public static int SSL_IDMISMATCH = 0; - public static int SSL_INVALID = 0; - public static int SSL_MAX_ERROR = 0; - public static int SSL_NOTYETVALID = 0; - public static int SSL_UNTRUSTED = 0; -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/print/PageRange.java b/java/ql/test/stubs/google-android-9.0.0/android/print/PageRange.java deleted file mode 100644 index 7e8a182c81d..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/print/PageRange.java +++ /dev/null @@ -1,21 +0,0 @@ -// Generated automatically from android.print.PageRange for testing purposes - -package android.print; - -import android.os.Parcel; -import android.os.Parcelable; - -public class PageRange implements Parcelable -{ - protected PageRange() {} - public PageRange(int p0, int p1){} - public String toString(){ return null; } - public boolean equals(Object p0){ return false; } - public int describeContents(){ return 0; } - public int getEnd(){ return 0; } - public int getStart(){ return 0; } - public int hashCode(){ return 0; } - public static PageRange ALL_PAGES = null; - public static Parcelable.Creator CREATOR = null; - public void writeToParcel(Parcel p0, int p1){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/print/PrintAttributes.java b/java/ql/test/stubs/google-android-9.0.0/android/print/PrintAttributes.java deleted file mode 100644 index 82578cf9f76..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/print/PrintAttributes.java +++ /dev/null @@ -1,162 +0,0 @@ -// Generated automatically from android.print.PrintAttributes for testing purposes - -package android.print; - -import android.content.pm.PackageManager; -import android.os.Parcel; -import android.os.Parcelable; - -public class PrintAttributes implements Parcelable -{ - public PrintAttributes.Margins getMinMargins(){ return null; } - public PrintAttributes.MediaSize getMediaSize(){ return null; } - public PrintAttributes.Resolution getResolution(){ return null; } - public String toString(){ return null; } - public boolean equals(Object p0){ return false; } - public int describeContents(){ return 0; } - public int getColorMode(){ return 0; } - public int getDuplexMode(){ return 0; } - public int hashCode(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public static int COLOR_MODE_COLOR = 0; - public static int COLOR_MODE_MONOCHROME = 0; - public static int DUPLEX_MODE_LONG_EDGE = 0; - public static int DUPLEX_MODE_NONE = 0; - public static int DUPLEX_MODE_SHORT_EDGE = 0; - public void writeToParcel(Parcel p0, int p1){} - static public class Margins - { - protected Margins() {} - public Margins(int p0, int p1, int p2, int p3){} - public String toString(){ return null; } - public boolean equals(Object p0){ return false; } - public int getBottomMils(){ return 0; } - public int getLeftMils(){ return 0; } - public int getRightMils(){ return 0; } - public int getTopMils(){ return 0; } - public int hashCode(){ return 0; } - public static PrintAttributes.Margins NO_MARGINS = null; - } - static public class MediaSize - { - protected MediaSize() {} - public MediaSize(String p0, String p1, int p2, int p3){} - public PrintAttributes.MediaSize asLandscape(){ return null; } - public PrintAttributes.MediaSize asPortrait(){ return null; } - public String getId(){ return null; } - public String getLabel(PackageManager p0){ return null; } - public String toString(){ return null; } - public boolean equals(Object p0){ return false; } - public boolean isPortrait(){ return false; } - public int getHeightMils(){ return 0; } - public int getWidthMils(){ return 0; } - public int hashCode(){ return 0; } - public static PrintAttributes.MediaSize ANSI_C = null; - public static PrintAttributes.MediaSize ANSI_D = null; - public static PrintAttributes.MediaSize ANSI_E = null; - public static PrintAttributes.MediaSize ANSI_F = null; - public static PrintAttributes.MediaSize ISO_A0 = null; - public static PrintAttributes.MediaSize ISO_A1 = null; - public static PrintAttributes.MediaSize ISO_A10 = null; - public static PrintAttributes.MediaSize ISO_A2 = null; - public static PrintAttributes.MediaSize ISO_A3 = null; - public static PrintAttributes.MediaSize ISO_A4 = null; - public static PrintAttributes.MediaSize ISO_A5 = null; - public static PrintAttributes.MediaSize ISO_A6 = null; - public static PrintAttributes.MediaSize ISO_A7 = null; - public static PrintAttributes.MediaSize ISO_A8 = null; - public static PrintAttributes.MediaSize ISO_A9 = null; - public static PrintAttributes.MediaSize ISO_B0 = null; - public static PrintAttributes.MediaSize ISO_B1 = null; - public static PrintAttributes.MediaSize ISO_B10 = null; - public static PrintAttributes.MediaSize ISO_B2 = null; - public static PrintAttributes.MediaSize ISO_B3 = null; - public static PrintAttributes.MediaSize ISO_B4 = null; - public static PrintAttributes.MediaSize ISO_B5 = null; - public static PrintAttributes.MediaSize ISO_B6 = null; - public static PrintAttributes.MediaSize ISO_B7 = null; - public static PrintAttributes.MediaSize ISO_B8 = null; - public static PrintAttributes.MediaSize ISO_B9 = null; - public static PrintAttributes.MediaSize ISO_C0 = null; - public static PrintAttributes.MediaSize ISO_C1 = null; - public static PrintAttributes.MediaSize ISO_C10 = null; - public static PrintAttributes.MediaSize ISO_C2 = null; - public static PrintAttributes.MediaSize ISO_C3 = null; - public static PrintAttributes.MediaSize ISO_C4 = null; - public static PrintAttributes.MediaSize ISO_C5 = null; - public static PrintAttributes.MediaSize ISO_C6 = null; - public static PrintAttributes.MediaSize ISO_C7 = null; - public static PrintAttributes.MediaSize ISO_C8 = null; - public static PrintAttributes.MediaSize ISO_C9 = null; - public static PrintAttributes.MediaSize JIS_B0 = null; - public static PrintAttributes.MediaSize JIS_B1 = null; - public static PrintAttributes.MediaSize JIS_B10 = null; - public static PrintAttributes.MediaSize JIS_B2 = null; - public static PrintAttributes.MediaSize JIS_B3 = null; - public static PrintAttributes.MediaSize JIS_B4 = null; - public static PrintAttributes.MediaSize JIS_B5 = null; - public static PrintAttributes.MediaSize JIS_B6 = null; - public static PrintAttributes.MediaSize JIS_B7 = null; - public static PrintAttributes.MediaSize JIS_B8 = null; - public static PrintAttributes.MediaSize JIS_B9 = null; - public static PrintAttributes.MediaSize JIS_EXEC = null; - public static PrintAttributes.MediaSize JPN_CHOU2 = null; - public static PrintAttributes.MediaSize JPN_CHOU3 = null; - public static PrintAttributes.MediaSize JPN_CHOU4 = null; - public static PrintAttributes.MediaSize JPN_HAGAKI = null; - public static PrintAttributes.MediaSize JPN_KAHU = null; - public static PrintAttributes.MediaSize JPN_KAKU2 = null; - public static PrintAttributes.MediaSize JPN_OE_PHOTO_L = null; - public static PrintAttributes.MediaSize JPN_OUFUKU = null; - public static PrintAttributes.MediaSize JPN_YOU4 = null; - public static PrintAttributes.MediaSize NA_ARCH_A = null; - public static PrintAttributes.MediaSize NA_ARCH_B = null; - public static PrintAttributes.MediaSize NA_ARCH_C = null; - public static PrintAttributes.MediaSize NA_ARCH_D = null; - public static PrintAttributes.MediaSize NA_ARCH_E = null; - public static PrintAttributes.MediaSize NA_ARCH_E1 = null; - public static PrintAttributes.MediaSize NA_FOOLSCAP = null; - public static PrintAttributes.MediaSize NA_GOVT_LETTER = null; - public static PrintAttributes.MediaSize NA_INDEX_3X5 = null; - public static PrintAttributes.MediaSize NA_INDEX_4X6 = null; - public static PrintAttributes.MediaSize NA_INDEX_5X8 = null; - public static PrintAttributes.MediaSize NA_JUNIOR_LEGAL = null; - public static PrintAttributes.MediaSize NA_LEDGER = null; - public static PrintAttributes.MediaSize NA_LEGAL = null; - public static PrintAttributes.MediaSize NA_LETTER = null; - public static PrintAttributes.MediaSize NA_MONARCH = null; - public static PrintAttributes.MediaSize NA_QUARTO = null; - public static PrintAttributes.MediaSize NA_SUPER_B = null; - public static PrintAttributes.MediaSize NA_TABLOID = null; - public static PrintAttributes.MediaSize OM_DAI_PA_KAI = null; - public static PrintAttributes.MediaSize OM_JUURO_KU_KAI = null; - public static PrintAttributes.MediaSize OM_PA_KAI = null; - public static PrintAttributes.MediaSize PRC_1 = null; - public static PrintAttributes.MediaSize PRC_10 = null; - public static PrintAttributes.MediaSize PRC_16K = null; - public static PrintAttributes.MediaSize PRC_2 = null; - public static PrintAttributes.MediaSize PRC_3 = null; - public static PrintAttributes.MediaSize PRC_4 = null; - public static PrintAttributes.MediaSize PRC_5 = null; - public static PrintAttributes.MediaSize PRC_6 = null; - public static PrintAttributes.MediaSize PRC_7 = null; - public static PrintAttributes.MediaSize PRC_8 = null; - public static PrintAttributes.MediaSize PRC_9 = null; - public static PrintAttributes.MediaSize ROC_16K = null; - public static PrintAttributes.MediaSize ROC_8K = null; - public static PrintAttributes.MediaSize UNKNOWN_LANDSCAPE = null; - public static PrintAttributes.MediaSize UNKNOWN_PORTRAIT = null; - } - static public class Resolution - { - protected Resolution() {} - public Resolution(String p0, String p1, int p2, int p3){} - public String getId(){ return null; } - public String getLabel(){ return null; } - public String toString(){ return null; } - public boolean equals(Object p0){ return false; } - public int getHorizontalDpi(){ return 0; } - public int getVerticalDpi(){ return 0; } - public int hashCode(){ return 0; } - } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentAdapter.java b/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentAdapter.java deleted file mode 100644 index bee84a4361f..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentAdapter.java +++ /dev/null @@ -1,32 +0,0 @@ -// Generated automatically from android.print.PrintDocumentAdapter for testing purposes - -package android.print; - -import android.os.Bundle; -import android.os.CancellationSignal; -import android.os.ParcelFileDescriptor; -import android.print.PageRange; -import android.print.PrintAttributes; -import android.print.PrintDocumentInfo; - -abstract public class PrintDocumentAdapter -{ - abstract static public class LayoutResultCallback - { - public void onLayoutCancelled(){} - public void onLayoutFailed(CharSequence p0){} - public void onLayoutFinished(PrintDocumentInfo p0, boolean p1){} - } - abstract static public class WriteResultCallback - { - public void onWriteCancelled(){} - public void onWriteFailed(CharSequence p0){} - public void onWriteFinished(PageRange[] p0){} - } - public PrintDocumentAdapter(){} - public abstract void onLayout(PrintAttributes p0, PrintAttributes p1, CancellationSignal p2, PrintDocumentAdapter.LayoutResultCallback p3, Bundle p4); - public abstract void onWrite(PageRange[] p0, ParcelFileDescriptor p1, CancellationSignal p2, PrintDocumentAdapter.WriteResultCallback p3); - public static String EXTRA_PRINT_PREVIEW = null; - public void onFinish(){} - public void onStart(){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentInfo.java b/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentInfo.java deleted file mode 100644 index bc42c86d4f2..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/print/PrintDocumentInfo.java +++ /dev/null @@ -1,25 +0,0 @@ -// Generated automatically from android.print.PrintDocumentInfo for testing purposes - -package android.print; - -import android.os.Parcel; -import android.os.Parcelable; - -public class PrintDocumentInfo implements Parcelable -{ - protected PrintDocumentInfo() {} - public String getName(){ return null; } - public String toString(){ return null; } - public boolean equals(Object p0){ return false; } - public int describeContents(){ return 0; } - public int getContentType(){ return 0; } - public int getPageCount(){ return 0; } - public int hashCode(){ return 0; } - public long getDataSize(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public static int CONTENT_TYPE_DOCUMENT = 0; - public static int CONTENT_TYPE_PHOTO = 0; - public static int CONTENT_TYPE_UNKNOWN = 0; - public static int PAGE_COUNT_UNKNOWN = 0; - public void writeToParcel(Parcel p0, int p1){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationAction.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationAction.java deleted file mode 100644 index fc35651b52d..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationAction.java +++ /dev/null @@ -1,31 +0,0 @@ -// Generated automatically from android.view.textclassifier.ConversationAction for testing purposes - -package android.view.textclassifier; - -import android.app.RemoteAction; -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; - -public class ConversationAction implements Parcelable -{ - protected ConversationAction() {} - public Bundle getExtras(){ return null; } - public CharSequence getTextReply(){ return null; } - public RemoteAction getAction(){ return null; } - public String getType(){ return null; } - public float getConfidenceScore(){ return 0; } - public int describeContents(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public static String TYPE_CALL_PHONE = null; - public static String TYPE_CREATE_REMINDER = null; - public static String TYPE_OPEN_URL = null; - public static String TYPE_SEND_EMAIL = null; - public static String TYPE_SEND_SMS = null; - public static String TYPE_SHARE_LOCATION = null; - public static String TYPE_TEXT_REPLY = null; - public static String TYPE_TRACK_FLIGHT = null; - public static String TYPE_VIEW_CALENDAR = null; - public static String TYPE_VIEW_MAP = null; - public void writeToParcel(Parcel p0, int p1){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationActions.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationActions.java deleted file mode 100644 index ebe2eac2fd2..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/ConversationActions.java +++ /dev/null @@ -1,51 +0,0 @@ -// Generated automatically from android.view.textclassifier.ConversationActions for testing purposes - -package android.view.textclassifier; - -import android.app.Person; -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; -import android.view.textclassifier.ConversationAction; -import android.view.textclassifier.TextClassifier; -import java.time.ZonedDateTime; -import java.util.List; - -public class ConversationActions implements Parcelable -{ - protected ConversationActions() {} - public ConversationActions(List p0, String p1){} - public List getConversationActions(){ return null; } - public String getId(){ return null; } - public int describeContents(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public void writeToParcel(Parcel p0, int p1){} - static public class Message implements Parcelable - { - protected Message() {} - public Bundle getExtras(){ return null; } - public CharSequence getText(){ return null; } - public Person getAuthor(){ return null; } - public ZonedDateTime getReferenceTime(){ return null; } - public int describeContents(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public static Person PERSON_USER_OTHERS = null; - public static Person PERSON_USER_SELF = null; - public void writeToParcel(Parcel p0, int p1){} - } - static public class Request implements Parcelable - { - protected Request() {} - public Bundle getExtras(){ return null; } - public List getConversation(){ return null; } - public List getHints(){ return null; } - public String getCallingPackageName(){ return null; } - public TextClassifier.EntityConfig getTypeConfig(){ return null; } - public int describeContents(){ return 0; } - public int getMaxSuggestions(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public static String HINT_FOR_IN_APP = null; - public static String HINT_FOR_NOTIFICATION = null; - public void writeToParcel(Parcel p0, int p1){} - } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/SelectionEvent.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/SelectionEvent.java deleted file mode 100644 index 70d75c390b8..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/SelectionEvent.java +++ /dev/null @@ -1,61 +0,0 @@ -// Generated automatically from android.view.textclassifier.SelectionEvent for testing purposes - -package android.view.textclassifier; - -import android.os.Parcel; -import android.os.Parcelable; -import android.view.textclassifier.TextClassification; -import android.view.textclassifier.TextClassificationSessionId; -import android.view.textclassifier.TextSelection; - -public class SelectionEvent implements Parcelable -{ - public String getEntityType(){ return null; } - public String getPackageName(){ return null; } - public String getResultId(){ return null; } - public String getWidgetType(){ return null; } - public String getWidgetVersion(){ return null; } - public String toString(){ return null; } - public TextClassificationSessionId getSessionId(){ return null; } - public boolean equals(Object p0){ return false; } - public int describeContents(){ return 0; } - public int getEnd(){ return 0; } - public int getEventIndex(){ return 0; } - public int getEventType(){ return 0; } - public int getInvocationMethod(){ return 0; } - public int getSmartEnd(){ return 0; } - public int getSmartStart(){ return 0; } - public int getStart(){ return 0; } - public int hashCode(){ return 0; } - public long getDurationSincePreviousEvent(){ return 0; } - public long getDurationSinceSessionStart(){ return 0; } - public long getEventTime(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public static SelectionEvent createSelectionActionEvent(int p0, int p1, int p2){ return null; } - public static SelectionEvent createSelectionActionEvent(int p0, int p1, int p2, TextClassification p3){ return null; } - public static SelectionEvent createSelectionModifiedEvent(int p0, int p1){ return null; } - public static SelectionEvent createSelectionModifiedEvent(int p0, int p1, TextClassification p2){ return null; } - public static SelectionEvent createSelectionModifiedEvent(int p0, int p1, TextSelection p2){ return null; } - public static SelectionEvent createSelectionStartedEvent(int p0, int p1){ return null; } - public static boolean isTerminal(int p0){ return false; } - public static int ACTION_ABANDON = 0; - public static int ACTION_COPY = 0; - public static int ACTION_CUT = 0; - public static int ACTION_DRAG = 0; - public static int ACTION_OTHER = 0; - public static int ACTION_OVERTYPE = 0; - public static int ACTION_PASTE = 0; - public static int ACTION_RESET = 0; - public static int ACTION_SELECT_ALL = 0; - public static int ACTION_SHARE = 0; - public static int ACTION_SMART_SHARE = 0; - public static int EVENT_AUTO_SELECTION = 0; - public static int EVENT_SELECTION_MODIFIED = 0; - public static int EVENT_SELECTION_STARTED = 0; - public static int EVENT_SMART_SELECTION_MULTI = 0; - public static int EVENT_SMART_SELECTION_SINGLE = 0; - public static int INVOCATION_LINK = 0; - public static int INVOCATION_MANUAL = 0; - public static int INVOCATION_UNKNOWN = 0; - public void writeToParcel(Parcel p0, int p1){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassification.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassification.java deleted file mode 100644 index bd89b26c523..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassification.java +++ /dev/null @@ -1,48 +0,0 @@ -// Generated automatically from android.view.textclassifier.TextClassification for testing purposes - -package android.view.textclassifier; - -import android.app.RemoteAction; -import android.content.Intent; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.os.LocaleList; -import android.os.Parcel; -import android.os.Parcelable; -import android.view.View; -import java.time.ZonedDateTime; -import java.util.List; - -public class TextClassification implements Parcelable -{ - protected TextClassification() {} - public Bundle getExtras(){ return null; } - public CharSequence getLabel(){ return null; } - public Drawable getIcon(){ return null; } - public Intent getIntent(){ return null; } - public List getActions(){ return null; } - public String getEntity(int p0){ return null; } - public String getId(){ return null; } - public String getText(){ return null; } - public String toString(){ return null; } - public View.OnClickListener getOnClickListener(){ return null; } - public float getConfidenceScore(String p0){ return 0; } - public int describeContents(){ return 0; } - public int getEntityCount(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public void writeToParcel(Parcel p0, int p1){} - static public class Request implements Parcelable - { - protected Request() {} - public Bundle getExtras(){ return null; } - public CharSequence getText(){ return null; } - public LocaleList getDefaultLocales(){ return null; } - public String getCallingPackageName(){ return null; } - public ZonedDateTime getReferenceTime(){ return null; } - public int describeContents(){ return 0; } - public int getEndIndex(){ return 0; } - public int getStartIndex(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public void writeToParcel(Parcel p0, int p1){} - } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationContext.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationContext.java deleted file mode 100644 index a7ab6240ede..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationContext.java +++ /dev/null @@ -1,18 +0,0 @@ -// Generated automatically from android.view.textclassifier.TextClassificationContext for testing purposes - -package android.view.textclassifier; - -import android.os.Parcel; -import android.os.Parcelable; - -public class TextClassificationContext implements Parcelable -{ - protected TextClassificationContext() {} - public String getPackageName(){ return null; } - public String getWidgetType(){ return null; } - public String getWidgetVersion(){ return null; } - public String toString(){ return null; } - public int describeContents(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public void writeToParcel(Parcel p0, int p1){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationSessionId.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationSessionId.java deleted file mode 100644 index fda8b2a0449..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassificationSessionId.java +++ /dev/null @@ -1,17 +0,0 @@ -// Generated automatically from android.view.textclassifier.TextClassificationSessionId for testing purposes - -package android.view.textclassifier; - -import android.os.Parcel; -import android.os.Parcelable; - -public class TextClassificationSessionId implements Parcelable -{ - public String getValue(){ return null; } - public String toString(){ return null; } - public boolean equals(Object p0){ return false; } - public int describeContents(){ return 0; } - public int hashCode(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public void writeToParcel(Parcel p0, int p1){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifier.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifier.java deleted file mode 100644 index 9f3daa67ea1..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifier.java +++ /dev/null @@ -1,68 +0,0 @@ -// Generated automatically from android.view.textclassifier.TextClassifier for testing purposes - -package android.view.textclassifier; - -import android.os.LocaleList; -import android.os.Parcel; -import android.os.Parcelable; -import android.view.textclassifier.ConversationActions; -import android.view.textclassifier.SelectionEvent; -import android.view.textclassifier.TextClassification; -import android.view.textclassifier.TextClassifierEvent; -import android.view.textclassifier.TextLanguage; -import android.view.textclassifier.TextLinks; -import android.view.textclassifier.TextSelection; -import java.util.Collection; - -public interface TextClassifier -{ - default ConversationActions suggestConversationActions(ConversationActions.Request p0){ return null; } - default TextClassification classifyText(CharSequence p0, int p1, int p2, LocaleList p3){ return null; } - default TextClassification classifyText(TextClassification.Request p0){ return null; } - default TextLanguage detectLanguage(TextLanguage.Request p0){ return null; } - default TextLinks generateLinks(TextLinks.Request p0){ return null; } - default TextSelection suggestSelection(CharSequence p0, int p1, int p2, LocaleList p3){ return null; } - default TextSelection suggestSelection(TextSelection.Request p0){ return null; } - default boolean isDestroyed(){ return false; } - default int getMaxGenerateLinksTextLength(){ return 0; } - default void destroy(){} - default void onSelectionEvent(SelectionEvent p0){} - default void onTextClassifierEvent(TextClassifierEvent p0){} - static String EXTRA_FROM_TEXT_CLASSIFIER = null; - static String HINT_TEXT_IS_EDITABLE = null; - static String HINT_TEXT_IS_NOT_EDITABLE = null; - static String TYPE_ADDRESS = null; - static String TYPE_DATE = null; - static String TYPE_DATE_TIME = null; - static String TYPE_EMAIL = null; - static String TYPE_FLIGHT_NUMBER = null; - static String TYPE_OTHER = null; - static String TYPE_PHONE = null; - static String TYPE_UNKNOWN = null; - static String TYPE_URL = null; - static String WIDGET_TYPE_CLIPBOARD = null; - static String WIDGET_TYPE_CUSTOM_EDITTEXT = null; - static String WIDGET_TYPE_CUSTOM_TEXTVIEW = null; - static String WIDGET_TYPE_CUSTOM_UNSELECTABLE_TEXTVIEW = null; - static String WIDGET_TYPE_EDITTEXT = null; - static String WIDGET_TYPE_EDIT_WEBVIEW = null; - static String WIDGET_TYPE_NOTIFICATION = null; - static String WIDGET_TYPE_TEXTVIEW = null; - static String WIDGET_TYPE_UNKNOWN = null; - static String WIDGET_TYPE_UNSELECTABLE_TEXTVIEW = null; - static String WIDGET_TYPE_WEBVIEW = null; - static TextClassifier NO_OP = null; - static public class EntityConfig implements Parcelable - { - protected EntityConfig() {} - public Collection getHints(){ return null; } - public Collection resolveEntityListModifications(Collection p0){ return null; } - public boolean shouldIncludeTypesFromTextClassifier(){ return false; } - public int describeContents(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public static TextClassifier.EntityConfig create(Collection p0, Collection p1, Collection p2){ return null; } - public static TextClassifier.EntityConfig createWithExplicitEntityList(Collection p0){ return null; } - public static TextClassifier.EntityConfig createWithHints(Collection p0){ return null; } - public void writeToParcel(Parcel p0, int p1){} - } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifierEvent.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifierEvent.java deleted file mode 100644 index ad18e8b78f5..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextClassifierEvent.java +++ /dev/null @@ -1,54 +0,0 @@ -// Generated automatically from android.view.textclassifier.TextClassifierEvent for testing purposes - -package android.view.textclassifier; - -import android.icu.util.ULocale; -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; -import android.view.textclassifier.TextClassificationContext; - -abstract public class TextClassifierEvent implements Parcelable -{ - protected TextClassifierEvent() {} - public Bundle getExtras(){ return null; } - public String getModelName(){ return null; } - public String getResultId(){ return null; } - public String toString(){ return null; } - public String[] getEntityTypes(){ return null; } - public TextClassificationContext getEventContext(){ return null; } - public ULocale getLocale(){ return null; } - public float[] getScores(){ return null; } - public int describeContents(){ return 0; } - public int getEventCategory(){ return 0; } - public int getEventIndex(){ return 0; } - public int getEventType(){ return 0; } - public int[] getActionIndices(){ return null; } - public static Parcelable.Creator CREATOR = null; - public static int CATEGORY_CONVERSATION_ACTIONS = 0; - public static int CATEGORY_LANGUAGE_DETECTION = 0; - public static int CATEGORY_LINKIFY = 0; - public static int CATEGORY_SELECTION = 0; - public static int TYPE_ACTIONS_GENERATED = 0; - public static int TYPE_ACTIONS_SHOWN = 0; - public static int TYPE_AUTO_SELECTION = 0; - public static int TYPE_COPY_ACTION = 0; - public static int TYPE_CUT_ACTION = 0; - public static int TYPE_LINKS_GENERATED = 0; - public static int TYPE_LINK_CLICKED = 0; - public static int TYPE_MANUAL_REPLY = 0; - public static int TYPE_OTHER_ACTION = 0; - public static int TYPE_OVERTYPE = 0; - public static int TYPE_PASTE_ACTION = 0; - public static int TYPE_SELECTION_DESTROYED = 0; - public static int TYPE_SELECTION_DRAG = 0; - public static int TYPE_SELECTION_MODIFIED = 0; - public static int TYPE_SELECTION_RESET = 0; - public static int TYPE_SELECTION_STARTED = 0; - public static int TYPE_SELECT_ALL = 0; - public static int TYPE_SHARE_ACTION = 0; - public static int TYPE_SMART_ACTION = 0; - public static int TYPE_SMART_SELECTION_MULTI = 0; - public static int TYPE_SMART_SELECTION_SINGLE = 0; - public void writeToParcel(Parcel p0, int p1){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLanguage.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLanguage.java deleted file mode 100644 index 8c04c6b43df..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLanguage.java +++ /dev/null @@ -1,32 +0,0 @@ -// Generated automatically from android.view.textclassifier.TextLanguage for testing purposes - -package android.view.textclassifier; - -import android.icu.util.ULocale; -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; - -public class TextLanguage implements Parcelable -{ - protected TextLanguage() {} - public Bundle getExtras(){ return null; } - public String getId(){ return null; } - public String toString(){ return null; } - public ULocale getLocale(int p0){ return null; } - public float getConfidenceScore(ULocale p0){ return 0; } - public int describeContents(){ return 0; } - public int getLocaleHypothesisCount(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public void writeToParcel(Parcel p0, int p1){} - static public class Request implements Parcelable - { - protected Request() {} - public Bundle getExtras(){ return null; } - public CharSequence getText(){ return null; } - public String getCallingPackageName(){ return null; } - public int describeContents(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public void writeToParcel(Parcel p0, int p1){} - } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLinks.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLinks.java index 1e36d672717..597d751996e 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLinks.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextLinks.java @@ -3,14 +3,11 @@ package android.view.textclassifier; import android.os.Bundle; -import android.os.LocaleList; import android.os.Parcel; import android.os.Parcelable; import android.text.Spannable; import android.text.style.ClickableSpan; import android.view.View; -import android.view.textclassifier.TextClassifier; -import java.time.ZonedDateTime; import java.util.Collection; import java.util.function.Function; @@ -32,19 +29,6 @@ public class TextLinks implements Parcelable public static int STATUS_NO_LINKS_FOUND = 0; public static int STATUS_UNSUPPORTED_CHARACTER = 0; public void writeToParcel(Parcel p0, int p1){} - static public class Request implements Parcelable - { - protected Request() {} - public Bundle getExtras(){ return null; } - public CharSequence getText(){ return null; } - public LocaleList getDefaultLocales(){ return null; } - public String getCallingPackageName(){ return null; } - public TextClassifier.EntityConfig getEntityConfig(){ return null; } - public ZonedDateTime getReferenceTime(){ return null; } - public int describeContents(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public void writeToParcel(Parcel p0, int p1){} - } static public class TextLink implements Parcelable { protected TextLink() {} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextSelection.java b/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextSelection.java deleted file mode 100644 index 015715305c4..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/view/textclassifier/TextSelection.java +++ /dev/null @@ -1,40 +0,0 @@ -// Generated automatically from android.view.textclassifier.TextSelection for testing purposes - -package android.view.textclassifier; - -import android.os.Bundle; -import android.os.LocaleList; -import android.os.Parcel; -import android.os.Parcelable; -import android.view.textclassifier.TextClassification; - -public class TextSelection implements Parcelable -{ - protected TextSelection() {} - public Bundle getExtras(){ return null; } - public String getEntity(int p0){ return null; } - public String getId(){ return null; } - public String toString(){ return null; } - public TextClassification getTextClassification(){ return null; } - public float getConfidenceScore(String p0){ return 0; } - public int describeContents(){ return 0; } - public int getEntityCount(){ return 0; } - public int getSelectionEndIndex(){ return 0; } - public int getSelectionStartIndex(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public void writeToParcel(Parcel p0, int p1){} - static public class Request implements Parcelable - { - protected Request() {} - public Bundle getExtras(){ return null; } - public CharSequence getText(){ return null; } - public LocaleList getDefaultLocales(){ return null; } - public String getCallingPackageName(){ return null; } - public boolean shouldIncludeTextClassification(){ return false; } - public int describeContents(){ return 0; } - public int getEndIndex(){ return 0; } - public int getStartIndex(){ return 0; } - public static Parcelable.Creator CREATOR = null; - public void writeToParcel(Parcel p0, int p1){} - } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/ClientCertRequest.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/ClientCertRequest.java deleted file mode 100644 index 0af0587e29d..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/ClientCertRequest.java +++ /dev/null @@ -1,19 +0,0 @@ -// Generated automatically from android.webkit.ClientCertRequest for testing purposes - -package android.webkit; - -import java.security.Principal; -import java.security.PrivateKey; -import java.security.cert.X509Certificate; - -abstract public class ClientCertRequest -{ - public ClientCertRequest(){} - public abstract Principal[] getPrincipals(); - public abstract String getHost(); - public abstract String[] getKeyTypes(); - public abstract int getPort(); - public abstract void cancel(); - public abstract void ignore(); - public abstract void proceed(PrivateKey p0, X509Certificate[] p1); -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/ConsoleMessage.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/ConsoleMessage.java deleted file mode 100644 index 9b50c6f7e6e..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/ConsoleMessage.java +++ /dev/null @@ -1,19 +0,0 @@ -// Generated automatically from android.webkit.ConsoleMessage for testing purposes - -package android.webkit; - - -public class ConsoleMessage -{ - protected ConsoleMessage() {} - public ConsoleMessage(String p0, String p1, int p2, ConsoleMessage.MessageLevel p3){} - public ConsoleMessage.MessageLevel messageLevel(){ return null; } - public String message(){ return null; } - public String sourceId(){ return null; } - public int lineNumber(){ return 0; } - static public enum MessageLevel - { - DEBUG, ERROR, LOG, TIP, WARNING; - private MessageLevel() {} - } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/DownloadListener.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/DownloadListener.java deleted file mode 100644 index 2620faf369c..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/DownloadListener.java +++ /dev/null @@ -1,9 +0,0 @@ -// Generated automatically from android.webkit.DownloadListener for testing purposes - -package android.webkit; - - -public interface DownloadListener -{ - void onDownloadStart(String p0, String p1, String p2, String p3, long p4); -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/GeolocationPermissions.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/GeolocationPermissions.java deleted file mode 100644 index 8edb6b2f3dd..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/GeolocationPermissions.java +++ /dev/null @@ -1,20 +0,0 @@ -// Generated automatically from android.webkit.GeolocationPermissions for testing purposes - -package android.webkit; - -import android.webkit.ValueCallback; -import java.util.Set; - -public class GeolocationPermissions -{ - public static GeolocationPermissions getInstance(){ return null; } - public void allow(String p0){} - public void clear(String p0){} - public void clearAll(){} - public void getAllowed(String p0, ValueCallback p1){} - public void getOrigins(ValueCallback> p0){} - static public interface Callback - { - void invoke(String p0, boolean p1, boolean p2); - } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/HttpAuthHandler.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/HttpAuthHandler.java deleted file mode 100644 index c2bde7e3ffc..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/HttpAuthHandler.java +++ /dev/null @@ -1,12 +0,0 @@ -// Generated automatically from android.webkit.HttpAuthHandler for testing purposes - -package android.webkit; - -import android.os.Handler; - -public class HttpAuthHandler extends Handler -{ - public boolean useHttpAuthUsernamePassword(){ return false; } - public void cancel(){} - public void proceed(String p0, String p1){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsPromptResult.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsPromptResult.java deleted file mode 100644 index 835d76105a0..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsPromptResult.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from android.webkit.JsPromptResult for testing purposes - -package android.webkit; - -import android.webkit.JsResult; - -public class JsPromptResult extends JsResult -{ - public void confirm(String p0){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsResult.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsResult.java deleted file mode 100644 index c8168438130..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/JsResult.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from android.webkit.JsResult for testing purposes - -package android.webkit; - - -public class JsResult -{ - public final void cancel(){} - public final void confirm(){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/PermissionRequest.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/PermissionRequest.java deleted file mode 100644 index da64b442084..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/PermissionRequest.java +++ /dev/null @@ -1,18 +0,0 @@ -// Generated automatically from android.webkit.PermissionRequest for testing purposes - -package android.webkit; - -import android.net.Uri; - -abstract public class PermissionRequest -{ - public PermissionRequest(){} - public abstract String[] getResources(); - public abstract Uri getOrigin(); - public abstract void deny(); - public abstract void grant(String[] p0); - public static String RESOURCE_AUDIO_CAPTURE = null; - public static String RESOURCE_MIDI_SYSEX = null; - public static String RESOURCE_PROTECTED_MEDIA_ID = null; - public static String RESOURCE_VIDEO_CAPTURE = null; -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/RenderProcessGoneDetail.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/RenderProcessGoneDetail.java deleted file mode 100644 index 1e2086fdf3b..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/RenderProcessGoneDetail.java +++ /dev/null @@ -1,11 +0,0 @@ -// Generated automatically from android.webkit.RenderProcessGoneDetail for testing purposes - -package android.webkit; - - -abstract public class RenderProcessGoneDetail -{ - public RenderProcessGoneDetail(){} - public abstract boolean didCrash(); - public abstract int rendererPriorityAtExit(); -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/SafeBrowsingResponse.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/SafeBrowsingResponse.java deleted file mode 100644 index 751d7e76530..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/SafeBrowsingResponse.java +++ /dev/null @@ -1,12 +0,0 @@ -// Generated automatically from android.webkit.SafeBrowsingResponse for testing purposes - -package android.webkit; - - -abstract public class SafeBrowsingResponse -{ - public SafeBrowsingResponse(){} - public abstract void backToSafety(boolean p0); - public abstract void proceed(boolean p0); - public abstract void showInterstitial(boolean p0); -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/SslErrorHandler.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/SslErrorHandler.java deleted file mode 100644 index ab56fed23fa..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/SslErrorHandler.java +++ /dev/null @@ -1,11 +0,0 @@ -// Generated automatically from android.webkit.SslErrorHandler for testing purposes - -package android.webkit; - -import android.os.Handler; - -public class SslErrorHandler extends Handler -{ - public void cancel(){} - public void proceed(){} -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/ValueCallback.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/ValueCallback.java deleted file mode 100644 index 0cdf8831825..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/ValueCallback.java +++ /dev/null @@ -1,9 +0,0 @@ -// Generated automatically from android.webkit.ValueCallback for testing purposes - -package android.webkit; - - -public interface ValueCallback -{ - void onReceiveValue(T p0); -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebBackForwardList.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebBackForwardList.java deleted file mode 100644 index 4fe7956b562..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebBackForwardList.java +++ /dev/null @@ -1,16 +0,0 @@ -// Generated automatically from android.webkit.WebBackForwardList for testing purposes - -package android.webkit; - -import android.webkit.WebHistoryItem; -import java.io.Serializable; - -abstract public class WebBackForwardList implements Cloneable, Serializable -{ - protected abstract WebBackForwardList clone(); - public WebBackForwardList(){} - public abstract WebHistoryItem getCurrentItem(); - public abstract WebHistoryItem getItemAtIndex(int p0); - public abstract int getCurrentIndex(); - public abstract int getSize(); -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebChromeClient.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebChromeClient.java deleted file mode 100644 index 75b1f938d2d..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebChromeClient.java +++ /dev/null @@ -1,67 +0,0 @@ -// Generated automatically from android.webkit.WebChromeClient for testing purposes - -package android.webkit; - -import android.content.Intent; -import android.graphics.Bitmap; -import android.net.Uri; -import android.os.Message; -import android.view.View; -import android.webkit.ConsoleMessage; -import android.webkit.GeolocationPermissions; -import android.webkit.JsPromptResult; -import android.webkit.JsResult; -import android.webkit.PermissionRequest; -import android.webkit.ValueCallback; -import android.webkit.WebStorage; -import android.webkit.WebView; - -public class WebChromeClient -{ - abstract static public class FileChooserParams - { - public FileChooserParams(){} - public abstract CharSequence getTitle(); - public abstract Intent createIntent(); - public abstract String getFilenameHint(); - public abstract String[] getAcceptTypes(); - public abstract boolean isCaptureEnabled(); - public abstract int getMode(); - public static Uri[] parseResult(int p0, Intent p1){ return null; } - public static int MODE_OPEN = 0; - public static int MODE_OPEN_MULTIPLE = 0; - public static int MODE_SAVE = 0; - } - public Bitmap getDefaultVideoPoster(){ return null; } - public View getVideoLoadingProgressView(){ return null; } - public WebChromeClient(){} - public boolean onConsoleMessage(ConsoleMessage p0){ return false; } - public boolean onCreateWindow(WebView p0, boolean p1, boolean p2, Message p3){ return false; } - public boolean onJsAlert(WebView p0, String p1, String p2, JsResult p3){ return false; } - public boolean onJsBeforeUnload(WebView p0, String p1, String p2, JsResult p3){ return false; } - public boolean onJsConfirm(WebView p0, String p1, String p2, JsResult p3){ return false; } - public boolean onJsPrompt(WebView p0, String p1, String p2, String p3, JsPromptResult p4){ return false; } - public boolean onJsTimeout(){ return false; } - public boolean onShowFileChooser(WebView p0, ValueCallback p1, WebChromeClient.FileChooserParams p2){ return false; } - public void getVisitedHistory(ValueCallback p0){} - public void onCloseWindow(WebView p0){} - public void onConsoleMessage(String p0, int p1, String p2){} - public void onExceededDatabaseQuota(String p0, String p1, long p2, long p3, long p4, WebStorage.QuotaUpdater p5){} - public void onGeolocationPermissionsHidePrompt(){} - public void onGeolocationPermissionsShowPrompt(String p0, GeolocationPermissions.Callback p1){} - public void onHideCustomView(){} - public void onPermissionRequest(PermissionRequest p0){} - public void onPermissionRequestCanceled(PermissionRequest p0){} - public void onProgressChanged(WebView p0, int p1){} - public void onReachedMaxAppCacheSize(long p0, long p1, WebStorage.QuotaUpdater p2){} - public void onReceivedIcon(WebView p0, Bitmap p1){} - public void onReceivedTitle(WebView p0, String p1){} - public void onReceivedTouchIconUrl(WebView p0, String p1, boolean p2){} - public void onRequestFocus(WebView p0){} - public void onShowCustomView(View p0, WebChromeClient.CustomViewCallback p1){} - public void onShowCustomView(View p0, int p1, WebChromeClient.CustomViewCallback p2){} - static public interface CustomViewCallback - { - void onCustomViewHidden(); - } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebHistoryItem.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebHistoryItem.java deleted file mode 100644 index 637467d888f..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebHistoryItem.java +++ /dev/null @@ -1,15 +0,0 @@ -// Generated automatically from android.webkit.WebHistoryItem for testing purposes - -package android.webkit; - -import android.graphics.Bitmap; - -abstract public class WebHistoryItem implements Cloneable -{ - protected abstract WebHistoryItem clone(); - public WebHistoryItem(){} - public abstract Bitmap getFavicon(); - public abstract String getOriginalUrl(); - public abstract String getTitle(); - public abstract String getUrl(); -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessage.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessage.java deleted file mode 100644 index 6e02214c1df..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessage.java +++ /dev/null @@ -1,14 +0,0 @@ -// Generated automatically from android.webkit.WebMessage for testing purposes - -package android.webkit; - -import android.webkit.WebMessagePort; - -public class WebMessage -{ - protected WebMessage() {} - public String getData(){ return null; } - public WebMessage(String p0){} - public WebMessage(String p0, WebMessagePort[] p1){} - public WebMessagePort[] getPorts(){ return null; } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessagePort.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessagePort.java deleted file mode 100644 index 05ece05e0a3..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebMessagePort.java +++ /dev/null @@ -1,19 +0,0 @@ -// Generated automatically from android.webkit.WebMessagePort for testing purposes - -package android.webkit; - -import android.os.Handler; -import android.webkit.WebMessage; - -abstract public class WebMessagePort -{ - abstract static public class WebMessageCallback - { - public WebMessageCallback(){} - public void onMessage(WebMessagePort p0, WebMessage p1){} - } - public abstract void close(); - public abstract void postMessage(WebMessage p0); - public abstract void setWebMessageCallback(WebMessagePort.WebMessageCallback p0); - public abstract void setWebMessageCallback(WebMessagePort.WebMessageCallback p0, Handler p1); -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceError.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceError.java deleted file mode 100644 index 115aaff3dec..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceError.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from android.webkit.WebResourceError for testing purposes - -package android.webkit; - - -abstract public class WebResourceError -{ - public abstract CharSequence getDescription(); - public abstract int getErrorCode(); -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceRequest.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceRequest.java index 7a195a1518a..9732ca67ae0 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceRequest.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceRequest.java @@ -1,16 +1,72 @@ -// Generated automatically from android.webkit.WebResourceRequest for testing purposes - +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package android.webkit; import android.net.Uri; import java.util.Map; -public interface WebResourceRequest -{ - Map getRequestHeaders(); - String getMethod(); +/** + * Encompasses parameters to the {@link WebViewClient#shouldInterceptRequest} + * method. + */ +public interface WebResourceRequest { + /** + * Gets the URL for which the resource request was made. + * + * @return the URL for which the resource request was made. + */ Uri getUrl(); - boolean hasGesture(); + + /** + * Gets whether the request was made for the main frame. + * + * @return whether the request was made for the main frame. Will be + * {@code false} for iframes, for example. + */ boolean isForMainFrame(); + + /** + * Gets whether the request was a result of a server-side redirect. + * + * @return whether the request was a result of a server-side redirect. + */ boolean isRedirect(); -} + + /** + * Gets whether a gesture (such as a click) was associated with the request. For + * security reasons in certain situations this method may return {@code false} + * even though the sequence of events which caused the request to be created was + * initiated by a user gesture. + * + * @return whether a gesture was associated with the request. + */ + boolean hasGesture(); + + /** + * Gets the method associated with the request, for example "GET". + * + * @return the method associated with the request. + */ + String getMethod(); + + /** + * Gets the headers associated with the request. These are represented as a + * mapping of header name to header value. + * + * @return the headers associated with the request. + */ + Map getRequestHeaders(); +} \ No newline at end of file diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java index 9e0e0225644..1a2ff3cc1da 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebResourceResponse.java @@ -1,24 +1,173 @@ -// Generated automatically from android.webkit.WebResourceResponse for testing purposes - +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package android.webkit; import java.io.InputStream; import java.util.Map; -public class WebResourceResponse -{ - protected WebResourceResponse() {} - public InputStream getData(){ return null; } - public Map getResponseHeaders(){ return null; } - public String getEncoding(){ return null; } - public String getMimeType(){ return null; } - public String getReasonPhrase(){ return null; } - public WebResourceResponse(String p0, String p1, InputStream p2){} - public WebResourceResponse(String p0, String p1, int p2, String p3, Map p4, InputStream p5){} - public int getStatusCode(){ return 0; } - public void setData(InputStream p0){} - public void setEncoding(String p0){} - public void setMimeType(String p0){} - public void setResponseHeaders(Map p0){} - public void setStatusCodeAndReasonPhrase(int p0, String p1){} -} +/** + * Encapsulates a resource response. Applications can return an instance of this + * class from {@link WebViewClient#shouldInterceptRequest} to provide a custom + * response when the WebView requests a particular resource. + */ +public class WebResourceResponse { + /** + * Constructs a resource response with the given MIME type, encoding, and input + * stream. Callers must implement {@link InputStream#read(byte[]) + * InputStream.read(byte[])} for the input stream. + * + * @param mimeType the resource response's MIME type, for example text/html + * @param encoding the resource response's encoding + * @param data the input stream that provides the resource response's data. + * Must not be a StringBufferInputStream. + */ + public WebResourceResponse(String mimeType, String encoding, InputStream data) { + } + + /** + * Constructs a resource response with the given parameters. Callers must + * implement {@link InputStream#read(byte[]) InputStream.read(byte[])} for the + * input stream. + * + * @param mimeType the resource response's MIME type, for example + * text/html + * @param encoding the resource response's encoding + * @param statusCode the status code needs to be in the ranges [100, 299], + * [400, 599]. Causing a redirect by specifying a 3xx + * code is not supported. + * @param reasonPhrase the phrase describing the status code, for example + * "OK". Must be non-empty. + * @param responseHeaders the resource response's headers represented as a + * mapping of header name -> header value. + * @param data the input stream that provides the resource response's + * data. Must not be a StringBufferInputStream. + */ + public WebResourceResponse(String mimeType, String encoding, int statusCode, String reasonPhrase, + Map responseHeaders, InputStream data) { + } + + /** + * Sets the resource response's MIME type, for example "text/html". + * + * @param mimeType The resource response's MIME type + */ + public void setMimeType(String mimeType) { + } + + /** + * Gets the resource response's MIME type. + * + * @return The resource response's MIME type + */ + public String getMimeType() { + return null; + } + + /** + * Sets the resource response's encoding, for example "UTF-8". This is + * used to decode the data from the input stream. + * + * @param encoding The resource response's encoding + */ + public void setEncoding(String encoding) { + } + + /** + * Gets the resource response's encoding. + * + * @return The resource response's encoding + */ + public String getEncoding() { + return null; + } + + /** + * Sets the resource response's status code and reason phrase. + * + * @param statusCode the status code needs to be in the ranges [100, 299], + * [400, 599]. Causing a redirect by specifying a 3xx code + * is not supported. + * @param reasonPhrase the phrase describing the status code, for example "OK". + * Must be non-empty. + */ + public void setStatusCodeAndReasonPhrase(int statusCode, String reasonPhrase) { + } + + /** + * Gets the resource response's status code. + * + * @return The resource response's status code. + */ + public int getStatusCode() { + return -1; + } + + /** + * Gets the description of the resource response's status code. + * + * @return The description of the resource response's status code. + */ + public String getReasonPhrase() { + return null; + } + + /** + * Sets the headers for the resource response. + * + * @param headers Mapping of header name -> header value. + */ + public void setResponseHeaders(Map headers) { + } + + /** + * Gets the headers for the resource response. + * + * @return The headers for the resource response. + */ + public Map getResponseHeaders() { + return null; + } + + /** + * Sets the input stream that provides the resource response's data. Callers + * must implement {@link InputStream#read(byte[]) InputStream.read(byte[])}. + * + * @param data the input stream that provides the resource response's data. Must + * not be a StringBufferInputStream. + */ + public void setData(InputStream data) { + } + + /** + * Gets the input stream that provides the resource response's data. + * + * @return The input stream that provides the resource response's data + */ + public InputStream getData() { + return null; + } + + /** + * The internal version of the constructor that doesn't perform arguments + * checks. + * + * @hide + */ + public WebResourceResponse(boolean immutable, String mimeType, String encoding, int statusCode, String reasonPhrase, + Map responseHeaders, InputStream data) { + } + +} \ No newline at end of file diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java index 60d01fe2b97..33c9a1b8a57 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebSettings.java @@ -1,150 +1,1379 @@ -// Generated automatically from android.webkit.WebSettings for testing purposes - +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package android.webkit; +import java.net.CookieManager; import android.content.Context; -abstract public class WebSettings -{ - public WebSettings(){} - public WebSettings.TextSize getTextSize(){ return null; } - public abstract String getCursiveFontFamily(); - public abstract String getDatabasePath(); - public abstract String getDefaultTextEncodingName(); - public abstract String getFantasyFontFamily(); - public abstract String getFixedFontFamily(); - public abstract String getSansSerifFontFamily(); - public abstract String getSerifFontFamily(); - public abstract String getStandardFontFamily(); - public abstract String getUserAgentString(); - public abstract WebSettings.LayoutAlgorithm getLayoutAlgorithm(); - public abstract WebSettings.PluginState getPluginState(); - public abstract WebSettings.ZoomDensity getDefaultZoom(); - public abstract boolean enableSmoothTransition(); - public abstract boolean getAllowContentAccess(); - public abstract boolean getAllowFileAccess(); - public abstract boolean getAllowFileAccessFromFileURLs(); - public abstract boolean getAllowUniversalAccessFromFileURLs(); - public abstract boolean getBlockNetworkImage(); - public abstract boolean getBlockNetworkLoads(); - public abstract boolean getBuiltInZoomControls(); - public abstract boolean getDatabaseEnabled(); - public abstract boolean getDisplayZoomControls(); - public abstract boolean getDomStorageEnabled(); - public abstract boolean getJavaScriptCanOpenWindowsAutomatically(); - public abstract boolean getJavaScriptEnabled(); - public abstract boolean getLightTouchEnabled(); - public abstract boolean getLoadWithOverviewMode(); - public abstract boolean getLoadsImagesAutomatically(); - public abstract boolean getMediaPlaybackRequiresUserGesture(); - public abstract boolean getOffscreenPreRaster(); - public abstract boolean getSafeBrowsingEnabled(); - public abstract boolean getSaveFormData(); - public abstract boolean getSavePassword(); - public abstract boolean getUseWideViewPort(); - public abstract boolean supportMultipleWindows(); +/** + * Manages settings state for a WebView. When a WebView is first created, it + * obtains a set of default settings. These default settings will be returned + * from any getter call. A {@code WebSettings} object obtained from + * {@link WebView#getSettings()} is tied to the life of the WebView. If a + * WebView has been destroyed, any method call on {@code WebSettings} will throw + * an {@link IllegalStateException}. + */ +// This is an abstract base class: concrete WebViewProviders must +// create a class derived from this, and return an instance of it in the +// WebViewProvider.getWebSettingsProvider() method implementation. +public abstract class WebSettings { + /** + * Enum for controlling the layout of html. + *

      + *
    • {@code NORMAL} means no rendering changes. This is the recommended choice + * for maximum compatibility across different platforms and Android + * versions.
    • + *
    • {@code SINGLE_COLUMN} moves all content into one column that is the width + * of the view.
    • + *
    • {@code NARROW_COLUMNS} makes all columns no wider than the screen if + * possible. Only use this for API levels prior to + * {@link android.os.Build.VERSION_CODES#KITKAT}.
    • + *
    • {@code TEXT_AUTOSIZING} boosts font size of paragraphs based on + * heuristics to make the text readable when viewing a wide-viewport layout in + * the overview mode. It is recommended to enable zoom support + * {@link #setSupportZoom} when using this mode. Supported from API level + * {@link android.os.Build.VERSION_CODES#KITKAT}
    • + *
    + */ + // XXX: These must match LayoutAlgorithm in Settings.h in WebCore. + public enum LayoutAlgorithm { + NORMAL, + /** + * @deprecated This algorithm is now obsolete. + */ + @Deprecated + SINGLE_COLUMN, + /** + * @deprecated This algorithm is now obsolete. + */ + @Deprecated + NARROW_COLUMNS, TEXT_AUTOSIZING + } + + /** + * Enum for specifying the text size. + *
      + *
    • SMALLEST is 50%
    • + *
    • SMALLER is 75%
    • + *
    • NORMAL is 100%
    • + *
    • LARGER is 150%
    • + *
    • LARGEST is 200%
    • + *
    + * + * @deprecated Use {@link WebSettings#setTextZoom(int)} and + * {@link WebSettings#getTextZoom()} instead. + */ + @Deprecated + public enum TextSize { + SMALLEST(50), SMALLER(75), NORMAL(100), LARGER(150), LARGEST(200); + + TextSize(int size) { + value = size; + } + + int value; + } + + /** + * Enum for specifying the WebView's desired density. + *
      + *
    • {@code FAR} makes 100% looking like in 240dpi
    • + *
    • {@code MEDIUM} makes 100% looking like in 160dpi
    • + *
    • {@code CLOSE} makes 100% looking like in 120dpi
    • + *
    + */ + public enum ZoomDensity { + FAR(150), // 240dpi + MEDIUM(100), // 160dpi + CLOSE(75); // 120dpi + + ZoomDensity(int size) { + value = size; + } + + /** + * @hide Only for use by WebViewProvider implementations + */ + public int getValue() { + return value; + } + + int value; + } + + public @interface CacheMode { + } + + /** + * Default cache usage mode. If the navigation type doesn't impose any specific + * behavior, use cached resources when they are available and not expired, + * otherwise load resources from the network. Use with {@link #setCacheMode}. + */ + public static final int LOAD_DEFAULT = -1; + /** + * Normal cache usage mode. Use with {@link #setCacheMode}. + * + * @deprecated This value is obsolete, as from API level + * {@link android.os.Build.VERSION_CODES#HONEYCOMB} and onwards it + * has the same effect as {@link #LOAD_DEFAULT}. + */ + @Deprecated + public static final int LOAD_NORMAL = 0; + /** + * Use cached resources when they are available, even if they have expired. + * Otherwise load resources from the network. Use with {@link #setCacheMode}. + */ + public static final int LOAD_CACHE_ELSE_NETWORK = 1; + /** + * Don't use the cache, load from the network. Use with {@link #setCacheMode}. + */ + public static final int LOAD_NO_CACHE = 2; + /** + * Don't use the network, load from the cache. Use with {@link #setCacheMode}. + */ + public static final int LOAD_CACHE_ONLY = 3; + + public enum RenderPriority { + NORMAL, HIGH, LOW + } + + /** + * The plugin state effects how plugins are treated on a page. ON means that any + * object will be loaded even if a plugin does not exist to handle the content. + * ON_DEMAND means that if there is a plugin installed that can handle the + * content, a placeholder is shown until the user clicks on the placeholder. + * Once clicked, the plugin will be enabled on the page. OFF means that all + * plugins will be turned off and any fallback content will be used. + */ + public enum PluginState { + ON, ON_DEMAND, OFF + } + + /** + * Used with {@link #setMixedContentMode} + * + * In this mode, the WebView will allow a secure origin to load content from any + * other origin, even if that origin is insecure. This is the least secure mode + * of operation for the WebView, and where possible apps should not set this + * mode. + */ + public static final int MIXED_CONTENT_ALWAYS_ALLOW = 0; + /** + * Used with {@link #setMixedContentMode} + * + * In this mode, the WebView will not allow a secure origin to load content from + * an insecure origin. This is the preferred and most secure mode of operation + * for the WebView and apps are strongly advised to use this mode. + */ + public static final int MIXED_CONTENT_NEVER_ALLOW = 1; + /** + * Used with {@link #setMixedContentMode} + * + * In this mode, the WebView will attempt to be compatible with the approach of + * a modern web browser with regard to mixed content. Some insecure content may + * be allowed to be loaded by a secure origin and other types of content will be + * blocked. The types of content are allowed or blocked may change release to + * release and are not explicitly defined. + * + * This mode is intended to be used by apps that are not in control of the + * content that they render but desire to operate in a reasonably secure + * environment. For highest security, apps are recommended to use + * {@link #MIXED_CONTENT_NEVER_ALLOW}. + */ + public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2; + + /** + * Enables dumping the pages navigation cache to a text file. The default is + * {@code false}. + * + * @deprecated This method is now obsolete. + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} + */ + @Deprecated + public abstract void setNavDump(boolean enabled); + + /** + * Gets whether dumping the navigation cache is enabled. + * + * @return whether dumping the navigation cache is enabled + * @see #setNavDump + * @deprecated This method is now obsolete. + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} + */ + @Deprecated + public abstract boolean getNavDump(); + + /** + * Sets whether the WebView should support zooming using its on-screen zoom + * controls and gestures. The particular zoom mechanisms that should be used can + * be set with {@link #setBuiltInZoomControls}. This setting does not affect + * zooming performed using the {@link WebView#zoomIn()} and + * {@link WebView#zoomOut()} methods. The default is {@code true}. + * + * @param support whether the WebView should support zoom + */ + public abstract void setSupportZoom(boolean support); + + /** + * Gets whether the WebView supports zoom. + * + * @return {@code true} if the WebView supports zoom + * @see #setSupportZoom + */ public abstract boolean supportZoom(); - public abstract int getCacheMode(); - public abstract int getDefaultFixedFontSize(); - public abstract int getDefaultFontSize(); - public abstract int getDisabledActionModeMenuItems(); - public abstract int getMinimumFontSize(); - public abstract int getMinimumLogicalFontSize(); - public abstract int getMixedContentMode(); + + /** + * Sets whether the WebView requires a user gesture to play media. The default + * is {@code true}. + * + * @param require whether the WebView requires a user gesture to play media + */ + public abstract void setMediaPlaybackRequiresUserGesture(boolean require); + + /** + * Gets whether the WebView requires a user gesture to play media. + * + * @return {@code true} if the WebView requires a user gesture to play media + * @see #setMediaPlaybackRequiresUserGesture + */ + public abstract boolean getMediaPlaybackRequiresUserGesture(); + + /** + * Sets whether the WebView should use its built-in zoom mechanisms. The + * built-in zoom mechanisms comprise on-screen zoom controls, which are + * displayed over the WebView's content, and the use of a pinch gesture to + * control zooming. Whether or not these on-screen controls are displayed can be + * set with {@link #setDisplayZoomControls}. The default is {@code false}. + *

    + * The built-in mechanisms are the only currently supported zoom mechanisms, so + * it is recommended that this setting is always enabled. + * + * @param enabled whether the WebView should use its built-in zoom mechanisms + */ + // This method was intended to select between the built-in zoom mechanisms + // and the separate zoom controls. The latter were obtained using + // {@link WebView#getZoomControls}, which is now hidden. + public abstract void setBuiltInZoomControls(boolean enabled); + + /** + * Gets whether the zoom mechanisms built into WebView are being used. + * + * @return {@code true} if the zoom mechanisms built into WebView are being used + * @see #setBuiltInZoomControls + */ + public abstract boolean getBuiltInZoomControls(); + + /** + * Sets whether the WebView should display on-screen zoom controls when using + * the built-in zoom mechanisms. See {@link #setBuiltInZoomControls}. The + * default is {@code true}. + * + * @param enabled whether the WebView should display on-screen zoom controls + */ + public abstract void setDisplayZoomControls(boolean enabled); + + /** + * Gets whether the WebView displays on-screen zoom controls when using the + * built-in zoom mechanisms. + * + * @return {@code true} if the WebView displays on-screen zoom controls when + * using the built-in zoom mechanisms + * @see #setDisplayZoomControls + */ + public abstract boolean getDisplayZoomControls(); + + /** + * Enables or disables file access within WebView. File access is enabled by + * default. Note that this enables or disables file system access only. Assets + * and resources are still accessible using file:///android_asset and + * file:///android_res. + */ + public abstract void setAllowFileAccess(boolean allow); + + /** + * Gets whether this WebView supports file access. + * + * @see #setAllowFileAccess + */ + public abstract boolean getAllowFileAccess(); + + /** + * Enables or disables content URL access within WebView. Content URL access + * allows WebView to load content from a content provider installed in the + * system. The default is enabled. + */ + public abstract void setAllowContentAccess(boolean allow); + + /** + * Gets whether this WebView supports content URL access. + * + * @see #setAllowContentAccess + */ + public abstract boolean getAllowContentAccess(); + + /** + * Sets whether the WebView loads pages in overview mode, that is, zooms out the + * content to fit on screen by width. This setting is taken into account when + * the content width is greater than the width of the WebView control, for + * example, when {@link #getUseWideViewPort} is enabled. The default is + * {@code false}. + */ + public abstract void setLoadWithOverviewMode(boolean overview); + + /** + * Gets whether this WebView loads pages in overview mode. + * + * @return whether this WebView loads pages in overview mode + * @see #setLoadWithOverviewMode + */ + public abstract boolean getLoadWithOverviewMode(); + + /** + * Sets whether the WebView will enable smooth transition while panning or + * zooming or while the window hosting the WebView does not have focus. If it is + * {@code true}, WebView will choose a solution to maximize the performance. + * e.g. the WebView's content may not be updated during the transition. If it is + * false, WebView will keep its fidelity. The default value is {@code false}. + * + * @deprecated This method is now obsolete, and will become a no-op in future. + */ + @Deprecated + public abstract void setEnableSmoothTransition(boolean enable); + + /** + * Gets whether the WebView enables smooth transition while panning or zooming. + * + * @see #setEnableSmoothTransition + * + * @deprecated This method is now obsolete, and will become a no-op in future. + */ + @Deprecated + public abstract boolean enableSmoothTransition(); + + /** + * Sets whether the WebView uses its background for over scroll background. If + * {@code true}, it will use the WebView's background. If {@code false}, it will + * use an internal pattern. Default is {@code true}. + * + * @deprecated This method is now obsolete. + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} + */ + @Deprecated + public abstract void setUseWebViewBackgroundForOverscrollBackground(boolean view); + + /** + * Gets whether this WebView uses WebView's background instead of internal + * pattern for over scroll background. + * + * @see #setUseWebViewBackgroundForOverscrollBackground + * @deprecated This method is now obsolete. + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} + */ + @Deprecated + public abstract boolean getUseWebViewBackgroundForOverscrollBackground(); + + /** + * Sets whether the WebView should save form data. In Android O, the platform + * has implemented a fully functional Autofill feature to store form data. + * Therefore, the Webview form data save feature is disabled. + * + * Note that the feature will continue to be supported on older versions of + * Android as before. + * + * This function does not have any effect. + */ + @Deprecated + public abstract void setSaveFormData(boolean save); + + /** + * Gets whether the WebView saves form data. + * + * @return whether the WebView saves form data + * @see #setSaveFormData + */ + @Deprecated + public abstract boolean getSaveFormData(); + + /** + * Sets whether the WebView should save passwords. The default is {@code true}. + * + * @deprecated Saving passwords in WebView will not be supported in future + * versions. + */ + @Deprecated + public abstract void setSavePassword(boolean save); + + /** + * Gets whether the WebView saves passwords. + * + * @return whether the WebView saves passwords + * @see #setSavePassword + * @deprecated Saving passwords in WebView will not be supported in future + * versions. + */ + @Deprecated + public abstract boolean getSavePassword(); + + /** + * Sets the text zoom of the page in percent. The default is 100. + * + * @param textZoom the text zoom in percent + */ + public abstract void setTextZoom(int textZoom); + + /** + * Gets the text zoom of the page in percent. + * + * @return the text zoom of the page in percent + * @see #setTextZoom + */ public abstract int getTextZoom(); - public abstract void setAllowContentAccess(boolean p0); - public abstract void setAllowFileAccess(boolean p0); - public abstract void setAllowFileAccessFromFileURLs(boolean p0); - public abstract void setAllowUniversalAccessFromFileURLs(boolean p0); - public abstract void setAppCacheEnabled(boolean p0); - public abstract void setAppCacheMaxSize(long p0); - public abstract void setAppCachePath(String p0); - public abstract void setBlockNetworkImage(boolean p0); - public abstract void setBlockNetworkLoads(boolean p0); - public abstract void setBuiltInZoomControls(boolean p0); - public abstract void setCacheMode(int p0); - public abstract void setCursiveFontFamily(String p0); - public abstract void setDatabaseEnabled(boolean p0); - public abstract void setDatabasePath(String p0); - public abstract void setDefaultFixedFontSize(int p0); - public abstract void setDefaultFontSize(int p0); - public abstract void setDefaultTextEncodingName(String p0); - public abstract void setDefaultZoom(WebSettings.ZoomDensity p0); - public abstract void setDisabledActionModeMenuItems(int p0); - public abstract void setDisplayZoomControls(boolean p0); - public abstract void setDomStorageEnabled(boolean p0); - public abstract void setEnableSmoothTransition(boolean p0); - public abstract void setFantasyFontFamily(String p0); - public abstract void setFixedFontFamily(String p0); - public abstract void setGeolocationDatabasePath(String p0); - public abstract void setGeolocationEnabled(boolean p0); - public abstract void setJavaScriptCanOpenWindowsAutomatically(boolean p0); - public abstract void setJavaScriptEnabled(boolean p0); - public abstract void setLayoutAlgorithm(WebSettings.LayoutAlgorithm p0); - public abstract void setLightTouchEnabled(boolean p0); - public abstract void setLoadWithOverviewMode(boolean p0); - public abstract void setLoadsImagesAutomatically(boolean p0); - public abstract void setMediaPlaybackRequiresUserGesture(boolean p0); - public abstract void setMinimumFontSize(int p0); - public abstract void setMinimumLogicalFontSize(int p0); - public abstract void setMixedContentMode(int p0); - public abstract void setNeedInitialFocus(boolean p0); - public abstract void setOffscreenPreRaster(boolean p0); - public abstract void setPluginState(WebSettings.PluginState p0); - public abstract void setRenderPriority(WebSettings.RenderPriority p0); - public abstract void setSafeBrowsingEnabled(boolean p0); - public abstract void setSansSerifFontFamily(String p0); - public abstract void setSaveFormData(boolean p0); - public abstract void setSavePassword(boolean p0); - public abstract void setSerifFontFamily(String p0); - public abstract void setStandardFontFamily(String p0); - public abstract void setSupportMultipleWindows(boolean p0); - public abstract void setSupportZoom(boolean p0); - public abstract void setTextZoom(int p0); - public abstract void setUseWideViewPort(boolean p0); - public abstract void setUserAgentString(String p0); - public int getForceDark(){ return 0; } - public static String getDefaultUserAgent(Context p0){ return null; } - public static int FORCE_DARK_AUTO = 0; - public static int FORCE_DARK_OFF = 0; - public static int FORCE_DARK_ON = 0; - public static int LOAD_CACHE_ELSE_NETWORK = 0; - public static int LOAD_CACHE_ONLY = 0; - public static int LOAD_DEFAULT = 0; - public static int LOAD_NORMAL = 0; - public static int LOAD_NO_CACHE = 0; - public static int MENU_ITEM_NONE = 0; - public static int MENU_ITEM_PROCESS_TEXT = 0; - public static int MENU_ITEM_SHARE = 0; - public static int MENU_ITEM_WEB_SEARCH = 0; - public static int MIXED_CONTENT_ALWAYS_ALLOW = 0; - public static int MIXED_CONTENT_COMPATIBILITY_MODE = 0; - public static int MIXED_CONTENT_NEVER_ALLOW = 0; - public void setForceDark(int p0){} - public void setTextSize(WebSettings.TextSize p0){} - static public enum LayoutAlgorithm - { - NARROW_COLUMNS, NORMAL, SINGLE_COLUMN, TEXT_AUTOSIZING; - private LayoutAlgorithm() {} + + /** + * Sets policy for third party cookies. Developers should access this via + * {@link CookieManager#setShouldAcceptThirdPartyCookies}. + * + * @hide Internal API. + */ + public abstract void setAcceptThirdPartyCookies(boolean accept); + + /** + * Gets policy for third party cookies. Developers should access this via + * {@link CookieManager#getShouldAcceptThirdPartyCookies}. + * + * @hide Internal API + */ + public abstract boolean getAcceptThirdPartyCookies(); + + /** + * Sets the text size of the page. The default is {@link TextSize#NORMAL}. + * + * @param t the text size as a {@link TextSize} value + * @deprecated Use {@link #setTextZoom} instead. + */ + @Deprecated + public synchronized void setTextSize(TextSize t) { + setTextZoom(t.value); } - static public enum PluginState - { - OFF, ON, ON_DEMAND; - private PluginState() {} + + /** + * Gets the text size of the page. If the text size was previously specified in + * percent using {@link #setTextZoom}, this will return the closest matching + * {@link TextSize}. + * + * @return the text size as a {@link TextSize} value + * @see #setTextSize + * @deprecated Use {@link #getTextZoom} instead. + */ + @Deprecated + public synchronized TextSize getTextSize() { + return null; } - static public enum RenderPriority - { - HIGH, LOW, NORMAL; - private RenderPriority() {} + + /** + * Sets the default zoom density of the page. This must be called from the UI + * thread. The default is {@link ZoomDensity#MEDIUM}. + * + * This setting is not recommended for use in new applications. If the WebView + * is utilized to display mobile-oriented pages, the desired effect can be + * achieved by adjusting 'width' and 'initial-scale' attributes of page's 'meta + * viewport' tag. For pages lacking the tag, + * {@link android.webkit.WebView#setInitialScale} and + * {@link #setUseWideViewPort} can be used. + * + * @param zoom the zoom density + * @deprecated This method is no longer supported, see the function + * documentation for recommended alternatives. + */ + @Deprecated + public abstract void setDefaultZoom(ZoomDensity zoom); + + /** + * Gets the default zoom density of the page. This should be called from the UI + * thread. + * + * This setting is not recommended for use in new applications. + * + * @return the zoom density + * @see #setDefaultZoom + * @deprecated Will only return the default value. + */ + @Deprecated + public abstract ZoomDensity getDefaultZoom(); + + /** + * Enables using light touches to make a selection and activate mouseovers. + * + * @deprecated From {@link android.os.Build.VERSION_CODES#JELLY_BEAN} this + * setting is obsolete and has no effect. + */ + @Deprecated + public abstract void setLightTouchEnabled(boolean enabled); + + /** + * Gets whether light touches are enabled. + * + * @see #setLightTouchEnabled + * @deprecated This setting is obsolete. + */ + @Deprecated + public abstract boolean getLightTouchEnabled(); + + /** + * Controlled a rendering optimization that is no longer present. Setting it now + * has no effect. + * + * @deprecated This setting now has no effect. + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} + */ + @Deprecated + public void setUseDoubleTree(boolean use) { + // Specified to do nothing, so no need for derived classes to override. } - static public enum TextSize - { - LARGER, LARGEST, NORMAL, SMALLER, SMALLEST; - private TextSize() {} + + /** + * Controlled a rendering optimization that is no longer present. Setting it now + * has no effect. + * + * @deprecated This setting now has no effect. + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} + */ + @Deprecated + public boolean getUseDoubleTree() { + // Returns false unconditionally, so no need for derived classes to override. + return false; } - static public enum ZoomDensity - { - CLOSE, FAR, MEDIUM; - private ZoomDensity() {} + + /** + * Sets the user-agent string using an integer code. + *

      + *
    • 0 means the WebView should use an Android user-agent string
    • + *
    • 1 means the WebView should use a desktop user-agent string
    • + *
    + * Other values are ignored. The default is an Android user-agent string, i.e. + * code value 0. + * + * @param ua the integer code for the user-agent string + * @deprecated Please use {@link #setUserAgentString} instead. + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} + */ + @Deprecated + public abstract void setUserAgent(int ua); + + /** + * Gets the user-agent as an integer code. + *
      + *
    • -1 means the WebView is using a custom user-agent string set with + * {@link #setUserAgentString}
    • + *
    • 0 means the WebView should use an Android user-agent string
    • + *
    • 1 means the WebView should use a desktop user-agent string
    • + *
    + * + * @return the integer code for the user-agent string + * @see #setUserAgent + * @deprecated Please use {@link #getUserAgentString} instead. + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1} + */ + @Deprecated + public abstract int getUserAgent(); + + /** + * Sets whether the WebView should enable support for the "viewport" + * HTML meta tag or should use a wide viewport. When the value of the setting is + * {@code false}, the layout width is always set to the width of the WebView + * control in device-independent (CSS) pixels. When the value is {@code true} + * and the page contains the viewport meta tag, the value of the width specified + * in the tag is used. If the page does not contain the tag or does not provide + * a width, then a wide viewport will be used. + * + * @param use whether to enable support for the viewport meta tag + */ + public abstract void setUseWideViewPort(boolean use); + + /** + * Gets whether the WebView supports the "viewport" HTML meta tag or + * will use a wide viewport. + * + * @return {@code true} if the WebView supports the viewport meta tag + * @see #setUseWideViewPort + */ + public abstract boolean getUseWideViewPort(); + + /** + * Sets whether the WebView whether supports multiple windows. If set to true, + * {@link WebChromeClient#onCreateWindow} must be implemented by the host + * application. The default is {@code false}. + * + * @param support whether to support multiple windows + */ + public abstract void setSupportMultipleWindows(boolean support); + + /** + * Gets whether the WebView supports multiple windows. + * + * @return {@code true} if the WebView supports multiple windows + * @see #setSupportMultipleWindows + */ + public abstract boolean supportMultipleWindows(); + + /** + * Sets the underlying layout algorithm. This will cause a re-layout of the + * WebView. The default is {@link LayoutAlgorithm#NARROW_COLUMNS}. + * + * @param l the layout algorithm to use, as a {@link LayoutAlgorithm} value + */ + public abstract void setLayoutAlgorithm(LayoutAlgorithm l); + + /** + * Gets the current layout algorithm. + * + * @return the layout algorithm in use, as a {@link LayoutAlgorithm} value + * @see #setLayoutAlgorithm + */ + public abstract LayoutAlgorithm getLayoutAlgorithm(); + + /** + * Sets the standard font family name. The default is "sans-serif". + * + * @param font a font family name + */ + public abstract void setStandardFontFamily(String font); + + /** + * Gets the standard font family name. + * + * @return the standard font family name as a string + * @see #setStandardFontFamily + */ + public abstract String getStandardFontFamily(); + + /** + * Sets the fixed font family name. The default is "monospace". + * + * @param font a font family name + */ + public abstract void setFixedFontFamily(String font); + + /** + * Gets the fixed font family name. + * + * @return the fixed font family name as a string + * @see #setFixedFontFamily + */ + public abstract String getFixedFontFamily(); + + /** + * Sets the sans-serif font family name. The default is "sans-serif". + * + * @param font a font family name + */ + public abstract void setSansSerifFontFamily(String font); + + /** + * Gets the sans-serif font family name. + * + * @return the sans-serif font family name as a string + * @see #setSansSerifFontFamily + */ + public abstract String getSansSerifFontFamily(); + + /** + * Sets the serif font family name. The default is "sans-serif". + * + * @param font a font family name + */ + public abstract void setSerifFontFamily(String font); + + /** + * Gets the serif font family name. The default is "serif". + * + * @return the serif font family name as a string + * @see #setSerifFontFamily + */ + public abstract String getSerifFontFamily(); + + /** + * Sets the cursive font family name. The default is "cursive". + * + * @param font a font family name + */ + public abstract void setCursiveFontFamily(String font); + + /** + * Gets the cursive font family name. + * + * @return the cursive font family name as a string + * @see #setCursiveFontFamily + */ + public abstract String getCursiveFontFamily(); + + /** + * Sets the fantasy font family name. The default is "fantasy". + * + * @param font a font family name + */ + public abstract void setFantasyFontFamily(String font); + + /** + * Gets the fantasy font family name. + * + * @return the fantasy font family name as a string + * @see #setFantasyFontFamily + */ + public abstract String getFantasyFontFamily(); + + /** + * Sets the minimum font size. The default is 8. + * + * @param size a non-negative integer between 1 and 72. Any number outside the + * specified range will be pinned. + */ + public abstract void setMinimumFontSize(int size); + + /** + * Gets the minimum font size. + * + * @return a non-negative integer between 1 and 72 + * @see #setMinimumFontSize + */ + public abstract int getMinimumFontSize(); + + /** + * Sets the minimum logical font size. The default is 8. + * + * @param size a non-negative integer between 1 and 72. Any number outside the + * specified range will be pinned. + */ + public abstract void setMinimumLogicalFontSize(int size); + + /** + * Gets the minimum logical font size. + * + * @return a non-negative integer between 1 and 72 + * @see #setMinimumLogicalFontSize + */ + public abstract int getMinimumLogicalFontSize(); + + /** + * Sets the default font size. The default is 16. + * + * @param size a non-negative integer between 1 and 72. Any number outside the + * specified range will be pinned. + */ + public abstract void setDefaultFontSize(int size); + + /** + * Gets the default font size. + * + * @return a non-negative integer between 1 and 72 + * @see #setDefaultFontSize + */ + public abstract int getDefaultFontSize(); + + /** + * Sets the default fixed font size. The default is 16. + * + * @param size a non-negative integer between 1 and 72. Any number outside the + * specified range will be pinned. + */ + public abstract void setDefaultFixedFontSize(int size); + + /** + * Gets the default fixed font size. + * + * @return a non-negative integer between 1 and 72 + * @see #setDefaultFixedFontSize + */ + public abstract int getDefaultFixedFontSize(); + + /** + * Sets whether the WebView should load image resources. Note that this method + * controls loading of all images, including those embedded using the data URI + * scheme. Use {@link #setBlockNetworkImage} to control loading only of images + * specified using network URI schemes. Note that if the value of this setting + * is changed from {@code false} to {@code true}, all images resources + * referenced by content currently displayed by the WebView are loaded + * automatically. The default is {@code true}. + * + * @param flag whether the WebView should load image resources + */ + public abstract void setLoadsImagesAutomatically(boolean flag); + + /** + * Gets whether the WebView loads image resources. This includes images embedded + * using the data URI scheme. + * + * @return {@code true} if the WebView loads image resources + * @see #setLoadsImagesAutomatically + */ + public abstract boolean getLoadsImagesAutomatically(); + + /** + * Sets whether the WebView should not load image resources from the network + * (resources accessed via http and https URI schemes). Note that this method + * has no effect unless {@link #getLoadsImagesAutomatically} returns + * {@code true}. Also note that disabling all network loads using + * {@link #setBlockNetworkLoads} will also prevent network images from loading, + * even if this flag is set to false. When the value of this setting is changed + * from {@code true} to {@code false}, network images resources referenced by + * content currently displayed by the WebView are fetched automatically. The + * default is {@code false}. + * + * @param flag whether the WebView should not load image resources from the + * network + * @see #setBlockNetworkLoads + */ + public abstract void setBlockNetworkImage(boolean flag); + + /** + * Gets whether the WebView does not load image resources from the network. + * + * @return {@code true} if the WebView does not load image resources from the + * network + * @see #setBlockNetworkImage + */ + public abstract boolean getBlockNetworkImage(); + + /** + * Sets whether the WebView should not load resources from the network. Use + * {@link #setBlockNetworkImage} to only avoid loading image resources. Note + * that if the value of this setting is changed from {@code true} to + * {@code false}, network resources referenced by content currently displayed by + * the WebView are not fetched until {@link android.webkit.WebView#reload} is + * called. If the application does not have the + * {@link android.Manifest.permission#INTERNET} permission, attempts to set a + * value of {@code false} will cause a {@link java.lang.SecurityException} to be + * thrown. The default value is {@code false} if the application has the + * {@link android.Manifest.permission#INTERNET} permission, otherwise it is + * {@code true}. + * + * @param flag {@code true} means block network loads by the WebView + * @see android.webkit.WebView#reload + */ + public abstract void setBlockNetworkLoads(boolean flag); + + /** + * Gets whether the WebView does not load any resources from the network. + * + * @return {@code true} if the WebView does not load any resources from the + * network + * @see #setBlockNetworkLoads + */ + public abstract boolean getBlockNetworkLoads(); + + /** + * Tells the WebView to enable JavaScript execution. The default is + * {@code false}. + * + * @param flag {@code true} if the WebView should execute JavaScript + */ + public abstract void setJavaScriptEnabled(boolean flag); + + /** + * Sets whether JavaScript running in the context of a file scheme URL should be + * allowed to access content from any origin. This includes access to content + * from other file scheme URLs. See {@link #setAllowFileAccessFromFileURLs}. To + * enable the most restrictive, and therefore secure policy, this setting should + * be disabled. Note that this setting affects only JavaScript access to file + * scheme resources. Other access to such resources, for example, from image + * HTML elements, is unaffected. To prevent possible violation of same domain + * policy when targeting + * {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and earlier, + * you should explicitly set this value to {@code false}. + *

    + * The default value is {@code true} for apps targeting + * {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and below, and + * {@code false} when targeting + * {@link android.os.Build.VERSION_CODES#JELLY_BEAN} and above. + * + * @param flag whether JavaScript running in the context of a file scheme URL + * should be allowed to access content from any origin + */ + public abstract void setAllowUniversalAccessFromFileURLs(boolean flag); + + /** + * Sets whether JavaScript running in the context of a file scheme URL should be + * allowed to access content from other file scheme URLs. To enable the most + * restrictive, and therefore secure, policy this setting should be disabled. + * Note that the value of this setting is ignored if the value of + * {@link #getAllowUniversalAccessFromFileURLs} is {@code true}. Note too, that + * this setting affects only JavaScript access to file scheme resources. Other + * access to such resources, for example, from image HTML elements, is + * unaffected. To prevent possible violation of same domain policy when + * targeting {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and + * earlier, you should explicitly set this value to {@code false}. + *

    + * The default value is {@code true} for apps targeting + * {@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1} and below, and + * {@code false} when targeting + * {@link android.os.Build.VERSION_CODES#JELLY_BEAN} and above. + * + * @param flag whether JavaScript running in the context of a file scheme URL + * should be allowed to access content from other file scheme URLs + */ + public abstract void setAllowFileAccessFromFileURLs(boolean flag); + + /** + * Sets whether the WebView should enable plugins. The default is {@code false}. + * + * @param flag {@code true} if plugins should be enabled + * @deprecated This method has been deprecated in favor of + * {@link #setPluginState} + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} + */ + @Deprecated + public abstract void setPluginsEnabled(boolean flag); + + /** + * Tells the WebView to enable, disable, or have plugins on demand. On demand + * mode means that if a plugin exists that can handle the embedded content, a + * placeholder icon will be shown instead of the plugin. When the placeholder is + * clicked, the plugin will be enabled. The default is {@link PluginState#OFF}. + * + * @param state a PluginState value + * @deprecated Plugins will not be supported in future, and should not be used. + */ + @Deprecated + public abstract void setPluginState(PluginState state); + + /** + * Sets a custom path to plugins used by the WebView. This method is obsolete + * since each plugin is now loaded from its own package. + * + * @param pluginsPath a String path to the directory containing plugins + * @deprecated This method is no longer used as plugins are loaded from their + * own APK via the system's package manager. + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} + */ + @Deprecated + public void setPluginsPath(String pluginsPath) { + // Specified to do nothing, so no need for derived classes to override. } + + /** + * Sets the path to where database storage API databases should be saved. In + * order for the database storage API to function correctly, this method must be + * called with a path to which the application can write. This method should + * only be called once: repeated calls are ignored. + * + * @param databasePath a path to the directory where databases should be saved. + * @deprecated Database paths are managed by the implementation and calling this + * method will have no effect. + */ + @Deprecated + public abstract void setDatabasePath(String databasePath); + + /** + * Sets the path where the Geolocation databases should be saved. In order for + * Geolocation permissions and cached positions to be persisted, this method + * must be called with a path to which the application can write. + * + * @param databasePath a path to the directory where databases should be saved. + * @deprecated Geolocation database are managed by the implementation and + * calling this method will have no effect. + */ + @Deprecated + public abstract void setGeolocationDatabasePath(String databasePath); + + /** + * Sets whether the Application Caches API should be enabled. The default is + * {@code false}. Note that in order for the Application Caches API to be + * enabled, a valid database path must also be supplied to + * {@link #setAppCachePath}. + * + * @param flag {@code true} if the WebView should enable Application Caches + */ + public abstract void setAppCacheEnabled(boolean flag); + + /** + * Sets the path to the Application Caches files. In order for the Application + * Caches API to be enabled, this method must be called with a path to which the + * application can write. This method should only be called once: repeated calls + * are ignored. + * + * @param appCachePath a String path to the directory containing Application + * Caches files. + * @see #setAppCacheEnabled + */ + public abstract void setAppCachePath(String appCachePath); + + /** + * Sets the maximum size for the Application Cache content. The passed size will + * be rounded to the nearest value that the database can support, so this should + * be viewed as a guide, not a hard limit. Setting the size to a value less than + * current database size does not cause the database to be trimmed. The default + * size is {@link Long#MAX_VALUE}. It is recommended to leave the maximum size + * set to the default value. + * + * @param appCacheMaxSize the maximum size in bytes + * @deprecated In future quota will be managed automatically. + */ + @Deprecated + public abstract void setAppCacheMaxSize(long appCacheMaxSize); + + /** + * Sets whether the database storage API is enabled. The default value is false. + * See also {@link #setDatabasePath} for how to correctly set up the database + * storage API. + * + * This setting is global in effect, across all WebView instances in a process. + * Note you should only modify this setting prior to making any WebView + * page load within a given process, as the WebView implementation may ignore + * changes to this setting after that point. + * + * @param flag {@code true} if the WebView should use the database storage API + */ + public abstract void setDatabaseEnabled(boolean flag); + + /** + * Sets whether the DOM storage API is enabled. The default value is + * {@code false}. + * + * @param flag {@code true} if the WebView should use the DOM storage API + */ + public abstract void setDomStorageEnabled(boolean flag); + + /** + * Gets whether the DOM Storage APIs are enabled. + * + * @return {@code true} if the DOM Storage APIs are enabled + * @see #setDomStorageEnabled + */ + public abstract boolean getDomStorageEnabled(); + + /** + * Gets the path to where database storage API databases are saved. + * + * @return the String path to the database storage API databases + * @see #setDatabasePath + * @deprecated Database paths are managed by the implementation this method is + * obsolete. + */ + @Deprecated + public abstract String getDatabasePath(); + + /** + * Gets whether the database storage API is enabled. + * + * @return {@code true} if the database storage API is enabled + * @see #setDatabaseEnabled + */ + public abstract boolean getDatabaseEnabled(); + + /** + * Sets whether Geolocation is enabled. The default is {@code true}. + *

    + * Please note that in order for the Geolocation API to be usable by a page in + * the WebView, the following requirements must be met: + *

      + *
    • an application must have permission to access the device location, see + * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}, + * {@link android.Manifest.permission#ACCESS_FINE_LOCATION}; + *
    • an application must provide an implementation of the + * {@link WebChromeClient#onGeolocationPermissionsShowPrompt} callback to + * receive notifications that a page is requesting access to location via the + * JavaScript Geolocation API. + *
    + *

    + * + * @param flag whether Geolocation should be enabled + */ + public abstract void setGeolocationEnabled(boolean flag); + + /** + * Gets whether JavaScript is enabled. + * + * @return {@code true} if JavaScript is enabled + * @see #setJavaScriptEnabled + */ + public abstract boolean getJavaScriptEnabled(); + + /** + * Gets whether JavaScript running in the context of a file scheme URL can + * access content from any origin. This includes access to content from other + * file scheme URLs. + * + * @return whether JavaScript running in the context of a file scheme URL can + * access content from any origin + * @see #setAllowUniversalAccessFromFileURLs + */ + public abstract boolean getAllowUniversalAccessFromFileURLs(); + + /** + * Gets whether JavaScript running in the context of a file scheme URL can + * access content from other file scheme URLs. + * + * @return whether JavaScript running in the context of a file scheme URL can + * access content from other file scheme URLs + * @see #setAllowFileAccessFromFileURLs + */ + public abstract boolean getAllowFileAccessFromFileURLs(); + + /** + * Gets whether plugins are enabled. + * + * @return {@code true} if plugins are enabled + * @see #setPluginsEnabled + * @deprecated This method has been replaced by {@link #getPluginState} + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} + */ + @Deprecated + public abstract boolean getPluginsEnabled(); + + /** + * Gets the current state regarding whether plugins are enabled. + * + * @return the plugin state as a {@link PluginState} value + * @see #setPluginState + * @deprecated Plugins will not be supported in future, and should not be used. + */ + @Deprecated + public abstract PluginState getPluginState(); + + /** + * Gets the directory that contains the plugin libraries. This method is + * obsolete since each plugin is now loaded from its own package. + * + * @return an empty string + * @deprecated This method is no longer used as plugins are loaded from their + * own APK via the system's package manager. + * @hide Since API level {@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR2} + */ + @Deprecated + public String getPluginsPath() { + // Unconditionally returns empty string, so no need for derived classes to + // override. + return ""; + } + + /** + * Tells JavaScript to open windows automatically. This applies to the + * JavaScript function {@code window.open()}. The default is {@code false}. + * + * @param flag {@code true} if JavaScript can open windows automatically + */ + public abstract void setJavaScriptCanOpenWindowsAutomatically(boolean flag); + + /** + * Gets whether JavaScript can open windows automatically. + * + * @return {@code true} if JavaScript can open windows automatically during + * {@code window.open()} + * @see #setJavaScriptCanOpenWindowsAutomatically + */ + public abstract boolean getJavaScriptCanOpenWindowsAutomatically(); + + /** + * Sets the default text encoding name to use when decoding html pages. The + * default is "UTF-8". + * + * @param encoding the text encoding name + */ + public abstract void setDefaultTextEncodingName(String encoding); + + /** + * Gets the default text encoding name. + * + * @return the default text encoding name as a string + * @see #setDefaultTextEncodingName + */ + public abstract String getDefaultTextEncodingName(); + + /** + * Sets the WebView's user-agent string. If the string is {@code null} or empty, + * the system default value will be used. + * + * Note that starting from {@link android.os.Build.VERSION_CODES#KITKAT} Android + * version, changing the user-agent while loading a web page causes WebView to + * initiate loading once again. + * + * @param ua new user-agent string + */ + public abstract void setUserAgentString(String ua); + + /** + * Gets the WebView's user-agent string. + * + * @return the WebView's user-agent string + * @see #setUserAgentString + */ + public abstract String getUserAgentString(); + + /** + * Returns the default User-Agent used by a WebView. An instance of WebView + * could use a different User-Agent if a call is made to + * {@link WebSettings#setUserAgentString(String)}. + * + * @param context a Context object used to access application assets + */ + public static String getDefaultUserAgent(Context context) { + return null; + } + + /** + * Tells the WebView whether it needs to set a node to have focus when + * {@link WebView#requestFocus(int, android.graphics.Rect)} is called. The + * default value is {@code true}. + * + * @param flag whether the WebView needs to set a node + */ + public abstract void setNeedInitialFocus(boolean flag); + + /** + * Sets the priority of the Render thread. Unlike the other settings, this one + * only needs to be called once per process. The default value is + * {@link RenderPriority#NORMAL}. + * + * @param priority the priority + * @deprecated It is not recommended to adjust thread priorities, and this will + * not be supported in future versions. + */ + @Deprecated + public abstract void setRenderPriority(RenderPriority priority); + + /** + * Overrides the way the cache is used. The way the cache is used is based on + * the navigation type. For a normal page load, the cache is checked and content + * is re-validated as needed. When navigating back, content is not revalidated, + * instead the content is just retrieved from the cache. This method allows the + * client to override this behavior by specifying one of {@link #LOAD_DEFAULT}, + * {@link #LOAD_CACHE_ELSE_NETWORK}, {@link #LOAD_NO_CACHE} or + * {@link #LOAD_CACHE_ONLY}. The default value is {@link #LOAD_DEFAULT}. + * + * @param mode the mode to use + */ + public abstract void setCacheMode(@CacheMode int mode); + + /** + * Gets the current setting for overriding the cache mode. + * + * @return the current setting for overriding the cache mode + * @see #setCacheMode + */ + public abstract int getCacheMode(); + + /** + * Configures the WebView's behavior when a secure origin attempts to load a + * resource from an insecure origin. + * + * By default, apps that target {@link android.os.Build.VERSION_CODES#KITKAT} or + * below default to {@link #MIXED_CONTENT_ALWAYS_ALLOW}. Apps targeting + * {@link android.os.Build.VERSION_CODES#LOLLIPOP} default to + * {@link #MIXED_CONTENT_NEVER_ALLOW}. + * + * The preferred and most secure mode of operation for the WebView is + * {@link #MIXED_CONTENT_NEVER_ALLOW} and use of + * {@link #MIXED_CONTENT_ALWAYS_ALLOW} is strongly discouraged. + * + * @param mode The mixed content mode to use. One of + * {@link #MIXED_CONTENT_NEVER_ALLOW}, + * {@link #MIXED_CONTENT_ALWAYS_ALLOW} or + * {@link #MIXED_CONTENT_COMPATIBILITY_MODE}. + */ + public abstract void setMixedContentMode(int mode); + + /** + * Gets the current behavior of the WebView with regard to loading insecure + * content from a secure origin. + * + * @return The current setting, one of {@link #MIXED_CONTENT_NEVER_ALLOW}, + * {@link #MIXED_CONTENT_ALWAYS_ALLOW} or + * {@link #MIXED_CONTENT_COMPATIBILITY_MODE}. + */ + public abstract int getMixedContentMode(); + + /** + * Sets whether to use a video overlay for embedded encrypted video. In API + * levels prior to {@link android.os.Build.VERSION_CODES#LOLLIPOP}, encrypted + * video can only be rendered directly on a secure video surface, so it had been + * a hard problem to play encrypted video in HTML. When this flag is on, WebView + * can play encrypted video (MSE/EME) by using a video overlay (aka + * hole-punching) for videos embedded using HTML <video> tag.
    + * Caution: This setting is intended for use only in a narrow set of + * circumstances and apps should only enable it if they require playback of + * encrypted video content. It will impose the following limitations on the + * WebView: + *

      + *
    • Only one video overlay can be played at a time. + *
    • Changes made to position or dimensions of a video element may be + * propagated to the corresponding video overlay with a noticeable delay. + *
    • The video overlay is not visible to web APIs and as such may not interact + * with script or styling. For example, CSS styles applied to the <video> + * tag may be ignored. + *
    + * This is not an exhaustive set of constraints and it may vary with new + * versions of the WebView. + * + * @hide + */ + public abstract void setVideoOverlayForEmbeddedEncryptedVideoEnabled(boolean flag); + + /** + * Gets whether a video overlay will be used for embedded encrypted video. + * + * @return {@code true} if WebView uses a video overlay for embedded encrypted + * video. + * @see #setVideoOverlayForEmbeddedEncryptedVideoEnabled + * @hide + */ + public abstract boolean getVideoOverlayForEmbeddedEncryptedVideoEnabled(); + + /** + * Sets whether this WebView should raster tiles when it is offscreen but + * attached to a window. Turning this on can avoid rendering artifacts when + * animating an offscreen WebView on-screen. Offscreen WebViews in this mode use + * more memory. The default value is false.
    + * Please follow these guidelines to limit memory usage: + *
      + *
    • WebView size should be not be larger than the device screen size. + *
    • Limit use of this mode to a small number of WebViews. Use it for visible + * WebViews and WebViews about to be animated to visible. + *
    + */ + public abstract void setOffscreenPreRaster(boolean enabled); + + /** + * Gets whether this WebView should raster tiles when it is offscreen but + * attached to a window. + * + * @return {@code true} if this WebView will raster tiles when it is offscreen + * but attached to a window. + */ + public abstract boolean getOffscreenPreRaster(); + + /** + * Sets whether Safe Browsing is enabled. Safe Browsing allows WebView to + * protect against malware and phishing attacks by verifying the links. + * + *

    + * Safe Browsing can be disabled for all WebViews using a manifest tag (read + * general Safe + * Browsing info). The manifest tag has a lower precedence than this API. + * + *

    + * Safe Browsing is enabled by default for devices which support it. + * + * @param enabled Whether Safe Browsing is enabled. + */ + public abstract void setSafeBrowsingEnabled(boolean enabled); + + /** + * Gets whether Safe Browsing is enabled. See {@link #setSafeBrowsingEnabled}. + * + * @return {@code true} if Safe Browsing is enabled and {@code false} otherwise. + */ + public abstract boolean getSafeBrowsingEnabled(); } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebStorage.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebStorage.java deleted file mode 100644 index c63a282b454..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebStorage.java +++ /dev/null @@ -1,21 +0,0 @@ -// Generated automatically from android.webkit.WebStorage for testing purposes - -package android.webkit; - -import android.webkit.ValueCallback; -import java.util.Map; - -public class WebStorage -{ - public static WebStorage getInstance(){ return null; } - public void deleteAllData(){} - public void deleteOrigin(String p0){} - public void getOrigins(ValueCallback p0){} - public void getQuotaForOrigin(String p0, ValueCallback p1){} - public void getUsageForOrigin(String p0, ValueCallback p1){} - public void setQuotaForOrigin(String p0, long p1){} - static public interface QuotaUpdater - { - void updateQuota(long p0); - } -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java index b654cc05f61..3065a9df966 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebView.java @@ -1,259 +1,151 @@ -// Generated automatically from android.webkit.WebView for testing purposes +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ package android.webkit; import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.res.Configuration; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Picture; -import android.graphics.Rect; -import android.net.Uri; -import android.net.http.SslCertificate; -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.os.Message; -import android.print.PrintDocumentAdapter; -import android.util.AttributeSet; -import android.util.LongSparseArray; -import android.util.SparseArray; -import android.view.DragEvent; -import android.view.KeyEvent; -import android.view.MotionEvent; import android.view.View; -import android.view.ViewGroup; -import android.view.ViewStructure; -import android.view.ViewTreeObserver; -import android.view.WindowInsets; -import android.view.accessibility.AccessibilityNodeProvider; -import android.view.autofill.AutofillId; -import android.view.autofill.AutofillValue; -import android.view.inputmethod.EditorInfo; -import android.view.inputmethod.InputConnection; -import android.view.textclassifier.TextClassifier; -import android.view.translation.TranslationCapability; -import android.view.translation.ViewTranslationRequest; -import android.view.translation.ViewTranslationResponse; -import android.webkit.DownloadListener; -import android.webkit.ValueCallback; -import android.webkit.WebBackForwardList; -import android.webkit.WebChromeClient; -import android.webkit.WebMessage; -import android.webkit.WebMessagePort; -import android.webkit.WebSettings; -import android.webkit.WebViewClient; -import android.webkit.WebViewRenderProcess; -import android.webkit.WebViewRenderProcessClient; -import android.widget.AbsoluteLayout; -import java.util.List; -import java.util.Map; -import java.util.concurrent.Executor; -import java.util.function.Consumer; -public class WebView extends AbsoluteLayout implements ViewGroup.OnHierarchyChangeListener, ViewTreeObserver.OnGlobalFocusChangeListener -{ - protected WebView() {} - abstract static public class VisualStateCallback - { - public VisualStateCallback(){} - public abstract void onComplete(long p0); +public class WebView extends View { + + public WebView(Context context) { + super(context); } - protected int computeHorizontalScrollOffset(){ return 0; } - protected int computeHorizontalScrollRange(){ return 0; } - protected int computeVerticalScrollExtent(){ return 0; } - protected int computeVerticalScrollOffset(){ return 0; } - protected int computeVerticalScrollRange(){ return 0; } - protected void dispatchDraw(Canvas p0){} - protected void onAttachedToWindow(){} - protected void onConfigurationChanged(Configuration p0){} - protected void onDraw(Canvas p0){} - protected void onFocusChanged(boolean p0, int p1, Rect p2){} - protected void onMeasure(int p0, int p1){} - protected void onOverScrolled(int p0, int p1, boolean p2, boolean p3){} - protected void onScrollChanged(int p0, int p1, int p2, int p3){} - protected void onSizeChanged(int p0, int p1, int p2, int p3){} - protected void onVisibilityChanged(View p0, int p1){} - protected void onWindowVisibilityChanged(int p0){} - public AccessibilityNodeProvider getAccessibilityNodeProvider(){ return null; } - public Bitmap getFavicon(){ return null; } - public CharSequence getAccessibilityClassName(){ return null; } - public Handler getHandler(){ return null; } - public InputConnection onCreateInputConnection(EditorInfo p0){ return null; } - public Looper getWebViewLooper(){ return null; } - public Picture capturePicture(){ return null; } - public PrintDocumentAdapter createPrintDocumentAdapter(){ return null; } - public PrintDocumentAdapter createPrintDocumentAdapter(String p0){ return null; } - public SslCertificate getCertificate(){ return null; } - public String getOriginalUrl(){ return null; } - public String getTitle(){ return null; } - public String getUrl(){ return null; } - public String[] getHttpAuthUsernamePassword(String p0, String p1){ return null; } - public TextClassifier getTextClassifier(){ return null; } - public View findFocus(){ return null; } - public WebBackForwardList copyBackForwardList(){ return null; } - public WebBackForwardList restoreState(Bundle p0){ return null; } - public WebBackForwardList saveState(Bundle p0){ return null; } - public WebChromeClient getWebChromeClient(){ return null; } - public WebMessagePort[] createWebMessageChannel(){ return null; } - public WebSettings getSettings(){ return null; } - public WebView(Context p0){} - public WebView(Context p0, AttributeSet p1){} - public WebView(Context p0, AttributeSet p1, int p2){} - public WebView(Context p0, AttributeSet p1, int p2, boolean p3){} - public WebView(Context p0, AttributeSet p1, int p2, int p3){} - public WebView.HitTestResult getHitTestResult(){ return null; } - public WebViewClient getWebViewClient(){ return null; } - public WebViewRenderProcess getWebViewRenderProcess(){ return null; } - public WebViewRenderProcessClient getWebViewRenderProcessClient(){ return null; } - public WindowInsets onApplyWindowInsets(WindowInsets p0){ return null; } - public boolean canGoBack(){ return false; } - public boolean canGoBackOrForward(int p0){ return false; } - public boolean canGoForward(){ return false; } - public boolean canZoomIn(){ return false; } - public boolean canZoomOut(){ return false; } - public boolean dispatchKeyEvent(KeyEvent p0){ return false; } - public boolean getRendererPriorityWaivedWhenNotVisible(){ return false; } - public boolean isPrivateBrowsingEnabled(){ return false; } - public boolean isVisibleToUserForAutofill(int p0){ return false; } - public boolean onCheckIsTextEditor(){ return false; } - public boolean onDragEvent(DragEvent p0){ return false; } - public boolean onGenericMotionEvent(MotionEvent p0){ return false; } - public boolean onHoverEvent(MotionEvent p0){ return false; } - public boolean onKeyDown(int p0, KeyEvent p1){ return false; } - public boolean onKeyMultiple(int p0, int p1, KeyEvent p2){ return false; } - public boolean onKeyUp(int p0, KeyEvent p1){ return false; } - public boolean onTouchEvent(MotionEvent p0){ return false; } - public boolean onTrackballEvent(MotionEvent p0){ return false; } - public boolean overlayHorizontalScrollbar(){ return false; } - public boolean overlayVerticalScrollbar(){ return false; } - public boolean pageDown(boolean p0){ return false; } - public boolean pageUp(boolean p0){ return false; } - public boolean performLongClick(){ return false; } - public boolean requestChildRectangleOnScreen(View p0, Rect p1, boolean p2){ return false; } - public boolean requestFocus(int p0, Rect p1){ return false; } - public boolean shouldDelayChildPressedState(){ return false; } - public boolean showFindDialog(String p0, boolean p1){ return false; } - public boolean zoomIn(){ return false; } - public boolean zoomOut(){ return false; } - public float getScale(){ return 0; } - public int findAll(String p0){ return 0; } - public int getContentHeight(){ return 0; } - public int getProgress(){ return 0; } - public int getRendererRequestedPriority(){ return 0; } - public static ClassLoader getWebViewClassLoader(){ return null; } - public static PackageInfo getCurrentWebViewPackage(){ return null; } - public static String SCHEME_GEO = null; - public static String SCHEME_MAILTO = null; - public static String SCHEME_TEL = null; - public static String findAddress(String p0){ return null; } - public static Uri getSafeBrowsingPrivacyPolicyUrl(){ return null; } - public static int RENDERER_PRIORITY_BOUND = 0; - public static int RENDERER_PRIORITY_IMPORTANT = 0; - public static int RENDERER_PRIORITY_WAIVED = 0; - public static void clearClientCertPreferences(Runnable p0){} - public static void disableWebView(){} - public static void enableSlowWholeDocumentDraw(){} - public static void setDataDirectorySuffix(String p0){} - public static void setSafeBrowsingWhitelist(List p0, ValueCallback p1){} - public static void setWebContentsDebuggingEnabled(boolean p0){} - public static void startSafeBrowsing(Context p0, ValueCallback p1){} - public void addJavascriptInterface(Object p0, String p1){} - public void autofill(SparseArray p0){} - public void clearCache(boolean p0){} - public void clearFormData(){} - public void clearHistory(){} - public void clearMatches(){} - public void clearSslPreferences(){} - public void clearView(){} - public void computeScroll(){} - public void destroy(){} - public void dispatchCreateViewTranslationRequest(Map p0, int[] p1, TranslationCapability p2, List p3){} - public void documentHasImages(Message p0){} - public void evaluateJavascript(String p0, ValueCallback p1){} - public void findAllAsync(String p0){} - public void findNext(boolean p0){} - public void flingScroll(int p0, int p1){} - public void freeMemory(){} - public void goBack(){} - public void goBackOrForward(int p0){} - public void goForward(){} - public void invokeZoomPicker(){} - public void loadData(String p0, String p1, String p2){} - public void loadDataWithBaseURL(String p0, String p1, String p2, String p3, String p4){} - public void loadUrl(String p0){} - public void loadUrl(String p0, Map p1){} - public void onChildViewAdded(View p0, View p1){} - public void onChildViewRemoved(View p0, View p1){} - public void onCreateVirtualViewTranslationRequests(long[] p0, int[] p1, Consumer p2){} - public void onFinishTemporaryDetach(){} - public void onGlobalFocusChanged(View p0, View p1){} - public void onPause(){} - public void onProvideAutofillVirtualStructure(ViewStructure p0, int p1){} - public void onProvideContentCaptureStructure(ViewStructure p0, int p1){} - public void onProvideVirtualStructure(ViewStructure p0){} - public void onResume(){} - public void onStartTemporaryDetach(){} - public void onVirtualViewTranslationResponses(LongSparseArray p0){} - public void onWindowFocusChanged(boolean p0){} - public void pauseTimers(){} - public void postUrl(String p0, byte[] p1){} - public void postVisualStateCallback(long p0, WebView.VisualStateCallback p1){} - public void postWebMessage(WebMessage p0, Uri p1){} - public void reload(){} - public void removeJavascriptInterface(String p0){} - public void requestFocusNodeHref(Message p0){} - public void requestImageRef(Message p0){} - public void resumeTimers(){} - public void savePassword(String p0, String p1, String p2){} - public void saveWebArchive(String p0){} - public void saveWebArchive(String p0, boolean p1, ValueCallback p2){} - public void setBackgroundColor(int p0){} - public void setCertificate(SslCertificate p0){} - public void setDownloadListener(DownloadListener p0){} - public void setFindListener(WebView.FindListener p0){} - public void setHorizontalScrollbarOverlay(boolean p0){} - public void setHttpAuthUsernamePassword(String p0, String p1, String p2, String p3){} - public void setInitialScale(int p0){} - public void setLayerType(int p0, Paint p1){} - public void setLayoutParams(ViewGroup.LayoutParams p0){} - public void setMapTrackballToArrowKeys(boolean p0){} - public void setNetworkAvailable(boolean p0){} - public void setOverScrollMode(int p0){} - public void setPictureListener(WebView.PictureListener p0){} - public void setRendererPriorityPolicy(int p0, boolean p1){} - public void setScrollBarStyle(int p0){} - public void setTextClassifier(TextClassifier p0){} - public void setVerticalScrollbarOverlay(boolean p0){} - public void setWebChromeClient(WebChromeClient p0){} - public void setWebViewClient(WebViewClient p0){} - public void setWebViewRenderProcessClient(Executor p0, WebViewRenderProcessClient p1){} - public void setWebViewRenderProcessClient(WebViewRenderProcessClient p0){} - public void stopLoading(){} - public void zoomBy(float p0){} - static public class HitTestResult - { - public String getExtra(){ return null; } - public int getType(){ return 0; } - public static int ANCHOR_TYPE = 0; - public static int EDIT_TEXT_TYPE = 0; - public static int EMAIL_TYPE = 0; - public static int GEO_TYPE = 0; - public static int IMAGE_ANCHOR_TYPE = 0; - public static int IMAGE_TYPE = 0; - public static int PHONE_TYPE = 0; - public static int SRC_ANCHOR_TYPE = 0; - public static int SRC_IMAGE_ANCHOR_TYPE = 0; - public static int UNKNOWN_TYPE = 0; + + public void setHorizontalScrollbarOverlay(boolean overlay) {} + + public void setVerticalScrollbarOverlay(boolean overlay) {} + + public boolean overlayHorizontalScrollbar() { + return false; } - static public interface FindListener - { - void onFindResultReceived(int p0, int p1, boolean p2); + + public boolean overlayVerticalScrollbar() { + return false; } - static public interface PictureListener - { - void onNewPicture(WebView p0, Picture p1); + + public void savePassword(String host, String username, String password) {} + + public void setHttpAuthUsernamePassword(String host, String realm, String username, + String password) {} + + public String[] getHttpAuthUsernamePassword(String host, String realm) { + return null; + } + + public void destroy() {} + + public static void enablePlatformNotifications() {} + + public static void disablePlatformNotifications() {} + + public void loadUrl(String url) {} + + public void loadData(String data, String mimeType, String encoding) {} + + public void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, + String failUrl) {} + + public void stopLoading() {} + + public void reload() {} + + public boolean canGoBack() { + return false; + } + + public void goBack() {} + + public boolean canGoForward() { + return false; + } + + public void goForward() {} + + public boolean canGoBackOrForward(int steps) { + return false; + } + + public void goBackOrForward(int steps) {} + + public boolean pageUp(boolean top) { + return false; + } + + public boolean pageDown(boolean bottom) { + return false; + } + + public void clearView() {} + + public float getScale() { + return 0; + } + + public void setInitialScale(int scaleInPercent) {} + + public void invokeZoomPicker() {} + + public String getUrl() { + return null; + } + + public String getTitle() { + return null; + } + + public int getProgress() { + return 0; + } + + public int getContentHeight() { + return 0; + } + + public void pauseTimers() {} + + public void resumeTimers() {} + + public void clearCache() {} + + public void clearFormData() {} + + public void clearHistory() {} + + public void clearSslPreferences() {} + + public static String findAddress(String addr) { + return null; + } + + public void setWebViewClient(WebViewClient client) {} + + public void addJavascriptInterface(Object obj, String interfaceName) {} + + public View getZoomControls() { + return null; + } + + public boolean zoomIn() { + return false; + } + + public boolean zoomOut() { + return false; + } + + public WebSettings getSettings() { + return null; } } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java index e63cf85c9c8..03a98480210 100644 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java +++ b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewClient.java @@ -1,66 +1,231 @@ -// Generated automatically from android.webkit.WebViewClient for testing purposes - +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package android.webkit; -import android.graphics.Bitmap; -import android.net.http.SslError; -import android.os.Message; -import android.view.KeyEvent; -import android.webkit.ClientCertRequest; -import android.webkit.HttpAuthHandler; -import android.webkit.RenderProcessGoneDetail; -import android.webkit.SafeBrowsingResponse; -import android.webkit.SslErrorHandler; -import android.webkit.WebResourceError; -import android.webkit.WebResourceRequest; -import android.webkit.WebResourceResponse; -import android.webkit.WebView; +public class WebViewClient { + /** + * Give the host application a chance to take over the control when a new url is + * about to be loaded in the current WebView. If WebViewClient is not provided, + * by default WebView will ask Activity Manager to choose the proper handler for + * the url. If WebViewClient is provided, return {@code true} means the host + * application handles the url, while return {@code false} means the current + * WebView handles the url. This method is not called for requests using the + * POST "method". + * + * @param view The WebView that is initiating the callback. + * @param url The url to be loaded. + * @return {@code true} if the host application wants to leave the current + * WebView and handle the url itself, otherwise return {@code false}. + * @deprecated Use {@link #shouldOverrideUrlLoading(WebView, WebResourceRequest) + * shouldOverrideUrlLoading(WebView, WebResourceRequest)} instead. + */ + @Deprecated + public boolean shouldOverrideUrlLoading(WebView view, String url) { + return false; + } + + /** + * Give the host application a chance to take over the control when a new url is + * about to be loaded in the current WebView. If WebViewClient is not provided, + * by default WebView will ask Activity Manager to choose the proper handler for + * the url. If WebViewClient is provided, return {@code true} means the host + * application handles the url, while return {@code false} means the current + * WebView handles the url. + * + *

    + * Notes: + *

      + *
    • This method is not called for requests using the POST + * "method".
    • + *
    • This method is also called for subframes with non-http schemes, thus it + * is strongly disadvised to unconditionally call + * {@link WebView#loadUrl(String)} with the request's url from inside the method + * and then return {@code true}, as this will make WebView to attempt loading a + * non-http url, and thus fail.
    • + *
    + * + * @param view The WebView that is initiating the callback. + * @param request Object containing the details of the request. + * @return {@code true} if the host application wants to leave the current + * WebView and handle the url itself, otherwise return {@code false}. + */ + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + return false; + } + + /** + * Notify the host application that a page has finished loading. This method is + * called only for main frame. When onPageFinished() is called, the rendering + * picture may not be updated yet. To get the notification for the new Picture, + * use {@link WebView.PictureListener#onNewPicture}. + * + * @param view The WebView that is initiating the callback. + * @param url The url of the page. + */ + public void onPageFinished(WebView view, String url) { + } + + /** + * Notify the host application that the WebView will load the resource specified + * by the given url. + * + * @param view The WebView that is initiating the callback. + * @param url The url of the resource the WebView will load. + */ + public void onLoadResource(WebView view, String url) { + } + + /** + * Notify the host application that {@link android.webkit.WebView} content left + * over from previous page navigations will no longer be drawn. + * + *

    + * This callback can be used to determine the point at which it is safe to make + * a recycled {@link android.webkit.WebView} visible, ensuring that no stale + * content is shown. It is called at the earliest point at which it can be + * guaranteed that {@link WebView#onDraw} will no longer draw any content from + * previous navigations. The next draw will display either the + * {@link WebView#setBackgroundColor background color} of the {@link WebView}, + * or some of the contents of the newly loaded page. + * + *

    + * This method is called when the body of the HTTP response has started loading, + * is reflected in the DOM, and will be visible in subsequent draws. This + * callback occurs early in the document loading process, and as such you should + * expect that linked resources (for example, CSS and images) may not be + * available. + * + *

    + * For more fine-grained notification of visual state updates, see + * {@link WebView#postVisualStateCallback}. + * + *

    + * Please note that all the conditions and recommendations applicable to + * {@link WebView#postVisualStateCallback} also apply to this API. + * + *

    + * This callback is only called for main frame navigations. + * + * @param view The {@link android.webkit.WebView} for which the navigation + * occurred. + * @param url The URL corresponding to the page navigation that triggered this + * callback. + */ + public void onPageCommitVisible(WebView view, String url) { + } + + /** + * Notify the host application of a resource request and allow the application + * to return the data. If the return value is {@code null}, the WebView will + * continue to load the resource as usual. Otherwise, the return response and + * data will be used. + * + *

    + * This callback is invoked for a variety of URL schemes (e.g., + * {@code http(s):}, {@code + * data:}, {@code file:}, etc.), not only those schemes which send requests over + * the network. This is not called for {@code javascript:} URLs, {@code blob:} + * URLs, or for assets accessed via {@code file:///android_asset/} or + * {@code file:///android_res/} URLs. + * + *

    + * In the case of redirects, this is only called for the initial resource URL, + * not any subsequent redirect URLs. + * + *

    + * Note: This method is called on a thread other than the UI thread so + * clients should exercise caution when accessing private data or the view + * system. + * + *

    + * Note: When Safe Browsing is enabled, these URLs still undergo Safe + * Browsing checks. If this is undesired, whitelist the URL with + * {@link WebView#setSafeBrowsingWhitelist} or ignore the warning with + * {@link #onSafeBrowsingHit}. + * + * @param view The {@link android.webkit.WebView} that is requesting the + * resource. + * @param url The raw url of the resource. + * @return A {@link android.webkit.WebResourceResponse} containing the response + * information or {@code null} if the WebView should load the resource + * itself. + * @deprecated Use {@link #shouldInterceptRequest(WebView, WebResourceRequest) + * shouldInterceptRequest(WebView, WebResourceRequest)} instead. + */ + @Deprecated + public WebResourceResponse shouldInterceptRequest(WebView view, String url) { + return null; + } + + /** + * Notify the host application of a resource request and allow the application + * to return the data. If the return value is {@code null}, the WebView will + * continue to load the resource as usual. Otherwise, the return response and + * data will be used. + * + *

    + * This callback is invoked for a variety of URL schemes (e.g., + * {@code http(s):}, {@code + * data:}, {@code file:}, etc.), not only those schemes which send requests over + * the network. This is not called for {@code javascript:} URLs, {@code blob:} + * URLs, or for assets accessed via {@code file:///android_asset/} or + * {@code file:///android_res/} URLs. + * + *

    + * In the case of redirects, this is only called for the initial resource URL, + * not any subsequent redirect URLs. + * + *

    + * Note: This method is called on a thread other than the UI thread so + * clients should exercise caution when accessing private data or the view + * system. + * + *

    + * Note: When Safe Browsing is enabled, these URLs still undergo Safe + * Browsing checks. If this is undesired, whitelist the URL with + * {@link WebView#setSafeBrowsingWhitelist} or ignore the warning with + * {@link #onSafeBrowsingHit}. + * + * @param view The {@link android.webkit.WebView} that is requesting the + * resource. + * @param request Object containing the details of the request. + * @return A {@link android.webkit.WebResourceResponse} containing the response + * information or {@code null} if the WebView should load the resource + * itself. + */ + public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { + return null; + } + + /** + * Report an error to the host application. These errors are unrecoverable (i.e. + * the main resource is unavailable). The {@code errorCode} parameter + * corresponds to one of the {@code ERROR_*} constants. + * + * @param view The WebView that is initiating the callback. + * @param errorCode The error code corresponding to an ERROR_* value. + * @param description A String describing the error. + * @param failingUrl The url that failed to load. + * @deprecated Use + * {@link #onReceivedError(WebView, WebResourceRequest, WebResourceError) + * onReceivedError(WebView, WebResourceRequest, WebResourceError)} + * instead. + */ + @Deprecated + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { + } -public class WebViewClient -{ - public WebResourceResponse shouldInterceptRequest(WebView p0, String p1){ return null; } - public WebResourceResponse shouldInterceptRequest(WebView p0, WebResourceRequest p1){ return null; } - public WebViewClient(){} - public boolean onRenderProcessGone(WebView p0, RenderProcessGoneDetail p1){ return false; } - public boolean shouldOverrideKeyEvent(WebView p0, KeyEvent p1){ return false; } - public boolean shouldOverrideUrlLoading(WebView p0, String p1){ return false; } - public boolean shouldOverrideUrlLoading(WebView p0, WebResourceRequest p1){ return false; } - public static int ERROR_AUTHENTICATION = 0; - public static int ERROR_BAD_URL = 0; - public static int ERROR_CONNECT = 0; - public static int ERROR_FAILED_SSL_HANDSHAKE = 0; - public static int ERROR_FILE = 0; - public static int ERROR_FILE_NOT_FOUND = 0; - public static int ERROR_HOST_LOOKUP = 0; - public static int ERROR_IO = 0; - public static int ERROR_PROXY_AUTHENTICATION = 0; - public static int ERROR_REDIRECT_LOOP = 0; - public static int ERROR_TIMEOUT = 0; - public static int ERROR_TOO_MANY_REQUESTS = 0; - public static int ERROR_UNKNOWN = 0; - public static int ERROR_UNSAFE_RESOURCE = 0; - public static int ERROR_UNSUPPORTED_AUTH_SCHEME = 0; - public static int ERROR_UNSUPPORTED_SCHEME = 0; - public static int SAFE_BROWSING_THREAT_BILLING = 0; - public static int SAFE_BROWSING_THREAT_MALWARE = 0; - public static int SAFE_BROWSING_THREAT_PHISHING = 0; - public static int SAFE_BROWSING_THREAT_UNKNOWN = 0; - public static int SAFE_BROWSING_THREAT_UNWANTED_SOFTWARE = 0; - public void doUpdateVisitedHistory(WebView p0, String p1, boolean p2){} - public void onFormResubmission(WebView p0, Message p1, Message p2){} - public void onLoadResource(WebView p0, String p1){} - public void onPageCommitVisible(WebView p0, String p1){} - public void onPageFinished(WebView p0, String p1){} - public void onPageStarted(WebView p0, String p1, Bitmap p2){} - public void onReceivedClientCertRequest(WebView p0, ClientCertRequest p1){} - public void onReceivedError(WebView p0, WebResourceRequest p1, WebResourceError p2){} - public void onReceivedError(WebView p0, int p1, String p2, String p3){} - public void onReceivedHttpAuthRequest(WebView p0, HttpAuthHandler p1, String p2, String p3){} - public void onReceivedHttpError(WebView p0, WebResourceRequest p1, WebResourceResponse p2){} - public void onReceivedLoginRequest(WebView p0, String p1, String p2, String p3){} - public void onReceivedSslError(WebView p0, SslErrorHandler p1, SslError p2){} - public void onSafeBrowsingHit(WebView p0, WebResourceRequest p1, int p2, SafeBrowsingResponse p3){} - public void onScaleChanged(WebView p0, float p1, float p2){} - public void onTooManyRedirects(WebView p0, Message p1, Message p2){} - public void onUnhandledKeyEvent(WebView p0, KeyEvent p1){} } diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcess.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcess.java deleted file mode 100644 index 0c9d0d1385c..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcess.java +++ /dev/null @@ -1,10 +0,0 @@ -// Generated automatically from android.webkit.WebViewRenderProcess for testing purposes - -package android.webkit; - - -abstract public class WebViewRenderProcess -{ - public WebViewRenderProcess(){} - public abstract boolean terminate(); -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcessClient.java b/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcessClient.java deleted file mode 100644 index 742a6ed1438..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/webkit/WebViewRenderProcessClient.java +++ /dev/null @@ -1,13 +0,0 @@ -// Generated automatically from android.webkit.WebViewRenderProcessClient for testing purposes - -package android.webkit; - -import android.webkit.WebView; -import android.webkit.WebViewRenderProcess; - -abstract public class WebViewRenderProcessClient -{ - public WebViewRenderProcessClient(){} - public abstract void onRenderProcessResponsive(WebView p0, WebViewRenderProcess p1); - public abstract void onRenderProcessUnresponsive(WebView p0, WebViewRenderProcess p1); -} diff --git a/java/ql/test/stubs/google-android-9.0.0/android/widget/AbsoluteLayout.java b/java/ql/test/stubs/google-android-9.0.0/android/widget/AbsoluteLayout.java deleted file mode 100644 index 438d8feca86..00000000000 --- a/java/ql/test/stubs/google-android-9.0.0/android/widget/AbsoluteLayout.java +++ /dev/null @@ -1,23 +0,0 @@ -// Generated automatically from android.widget.AbsoluteLayout for testing purposes - -package android.widget; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.ViewGroup; - -public class AbsoluteLayout extends ViewGroup -{ - protected AbsoluteLayout() {} - protected ViewGroup.LayoutParams generateDefaultLayoutParams(){ return null; } - protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p0){ return null; } - protected boolean checkLayoutParams(ViewGroup.LayoutParams p0){ return false; } - protected void onLayout(boolean p0, int p1, int p2, int p3, int p4){} - protected void onMeasure(int p0, int p1){} - public AbsoluteLayout(Context p0){} - public AbsoluteLayout(Context p0, AttributeSet p1){} - public AbsoluteLayout(Context p0, AttributeSet p1, int p2){} - public AbsoluteLayout(Context p0, AttributeSet p1, int p2, int p3){} - public ViewGroup.LayoutParams generateLayoutParams(AttributeSet p0){ return null; } - public boolean shouldDelayChildPressedState(){ return false; } -} From 192017635aa6265655d8e1a7fe3a9a5f378539ad Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 29 Mar 2022 10:39:31 +0200 Subject: [PATCH 0275/1618] Update java/ql/src/change-notes/2022-03-24-unsafe-android-access-improvements.md Co-authored-by: Chris Smowton --- .../2022-03-24-unsafe-android-access-improvements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/src/change-notes/2022-03-24-unsafe-android-access-improvements.md b/java/ql/src/change-notes/2022-03-24-unsafe-android-access-improvements.md index cd9ebf32b98..8f0089f616a 100644 --- a/java/ql/src/change-notes/2022-03-24-unsafe-android-access-improvements.md +++ b/java/ql/src/change-notes/2022-03-24-unsafe-android-access-improvements.md @@ -1,5 +1,5 @@ --- category: minorAnalysis --- - * The logic to detect WebViews with JavaScript (and optionally file access) enabled in the query `java/android/unsafe-android-webview-fetch` has been improved. + * The logic to detect `WebView`s with JavaScript (and optionally file access) enabled in the query `java/android/unsafe-android-webview-fetch` has been improved. \ No newline at end of file From 3b1210eacb5fcbfe6ad91835536761588ba53c73 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Tue, 3 May 2022 14:37:33 +0200 Subject: [PATCH 0276/1618] Update java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll Co-authored-by: Chris Smowton --- java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll index da6c847d6c0..fa2b107e8c1 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll @@ -78,7 +78,7 @@ private predicate webViewLoadUrl(Argument urlArg, DataFlow::Node webview) { webview = DataFlow::getInstanceArgument(loadUrl) or // `webview` is received as a parameter of an event method in a custom `WebViewClient`, - // so we need to find WebViews that use that specific `WebViewClient`. + // so we need to find `WebViews` that use that specific `WebViewClient`. exists(WebViewClientEventMethod eventMethod, MethodAccess setWebClient | setWebClient.getMethod() instanceof WebViewSetWebViewClientMethod and setWebClient.getArgument(0).getType() = eventMethod.getDeclaringType() and From 8601137602d9b29b336b4c89bc2a571567231950 Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 4 May 2022 11:58:47 +0200 Subject: [PATCH 0277/1618] Fix bad join order by moving WebViewRef::getAnAccess from callsites into predicates --- .../java/security/UnsafeAndroidAccess.qll | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll index fa2b107e8c1..176b093b68a 100644 --- a/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll +++ b/java/ql/lib/semmle/code/java/security/UnsafeAndroidAccess.qll @@ -26,8 +26,8 @@ abstract class UrlResourceSink extends DataFlow::Node { private class CrossOriginUrlResourceSink extends JavaScriptEnabledUrlResourceSink { CrossOriginUrlResourceSink() { exists(WebViewRef webview | - webViewLoadUrl(this.asExpr(), webview.getAnAccess()) and - isAllowFileAccessEnabled(webview.getAnAccess()) + webViewLoadUrl(this.asExpr(), webview) and + isAllowFileAccessEnabled(webview) ) } @@ -42,8 +42,8 @@ private class CrossOriginUrlResourceSink extends JavaScriptEnabledUrlResourceSin private class JavaScriptEnabledUrlResourceSink extends UrlResourceSink { JavaScriptEnabledUrlResourceSink() { exists(WebViewRef webview | - webViewLoadUrl(this.asExpr(), webview.getAnAccess()) and - isJSEnabled(webview.getAnAccess()) + webViewLoadUrl(this.asExpr(), webview) and + isJSEnabled(webview) ) } @@ -67,15 +67,15 @@ private class WebViewRef extends Element { } /** - * Holds if a `WebViewLoadUrlMethod` is called on `webview` + * Holds if a `WebViewLoadUrlMethod` is called on an access of `webview` * with `urlArg` as its first argument. */ -private predicate webViewLoadUrl(Argument urlArg, DataFlow::Node webview) { +private predicate webViewLoadUrl(Argument urlArg, WebViewRef webview) { exists(MethodAccess loadUrl | loadUrl.getArgument(0) = urlArg and loadUrl.getMethod() instanceof WebViewLoadUrlMethod | - webview = DataFlow::getInstanceArgument(loadUrl) + webview.getAnAccess() = DataFlow::getInstanceArgument(loadUrl) or // `webview` is received as a parameter of an event method in a custom `WebViewClient`, // so we need to find `WebViews` that use that specific `WebViewClient`. @@ -84,37 +84,37 @@ private predicate webViewLoadUrl(Argument urlArg, DataFlow::Node webview) { setWebClient.getArgument(0).getType() = eventMethod.getDeclaringType() and loadUrl.getQualifier() = eventMethod.getWebViewParameter().getAnAccess() | - webview = DataFlow::getInstanceArgument(setWebClient) + webview.getAnAccess() = DataFlow::getInstanceArgument(setWebClient) ) ) } /** - * Holds if `webview` is a `WebView` and its option `setJavascriptEnabled` + * Holds if `webview`'s option `setJavascriptEnabled` * has been set to `true` via a `WebSettings` object obtained from it. */ -private predicate isJSEnabled(DataFlow::Node webview) { - webview.getType().(RefType).getASupertype*() instanceof TypeWebView and +private predicate isJSEnabled(WebViewRef webview) { exists(MethodAccess allowJs, MethodAccess settings | allowJs.getMethod() instanceof AllowJavaScriptMethod and allowJs.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and settings.getMethod() instanceof WebViewGetSettingsMethod and DataFlow::localExprFlow(settings, allowJs.getQualifier()) and - DataFlow::localFlow(webview, DataFlow::getInstanceArgument(settings)) + DataFlow::localFlow(webview.getAnAccess(), DataFlow::getInstanceArgument(settings)) ) } /** - * Holds if `webview` is a `WebView` and its options `setAllowUniversalAccessFromFileURLs` or - * `setAllowFileAccessFromFileURLs` have been set to `true`. + * Holds if `webview`'s options `setAllowUniversalAccessFromFileURLs` or + * `setAllowFileAccessFromFileURLs` have been set to `true` via a `WebSettings` object + * obtained from it. */ -private predicate isAllowFileAccessEnabled(DataFlow::Node webview) { +private predicate isAllowFileAccessEnabled(WebViewRef webview) { exists(MethodAccess allowFileAccess, MethodAccess settings | allowFileAccess.getMethod() instanceof CrossOriginAccessMethod and allowFileAccess.getArgument(0).(CompileTimeConstantExpr).getBooleanValue() = true and settings.getMethod() instanceof WebViewGetSettingsMethod and DataFlow::localExprFlow(settings, allowFileAccess.getQualifier()) and - DataFlow::localFlow(webview, DataFlow::getInstanceArgument(settings)) + DataFlow::localFlow(webview.getAnAccess(), DataFlow::getInstanceArgument(settings)) ) } From a488d6b80c92ba6bf81985680db717c238f934d7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 25 Apr 2022 12:55:48 +0200 Subject: [PATCH 0278/1618] C#: Add an initial flow state to the model generator. --- .../internal/CaptureModels.qll | 42 +++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll b/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll index 81f13d978dd..58f8d824883 100644 --- a/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll +++ b/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll @@ -90,18 +90,34 @@ string captureQualifierFlow(TargetApi api) { result = asValueModel(api, qualifierString(), "ReturnValue") } +private int accessPathLimit() { result = 2 } + /** * A FlowState representing a tainted read. */ private class TaintRead extends DataFlow::FlowState { - TaintRead() { this = "TaintRead" } + private int step; + + TaintRead() { this = "TaintRead(" + step + ")" and step in [0 .. accessPathLimit()] } + + /** + * Gets the flow state step number. + */ + int getStep() { result = step } } /** * A FlowState representing a tainted write. */ private class TaintStore extends DataFlow::FlowState { - TaintStore() { this = "TaintStore" } + private int step; + + TaintStore() { this = "TaintStore(" + step + ")" and step in [1 .. accessPathLimit()] } + + /** + * Gets the flow state step number. + */ + int getStep() { result = step } } /** @@ -109,6 +125,16 @@ private class TaintStore extends DataFlow::FlowState { * The sources are the parameters of an API and the sinks are the return values (excluding `this`) and parameters. * * This can be used to generate Flow summaries for APIs from parameter to return. + * + * * We track at most two reads and at most two stores, meaning flow paths of the form + * + * ``` + * parameter --value -->* node --read -->? + * node --taint -->* node --read -->? + * node --taint -->* node --store -->? + * node --taint -->* node --store -->? + * node --taint-->* return + * ``` */ private class ThroughFlowConfig extends TaintTracking::Configuration { ThroughFlowConfig() { this = "ThroughFlowConfig" } @@ -116,7 +142,7 @@ private class ThroughFlowConfig extends TaintTracking::Configuration { override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { source instanceof DataFlow::ParameterNode and source.getEnclosingCallable() instanceof TargetApi and - state instanceof TaintRead + state.(TaintRead).getStep() = 0 } override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { @@ -133,15 +159,17 @@ private class ThroughFlowConfig extends TaintTracking::Configuration { exists(DataFlowImplCommon::TypedContent tc | DataFlowImplCommon::store(node1, tc, node2, _) and isRelevantContent(tc.getContent()) and - (state1 instanceof TaintRead or state1 instanceof TaintStore) and - state2 instanceof TaintStore + ( + state1 instanceof TaintRead and state2.(TaintStore).getStep() = 1 + or + state1.(TaintStore).getStep() + 1 = state2.(TaintStore).getStep() + ) ) or exists(DataFlow::Content c | DataFlowPrivate::readStep(node1, c, node2) and isRelevantContent(c) and - state1 instanceof TaintRead and - state2 instanceof TaintRead + state1.(TaintRead).getStep() + 1 = state2.(TaintRead).getStep() ) } From 5f1a176a02f1a2df79ddc5f0e07ca796db1e8232 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 4 May 2022 12:29:57 +0200 Subject: [PATCH 0279/1618] Java: Sync CaptureModels implementation to only allow at most two reads and two stores. --- .../internal/CaptureModels.qll | 42 +++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/java/ql/src/utils/model-generator/internal/CaptureModels.qll b/java/ql/src/utils/model-generator/internal/CaptureModels.qll index 81f13d978dd..58f8d824883 100644 --- a/java/ql/src/utils/model-generator/internal/CaptureModels.qll +++ b/java/ql/src/utils/model-generator/internal/CaptureModels.qll @@ -90,18 +90,34 @@ string captureQualifierFlow(TargetApi api) { result = asValueModel(api, qualifierString(), "ReturnValue") } +private int accessPathLimit() { result = 2 } + /** * A FlowState representing a tainted read. */ private class TaintRead extends DataFlow::FlowState { - TaintRead() { this = "TaintRead" } + private int step; + + TaintRead() { this = "TaintRead(" + step + ")" and step in [0 .. accessPathLimit()] } + + /** + * Gets the flow state step number. + */ + int getStep() { result = step } } /** * A FlowState representing a tainted write. */ private class TaintStore extends DataFlow::FlowState { - TaintStore() { this = "TaintStore" } + private int step; + + TaintStore() { this = "TaintStore(" + step + ")" and step in [1 .. accessPathLimit()] } + + /** + * Gets the flow state step number. + */ + int getStep() { result = step } } /** @@ -109,6 +125,16 @@ private class TaintStore extends DataFlow::FlowState { * The sources are the parameters of an API and the sinks are the return values (excluding `this`) and parameters. * * This can be used to generate Flow summaries for APIs from parameter to return. + * + * * We track at most two reads and at most two stores, meaning flow paths of the form + * + * ``` + * parameter --value -->* node --read -->? + * node --taint -->* node --read -->? + * node --taint -->* node --store -->? + * node --taint -->* node --store -->? + * node --taint-->* return + * ``` */ private class ThroughFlowConfig extends TaintTracking::Configuration { ThroughFlowConfig() { this = "ThroughFlowConfig" } @@ -116,7 +142,7 @@ private class ThroughFlowConfig extends TaintTracking::Configuration { override predicate isSource(DataFlow::Node source, DataFlow::FlowState state) { source instanceof DataFlow::ParameterNode and source.getEnclosingCallable() instanceof TargetApi and - state instanceof TaintRead + state.(TaintRead).getStep() = 0 } override predicate isSink(DataFlow::Node sink, DataFlow::FlowState state) { @@ -133,15 +159,17 @@ private class ThroughFlowConfig extends TaintTracking::Configuration { exists(DataFlowImplCommon::TypedContent tc | DataFlowImplCommon::store(node1, tc, node2, _) and isRelevantContent(tc.getContent()) and - (state1 instanceof TaintRead or state1 instanceof TaintStore) and - state2 instanceof TaintStore + ( + state1 instanceof TaintRead and state2.(TaintStore).getStep() = 1 + or + state1.(TaintStore).getStep() + 1 = state2.(TaintStore).getStep() + ) ) or exists(DataFlow::Content c | DataFlowPrivate::readStep(node1, c, node2) and isRelevantContent(c) and - state1 instanceof TaintRead and - state2 instanceof TaintRead + state1.(TaintRead).getStep() + 1 = state2.(TaintRead).getStep() ) } From 2d3b15f936f4c3fa28badc72f8164bfc5aa818ab Mon Sep 17 00:00:00 2001 From: Tony Torralba Date: Wed, 4 May 2022 12:32:59 +0200 Subject: [PATCH 0280/1618] Add more taint models --- .../semmle/code/java/frameworks/OkHttp.qll | 17 +++ .../library-tests/frameworks/okhttp/Test.java | 126 ++++++++++++++++++ 2 files changed, 143 insertions(+) diff --git a/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll b/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll index cc4557bcd03..da38b7af7e8 100644 --- a/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll +++ b/java/ql/lib/semmle/code/java/frameworks/OkHttp.qll @@ -23,31 +23,48 @@ private class OKHttpSummaries extends SummaryModelCsv { "okhttp3;HttpUrl;false;uri;;;Argument[-1];ReturnValue;taint", "okhttp3;HttpUrl;false;url;;;Argument[-1];ReturnValue;taint", "okhttp3;HttpUrl$Builder;false;addEncodedPathSegment;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;addEncodedPathSegment;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;addEncodedPathSegments;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;addEncodedPathSegments;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;addEncodedQueryParameter;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;addEncodedQueryParameter;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;addPathSegment;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;addPathSegment;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;addPathSegments;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;addPathSegments;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;addQueryParameter;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;addQueryParameter;;;Argument[0..1];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;build;;;Argument[-1];ReturnValue;taint", "okhttp3;HttpUrl$Builder;false;encodedFragment;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;encodedFragment;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;encodedPassword;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;encodedPath;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;encodedPath;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;encodedQuery;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;encodedQuery;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;encodedUsername;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;fragment;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;fragment;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;host;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;host;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;password;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;port;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;port;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;query;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;query;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;removeAllEncodedQueryParameters;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;removeAllQueryParameters;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;removePathSegment;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;scheme;;;Argument[-1];ReturnValue;value", "okhttp3;HttpUrl$Builder;false;scheme;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;setEncodedPathSegment;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;setEncodedPathSegment;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;setEncodedQueryParameter;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;setEncodedQueryParameter;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;setPathSegment;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;setPathSegment;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;setQueryParameter;;;Argument[-1];ReturnValue;value", + "okhttp3;HttpUrl$Builder;false;setQueryParameter;;;Argument[0];Argument[-1];taint", "okhttp3;HttpUrl$Builder;false;username;;;Argument[-1];ReturnValue;value", ] } diff --git a/java/ql/test/library-tests/frameworks/okhttp/Test.java b/java/ql/test/library-tests/frameworks/okhttp/Test.java index 02950ccaa30..7d6517bddf0 100644 --- a/java/ql/test/library-tests/frameworks/okhttp/Test.java +++ b/java/ql/test/library-tests/frameworks/okhttp/Test.java @@ -28,6 +28,13 @@ public class Test { out = in.addEncodedPathSegment(null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;addEncodedPathSegment;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.addEncodedPathSegment(in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;addEncodedPathSegments;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -35,6 +42,13 @@ public class Test { out = in.addEncodedPathSegments(null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;addEncodedPathSegments;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.addEncodedPathSegments(in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;addEncodedQueryParameter;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -42,6 +56,13 @@ public class Test { out = in.addEncodedQueryParameter(null, null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;addEncodedQueryParameter;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.addEncodedQueryParameter(in, null); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;addPathSegment;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -49,6 +70,13 @@ public class Test { out = in.addPathSegment(null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;addPathSegment;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.addPathSegment(in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;addPathSegments;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -56,6 +84,13 @@ public class Test { out = in.addPathSegments(null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;addPathSegments;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.addPathSegments(in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;addQueryParameter;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -63,6 +98,20 @@ public class Test { out = in.addQueryParameter(null, null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;addQueryParameter;;;Argument[0..1];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.addQueryParameter(in, null); + sink(out); // $ hasTaintFlow + } + { + // "okhttp3;HttpUrl$Builder;false;addQueryParameter;;;Argument[0..1];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.addQueryParameter(null, in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;build;;;Argument[-1];ReturnValue;taint" HttpUrl out = null; @@ -77,6 +126,13 @@ public class Test { out = in.encodedFragment(null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;encodedFragment;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.encodedFragment(in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;encodedPassword;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -91,6 +147,13 @@ public class Test { out = in.encodedPath(null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;encodedPath;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.encodedPath(in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;encodedQuery;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -98,6 +161,13 @@ public class Test { out = in.encodedQuery(null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;encodedQuery;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.encodedQuery(in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;encodedUsername;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -112,6 +182,13 @@ public class Test { out = in.fragment(null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;fragment;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.fragment(in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;host;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -119,6 +196,13 @@ public class Test { out = in.host(null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;host;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.host(in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;password;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -133,6 +217,13 @@ public class Test { out = in.port(0); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;port;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + int in = (int) source(); + out.port(in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;query;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -140,6 +231,13 @@ public class Test { out = in.query(null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;query;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.query(in); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;removeAllEncodedQueryParameters;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -182,6 +280,13 @@ public class Test { out = in.setEncodedPathSegment(0, null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;setEncodedPathSegment;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + int in = (int) source(); + out.setEncodedPathSegment(in, null); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;setEncodedQueryParameter;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -189,6 +294,13 @@ public class Test { out = in.setEncodedQueryParameter(null, null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;setEncodedQueryParameter;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.setEncodedQueryParameter(in, null); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;setPathSegment;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -196,6 +308,13 @@ public class Test { out = in.setPathSegment(0, null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;setPathSegment;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + int in = (int) source(); + out.setPathSegment(in, null); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;setQueryParameter;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; @@ -203,6 +322,13 @@ public class Test { out = in.setQueryParameter(null, null); sink(out); // $ hasValueFlow } + { + // "okhttp3;HttpUrl$Builder;false;setQueryParameter;;;Argument[0];Argument[-1];taint" + HttpUrl.Builder out = null; + String in = (String) source(); + out.setQueryParameter(in, null); + sink(out); // $ hasTaintFlow + } { // "okhttp3;HttpUrl$Builder;false;username;;;Argument[-1];ReturnValue;value" HttpUrl.Builder out = null; From 276f8d40f9c1facfd28f9b9d5b3d47f584b8948d Mon Sep 17 00:00:00 2001 From: Nick Rolfe Date: Wed, 4 May 2022 12:07:46 +0100 Subject: [PATCH 0281/1618] Ruby: add comments to address review feedback --- ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll index 489856102af..408be336b8e 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/Array.qll @@ -199,7 +199,7 @@ module Array { /** A call to `[]`, or its alias, `slice`. */ abstract private class ElementReferenceReadSummary extends SummarizedCallable { MethodCall mc; - ElementReferenceReadMethodName methodName; + ElementReferenceReadMethodName methodName; // adding this as a field helps give a better join order bindingset[this] ElementReferenceReadSummary() { mc.getMethodName() = methodName } @@ -2018,7 +2018,7 @@ module Enumerable { abstract private class GrepSummary extends SummarizedCallable { MethodCall mc; - GrepMethodName methodName; + GrepMethodName methodName; // adding this as a field helps give a better join order bindingset[this] GrepSummary() { mc.getMethodName() = methodName } @@ -2162,7 +2162,7 @@ module Enumerable { abstract private class MinOrMaxSummary extends SummarizedCallable { MethodCall mc; - MinOrMaxMethodName methodName; + MinOrMaxMethodName methodName; // adding this as a field helps give a better join order bindingset[this] MinOrMaxSummary() { mc.getMethodName() = methodName } From 7f7742216c5a507eb38456af985525efafb0b409 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 4 May 2022 14:48:34 +0200 Subject: [PATCH 0282/1618] Address review comment This reverts commit 2b4fde74bbc3497df374a553e1439c79b3978e83. --- .../csharp/dataflow/internal/DataFlowImpl.qll | 41 ++++++++----------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index afde881c9d2..881c2e7b2f0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } From 9cb63c0a5ef603a67daa091fdf483ba76018d19d Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 4 May 2022 14:49:26 +0200 Subject: [PATCH 0283/1618] Data flow: Sync files --- .../cpp/dataflow/internal/DataFlowImpl.qll | 41 ++++++++----------- .../cpp/dataflow/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../cpp/dataflow/internal/DataFlowImpl3.qll | 41 ++++++++----------- .../cpp/dataflow/internal/DataFlowImpl4.qll | 41 ++++++++----------- .../dataflow/internal/DataFlowImplLocal.qll | 41 ++++++++----------- .../cpp/ir/dataflow/internal/DataFlowImpl.qll | 41 ++++++++----------- .../ir/dataflow/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../ir/dataflow/internal/DataFlowImpl3.qll | 41 ++++++++----------- .../ir/dataflow/internal/DataFlowImpl4.qll | 41 ++++++++----------- .../dataflow/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../dataflow/internal/DataFlowImpl3.qll | 41 ++++++++----------- .../dataflow/internal/DataFlowImpl4.qll | 41 ++++++++----------- .../dataflow/internal/DataFlowImpl5.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl3.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl4.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl5.qll | 41 ++++++++----------- .../java/dataflow/internal/DataFlowImpl6.qll | 41 ++++++++----------- .../DataFlowImplForOnActivityResult.qll | 41 ++++++++----------- .../DataFlowImplForSerializability.qll | 41 ++++++++----------- .../dataflow/new/internal/DataFlowImpl.qll | 41 ++++++++----------- .../dataflow/new/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../dataflow/new/internal/DataFlowImpl3.qll | 41 ++++++++----------- .../dataflow/new/internal/DataFlowImpl4.qll | 41 ++++++++----------- .../ruby/dataflow/internal/DataFlowImpl.qll | 41 ++++++++----------- .../ruby/dataflow/internal/DataFlowImpl2.qll | 41 ++++++++----------- .../internal/DataFlowImplForLibraries.qll | 41 ++++++++----------- 28 files changed, 504 insertions(+), 644 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index afde881c9d2..881c2e7b2f0 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index afde881c9d2..881c2e7b2f0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index afde881c9d2..881c2e7b2f0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index afde881c9d2..881c2e7b2f0 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index afde881c9d2..881c2e7b2f0 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index afde881c9d2..881c2e7b2f0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index afde881c9d2..881c2e7b2f0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index afde881c9d2..881c2e7b2f0 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll index afde881c9d2..881c2e7b2f0 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll index afde881c9d2..881c2e7b2f0 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll index afde881c9d2..881c2e7b2f0 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll @@ -4206,11 +4206,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths01( PathNodeImpl arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout + NodeEx out, FlowState sout, AccessPath apout ) { exists(Configuration config | - pathThroughCallable(arg, out, pragma[only_bind_into](sout), ccout, - pragma[only_bind_into](apout)) and + pathThroughCallable(arg, out, pragma[only_bind_into](sout), _, pragma[only_bind_into](apout)) and pathIntoCallable(arg, par, _, _, innercc, sc, _, config) and paramFlowsThrough(kind, pragma[only_bind_into](sout), innercc, sc, pragma[only_bind_into](apout), _, unbindConf(config)) and @@ -4225,11 +4224,10 @@ private module Subpaths { pragma[nomagic] private predicate subpaths02( PathNode arg, ParamNodeEx par, SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, - NodeEx out, FlowState sout, CallContext ccout, AccessPath apout, Configuration config + NodeEx out, FlowState sout, AccessPath apout ) { - subpaths01(arg, par, sc, innercc, kind, out, sout, ccout, apout) and - out.asNode() = kind.getAnOutNode(_) and - config = getPathNodeConf(arg) + subpaths01(arg, par, sc, innercc, kind, out, sout, apout) and + out.asNode() = kind.getAnOutNode(_) } pragma[nomagic] @@ -4240,14 +4238,12 @@ private module Subpaths { */ pragma[nomagic] private predicate subpaths03( - PathNodeMid arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, - CallContext ccout, AccessPath apout, SummaryCtx scout, Configuration config + PathNode arg, ParamNodeEx par, PathNodeMid ret, NodeEx out, FlowState sout, AccessPath apout ) { exists(SummaryCtxSome sc, CallContext innercc, ReturnKindExt kind, RetNodeEx retnode | - subpaths02(arg, par, sc, innercc, kind, out, sout, ccout, apout, config) and - pathNode(ret, retnode, sout, innercc, sc, apout, config, _) and - kind = retnode.getKind() and - scout = arg.getSummaryCtx() + subpaths02(arg, par, sc, innercc, kind, out, sout, apout) and + pathNode(ret, retnode, sout, innercc, sc, apout, unbindConf(getPathNodeConf(arg)), _) and + kind = retnode.getKind() ) } @@ -4267,17 +4263,16 @@ private module Subpaths { * `ret -> out` is summarized as the edge `arg -> out`. */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { - exists( - ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, CallContext ccout, - SummaryCtx scout, PathNodeMid out0, Configuration config - | - pragma[only_bind_into](arg).getASuccessor() = par and - subpaths03(arg, p, localStepToHidden*(ret), o, sout, ccout, apout, scout, config) and - pathNode(out0, o, sout, ccout, scout, apout, config, _) and + exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and + pragma[only_bind_into](arg).getASuccessor() = out0 and + subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and not ret.isHidden() and - par.getNodeEx() = p - | - out = out0 or out = out0.projectToSink() + par.getNodeEx() = p and + out0.getNodeEx() = o and + out0.getState() = sout and + out0.getAp() = apout and + (out = out0 or out = out0.projectToSink()) ) } From 7bd7bedb1be7df5004089570df226832992edc7a Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Wed, 4 May 2022 16:12:20 +0200 Subject: [PATCH 0284/1618] Ruby: Simplify `isLocalSourceNode` implementation The need for `SynthReturnNode` goes away if we don't restrict the nodes that can't be reached from another entry definition or expression to be `ExprNode`s --- .../lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 8072083ff65..3e9d49f38b5 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -302,13 +302,7 @@ private module Cached { or n instanceof PostUpdateNodes::ExprPostUpdateNode or - // TODO: Explain why SynthReturnNode is needed! - // if we don't include this, we are not able to find this call: - // https://github.com/github/codeql/blob/976daddd36a63bf46836d141d04172e90bb4b33c/ruby/ql/test/library-tests/frameworks/http_clients/NetHttp.rb#L24 - n instanceof SynthReturnNode - or - // Expressions that can't be reached from another entry definition or expression. - n instanceof ExprNode and + // Nodes that can't be reached from another entry definition or expression. not localFlowStepTypeTracker+(any(Node n0 | n0 instanceof ExprNode or From 9db67d498840569fae6f6321c2a6de34c9e5a321 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 3 May 2022 12:09:10 +0200 Subject: [PATCH 0285/1618] move the Actions API out of experimental --- .../ql/{src/experimental => lib}/semmle/javascript/Actions.qll | 0 .../ql/src/experimental/Security/CWE-094/ExpressionInjection.ql | 2 +- .../ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename javascript/ql/{src/experimental => lib}/semmle/javascript/Actions.qll (100%) diff --git a/javascript/ql/src/experimental/semmle/javascript/Actions.qll b/javascript/ql/lib/semmle/javascript/Actions.qll similarity index 100% rename from javascript/ql/src/experimental/semmle/javascript/Actions.qll rename to javascript/ql/lib/semmle/javascript/Actions.qll diff --git a/javascript/ql/src/experimental/Security/CWE-094/ExpressionInjection.ql b/javascript/ql/src/experimental/Security/CWE-094/ExpressionInjection.ql index 29a34897880..29ffa9e27e2 100644 --- a/javascript/ql/src/experimental/Security/CWE-094/ExpressionInjection.ql +++ b/javascript/ql/src/experimental/Security/CWE-094/ExpressionInjection.ql @@ -12,7 +12,7 @@ */ import javascript -import experimental.semmle.javascript.Actions +import semmle.javascript.Actions bindingset[context] private predicate isExternalUserControlledIssue(string context) { diff --git a/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql b/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql index 2715f788e5c..cf19d07015d 100644 --- a/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql +++ b/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql @@ -13,7 +13,7 @@ */ import javascript -import experimental.semmle.javascript.Actions +import semmle.javascript.Actions /** * An action step that doesn't contain `actor` or `label` check in `if:` or From bc470b89f1dd1e2abd0eb168f748a6eedde4425f Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 3 May 2022 12:14:30 +0200 Subject: [PATCH 0286/1618] leave a deprecated alias for Actions.qll --- javascript/ql/src/experimental/semmle/javascript/Actions.qll | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/src/experimental/semmle/javascript/Actions.qll diff --git a/javascript/ql/src/experimental/semmle/javascript/Actions.qll b/javascript/ql/src/experimental/semmle/javascript/Actions.qll new file mode 100644 index 00000000000..2938cc14692 --- /dev/null +++ b/javascript/ql/src/experimental/semmle/javascript/Actions.qll @@ -0,0 +1,4 @@ +/** DEPRECATED: Use `semmle.javascript.Actions` instead. */ +deprecated module Actions { + import semmle.javascript.Actions::Actions +} From fc6eedd07a341c54f1d8b36280807106779b993f Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 3 May 2022 12:23:13 +0200 Subject: [PATCH 0287/1618] generalize the file pattern for github/actions related YAML --- javascript/ql/lib/semmle/javascript/Actions.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/Actions.qll b/javascript/ql/lib/semmle/javascript/Actions.qll index 17c2691c947..a387d26bce4 100644 --- a/javascript/ql/lib/semmle/javascript/Actions.qll +++ b/javascript/ql/lib/semmle/javascript/Actions.qll @@ -16,7 +16,7 @@ module Actions { this.getLocation() .getFile() .getRelativePath() - .matches(["experimental/Security/CWE-094/.github/workflows/%", ".github/workflows/%"]) + .regexpMatch("(^|.*/)\\.github/workflows/.*\\.yml$") } } From 2a65d1d3ec663bc3ab28a18cd8592ce747fc6953 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 3 May 2022 13:12:47 +0200 Subject: [PATCH 0288/1618] move js/actions/injection out of experimental --- .../Security/CWE-094/ExpressionInjection.qhelp | 0 .../{experimental => }/Security/CWE-094/ExpressionInjection.ql | 0 .../Security/CWE-094/examples/comment_issue_bad.yml | 0 .../Security/CWE-094/examples/comment_issue_good.yml | 0 .../test/experimental/Security/CWE-094/ExpressionInjection.qlref | 1 - .../ExpressionInjection}/.github/workflows/comment_issue.yml | 0 .../CWE-094/ExpressionInjection}/ExpressionInjection.expected | 0 .../CWE-094/ExpressionInjection/ExpressionInjection.qlref | 1 + .../query-tests/Security/CWE-094/ExpressionInjection/empty.js | 1 + 9 files changed, 2 insertions(+), 1 deletion(-) rename javascript/ql/src/{experimental => }/Security/CWE-094/ExpressionInjection.qhelp (100%) rename javascript/ql/src/{experimental => }/Security/CWE-094/ExpressionInjection.ql (100%) rename javascript/ql/src/{experimental => }/Security/CWE-094/examples/comment_issue_bad.yml (100%) rename javascript/ql/src/{experimental => }/Security/CWE-094/examples/comment_issue_good.yml (100%) delete mode 100644 javascript/ql/test/experimental/Security/CWE-094/ExpressionInjection.qlref rename javascript/ql/test/{experimental/Security/CWE-094 => query-tests/Security/CWE-094/ExpressionInjection}/.github/workflows/comment_issue.yml (100%) rename javascript/ql/test/{experimental/Security/CWE-094 => query-tests/Security/CWE-094/ExpressionInjection}/ExpressionInjection.expected (100%) create mode 100644 javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.qlref create mode 100644 javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/empty.js diff --git a/javascript/ql/src/experimental/Security/CWE-094/ExpressionInjection.qhelp b/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp similarity index 100% rename from javascript/ql/src/experimental/Security/CWE-094/ExpressionInjection.qhelp rename to javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp diff --git a/javascript/ql/src/experimental/Security/CWE-094/ExpressionInjection.ql b/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql similarity index 100% rename from javascript/ql/src/experimental/Security/CWE-094/ExpressionInjection.ql rename to javascript/ql/src/Security/CWE-094/ExpressionInjection.ql diff --git a/javascript/ql/src/experimental/Security/CWE-094/examples/comment_issue_bad.yml b/javascript/ql/src/Security/CWE-094/examples/comment_issue_bad.yml similarity index 100% rename from javascript/ql/src/experimental/Security/CWE-094/examples/comment_issue_bad.yml rename to javascript/ql/src/Security/CWE-094/examples/comment_issue_bad.yml diff --git a/javascript/ql/src/experimental/Security/CWE-094/examples/comment_issue_good.yml b/javascript/ql/src/Security/CWE-094/examples/comment_issue_good.yml similarity index 100% rename from javascript/ql/src/experimental/Security/CWE-094/examples/comment_issue_good.yml rename to javascript/ql/src/Security/CWE-094/examples/comment_issue_good.yml diff --git a/javascript/ql/test/experimental/Security/CWE-094/ExpressionInjection.qlref b/javascript/ql/test/experimental/Security/CWE-094/ExpressionInjection.qlref deleted file mode 100644 index e3d73f1c726..00000000000 --- a/javascript/ql/test/experimental/Security/CWE-094/ExpressionInjection.qlref +++ /dev/null @@ -1 +0,0 @@ -experimental/Security/CWE-094/ExpressionInjection.ql diff --git a/javascript/ql/test/experimental/Security/CWE-094/.github/workflows/comment_issue.yml b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/comment_issue.yml similarity index 100% rename from javascript/ql/test/experimental/Security/CWE-094/.github/workflows/comment_issue.yml rename to javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/.github/workflows/comment_issue.yml diff --git a/javascript/ql/test/experimental/Security/CWE-094/ExpressionInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.expected similarity index 100% rename from javascript/ql/test/experimental/Security/CWE-094/ExpressionInjection.expected rename to javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.expected diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.qlref b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.qlref new file mode 100644 index 00000000000..edaea6fbb21 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/ExpressionInjection.qlref @@ -0,0 +1 @@ +Security/CWE-094/ExpressionInjection.ql diff --git a/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/empty.js b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/empty.js new file mode 100644 index 00000000000..a243684db7f --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-094/ExpressionInjection/empty.js @@ -0,0 +1 @@ +console.log('test') \ No newline at end of file From 48fb01f9f733cadc749bce248aa02d76c05417ca Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 3 May 2022 13:13:54 +0200 Subject: [PATCH 0289/1618] set js/actions/injection as a high precision warning query --- javascript/ql/src/Security/CWE-094/ExpressionInjection.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql b/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql index 29ffa9e27e2..e6022456439 100644 --- a/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql +++ b/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql @@ -3,7 +3,7 @@ * @description Using user-controlled GitHub Actions contexts like `run:` or `script:` may allow a malicious * user to inject code into the GitHub action. * @kind problem - * @problem.severity error + * @problem.severity warning * @precision high * @id js/actions/injection * @tags actions From df4bfef8c7da8412295631407669bb5d41709a61 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 3 May 2022 13:25:12 +0200 Subject: [PATCH 0290/1618] expand the qhelp for js/actions/injection --- .../ql/src/Security/CWE-094/ExpressionInjection.qhelp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp b/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp index b7c678f6e39..b9a3248408f 100644 --- a/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp +++ b/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp @@ -12,16 +12,21 @@

    +

    + Code injection in GitHub actions may allow an attacker to + exfiltrate the temporary GitHub repository authorization token. + The token has write access to the repository, and thus an attacker + can use it to modify the repository. +

    +

    - The best practice to avoid code injection vulnerabilities in GitHub workflows is to set the untrusted input value of the expression to an intermediate environment variable. -

    @@ -49,6 +54,7 @@
  • GitHub Security Lab Research: Keeping your GitHub Actions and workflows secure: Untrusted input.
  • +
  • GitHub Docs: Security hardening for GitHub Actions.
  • From d8cc82bdb1f745622367f28fbcda30e63efec0a1 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 3 May 2022 13:32:22 +0200 Subject: [PATCH 0291/1618] add change-note --- .../ql/src/change-notes/2022-05-03-actions-injection.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 javascript/ql/src/change-notes/2022-05-03-actions-injection.md diff --git a/javascript/ql/src/change-notes/2022-05-03-actions-injection.md b/javascript/ql/src/change-notes/2022-05-03-actions-injection.md new file mode 100644 index 00000000000..57eda2fc21b --- /dev/null +++ b/javascript/ql/src/change-notes/2022-05-03-actions-injection.md @@ -0,0 +1,6 @@ +--- +category: newQuery +--- +* The `js/actions/injection` query has been added. It highlights GitHub Actions workflows that may allow an + attacker to execute arbitrary code in the workflow. + The query previously existed an experimental query. From 7530923af3d6810aa1ebc30f8b186d053f775d68 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 3 May 2022 14:17:37 +0200 Subject: [PATCH 0292/1618] add missing qldoc --- javascript/ql/lib/semmle/javascript/Actions.qll | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/Actions.qll b/javascript/ql/lib/semmle/javascript/Actions.qll index a387d26bce4..c74c2576483 100644 --- a/javascript/ql/lib/semmle/javascript/Actions.qll +++ b/javascript/ql/lib/semmle/javascript/Actions.qll @@ -21,6 +21,8 @@ module Actions { } /** + * A YAML node that may contain sub-nodes. + * * Actions are quite flexible in parsing YAML. * * For example: @@ -48,6 +50,7 @@ module Actions { this instanceof YAMLScalar } + /** Gets sub-name identified by `name`. */ YAMLNode getNode(string name) { exists(YAMLMapping mapping | mapping = this and @@ -68,6 +71,7 @@ module Actions { ) } + /** Gets the number of elements in this mapping or sequence. */ int getElementCount() { exists(YAMLMapping mapping | mapping = this and @@ -113,6 +117,7 @@ module Actions { On() { workflow.lookup("on") = this } + /** Gets the workflow that this trigger is in. */ Workflow getWorkflow() { result = workflow } } @@ -283,6 +288,7 @@ module Actions { Ref() { with.lookup("ref") = this } + /** Gets the `with` field this field belongs to. */ With getWith() { result = with } } From 31a4de902e354a5d1990305e5ef4c7220de0bf23 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 3 May 2022 14:19:36 +0200 Subject: [PATCH 0293/1618] add missing security severity --- javascript/ql/src/Security/CWE-094/ExpressionInjection.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql b/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql index e6022456439..403686ebd7f 100644 --- a/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql +++ b/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql @@ -4,6 +4,7 @@ * user to inject code into the GitHub action. * @kind problem * @problem.severity warning + * @security-severity 9.3 * @precision high * @id js/actions/injection * @tags actions From 8e2b00d209d3213c585d3da445c41bb6ebdbb16a Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Tue, 3 May 2022 15:51:38 +0200 Subject: [PATCH 0294/1618] make the big disjunctions more readable by using a set literal --- .../Security/CWE-094/ExpressionInjection.ql | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql b/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql index 403686ebd7f..80af8dae82a 100644 --- a/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql +++ b/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql @@ -23,14 +23,18 @@ private predicate isExternalUserControlledIssue(string context) { bindingset[context] private predicate isExternalUserControlledPullRequest(string context) { - context.regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*title\\b") or - context.regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*body\\b") or - context - .regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*head\\s*\\.\\s*label\\b") or - context - .regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*head\\s*\\.\\s*repo\\s*\\.\\s*default_branch\\b") or - context - .regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*head\\s*\\.\\s*ref\\b") + exists(string reg | + reg = + [ + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*title\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*body\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*head\\s*\\.\\s*label\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*head\\s*\\.\\s*repo\\s*\\.\\s*default_branch\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*pull_request\\s*\\.\\s*head\\s*\\.\\s*ref\\b", + ] + | + context.regexpMatch(reg) + ) } bindingset[context] @@ -52,18 +56,20 @@ private predicate isExternalUserControlledGollum(string context) { bindingset[context] private predicate isExternalUserControlledCommit(string context) { - context - .regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*commits(?:\\[[0-9]\\]|\\s*\\.\\s*\\*)+\\s*\\.\\s*message\\b") or - context.regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*head_commit\\s*\\.\\s*message\\b") or - context - .regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*head_commit\\s*\\.\\s*author\\s*\\.\\s*email\\b") or - context - .regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*head_commit\\s*\\.\\s*author\\s*\\.\\s*name\\b") or - context - .regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*commits(?:\\[[0-9]\\]|\\s*\\.\\s*\\*)+\\s*\\.\\s*author\\s*\\.\\s*email\\b") or - context - .regexpMatch("\\bgithub\\s*\\.\\s*event\\s*\\.\\s*commits(?:\\[[0-9]\\]|\\s*\\.\\s*\\*)+\\s*\\.\\s*author\\s*\\.\\s*name\\b") or - context.regexpMatch("\\bgithub\\s*\\.\\s*head_ref\\b") + exists(string reg | + reg = + [ + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*commits(?:\\[[0-9]\\]|\\s*\\.\\s*\\*)+\\s*\\.\\s*message\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*head_commit\\s*\\.\\s*message\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*head_commit\\s*\\.\\s*author\\s*\\.\\s*email\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*head_commit\\s*\\.\\s*author\\s*\\.\\s*name\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*commits(?:\\[[0-9]\\]|\\s*\\.\\s*\\*)+\\s*\\.\\s*author\\s*\\.\\s*email\\b", + "\\bgithub\\s*\\.\\s*event\\s*\\.\\s*commits(?:\\[[0-9]\\]|\\s*\\.\\s*\\*)+\\s*\\.\\s*author\\s*\\.\\s*name\\b", + "\\bgithub\\s*\\.\\s*head_ref\\b" + ] + | + context.regexpMatch(reg) + ) } bindingset[context] From c7b2da5e3916473a7b35aceb9602bdb3000819fe Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Wed, 4 May 2022 15:48:15 +0200 Subject: [PATCH 0295/1618] JS: exclude ATM folder from labeler --- .github/labeler.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index b8b2419b276..1dc166d6b44 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -11,7 +11,7 @@ Java: - change-notes/**/*java.* JS: - - javascript/**/* + - any: [ 'javascript/**/*', '!javascript/ql/experimental/adaptivethreatmodeling/**/*' ] - change-notes/**/*javascript* Python: From a8f7a4459e45a9922483762111e4e4d08e160aa0 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 16 Nov 2021 13:16:03 +0000 Subject: [PATCH 0296/1618] Port redos libraries from Python --- .../code/java/dataflow/ExternalFlow.qll | 1 + .../lib/semmle/code/java/regex/RegexFlow.qll | 18 + .../semmle/code/java/regex/RegexTreeView.qll | 998 +++++++++++++++ java/ql/lib/semmle/code/java/regex/regex.qll | 907 +++++++++++++ .../performance/ExponentialBackTracking.qll | 342 +++++ .../java/security/performance/ReDoSUtil.qll | 1135 +++++++++++++++++ .../security/performance/RegExpTreeView.qll | 49 + .../performance/SuperlinearBackTracking.qll | 420 ++++++ 8 files changed, 3870 insertions(+) create mode 100644 java/ql/lib/semmle/code/java/regex/RegexFlow.qll create mode 100644 java/ql/lib/semmle/code/java/regex/RegexTreeView.qll create mode 100644 java/ql/lib/semmle/code/java/regex/regex.qll create mode 100644 java/ql/lib/semmle/code/java/security/performance/ExponentialBackTracking.qll create mode 100644 java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll create mode 100644 java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll create mode 100644 java/ql/lib/semmle/code/java/security/performance/SuperlinearBackTracking.qll diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index a6a31559260..6d14dc5f95c 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -140,6 +140,7 @@ private module Frameworks { private import semmle.code.java.frameworks.jOOQ private import semmle.code.java.frameworks.JMS private import semmle.code.java.frameworks.RabbitMQ + private import semmle.code.java.regex.RegexFlow } private predicate sourceModelCsv(string row) { diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlow.qll b/java/ql/lib/semmle/code/java/regex/RegexFlow.qll new file mode 100644 index 00000000000..54b16ae8a4b --- /dev/null +++ b/java/ql/lib/semmle/code/java/regex/RegexFlow.qll @@ -0,0 +1,18 @@ +import java +import semmle.code.java.dataflow.ExternalFlow + +private class RegexSinkCsv extends SinkModelCsv { + override predicate row(string row) { + row = + [ + //"namespace;type;subtypes;name;signature;ext;input;kind" + "java.util.regex;Pattern;false;compile;(String);;Argument[0];regex-use", + "java.util.regex;Pattern;false;compile;(String,int);;Argument[0];regex-use", + "java.util.regex;Pattern;false;matches;(String,CharSequence);;Argument[0];regex-use", + "java.util;String;false;matches;(String);;Argument[0];regex-use", + "java.util;String;false;split;(String);;Argument[0];regex-use", + "java.util;String;false;split;(String,int);;Argument[0];regex-use", + "com.google.common.base;Splitter;false;onPattern;(String);;Argument[0];regex-use" + ] + } +} diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll new file mode 100644 index 00000000000..1b6013b26a0 --- /dev/null +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -0,0 +1,998 @@ +/** Provides a class hierarchy corresponding to a parse tree of regular expressions. */ + +import java +private import semmle.code.java.regex.regex + +/** + * An element containing a regular expression term, that is, either + * a string literal (parsed as a regular expression) + * or another regular expression term. + * + * For sequences and alternations, we require at least one child. + * Otherwise, we wish to represent the term differently. + * This avoids multiple representations of the same term. + */ +newtype TRegExpParent = + /** A string literal used as a regular expression */ + TRegExpLiteral(Regex re) or + /** A quantified term */ + TRegExpQuantifier(Regex re, int start, int end) { re.qualifiedItem(start, end, _, _) } or + /** A sequence term */ + TRegExpSequence(Regex re, int start, int end) { + re.sequence(start, end) and + exists(seqChild(re, start, end, 1)) // if a sequence does not have more than one element, it should be treated as that element instead. + } or + /** An alternation term */ + TRegExpAlt(Regex re, int start, int end) { + re.alternation(start, end) and + exists(int part_end | + re.alternationOption(start, end, start, part_end) and + part_end < end + ) // if an alternation does not have more than one element, it should be treated as that element instead. + } or + /** A character class term */ + TRegExpCharacterClass(Regex re, int start, int end) { re.charSet(start, end) } or + /** A character range term */ + TRegExpCharacterRange(Regex re, int start, int end) { re.charRange(_, start, _, _, end) } or + /** A group term */ + TRegExpGroup(Regex re, int start, int end) { re.group(start, end) } or + /** A special character */ + TRegExpSpecialChar(Regex re, int start, int end) { re.specialCharacter(start, end, _) } or + /** A normal character */ + TRegExpNormalChar(Regex re, int start, int end) { re.normalCharacter(start, end) } or + /** A back reference */ + TRegExpBackRef(Regex re, int start, int end) { re.backreference(start, end) } + +/** + * An element containing a regular expression term, that is, either + * a string literal (parsed as a regular expression) + * or another regular expression term. + */ +class RegExpParent extends TRegExpParent { + /** Gets a textual representation of this element. */ + string toString() { result = "RegExpParent" } + + /** Gets the `i`th child term. */ + abstract RegExpTerm getChild(int i); + + /** Gets a child term . */ + RegExpTerm getAChild() { result = this.getChild(_) } + + /** Gets the number of child terms. */ + int getNumChild() { result = count(this.getAChild()) } + + /** Gets the associated regex. */ + abstract Regex getRegex(); +} + +/** A string literal used as a regular expression */ +class RegExpLiteral extends TRegExpLiteral, RegExpParent { + Regex re; + + RegExpLiteral() { this = TRegExpLiteral(re) } + + override RegExpTerm getChild(int i) { i = 0 and result.getRegex() = re and result.isRootTerm() } + + /** Holds if dot, `.`, matches all characters, including newlines. */ + predicate isDotAll() { re.getAMode() = "DOTALL" } + + /** Holds if this regex matching is case-insensitive for this regex. */ + predicate isIgnoreCase() { re.getAMode() = "IGNORECASE" } + + /** Get a string representing all modes for this regex. */ + string getFlags() { result = concat(string mode | mode = re.getAMode() | mode, " | ") } + + override Regex getRegex() { result = re } + + /** Gets the primary QL class for this regex. */ + string getPrimaryQLClass() { result = "RegExpLiteral" } +} + +/** + * A regular expression term, that is, a syntactic part of a regular expression. + */ +class RegExpTerm extends RegExpParent { + Regex re; + int start; + int end; + + RegExpTerm() { + this = TRegExpAlt(re, start, end) + or + this = TRegExpBackRef(re, start, end) + or + this = TRegExpCharacterClass(re, start, end) + or + this = TRegExpCharacterRange(re, start, end) + or + this = TRegExpNormalChar(re, start, end) + or + this = TRegExpGroup(re, start, end) + or + this = TRegExpQuantifier(re, start, end) + or + this = TRegExpSequence(re, start, end) + or + this = TRegExpSpecialChar(re, start, end) + } + + /** + * Gets the outermost term of this regular expression. + */ + RegExpTerm getRootTerm() { + this.isRootTerm() and result = this + or + result = this.getParent().(RegExpTerm).getRootTerm() + } + + /** + * Holds if this term is part of a string literal + * that is interpreted as a regular expression. + */ + predicate isUsedAsRegExp() { any() } + + /** + * Holds if this is the root term of a regular expression. + */ + predicate isRootTerm() { start = 0 and end = re.getText().length() } + + override RegExpTerm getChild(int i) { + result = this.(RegExpAlt).getChild(i) + or + result = this.(RegExpBackRef).getChild(i) + or + result = this.(RegExpCharacterClass).getChild(i) + or + result = this.(RegExpCharacterRange).getChild(i) + or + result = this.(RegExpNormalChar).getChild(i) + or + result = this.(RegExpGroup).getChild(i) + or + result = this.(RegExpQuantifier).getChild(i) + or + result = this.(RegExpSequence).getChild(i) + or + result = this.(RegExpSpecialChar).getChild(i) + } + + /** + * Gets the parent term of this regular expression term, or the + * regular expression literal if this is the root term. + */ + RegExpParent getParent() { result.getAChild() = this } + + override Regex getRegex() { result = re } + + /** Gets the offset at which this term starts. */ + int getStart() { result = start } + + /** Gets the offset at which this term ends. */ + int getEnd() { result = end } + + override string toString() { result = re.getText().substring(start, end) } + + /** + * Gets the location of the surrounding regex, as locations inside the regex do not exist. + * To get location information corresponding to the term inside the regex, + * use `hasLocationInfo`. + */ + Location getLocation() { result = re.getLocation() } + + /** Holds if this term is found at the specified location offsets. */ + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + exists(int re_start, int re_end | + re.getLocation().hasLocationInfo(filepath, startline, re_start, endline, re_end) and + startcolumn = re_start + start + 4 and + endcolumn = re_start + end + 3 + ) + } + + /** Gets the file in which this term is found. */ + File getFile() { result = this.getLocation().getFile() } + + /** Gets the raw source text of this term. */ + string getRawValue() { result = this.toString() } + + /** Gets the string literal in which this term is found. */ + RegExpLiteral getLiteral() { result = TRegExpLiteral(re) } + + /** Gets the regular expression term that is matched (textually) before this one, if any. */ + RegExpTerm getPredecessor() { + exists(RegExpTerm parent | parent = this.getParent() | + result = parent.(RegExpSequence).previousElement(this) + or + not exists(parent.(RegExpSequence).previousElement(this)) and + not parent instanceof RegExpSubPattern and + result = parent.getPredecessor() + ) + } + + /** Gets the regular expression term that is matched (textually) after this one, if any. */ + RegExpTerm getSuccessor() { + exists(RegExpTerm parent | parent = this.getParent() | + result = parent.(RegExpSequence).nextElement(this) + or + not exists(parent.(RegExpSequence).nextElement(this)) and + not parent instanceof RegExpSubPattern and + result = parent.getSuccessor() + ) + } + + /** Gets the primary QL class for this term. */ + string getPrimaryQLClass() { result = "RegExpTerm" } +} + +/** + * A quantified regular expression term. + * + * Example: + * + * ``` + * ((ECMA|Java)[sS]cript)* + * ``` + */ +class RegExpQuantifier extends RegExpTerm, TRegExpQuantifier { + int part_end; + boolean maybe_empty; + boolean may_repeat_forever; + + RegExpQuantifier() { + this = TRegExpQuantifier(re, start, end) and + re.qualifiedPart(start, part_end, end, maybe_empty, may_repeat_forever) + } + + override RegExpTerm getChild(int i) { + i = 0 and + result.getRegex() = re and + result.getStart() = start and + result.getEnd() = part_end + } + + /** Hols if this term may match an unlimited number of times. */ + predicate mayRepeatForever() { may_repeat_forever = true } + + /** Gets the qualifier for this term. That is e.g "?" for "a?". */ + string getQualifier() { result = re.getText().substring(part_end, end) } + + override string getPrimaryQLClass() { result = "RegExpQuantifier" } +} + +/** + * A regular expression term that permits unlimited repetitions. + */ +class InfiniteRepetitionQuantifier extends RegExpQuantifier { + InfiniteRepetitionQuantifier() { this.mayRepeatForever() } +} + +/** + * A star-quantified term. + * + * Example: + * + * ``` + * \w* + * ``` + */ +class RegExpStar extends InfiniteRepetitionQuantifier { + RegExpStar() { this.getQualifier().charAt(0) = "*" } + + override string getPrimaryQLClass() { result = "RegExpStar" } +} + +/** + * A plus-quantified term. + * + * Example: + * + * ``` + * \w+ + * ``` + */ +class RegExpPlus extends InfiniteRepetitionQuantifier { + RegExpPlus() { this.getQualifier().charAt(0) = "+" } + + override string getPrimaryQLClass() { result = "RegExpPlus" } +} + +/** + * An optional term. + * + * Example: + * + * ``` + * ;? + * ``` + */ +class RegExpOpt extends RegExpQuantifier { + RegExpOpt() { this.getQualifier().charAt(0) = "?" } + + override string getPrimaryQLClass() { result = "RegExpOpt" } +} + +/** + * A range-quantified term + * + * Examples: + * + * ``` + * \w{2,4} + * \w{2,} + * \w{2} + * ``` + */ +class RegExpRange extends RegExpQuantifier { + string upper; + string lower; + + RegExpRange() { re.multiples(part_end, end, lower, upper) } + + /** Gets the string defining the upper bound of this range, if any. */ + string getUpper() { result = upper } + + /** Gets the string defining the lower bound of this range, if any. */ + string getLower() { result = lower } + + /** + * Gets the upper bound of the range, if any. + * + * If there is no upper bound, any number of repetitions is allowed. + * For a term of the form `r{lo}`, both the lower and the upper bound + * are `lo`. + */ + int getUpperBound() { result = this.getUpper().toInt() } + + /** Gets the lower bound of the range. */ + int getLowerBound() { result = this.getLower().toInt() } + + override string getPrimaryQLClass() { result = "RegExpRange" } +} + +/** + * A sequence term. + * + * Example: + * + * ``` + * (ECMA|Java)Script + * ``` + * + * This is a sequence with the elements `(ECMA|Java)` and `Script`. + */ +class RegExpSequence extends RegExpTerm, TRegExpSequence { + RegExpSequence() { this = TRegExpSequence(re, start, end) } + + override RegExpTerm getChild(int i) { result = seqChild(re, start, end, i) } + + /** Gets the element preceding `element` in this sequence. */ + RegExpTerm previousElement(RegExpTerm element) { element = this.nextElement(result) } + + /** Gets the element following `element` in this sequence. */ + RegExpTerm nextElement(RegExpTerm element) { + exists(int i | + element = this.getChild(i) and + result = this.getChild(i + 1) + ) + } + + override string getPrimaryQLClass() { result = "RegExpSequence" } +} + +pragma[nomagic] +private int seqChildEnd(Regex re, int start, int end, int i) { + result = seqChild(re, start, end, i).getEnd() +} + +// moved out so we can use it in the charpred +private RegExpTerm seqChild(Regex re, int start, int end, int i) { + re.sequence(start, end) and + ( + i = 0 and + result.getRegex() = re and + result.getStart() = start and + exists(int itemEnd | + re.item(start, itemEnd) and + result.getEnd() = itemEnd + ) + or + i > 0 and + result.getRegex() = re and + exists(int itemStart | itemStart = seqChildEnd(re, start, end, i - 1) | + result.getStart() = itemStart and + re.item(itemStart, result.getEnd()) + ) + ) +} + +/** + * An alternative term, that is, a term of the form `a|b`. + * + * Example: + * + * ``` + * ECMA|Java + * ``` + */ +class RegExpAlt extends RegExpTerm, TRegExpAlt { + RegExpAlt() { this = TRegExpAlt(re, start, end) } + + override RegExpTerm getChild(int i) { + i = 0 and + result.getRegex() = re and + result.getStart() = start and + exists(int part_end | + re.alternationOption(start, end, start, part_end) and + result.getEnd() = part_end + ) + or + i > 0 and + result.getRegex() = re and + exists(int part_start | + part_start = this.getChild(i - 1).getEnd() + 1 // allow for the | + | + result.getStart() = part_start and + re.alternationOption(start, end, part_start, result.getEnd()) + ) + } + + override string getPrimaryQLClass() { result = "RegExpAlt" } +} + +/** + * An escaped regular expression term, that is, a regular expression + * term starting with a backslash, which is not a backreference. + * + * Example: + * + * ``` + * \. + * \w + * ``` + */ +class RegExpEscape extends RegExpNormalChar { + RegExpEscape() { re.escapedCharacter(start, end) } + + /** + * Gets the name of the escaped; for example, `w` for `\w`. + * TODO: Handle named escapes. + */ + override string getValue() { + this.isIdentityEscape() and result = this.getUnescaped() + or + this.getUnescaped() = "n" and result = "\n" + or + this.getUnescaped() = "r" and result = "\r" + or + this.getUnescaped() = "t" and result = "\t" + or + // TODO: Find a way to include a formfeed character + // this.getUnescaped() = "f" and result = " " + // or + this.isUnicode() and + result = this.getUnicode() + } + + /** Holds if this terms name is given by the part following the escape character. */ + predicate isIdentityEscape() { not this.getUnescaped() in ["n", "r", "t", "f"] } + + override string getPrimaryQLClass() { result = "RegExpEscape" } + + /** Gets the part of the term following the escape character. That is e.g. "w" if the term is "\w". */ + private string getUnescaped() { result = this.getText().suffix(1) } + + /** + * Gets the text for this escape. That is e.g. "\w". + */ + private string getText() { result = re.getText().substring(start, end) } + + /** + * Holds if this is a unicode escape. + */ + private predicate isUnicode() { this.getText().prefix(2) = ["\\u", "\\U"] } + + /** + * Gets the unicode char for this escape. + * E.g. for `\u0061` this returns "a". + */ + private string getUnicode() { + exists(int codepoint | codepoint = sum(this.getHexValueFromUnicode(_)) | + result = codepoint.toUnicode() + ) + } + + /** + * Gets int value for the `index`th char in the hex number of the unicode escape. + * E.g. for `\u0061` and `index = 2` this returns 96 (the number `6` interpreted as hex). + */ + private int getHexValueFromUnicode(int index) { + this.isUnicode() and + exists(string hex, string char | hex = this.getText().suffix(2) | + char = hex.charAt(index) and + result = 16.pow(hex.length() - index - 1) * toHex(char) + ) + } +} + +/** + * Gets the hex number for the `hex` char. + */ +private int toHex(string hex) { + hex = [0 .. 9].toString() and + result = hex.toInt() + or + result = 10 and hex = ["a", "A"] + or + result = 11 and hex = ["b", "B"] + or + result = 12 and hex = ["c", "C"] + or + result = 13 and hex = ["d", "D"] + or + result = 14 and hex = ["e", "E"] + or + result = 15 and hex = ["f", "F"] +} + +/** + * A character class escape in a regular expression. + * That is, an escaped charachter that denotes multiple characters. + * + * Examples: + * + * ``` + * \w + * \S + * ``` + */ +class RegExpCharacterClassEscape extends RegExpEscape { + RegExpCharacterClassEscape() { this.getValue() in ["d", "D", "s", "S", "w", "W"] } + + override RegExpTerm getChild(int i) { none() } + + override string getPrimaryQLClass() { result = "RegExpCharacterClassEscape" } +} + +/** + * A character class in a regular expression. + * + * Examples: + * + * ``` + * [a-z_] + * [^<>&] + * ``` + */ +class RegExpCharacterClass extends RegExpTerm, TRegExpCharacterClass { + RegExpCharacterClass() { this = TRegExpCharacterClass(re, start, end) } + + /** Holds if this character class is inverted, matching the opposite of its content. */ + predicate isInverted() { re.getChar(start + 1) = "^" } + + /** Gets the `i`th char inside this charater class. */ + string getCharThing(int i) { result = re.getChar(i + start) } + + /** Holds if this character class can match anything. */ + predicate isUniversalClass() { + // [^] + this.isInverted() and not exists(this.getAChild()) + or + // [\w\W] and similar + not this.isInverted() and + exists(string cce1, string cce2 | + cce1 = this.getAChild().(RegExpCharacterClassEscape).getValue() and + cce2 = this.getAChild().(RegExpCharacterClassEscape).getValue() + | + cce1 != cce2 and cce1.toLowerCase() = cce2.toLowerCase() + ) + } + + override RegExpTerm getChild(int i) { + i = 0 and + result.getRegex() = re and + exists(int itemStart, int itemEnd | + result.getStart() = itemStart and + re.char_set_start(start, itemStart) and + re.char_set_child(start, itemStart, itemEnd) and + result.getEnd() = itemEnd + ) + or + i > 0 and + result.getRegex() = re and + exists(int itemStart | itemStart = this.getChild(i - 1).getEnd() | + result.getStart() = itemStart and + re.char_set_child(start, itemStart, result.getEnd()) + ) + } + + override string getPrimaryQLClass() { result = "RegExpCharacterClass" } +} + +/** + * A character range in a character class in a regular expression. + * + * Example: + * + * ``` + * a-z + * ``` + */ +class RegExpCharacterRange extends RegExpTerm, TRegExpCharacterRange { + int lower_end; + int upper_start; + + RegExpCharacterRange() { + this = TRegExpCharacterRange(re, start, end) and + re.charRange(_, start, lower_end, upper_start, end) + } + + /** Holds if this range goes from `lo` to `hi`, in effect is `lo-hi`. */ + predicate isRange(string lo, string hi) { + lo = re.getText().substring(start, lower_end) and + hi = re.getText().substring(upper_start, end) + } + + override RegExpTerm getChild(int i) { + i = 0 and + result.getRegex() = re and + result.getStart() = start and + result.getEnd() = lower_end + or + i = 1 and + result.getRegex() = re and + result.getStart() = upper_start and + result.getEnd() = end + } + + override string getPrimaryQLClass() { result = "RegExpCharacterRange" } +} + +/** + * A normal character in a regular expression, that is, a character + * without special meaning. This includes escaped characters. + * + * Examples: + * ``` + * t + * \t + * ``` + */ +class RegExpNormalChar extends RegExpTerm, TRegExpNormalChar { + RegExpNormalChar() { this = TRegExpNormalChar(re, start, end) } + + /** + * Holds if this constant represents a valid Unicode character (as opposed + * to a surrogate code point that does not correspond to a character by itself.) + */ + predicate isCharacter() { any() } + + /** Gets the string representation of the char matched by this term. */ + string getValue() { result = re.getText().substring(start, end) } + + override RegExpTerm getChild(int i) { none() } + + override string getPrimaryQLClass() { result = "RegExpNormalChar" } +} + +/** + * A constant regular expression term, that is, a regular expression + * term matching a single string. Currently, this will always be a single character. + * + * Example: + * + * ``` + * a + * ``` + */ +class RegExpConstant extends RegExpTerm { + string value; + + RegExpConstant() { + this = TRegExpNormalChar(re, start, end) and + not this instanceof RegExpCharacterClassEscape and + // exclude chars in qualifiers + // TODO: push this into regex library + not exists(int qstart, int qend | re.qualifiedPart(_, qstart, qend, _, _) | + qstart <= start and end <= qend + ) and + value = this.(RegExpNormalChar).getValue() + } + + /** + * Holds if this constant represents a valid Unicode character (as opposed + * to a surrogate code point that does not correspond to a character by itself.) + */ + predicate isCharacter() { any() } + + /** Gets the string matched by this constant term. */ + string getValue() { result = value } + + override RegExpTerm getChild(int i) { none() } + + override string getPrimaryQLClass() { result = "RegExpConstant" } +} + +/** + * A grouped regular expression. + * + * Examples: + * + * ``` + * (ECMA|Java) + * (?:ECMA|Java) + * (?['"]) + * ``` + */ +class RegExpGroup extends RegExpTerm, TRegExpGroup { + RegExpGroup() { this = TRegExpGroup(re, start, end) } + + /** + * Gets the index of this capture group within the enclosing regular + * expression literal. + * + * For example, in the regular expression `/((a?).)(?:b)/`, the + * group `((a?).)` has index 1, the group `(a?)` nested inside it + * has index 2, and the group `(?:b)` has no index, since it is + * not a capture group. + */ + int getNumber() { result = re.getGroupNumber(start, end) } + + /** Holds if this is a named capture group. */ + predicate isNamed() { exists(this.getName()) } + + /** Gets the name of this capture group, if any. */ + string getName() { result = re.getGroupName(start, end) } + + override RegExpTerm getChild(int i) { + result.getRegex() = re and + i = 0 and + re.groupContents(start, end, result.getStart(), result.getEnd()) + } + + override string getPrimaryQLClass() { result = "RegExpGroup" } +} + +/** + * A special character in a regular expression. + * + * Examples: + * ``` + * ^ + * $ + * . + * ``` + */ +class RegExpSpecialChar extends RegExpTerm, TRegExpSpecialChar { + string char; + + RegExpSpecialChar() { + this = TRegExpSpecialChar(re, start, end) and + re.specialCharacter(start, end, char) + } + + /** + * Holds if this constant represents a valid Unicode character (as opposed + * to a surrogate code point that does not correspond to a character by itself.) + */ + predicate isCharacter() { any() } + + /** Gets the char for this term. */ + string getChar() { result = char } + + override RegExpTerm getChild(int i) { none() } + + override string getPrimaryQLClass() { result = "RegExpSpecialChar" } +} + +/** + * A dot regular expression. + * + * Example: + * + * ``` + * . + * ``` + */ +class RegExpDot extends RegExpSpecialChar { + RegExpDot() { this.getChar() = "." } + + override string getPrimaryQLClass() { result = "RegExpDot" } +} + +/** + * A dollar assertion `$` matching the end of a line. + * + * Example: + * + * ``` + * $ + * ``` + */ +class RegExpDollar extends RegExpSpecialChar { + RegExpDollar() { this.getChar() = "$" } + + override string getPrimaryQLClass() { result = "RegExpDollar" } +} + +/** + * A caret assertion `^` matching the beginning of a line. + * + * Example: + * + * ``` + * ^ + * ``` + */ +class RegExpCaret extends RegExpSpecialChar { + RegExpCaret() { this.getChar() = "^" } + + override string getPrimaryQLClass() { result = "RegExpCaret" } +} + +/** + * A zero-width match, that is, either an empty group or an assertion. + * + * Examples: + * ``` + * () + * (?=\w) + * ``` + */ +class RegExpZeroWidthMatch extends RegExpGroup { + RegExpZeroWidthMatch() { re.zeroWidthMatch(start, end) } + + override RegExpTerm getChild(int i) { none() } + + override string getPrimaryQLClass() { result = "RegExpZeroWidthMatch" } +} + +/** + * A zero-width lookahead or lookbehind assertion. + * + * Examples: + * + * ``` + * (?=\w) + * (?!\n) + * (?<=\.) + * (?` + * in a regular expression. + * + * Examples: + * + * ``` + * \1 + * (?P=quote) + * ``` + */ +class RegExpBackRef extends RegExpTerm, TRegExpBackRef { + RegExpBackRef() { this = TRegExpBackRef(re, start, end) } + + /** + * Gets the number of the capture group this back reference refers to, if any. + */ + int getNumber() { result = re.getBackrefNumber(start, end) } + + /** + * Gets the name of the capture group this back reference refers to, if any. + */ + string getName() { result = re.getBackrefName(start, end) } + + /** Gets the capture group this back reference refers to. */ + RegExpGroup getGroup() { + result.getLiteral() = this.getLiteral() and + ( + result.getNumber() = this.getNumber() or + result.getName() = this.getName() + ) + } + + override RegExpTerm getChild(int i) { none() } + + override string getPrimaryQLClass() { result = "RegExpBackRef" } +} + +/** Gets the parse tree resulting from parsing `re`, if such has been constructed. */ +RegExpTerm getParsedRegExp(StringLiteral re) { result.getRegex() = re and result.isRootTerm() } diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll new file mode 100644 index 00000000000..5dae7020fd9 --- /dev/null +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -0,0 +1,907 @@ +import java +import semmle.code.java.dataflow.DataFlow2 +import semmle.code.java.dataflow.ExternalFlow + +class RegexFlowConf extends DataFlow2::Configuration { + RegexFlowConf() { this = "RegexFlowConf" } + + override predicate isSource(DataFlow2::Node node) { node.asExpr() instanceof StringLiteral } + + override predicate isSink(DataFlow2::Node node) { sinkNode(node, "regex-use") } +} + +/** + * Holds if `s` is used as a regex, with the mode `mode` (if known). + * If regex mode is not known, `mode` will be `"None"`. + */ +predicate used_as_regex(Expr s, string mode) { + any(RegexFlowConf c).hasFlow(DataFlow2::exprNode(s), _) and + mode = "None" // TODO: proper mode detection +} + +/** + * A string literal that is used as a regular exprssion. + * TODO: adjust parser for java regex syntax + */ +abstract class RegexString extends Expr { + RegexString() { this instanceof StringLiteral } + + /** + * Helper predicate for `char_set_start(int start, int end)`. + * + * In order to identify left brackets ('[') which actually start a character class, + * we perform a left to right scan of the string. + * + * To avoid negative recursion we return a boolean. See `escaping`, + * the helper for `escapingChar`, for a clean use of this pattern. + * + * result is true for those start chars that actually mark a start of a char set. + */ + boolean char_set_start(int pos) { + exists(int index | + // is opening bracket + this.char_set_delimiter(index, pos) = true and + ( + // if this is the first bracket, `pos` starts a char set + index = 1 and result = true + or + // if the previous char set delimiter was not a closing bracket, `pos` does + // not start a char set. This is needed to handle cases such as `[[]` (a + // char set that matches the `[` char) + index > 1 and + not this.char_set_delimiter(index - 1, _) = false and + result = false + or + // special handling of cases such as `[][]` (the character-set of the characters `]` and `[`). + exists(int prev_closing_bracket_pos | + // previous bracket is a closing bracket + this.char_set_delimiter(index - 1, prev_closing_bracket_pos) = false and + if + // check if the character that comes before the previous closing bracket + // is an opening bracket (taking `^` into account) + exists(int pos_before_prev_closing_bracket | + if this.getChar(prev_closing_bracket_pos - 1) = "^" + then pos_before_prev_closing_bracket = prev_closing_bracket_pos - 2 + else pos_before_prev_closing_bracket = prev_closing_bracket_pos - 1 + | + this.char_set_delimiter(index - 2, pos_before_prev_closing_bracket) = true + ) + then + // brackets without anything in between is not valid character ranges, so + // the first closing bracket in `[]]` and `[^]]` does not count, + // + // and we should _not_ mark the second opening bracket in `[][]` and `[^][]` + // as starting a new char set. ^ ^ + exists(int pos_before_prev_closing_bracket | + this.char_set_delimiter(index - 2, pos_before_prev_closing_bracket) = true + | + result = this.char_set_start(pos_before_prev_closing_bracket).booleanNot() + ) + else + // if not, `pos` does in fact mark a real start of a character range + result = true + ) + ) + ) + } + + /** + * Helper predicate for chars that could be character-set delimiters. + * Holds if the (non-escaped) char at `pos` in the string, is the (one-based) `index` occurrence of a bracket (`[` or `]`) in the string. + * Result if `true` is the char is `[`, and `false` if the char is `]`. + */ + boolean char_set_delimiter(int index, int pos) { + pos = rank[index](int p | this.nonEscapedCharAt(p) = "[" or this.nonEscapedCharAt(p) = "]") and + ( + this.nonEscapedCharAt(pos) = "[" and result = true + or + this.nonEscapedCharAt(pos) = "]" and result = false + ) + } + + /** Hold is a character set starts between `start` and `end`. */ + predicate char_set_start(int start, int end) { + this.char_set_start(start) = true and + ( + this.getChar(start + 1) = "^" and end = start + 2 + or + not this.getChar(start + 1) = "^" and end = start + 1 + ) + } + + /** Whether there is a character class, between start (inclusive) and end (exclusive) */ + predicate charSet(int start, int end) { + exists(int inner_start, int inner_end | + this.char_set_start(start, inner_start) and + not this.char_set_start(_, start) + | + end = inner_end + 1 and + inner_end > inner_start and + this.nonEscapedCharAt(inner_end) = "]" and + not exists(int mid | this.nonEscapedCharAt(mid) = "]" | mid > inner_start and mid < inner_end) + ) + } + + /** An indexed version of `char_set_token/3` */ + private predicate char_set_token(int charset_start, int index, int token_start, int token_end) { + token_start = + rank[index](int start, int end | this.char_set_token(charset_start, start, end) | start) and + this.char_set_token(charset_start, token_start, token_end) + } + + /** Either a char or a - */ + private predicate char_set_token(int charset_start, int start, int end) { + this.char_set_start(charset_start, start) and + ( + this.escapedCharacter(start, end) + or + exists(this.nonEscapedCharAt(start)) and end = start + 1 + ) + or + this.char_set_token(charset_start, _, start) and + ( + this.escapedCharacter(start, end) + or + exists(this.nonEscapedCharAt(start)) and + end = start + 1 and + not this.getChar(start) = "]" + ) + } + + /** + * Holds if the character set starting at `charset_start` contains either + * a character or a range found between `start` and `end`. + */ + predicate char_set_child(int charset_start, int start, int end) { + this.char_set_token(charset_start, start, end) and + not exists(int range_start, int range_end | + this.charRange(charset_start, range_start, _, _, range_end) and + range_start <= start and + range_end >= end + ) + or + this.charRange(charset_start, start, _, _, end) + } + + /** + * Holds if the character set starting at `charset_start` contains a character range + * with lower bound found between `start` and `lower_end` + * and upper bound found between `upper_start` and `end`. + */ + predicate charRange(int charset_start, int start, int lower_end, int upper_start, int end) { + exists(int index | + this.charRangeEnd(charset_start, index) = true and + this.char_set_token(charset_start, index - 2, start, lower_end) and + this.char_set_token(charset_start, index, upper_start, end) + ) + } + + /** + * Helper predicate for `charRange`. + * We can determine where character ranges end by a left to right sweep. + * + * To avoid negative recursion we return a boolean. See `escaping`, + * the helper for `escapingChar`, for a clean use of this pattern. + */ + private boolean charRangeEnd(int charset_start, int index) { + this.char_set_token(charset_start, index, _, _) and + ( + index in [1, 2] and result = false + or + index > 2 and + exists(int connector_start | + this.char_set_token(charset_start, index - 1, connector_start, _) and + this.nonEscapedCharAt(connector_start) = "-" and + result = + this.charRangeEnd(charset_start, index - 2) + .booleanNot() + .booleanAnd(this.charRangeEnd(charset_start, index - 1).booleanNot()) + ) + or + not exists(int connector_start | + this.char_set_token(charset_start, index - 1, connector_start, _) and + this.nonEscapedCharAt(connector_start) = "-" + ) and + result = false + ) + } + + /** Holds if the character at `pos` is a "\" that is actually escaping what comes after. */ + predicate escapingChar(int pos) { this.escaping(pos) = true } + + /** + * Helper predicate for `escapingChar`. + * In order to avoid negative recusrion, we return a boolean. + * This way, we can refer to `escaping(pos - 1).booleanNot()` + * rather than to a negated version of `escaping(pos)`. + */ + private boolean escaping(int pos) { + pos = -1 and result = false + or + this.getChar(pos) = "\\" and result = this.escaping(pos - 1).booleanNot() + or + this.getChar(pos) != "\\" and result = false + } + + /** Gets the text of this regex */ + string getText() { result = this.(StringLiteral).getValue() } + + string getChar(int i) { result = this.getText().charAt(i) } + + string nonEscapedCharAt(int i) { + result = this.getText().charAt(i) and + not exists(int x, int y | this.escapedCharacter(x, y) and i in [x .. y - 1]) + } + + private predicate isOptionDivider(int i) { this.nonEscapedCharAt(i) = "|" } + + private predicate isGroupEnd(int i) { this.nonEscapedCharAt(i) = ")" and not this.inCharSet(i) } + + private predicate isGroupStart(int i) { this.nonEscapedCharAt(i) = "(" and not this.inCharSet(i) } + + predicate failedToParse(int i) { + exists(this.getChar(i)) and + not exists(int start, int end | + this.top_level(start, end) and + start <= i and + end > i + ) + } + + /** Named unicode characters, eg \N{degree sign} */ + private predicate escapedName(int start, int end) { + this.escapingChar(start) and + this.getChar(start + 1) = "N" and + this.getChar(start + 2) = "{" and + this.getChar(end - 1) = "}" and + end > start and + not exists(int i | start + 2 < i and i < end - 1 | this.getChar(i) = "}") + } + + /** + * Holds if an escaped character is found between `start` and `end`. + * Escaped characters include hex values, octal values and named escapes, + * but excludes backreferences. + */ + predicate escapedCharacter(int start, int end) { + this.escapingChar(start) and + not this.numbered_backreference(start, _, _) and + ( + // hex value \xhh + this.getChar(start + 1) = "x" and end = start + 4 + or + // octal value \o, \oo, or \ooo + end in [start + 2 .. start + 4] and + forall(int i | i in [start + 1 .. end - 1] | this.isOctal(i)) and + not ( + end < start + 4 and + this.isOctal(end) + ) + or + // 16-bit hex value \uhhhh + this.getChar(start + 1) = "u" and end = start + 6 + or + // 32-bit hex value \Uhhhhhhhh + this.getChar(start + 1) = "U" and end = start + 10 + or + escapedName(start, end) + or + // escape not handled above, update when adding a new case + not this.getChar(start + 1) in ["x", "u", "U", "N"] and + not exists(this.getChar(start + 1).toInt()) and + end = start + 2 + ) + } + + pragma[inline] + private predicate isOctal(int index) { this.getChar(index) = [0 .. 7].toString() } + + /** Holds if `index` is inside a character set. */ + predicate inCharSet(int index) { + exists(int x, int y | this.charSet(x, y) and index in [x + 1 .. y - 2]) + } + + /** + * 'simple' characters are any that don't alter the parsing of the regex. + */ + private predicate simpleCharacter(int start, int end) { + end = start + 1 and + not this.charSet(start, _) and + not this.charSet(_, start + 1) and + exists(string c | c = this.getChar(start) | + exists(int x, int y, int z | + this.charSet(x, z) and + this.char_set_start(x, y) + | + start = y + or + start = z - 2 + or + start > y and start < z - 2 and not this.charRange(_, _, start, end, _) + ) + or + not this.inCharSet(start) and + not c = "(" and + not c = "[" and + not c = ")" and + not c = "|" and + not this.qualifier(start, _, _, _) + ) + } + + predicate character(int start, int end) { + ( + this.simpleCharacter(start, end) and + not exists(int x, int y | this.escapedCharacter(x, y) and x <= start and y >= end) + or + this.escapedCharacter(start, end) + ) and + not exists(int x, int y | this.group_start(x, y) and x <= start and y >= end) and + not exists(int x, int y | this.backreference(x, y) and x <= start and y >= end) + } + + predicate normalCharacter(int start, int end) { + this.character(start, end) and + not this.specialCharacter(start, end, _) + } + + predicate specialCharacter(int start, int end, string char) { + this.character(start, end) and + end = start + 1 and + char = this.getChar(start) and + (char = "$" or char = "^" or char = ".") and + not this.inCharSet(start) + } + + /** Whether the text in the range start,end is a group */ + predicate group(int start, int end) { + this.groupContents(start, end, _, _) + or + this.emptyGroup(start, end) + } + + /** Gets the number of the group in start,end */ + int getGroupNumber(int start, int end) { + this.group(start, end) and + result = + count(int i | this.group(i, _) and i < start and not this.non_capturing_group_start(i, _)) + 1 + } + + /** Gets the name, if it has one, of the group in start,end */ + string getGroupName(int start, int end) { + this.group(start, end) and + exists(int name_end | + this.named_group_start(start, name_end) and + result = this.getText().substring(start + 4, name_end - 1) + ) + } + + /** Whether the text in the range start, end is a group and can match the empty string. */ + predicate zeroWidthMatch(int start, int end) { + this.emptyGroup(start, end) + or + this.negativeAssertionGroup(start, end) + or + this.positiveLookaheadAssertionGroup(start, end) + or + this.positiveLookbehindAssertionGroup(start, end) + } + + /** Holds if an empty group is found between `start` and `end`. */ + predicate emptyGroup(int start, int end) { + exists(int endm1 | end = endm1 + 1 | + this.group_start(start, endm1) and + this.isGroupEnd(endm1) + ) + } + + private predicate emptyMatchAtStartGroup(int start, int end) { + this.emptyGroup(start, end) + or + this.negativeAssertionGroup(start, end) + or + this.positiveLookaheadAssertionGroup(start, end) + } + + private predicate emptyMatchAtEndGroup(int start, int end) { + this.emptyGroup(start, end) + or + this.negativeAssertionGroup(start, end) + or + this.positiveLookbehindAssertionGroup(start, end) + } + + private predicate negativeAssertionGroup(int start, int end) { + exists(int in_start | + this.negative_lookahead_assertion_start(start, in_start) + or + this.negative_lookbehind_assertion_start(start, in_start) + | + this.groupContents(start, end, in_start, _) + ) + } + + /** Holds if a negative lookahead is found between `start` and `end` */ + predicate negativeLookaheadAssertionGroup(int start, int end) { + exists(int in_start | this.negative_lookahead_assertion_start(start, in_start) | + this.groupContents(start, end, in_start, _) + ) + } + + /** Holds if a negative lookbehind is found between `start` and `end` */ + predicate negativeLookbehindAssertionGroup(int start, int end) { + exists(int in_start | this.negative_lookbehind_assertion_start(start, in_start) | + this.groupContents(start, end, in_start, _) + ) + } + + /** Holds if a positive lookahead is found between `start` and `end` */ + predicate positiveLookaheadAssertionGroup(int start, int end) { + exists(int in_start | this.lookahead_assertion_start(start, in_start) | + this.groupContents(start, end, in_start, _) + ) + } + + /** Holds if a positive lookbehind is found between `start` and `end` */ + predicate positiveLookbehindAssertionGroup(int start, int end) { + exists(int in_start | this.lookbehind_assertion_start(start, in_start) | + this.groupContents(start, end, in_start, _) + ) + } + + private predicate group_start(int start, int end) { + this.non_capturing_group_start(start, end) + or + this.flag_group_start(start, end, _) + or + this.named_group_start(start, end) + or + this.named_backreference_start(start, end) + or + this.lookahead_assertion_start(start, end) + or + this.negative_lookahead_assertion_start(start, end) + or + this.lookbehind_assertion_start(start, end) + or + this.negative_lookbehind_assertion_start(start, end) + or + this.comment_group_start(start, end) + or + this.simple_group_start(start, end) + } + + private predicate non_capturing_group_start(int start, int end) { + this.isGroupStart(start) and + this.getChar(start + 1) = "?" and + this.getChar(start + 2) = ":" and + end = start + 3 + } + + private predicate simple_group_start(int start, int end) { + this.isGroupStart(start) and + this.getChar(start + 1) != "?" and + end = start + 1 + } + + private predicate named_group_start(int start, int end) { + this.isGroupStart(start) and + this.getChar(start + 1) = "?" and + this.getChar(start + 2) = "P" and + this.getChar(start + 3) = "<" and + not this.getChar(start + 4) = "=" and + not this.getChar(start + 4) = "!" and + exists(int name_end | + name_end = min(int i | i > start + 4 and this.getChar(i) = ">") and + end = name_end + 1 + ) + } + + private predicate named_backreference_start(int start, int end) { + this.isGroupStart(start) and + this.getChar(start + 1) = "?" and + this.getChar(start + 2) = "P" and + this.getChar(start + 3) = "=" and + // Should this be looking for unescaped ")"? + // TODO: test this + end = min(int i | i > start + 4 and this.getChar(i) = "?") + } + + private predicate flag_group_start(int start, int end, string c) { + this.isGroupStart(start) and + this.getChar(start + 1) = "?" and + end = start + 3 and + c = this.getChar(start + 2) and + c in ["i", "L", "m", "s", "u", "x"] + } + + /** + * Gets the mode of this regular expression string if + * it is defined by a prefix. + */ + string getModeFromPrefix() { + exists(string c | this.flag_group_start(_, _, c) | + c = "i" and result = "IGNORECASE" + or + c = "L" and result = "LOCALE" + or + c = "m" and result = "MULTILINE" + or + c = "s" and result = "DOTALL" + or + c = "u" and result = "UNICODE" + or + c = "x" and result = "VERBOSE" + ) + } + + private predicate lookahead_assertion_start(int start, int end) { + this.isGroupStart(start) and + this.getChar(start + 1) = "?" and + this.getChar(start + 2) = "=" and + end = start + 3 + } + + private predicate negative_lookahead_assertion_start(int start, int end) { + this.isGroupStart(start) and + this.getChar(start + 1) = "?" and + this.getChar(start + 2) = "!" and + end = start + 3 + } + + private predicate lookbehind_assertion_start(int start, int end) { + this.isGroupStart(start) and + this.getChar(start + 1) = "?" and + this.getChar(start + 2) = "<" and + this.getChar(start + 3) = "=" and + end = start + 4 + } + + private predicate negative_lookbehind_assertion_start(int start, int end) { + this.isGroupStart(start) and + this.getChar(start + 1) = "?" and + this.getChar(start + 2) = "<" and + this.getChar(start + 3) = "!" and + end = start + 4 + } + + private predicate comment_group_start(int start, int end) { + this.isGroupStart(start) and + this.getChar(start + 1) = "?" and + this.getChar(start + 2) = "#" and + end = start + 3 + } + + predicate groupContents(int start, int end, int in_start, int in_end) { + this.group_start(start, in_start) and + end = in_end + 1 and + this.top_level(in_start, in_end) and + this.isGroupEnd(in_end) + } + + private predicate named_backreference(int start, int end, string name) { + this.named_backreference_start(start, start + 4) and + end = min(int i | i > start + 4 and this.getChar(i) = ")") + 1 and + name = this.getText().substring(start + 4, end - 2) + } + + private predicate numbered_backreference(int start, int end, int value) { + this.escapingChar(start) and + // starting with 0 makes it an octal escape + not this.getChar(start + 1) = "0" and + exists(string text, string svalue, int len | + end = start + len and + text = this.getText() and + len in [2 .. 3] + | + svalue = text.substring(start + 1, start + len) and + value = svalue.toInt() and + // value is composed of digits + forall(int i | i in [start + 1 .. start + len - 1] | this.getChar(i) = [0 .. 9].toString()) and + // a longer reference is not possible + not ( + len = 2 and + exists(text.substring(start + 1, start + len + 1).toInt()) + ) and + // 3 octal digits makes it an octal escape + not forall(int i | i in [start + 1 .. start + 4] | this.isOctal(i)) + // TODO: Inside a character set, all numeric escapes are treated as characters. + ) + } + + /** Whether the text in the range start,end is a back reference */ + predicate backreference(int start, int end) { + this.numbered_backreference(start, end, _) + or + this.named_backreference(start, end, _) + } + + /** Gets the number of the back reference in start,end */ + int getBackrefNumber(int start, int end) { this.numbered_backreference(start, end, result) } + + /** Gets the name, if it has one, of the back reference in start,end */ + string getBackrefName(int start, int end) { this.named_backreference(start, end, result) } + + private predicate baseItem(int start, int end) { + this.character(start, end) and + not exists(int x, int y | this.charSet(x, y) and x <= start and y >= end) + or + this.group(start, end) + or + this.charSet(start, end) + or + this.backreference(start, end) + } + + private predicate qualifier(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { + this.short_qualifier(start, end, maybe_empty, may_repeat_forever) and + not this.getChar(end) = "?" + or + exists(int short_end | this.short_qualifier(start, short_end, maybe_empty, may_repeat_forever) | + if this.getChar(short_end) = "?" then end = short_end + 1 else end = short_end + ) + } + + private predicate short_qualifier( + int start, int end, boolean maybe_empty, boolean may_repeat_forever + ) { + ( + this.getChar(start) = "+" and maybe_empty = false and may_repeat_forever = true + or + this.getChar(start) = "*" and maybe_empty = true and may_repeat_forever = true + or + this.getChar(start) = "?" and maybe_empty = true and may_repeat_forever = false + ) and + end = start + 1 + or + exists(string lower, string upper | + this.multiples(start, end, lower, upper) and + (if lower = "" or lower.toInt() = 0 then maybe_empty = true else maybe_empty = false) and + if upper = "" then may_repeat_forever = true else may_repeat_forever = false + ) + } + + /** + * Holds if a repetition quantifier is found between `start` and `end`, + * with the given lower and upper bounds. If a bound is omitted, the corresponding + * string is empty. + */ + predicate multiples(int start, int end, string lower, string upper) { + exists(string text, string match, string inner | + text = this.getText() and + end = start + match.length() and + inner = match.substring(1, match.length() - 1) + | + match = text.regexpFind("\\{[0-9]+\\}", _, start) and + lower = inner and + upper = lower + or + match = text.regexpFind("\\{[0-9]*,[0-9]*\\}", _, start) and + exists(int commaIndex | + commaIndex = inner.indexOf(",") and + lower = inner.prefix(commaIndex) and + upper = inner.suffix(commaIndex + 1) + ) + ) + } + + /** + * Whether the text in the range start,end is a qualified item, where item is a character, + * a character set or a group. + */ + predicate qualifiedItem(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { + this.qualifiedPart(start, _, end, maybe_empty, may_repeat_forever) + } + + /** + * Holds if a qualified part is found between `start` and `part_end` and the qualifier is + * found between `part_end` and `end`. + * + * `maybe_empty` is true if the part is optional. + * `may_repeat_forever` is true if the part may be repeated unboundedly. + */ + predicate qualifiedPart( + int start, int part_end, int end, boolean maybe_empty, boolean may_repeat_forever + ) { + this.baseItem(start, part_end) and + this.qualifier(part_end, end, maybe_empty, may_repeat_forever) + } + + /** Holds if the range `start`, `end` contains a character, a quantifier, a character set or a group. */ + predicate item(int start, int end) { + this.qualifiedItem(start, end, _, _) + or + this.baseItem(start, end) and not this.qualifier(end, _, _, _) + } + + private predicate subsequence(int start, int end) { + ( + start = 0 or + this.group_start(_, start) or + this.isOptionDivider(start - 1) + ) and + this.item(start, end) + or + exists(int mid | + this.subsequence(start, mid) and + this.item(mid, end) + ) + } + + /** + * Whether the text in the range start,end is a sequence of 1 or more items, where an item is a character, + * a character set or a group. + */ + predicate sequence(int start, int end) { + this.sequenceOrQualified(start, end) and + not this.qualifiedItem(start, end, _, _) + } + + private predicate sequenceOrQualified(int start, int end) { + this.subsequence(start, end) and + not this.item_start(end) + } + + private predicate item_start(int start) { + this.character(start, _) or + this.isGroupStart(start) or + this.charSet(start, _) or + this.backreference(start, _) + } + + private predicate item_end(int end) { + this.character(_, end) + or + exists(int endm1 | this.isGroupEnd(endm1) and end = endm1 + 1) + or + this.charSet(_, end) + or + this.qualifier(_, end, _, _) + } + + private predicate top_level(int start, int end) { + this.subalternation(start, end, _) and + not this.isOptionDivider(end) + } + + private predicate subalternation(int start, int end, int item_start) { + this.sequenceOrQualified(start, end) and + not this.isOptionDivider(start - 1) and + item_start = start + or + start = end and + not this.item_end(start) and + this.isOptionDivider(end) and + item_start = start + or + exists(int mid | + this.subalternation(start, mid, _) and + this.isOptionDivider(mid) and + item_start = mid + 1 + | + this.sequenceOrQualified(item_start, end) + or + not this.item_start(end) and end = item_start + ) + } + + /** + * Whether the text in the range start,end is an alternation + */ + predicate alternation(int start, int end) { + this.top_level(start, end) and + exists(int less | this.subalternation(start, less, _) and less < end) + } + + /** + * Whether the text in the range start,end is an alternation and the text in part_start, part_end is one of the + * options in that alternation. + */ + predicate alternationOption(int start, int end, int part_start, int part_end) { + this.alternation(start, end) and + this.subalternation(start, part_end, part_start) + } + + /** A part of the regex that may match the start of the string. */ + private predicate firstPart(int start, int end) { + start = 0 and end = this.getText().length() + or + exists(int x | this.firstPart(x, end) | + this.emptyMatchAtStartGroup(x, start) or + this.qualifiedItem(x, start, true, _) or + this.specialCharacter(x, start, "^") + ) + or + exists(int y | this.firstPart(start, y) | + this.item(start, end) + or + this.qualifiedPart(start, end, y, _, _) + ) + or + exists(int x, int y | this.firstPart(x, y) | + this.groupContents(x, y, start, end) + or + this.alternationOption(x, y, start, end) + ) + } + + /** A part of the regex that may match the end of the string. */ + private predicate lastPart(int start, int end) { + start = 0 and end = this.getText().length() + or + exists(int y | this.lastPart(start, y) | + this.emptyMatchAtEndGroup(end, y) + or + this.qualifiedItem(end, y, true, _) + or + this.specialCharacter(end, y, "$") + or + y = end + 2 and this.escapingChar(end) and this.getChar(end + 1) = "Z" + ) + or + exists(int x | + this.lastPart(x, end) and + this.item(start, end) + ) + or + exists(int y | this.lastPart(start, y) | this.qualifiedPart(start, end, y, _, _)) + or + exists(int x, int y | this.lastPart(x, y) | + this.groupContents(x, y, start, end) + or + this.alternationOption(x, y, start, end) + ) + } + + /** + * Whether the item at [start, end) is one of the first items + * to be matched. + */ + predicate firstItem(int start, int end) { + ( + this.character(start, end) + or + this.qualifiedItem(start, end, _, _) + or + this.charSet(start, end) + ) and + this.firstPart(start, end) + } + + /** + * Whether the item at [start, end) is one of the last items + * to be matched. + */ + predicate lastItem(int start, int end) { + ( + this.character(start, end) + or + this.qualifiedItem(start, end, _, _) + or + this.charSet(start, end) + ) and + this.lastPart(start, end) + } +} + +/** A string literal used as a regular expression */ +class Regex extends RegexString { + Regex() { used_as_regex(this, _) } + + /** + * Gets a mode (if any) of this regular expression. Can be any of: + * DEBUG + * IGNORECASE + * LOCALE + * MULTILINE + * DOTALL + * UNICODE + * VERBOSE + */ + string getAMode() { + result != "None" and + used_as_regex(this, result) + or + result = this.getModeFromPrefix() + } +} diff --git a/java/ql/lib/semmle/code/java/security/performance/ExponentialBackTracking.qll b/java/ql/lib/semmle/code/java/security/performance/ExponentialBackTracking.qll new file mode 100644 index 00000000000..8d308a93104 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/performance/ExponentialBackTracking.qll @@ -0,0 +1,342 @@ +/** + * This library implements the analysis described in the following two papers: + * + * James Kirrage, Asiri Rathnayake, Hayo Thielecke: Static Analysis for + * Regular Expression Denial-of-Service Attacks. NSS 2013. + * (http://www.cs.bham.ac.uk/~hxt/research/reg-exp-sec.pdf) + * Asiri Rathnayake, Hayo Thielecke: Static Analysis for Regular Expression + * Exponential Runtime via Substructural Logics. 2014. + * (https://www.cs.bham.ac.uk/~hxt/research/redos_full.pdf) + * + * The basic idea is to search for overlapping cycles in the NFA, that is, + * states `q` such that there are two distinct paths from `q` to itself + * that consume the same word `w`. + * + * For any such state `q`, an attack string can be constructed as follows: + * concatenate a prefix `v` that takes the NFA to `q` with `n` copies of + * the word `w` that leads back to `q` along two different paths, followed + * by a suffix `x` that is _not_ accepted in state `q`. A backtracking + * implementation will need to explore at least 2^n different ways of going + * from `q` back to itself while trying to match the `n` copies of `w` + * before finally giving up. + * + * Now in order to identify overlapping cycles, all we have to do is find + * pumpable forks, that is, states `q` that can transition to two different + * states `r1` and `r2` on the same input symbol `c`, such that there are + * paths from both `r1` and `r2` to `q` that consume the same word. The latter + * condition is equivalent to saying that `(q, q)` is reachable from `(r1, r2)` + * in the product NFA. + * + * This is what the library does. It makes a simple attempt to construct a + * prefix `v` leading into `q`, but only to improve the alert message. + * And the library tries to prove the existence of a suffix that ensures + * rejection. This check might fail, which can cause false positives. + * + * Finally, sometimes it depends on the translation whether the NFA generated + * for a regular expression has a pumpable fork or not. We implement one + * particular translation, which may result in false positives or negatives + * relative to some particular JavaScript engine. + * + * More precisely, the library constructs an NFA from a regular expression `r` + * as follows: + * + * * Every sub-term `t` gives rise to an NFA state `Match(t,i)`, representing + * the state of the automaton before attempting to match the `i`th character in `t`. + * * There is one accepting state `Accept(r)`. + * * There is a special `AcceptAnySuffix(r)` state, which accepts any suffix string + * by using an epsilon transition to `Accept(r)` and an any transition to itself. + * * Transitions between states may be labelled with epsilon, or an abstract + * input symbol. + * * Each abstract input symbol represents a set of concrete input characters: + * either a single character, a set of characters represented by a + * character class, or the set of all characters. + * * The product automaton is constructed lazily, starting with pair states + * `(q, q)` where `q` is a fork, and proceding along an over-approximate + * step relation. + * * The over-approximate step relation allows transitions along pairs of + * abstract input symbols where the symbols have overlap in the characters they accept. + * * Once a trace of pairs of abstract input symbols that leads from a fork + * back to itself has been identified, we attempt to construct a concrete + * string corresponding to it, which may fail. + * * Lastly we ensure that any state reached by repeating `n` copies of `w` has + * a suffix `x` (possible empty) that is most likely __not__ accepted. + */ + +import ReDoSUtil + +/** + * Holds if state `s` might be inside a backtracking repetition. + */ +pragma[noinline] +private predicate stateInsideBacktracking(State s) { + s.getRepr().getParent*() instanceof MaybeBacktrackingRepetition +} + +/** + * A infinitely repeating quantifier that might backtrack. + */ +private class MaybeBacktrackingRepetition extends InfiniteRepetitionQuantifier { + MaybeBacktrackingRepetition() { + exists(RegExpTerm child | + child instanceof RegExpAlt or + child instanceof RegExpQuantifier + | + child.getParent+() = this + ) + } +} + +/** + * A state in the product automaton. + */ +private newtype TStatePair = + /** + * We lazily only construct those states that we are actually + * going to need: `(q, q)` for every fork state `q`, and any + * pair of states that can be reached from a pair that we have + * already constructed. To cut down on the number of states, + * we only represent states `(q1, q2)` where `q1` is lexicographically + * no bigger than `q2`. + * + * States are only constructed if both states in the pair are + * inside a repetition that might backtrack. + */ + MkStatePair(State q1, State q2) { + isFork(q1, _, _, _, _) and q2 = q1 + or + (step(_, _, _, q1, q2) or step(_, _, _, q2, q1)) and + rankState(q1) <= rankState(q2) + } + +/** + * Gets a unique number for a `state`. + * Is used to create an ordering of states, where states with the same `toString()` will be ordered differently. + */ +private int rankState(State state) { + state = + rank[result](State s, Location l | + l = s.getRepr().getLocation() + | + s order by l.getStartLine(), l.getStartColumn(), s.toString() + ) +} + +/** + * A state in the product automaton. + */ +private class StatePair extends TStatePair { + State q1; + State q2; + + StatePair() { this = MkStatePair(q1, q2) } + + /** Gets a textual representation of this element. */ + string toString() { result = "(" + q1 + ", " + q2 + ")" } + + /** Gets the first component of the state pair. */ + State getLeft() { result = q1 } + + /** Gets the second component of the state pair. */ + State getRight() { result = q2 } +} + +/** + * Holds for all constructed state pairs. + * + * Used in `statePairDist` + */ +private predicate isStatePair(StatePair p) { any() } + +/** + * Holds if there are transitions from the components of `q` to the corresponding + * components of `r`. + * + * Used in `statePairDist` + */ +private predicate delta2(StatePair q, StatePair r) { step(q, _, _, r) } + +/** + * Gets the minimum length of a path from `q` to `r` in the + * product automaton. + */ +private int statePairDist(StatePair q, StatePair r) = + shortestDistances(isStatePair/1, delta2/2)(q, r, result) + +/** + * Holds if there are transitions from `q` to `r1` and from `q` to `r2` + * labelled with `s1` and `s2`, respectively, where `s1` and `s2` do not + * trivially have an empty intersection. + * + * This predicate only holds for states associated with regular expressions + * that have at least one repetition quantifier in them (otherwise the + * expression cannot be vulnerable to ReDoS attacks anyway). + */ +pragma[noopt] +private predicate isFork(State q, InputSymbol s1, InputSymbol s2, State r1, State r2) { + stateInsideBacktracking(q) and + exists(State q1, State q2 | + q1 = epsilonSucc*(q) and + delta(q1, s1, r1) and + q2 = epsilonSucc*(q) and + delta(q2, s2, r2) and + // Use pragma[noopt] to prevent intersect(s1,s2) from being the starting point of the join. + // From (s1,s2) it would find a huge number of intermediate state pairs (q1,q2) originating from different literals, + // and discover at the end that no `q` can reach both `q1` and `q2` by epsilon transitions. + exists(intersect(s1, s2)) + | + s1 != s2 + or + r1 != r2 + or + r1 = r2 and q1 != q2 + or + // If q can reach itself by epsilon transitions, then there are two distinct paths to the q1/q2 state: + // one that uses the loop and one that doesn't. The engine will separately attempt to match with each path, + // despite ending in the same state. The "fork" thus arises from the choice of whether to use the loop or not. + // To avoid every state in the loop becoming a fork state, + // we arbitrarily pick the InfiniteRepetitionQuantifier state as the canonical fork state for the loop + // (every epsilon-loop must contain such a state). + // + // We additionally require that the there exists another InfiniteRepetitionQuantifier `mid` on the path from `q` to itself. + // This is done to avoid flagging regular expressions such as `/(a?)*b/` - that only has polynomial runtime, and is detected by `js/polynomial-redos`. + // The below code is therefore a heuritic, that only flags regular expressions such as `/(a*)*b/`, + // and does not flag regular expressions such as `/(a?b?)c/`, but the latter pattern is not used frequently. + r1 = r2 and + q1 = q2 and + epsilonSucc+(q) = q and + exists(RegExpTerm term | term = q.getRepr() | term instanceof InfiniteRepetitionQuantifier) and + // One of the mid states is an infinite quantifier itself + exists(State mid, RegExpTerm term | + mid = epsilonSucc+(q) and + term = mid.getRepr() and + term instanceof InfiniteRepetitionQuantifier and + q = epsilonSucc+(mid) and + not mid = q + ) + ) and + stateInsideBacktracking(r1) and + stateInsideBacktracking(r2) +} + +/** + * Gets the state pair `(q1, q2)` or `(q2, q1)`; note that only + * one or the other is defined. + */ +private StatePair mkStatePair(State q1, State q2) { + result = MkStatePair(q1, q2) or result = MkStatePair(q2, q1) +} + +/** + * Holds if there are transitions from the components of `q` to the corresponding + * components of `r` labelled with `s1` and `s2`, respectively. + */ +private predicate step(StatePair q, InputSymbol s1, InputSymbol s2, StatePair r) { + exists(State r1, State r2 | step(q, s1, s2, r1, r2) and r = mkStatePair(r1, r2)) +} + +/** + * Holds if there are transitions from the components of `q` to `r1` and `r2` + * labelled with `s1` and `s2`, respectively. + * + * We only consider transitions where the resulting states `(r1, r2)` are both + * inside a repetition that might backtrack. + */ +pragma[noopt] +private predicate step(StatePair q, InputSymbol s1, InputSymbol s2, State r1, State r2) { + exists(State q1, State q2 | q.getLeft() = q1 and q.getRight() = q2 | + deltaClosed(q1, s1, r1) and + deltaClosed(q2, s2, r2) and + // use noopt to force the join on `intersect` to happen last. + exists(intersect(s1, s2)) + ) and + stateInsideBacktracking(r1) and + stateInsideBacktracking(r2) +} + +private newtype TTrace = + Nil() or + Step(InputSymbol s1, InputSymbol s2, TTrace t) { + exists(StatePair p | + isReachableFromFork(_, p, t, _) and + step(p, s1, s2, _) + ) + or + t = Nil() and isFork(_, s1, s2, _, _) + } + +/** + * A list of pairs of input symbols that describe a path in the product automaton + * starting from some fork state. + */ +private class Trace extends TTrace { + /** Gets a textual representation of this element. */ + string toString() { + this = Nil() and result = "Nil()" + or + exists(InputSymbol s1, InputSymbol s2, Trace t | this = Step(s1, s2, t) | + result = "Step(" + s1 + ", " + s2 + ", " + t + ")" + ) + } +} + +/** + * Gets a string corresponding to the trace `t`. + */ +private string concretise(Trace t) { + t = Nil() and result = "" + or + exists(InputSymbol s1, InputSymbol s2, Trace rest | t = Step(s1, s2, rest) | + result = concretise(rest) + intersect(s1, s2) + ) +} + +/** + * Holds if `r` is reachable from `(fork, fork)` under input `w`, and there is + * a path from `r` back to `(fork, fork)` with `rem` steps. + */ +private predicate isReachableFromFork(State fork, StatePair r, Trace w, int rem) { + // base case + exists(InputSymbol s1, InputSymbol s2, State q1, State q2 | + isFork(fork, s1, s2, q1, q2) and + r = MkStatePair(q1, q2) and + w = Step(s1, s2, Nil()) and + rem = statePairDist(r, MkStatePair(fork, fork)) + ) + or + // recursive case + exists(StatePair p, Trace v, InputSymbol s1, InputSymbol s2 | + isReachableFromFork(fork, p, v, rem + 1) and + step(p, s1, s2, r) and + w = Step(s1, s2, v) and + rem >= statePairDist(r, MkStatePair(fork, fork)) + ) +} + +/** + * Gets a state in the product automaton from which `(fork, fork)` is + * reachable in zero or more epsilon transitions. + */ +private StatePair getAForkPair(State fork) { + isFork(fork, _, _, _, _) and + result = MkStatePair(epsilonPred*(fork), epsilonPred*(fork)) +} + +/** + * Holds if `fork` is a pumpable fork with word `w`. + */ +private predicate isPumpable(State fork, string w) { + exists(StatePair q, Trace t | + isReachableFromFork(fork, q, t, _) and + q = getAForkPair(fork) and + w = concretise(t) + ) +} + +/** + * An instantiation of `ReDoSConfiguration` for exponential backtracking. + */ +class ExponentialReDoSConfiguration extends ReDoSConfiguration { + ExponentialReDoSConfiguration() { this = "ExponentialReDoSConfiguration" } + + override predicate isReDoSCandidate(State state, string pump) { isPumpable(state, pump) } +} diff --git a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll new file mode 100644 index 00000000000..2cd324ed8f7 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll @@ -0,0 +1,1135 @@ +/** + * Provides classes for working with regular expressions that can + * perform backtracking in superlinear/exponential time. + * + * This module contains a number of utility predicates for compiling a regular expression into a NFA and reasoning about this NFA. + * + * The `ReDoSConfiguration` contains a `isReDoSCandidate` predicate that is used to + * to determine which states the prefix/suffix search should happen on. + * There is only meant to exist one `ReDoSConfiguration` at a time. + * + * The predicate `hasReDoSResult` outputs a de-duplicated set of + * states that will cause backtracking (a rejecting suffix exists). + */ + +import RegExpTreeView + +/** + * A configuration for which parts of a regular expression should be considered relevant for + * the different predicates in `ReDoS.qll`. + * Used to adjust the computations for either superlinear or exponential backtracking. + */ +abstract class ReDoSConfiguration extends string { + bindingset[this] + ReDoSConfiguration() { any() } + + /** + * Holds if `state` with the pump string `pump` is a candidate for a + * ReDoS vulnerable state. + * This is used to determine which states are considered for the prefix/suffix construction. + */ + abstract predicate isReDoSCandidate(State state, string pump); +} + +/** + * Holds if repeating `pump' starting at `state` is a candidate for causing backtracking. + * No check whether a rejected suffix exists has been made. + */ +private predicate isReDoSCandidate(State state, string pump) { + any(ReDoSConfiguration conf).isReDoSCandidate(state, pump) and + ( + not any(ReDoSConfiguration conf).isReDoSCandidate(epsilonSucc+(state), _) + or + epsilonSucc+(state) = state and + state = + max(State s, Location l | + s = epsilonSucc+(state) and + l = s.getRepr().getLocation() and + any(ReDoSConfiguration conf).isReDoSCandidate(s, _) and + s.getRepr() instanceof InfiniteRepetitionQuantifier + | + s order by l.getStartLine(), l.getStartColumn(), l.getEndColumn(), l.getEndLine() + ) + ) +} + +/** + * Gets the char after `c` (from a simplified ASCII table). + */ +private string nextChar(string c) { exists(int code | code = ascii(c) | code + 1 = ascii(result)) } + +/** + * Gets an approximation for the ASCII code for `char`. + * Only the easily printable chars are included (so no newline, tab, null, etc). + */ +private int ascii(string char) { + char = + rank[result](string c | + c = + "! \"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" + .charAt(_) + ) +} + +/** + * Holds if `t` matches at least an epsilon symbol. + * + * That is, this term does not restrict the language of the enclosing regular expression. + * + * This is implemented as an under-approximation, and this predicate does not hold for sub-patterns in particular. + */ +predicate matchesEpsilon(RegExpTerm t) { + t instanceof RegExpStar + or + t instanceof RegExpOpt + or + t.(RegExpRange).getLowerBound() = 0 + or + exists(RegExpTerm child | + child = t.getAChild() and + matchesEpsilon(child) + | + t instanceof RegExpAlt or + t instanceof RegExpGroup or + t instanceof RegExpPlus or + t instanceof RegExpRange + ) + or + matchesEpsilon(t.(RegExpBackRef).getGroup()) + or + forex(RegExpTerm child | child = t.(RegExpSequence).getAChild() | matchesEpsilon(child)) +} + +/** + * A lookahead/lookbehind that matches the empty string. + */ +class EmptyPositiveSubPatttern extends RegExpSubPattern { + EmptyPositiveSubPatttern() { + ( + this instanceof RegExpPositiveLookahead + or + this instanceof RegExpPositiveLookbehind + ) and + matchesEpsilon(this.getOperand()) + } +} + +/** + * A branch in a disjunction that is the root node in a literal, or a literal + * whose root node is not a disjunction. + */ +class RegExpRoot extends RegExpTerm { + RegExpParent parent; + + RegExpRoot() { + exists(RegExpAlt alt | + alt.isRootTerm() and + this = alt.getAChild() and + parent = alt.getParent() + ) + or + this.isRootTerm() and + not this instanceof RegExpAlt and + parent = this.getParent() + } + + /** + * Holds if this root term is relevant to the ReDoS analysis. + */ + predicate isRelevant() { + // there is at least one repetition + getRoot(any(InfiniteRepetitionQuantifier q)) = this and + // is actually used as a RegExp + isUsedAsRegExp() and + // not excluded for library specific reasons + not isExcluded(getRootTerm().getParent()) + } +} + +/** + * A constant in a regular expression that represents valid Unicode character(s). + */ +private class RegexpCharacterConstant extends RegExpConstant { + RegexpCharacterConstant() { this.isCharacter() } +} + +/** + * A regexp term that is relevant for this ReDoS analysis. + */ +class RelevantRegExpTerm extends RegExpTerm { + RelevantRegExpTerm() { getRoot(this).isRelevant() } +} + +/** + * Holds if `term` is the chosen canonical representative for all terms with string representation `str`. + * The string representation includes which flags are used with the regular expression. + * + * Using canonical representatives gives a huge performance boost when working with tuples containing multiple `InputSymbol`s. + * The number of `InputSymbol`s is decreased by 3 orders of magnitude or more in some larger benchmarks. + */ +private predicate isCanonicalTerm(RelevantRegExpTerm term, string str) { + term = + min(RelevantRegExpTerm t, Location loc, File file | + loc = t.getLocation() and + file = t.getFile() and + str = t.getRawValue() + "|" + getCanonicalizationFlags(t.getRootTerm()) + | + t order by t.getFile().getRelativePath(), loc.getStartLine(), loc.getStartColumn() + ) +} + +/** + * Gets a string reperesentation of the flags used with the regular expression. + * Only the flags that are relevant for the canonicalization are included. + */ +string getCanonicalizationFlags(RegExpTerm root) { + root.isRootTerm() and + (if RegExpFlags::isIgnoreCase(root) then result = "i" else result = "") +} + +/** + * An abstract input symbol, representing a set of concrete characters. + */ +private newtype TInputSymbol = + /** An input symbol corresponding to character `c`. */ + Char(string c) { + c = + any(RegexpCharacterConstant cc | + cc instanceof RelevantRegExpTerm and + not RegExpFlags::isIgnoreCase(cc.getRootTerm()) + ).getValue().charAt(_) + or + // normalize everything to lower case if the regexp is case insensitive + c = + any(RegexpCharacterConstant cc, string char | + cc instanceof RelevantRegExpTerm and + RegExpFlags::isIgnoreCase(cc.getRootTerm()) and + char = cc.getValue().charAt(_) + | + char.toLowerCase() + ) + } or + /** + * An input symbol representing all characters matched by + * a (non-universal) character class that has string representation `charClassString`. + */ + CharClass(string charClassString) { + exists(RelevantRegExpTerm recc | isCanonicalTerm(recc, charClassString) | + recc instanceof RegExpCharacterClass and + not recc.(RegExpCharacterClass).isUniversalClass() + or + recc instanceof RegExpCharacterClassEscape + ) + } or + /** An input symbol representing all characters matched by `.`. */ + Dot() or + /** An input symbol representing all characters. */ + Any() or + /** An epsilon transition in the automaton. */ + Epsilon() + +/** + * Gets the canonical CharClass for `term`. + */ +CharClass getCanonicalCharClass(RegExpTerm term) { + exists(string str | isCanonicalTerm(term, str) | result = CharClass(str)) +} + +/** + * Holds if `a` and `b` are input symbols from the same regexp. + */ +private predicate sharesRoot(TInputSymbol a, TInputSymbol b) { + exists(RegExpRoot root | + belongsTo(a, root) and + belongsTo(b, root) + ) +} + +/** + * Holds if the `a` is an input symbol from a regexp that has root `root`. + */ +private predicate belongsTo(TInputSymbol a, RegExpRoot root) { + exists(State s | getRoot(s.getRepr()) = root | + delta(s, a, _) + or + delta(_, a, s) + ) +} + +/** + * An abstract input symbol, representing a set of concrete characters. + */ +class InputSymbol extends TInputSymbol { + InputSymbol() { not this instanceof Epsilon } + + /** + * Gets a string representation of this input symbol. + */ + string toString() { + this = Char(result) + or + this = CharClass(result) + or + this = Dot() and result = "." + or + this = Any() and result = "[^]" + } +} + +/** + * An abstract input symbol that represents a character class. + */ +abstract class CharacterClass extends InputSymbol { + /** + * Gets a character that is relevant for intersection-tests involving this + * character class. + * + * Specifically, this is any of the characters mentioned explicitly in the + * character class, offset by one if it is inverted. For character class escapes, + * the result is as if the class had been written out as a series of intervals. + * + * This set is large enough to ensure that for any two intersecting character + * classes, one contains a relevant character from the other. + */ + abstract string getARelevantChar(); + + /** + * Holds if this character class matches `char`. + */ + bindingset[char] + abstract predicate matches(string char); + + /** + * Gets a character matched by this character class. + */ + string choose() { result = getARelevantChar() and matches(result) } +} + +/** + * Provides implementations for `CharacterClass`. + */ +private module CharacterClasses { + /** + * Holds if the character class `cc` has a child (constant or range) that matches `char`. + */ + pragma[noinline] + predicate hasChildThatMatches(RegExpCharacterClass cc, string char) { + if RegExpFlags::isIgnoreCase(cc.getRootTerm()) + then + // normalize everything to lower case if the regexp is case insensitive + exists(string c | hasChildThatMatchesIgnoringCasingFlags(cc, c) | char = c.toLowerCase()) + else hasChildThatMatchesIgnoringCasingFlags(cc, char) + } + + /** + * Holds if the character class `cc` has a child (constant or range) that matches `char`. + * Ignores whether the character class is inside a regular expression that has the ignore case flag. + */ + pragma[noinline] + predicate hasChildThatMatchesIgnoringCasingFlags(RegExpCharacterClass cc, string char) { + exists(getCanonicalCharClass(cc)) and + exists(RegExpTerm child | child = cc.getAChild() | + char = child.(RegexpCharacterConstant).getValue() + or + rangeMatchesOnLetterOrDigits(child, char) + or + not rangeMatchesOnLetterOrDigits(child, _) and + char = getARelevantChar() and + exists(string lo, string hi | child.(RegExpCharacterRange).isRange(lo, hi) | + lo <= char and + char <= hi + ) + or + exists(RegExpCharacterClassEscape escape | escape = child | + escape.getValue() = escape.getValue().toLowerCase() and + classEscapeMatches(escape.getValue(), char) + or + char = getARelevantChar() and + escape.getValue() = escape.getValue().toUpperCase() and + not classEscapeMatches(escape.getValue().toLowerCase(), char) + ) + ) + } + + /** + * Holds if `range` is a range on lower-case, upper-case, or digits, and matches `char`. + * This predicate is used to restrict the searchspace for ranges by only joining `getAnyPossiblyMatchedChar` + * on a few ranges. + */ + private predicate rangeMatchesOnLetterOrDigits(RegExpCharacterRange range, string char) { + exists(string lo, string hi | + range.isRange(lo, hi) and lo = lowercaseLetter() and hi = lowercaseLetter() + | + lo <= char and + char <= hi and + char = lowercaseLetter() + ) + or + exists(string lo, string hi | + range.isRange(lo, hi) and lo = upperCaseLetter() and hi = upperCaseLetter() + | + lo <= char and + char <= hi and + char = upperCaseLetter() + ) + or + exists(string lo, string hi | range.isRange(lo, hi) and lo = digit() and hi = digit() | + lo <= char and + char <= hi and + char = digit() + ) + } + + private string lowercaseLetter() { result = "abdcefghijklmnopqrstuvwxyz".charAt(_) } + + private string upperCaseLetter() { result = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".charAt(_) } + + private string digit() { result = [0 .. 9].toString() } + + /** + * Gets a char that could be matched by a regular expression. + * Includes all printable ascii chars, all constants mentioned in a regexp, and all chars matches by the regexp `/\s|\d|\w/`. + */ + string getARelevantChar() { + exists(ascii(result)) + or + exists(RegexpCharacterConstant c | result = c.getValue().charAt(_)) + or + classEscapeMatches(_, result) + } + + /** + * Gets a char that is mentioned in the character class `c`. + */ + private string getAMentionedChar(RegExpCharacterClass c) { + exists(RegExpTerm child | child = c.getAChild() | + result = child.(RegexpCharacterConstant).getValue() + or + child.(RegExpCharacterRange).isRange(result, _) + or + child.(RegExpCharacterRange).isRange(_, result) + or + exists(RegExpCharacterClassEscape escape | child = escape | + result = min(string s | classEscapeMatches(escape.getValue().toLowerCase(), s)) + or + result = max(string s | classEscapeMatches(escape.getValue().toLowerCase(), s)) + ) + ) + } + + /** + * An implementation of `CharacterClass` for positive (non inverted) character classes. + */ + private class PositiveCharacterClass extends CharacterClass { + RegExpCharacterClass cc; + + PositiveCharacterClass() { this = getCanonicalCharClass(cc) and not cc.isInverted() } + + override string getARelevantChar() { result = getAMentionedChar(cc) } + + override predicate matches(string char) { hasChildThatMatches(cc, char) } + } + + /** + * An implementation of `CharacterClass` for inverted character classes. + */ + private class InvertedCharacterClass extends CharacterClass { + RegExpCharacterClass cc; + + InvertedCharacterClass() { this = getCanonicalCharClass(cc) and cc.isInverted() } + + override string getARelevantChar() { + result = nextChar(getAMentionedChar(cc)) or + nextChar(result) = getAMentionedChar(cc) + } + + bindingset[char] + override predicate matches(string char) { not hasChildThatMatches(cc, char) } + } + + /** + * Holds if the character class escape `clazz` (\d, \s, or \w) matches `char`. + */ + pragma[noinline] + private predicate classEscapeMatches(string clazz, string char) { + clazz = "d" and + char = "0123456789".charAt(_) + or + clazz = "s" and + char = [" ", "\t", "\r", "\n", 11.toUnicode(), 12.toUnicode()] // 11.toUnicode() = \v, 12.toUnicode() = \f + or + clazz = "w" and + char = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_".charAt(_) + } + + /** + * An implementation of `CharacterClass` for \d, \s, and \w. + */ + private class PositiveCharacterClassEscape extends CharacterClass { + RegExpCharacterClassEscape cc; + + PositiveCharacterClassEscape() { + this = getCanonicalCharClass(cc) and cc.getValue() = ["d", "s", "w"] + } + + override string getARelevantChar() { + cc.getValue() = "d" and + result = ["0", "9"] + or + cc.getValue() = "s" and + result = " " + or + cc.getValue() = "w" and + result = ["a", "Z", "_", "0", "9"] + } + + override predicate matches(string char) { classEscapeMatches(cc.getValue(), char) } + + override string choose() { + cc.getValue() = "d" and + result = "9" + or + cc.getValue() = "s" and + result = " " + or + cc.getValue() = "w" and + result = "a" + } + } + + /** + * An implementation of `CharacterClass` for \D, \S, and \W. + */ + private class NegativeCharacterClassEscape extends CharacterClass { + RegExpCharacterClassEscape cc; + + NegativeCharacterClassEscape() { + this = getCanonicalCharClass(cc) and cc.getValue() = ["D", "S", "W"] + } + + override string getARelevantChar() { + cc.getValue() = "D" and + result = ["a", "Z", "!"] + or + cc.getValue() = "S" and + result = ["a", "9", "!"] + or + cc.getValue() = "W" and + result = [" ", "!"] + } + + bindingset[char] + override predicate matches(string char) { + not classEscapeMatches(cc.getValue().toLowerCase(), char) + } + } +} + +private class EdgeLabel extends TInputSymbol { + string toString() { + this = Epsilon() and result = "" + or + exists(InputSymbol s | this = s and result = s.toString()) + } +} + +/** + * Gets the state before matching `t`. + */ +pragma[inline] +private State before(RegExpTerm t) { result = Match(t, 0) } + +/** + * Gets a state the NFA may be in after matching `t`. + */ +private State after(RegExpTerm t) { + exists(RegExpAlt alt | t = alt.getAChild() | result = after(alt)) + or + exists(RegExpSequence seq, int i | t = seq.getChild(i) | + result = before(seq.getChild(i + 1)) + or + i + 1 = seq.getNumChild() and result = after(seq) + ) + or + exists(RegExpGroup grp | t = grp.getAChild() | result = after(grp)) + or + exists(RegExpStar star | t = star.getAChild() | result = before(star)) + or + exists(RegExpPlus plus | t = plus.getAChild() | + result = before(plus) or + result = after(plus) + ) + or + exists(RegExpOpt opt | t = opt.getAChild() | result = after(opt)) + or + exists(RegExpRoot root | t = root | result = AcceptAnySuffix(root)) +} + +/** + * Holds if the NFA has a transition from `q1` to `q2` labelled with `lbl`. + */ +predicate delta(State q1, EdgeLabel lbl, State q2) { + exists(RegexpCharacterConstant s, int i | + q1 = Match(s, i) and + ( + not RegExpFlags::isIgnoreCase(s.getRootTerm()) and + lbl = Char(s.getValue().charAt(i)) + or + // normalize everything to lower case if the regexp is case insensitive + RegExpFlags::isIgnoreCase(s.getRootTerm()) and + exists(string c | c = s.getValue().charAt(i) | lbl = Char(c.toLowerCase())) + ) and + ( + q2 = Match(s, i + 1) + or + s.getValue().length() = i + 1 and + q2 = after(s) + ) + ) + or + exists(RegExpDot dot | q1 = before(dot) and q2 = after(dot) | + if RegExpFlags::isDotAll(dot.getRootTerm()) then lbl = Any() else lbl = Dot() + ) + or + exists(RegExpCharacterClass cc | + cc.isUniversalClass() and q1 = before(cc) and lbl = Any() and q2 = after(cc) + or + q1 = before(cc) and + lbl = CharClass(cc.getRawValue() + "|" + getCanonicalizationFlags(cc.getRootTerm())) and + q2 = after(cc) + ) + or + exists(RegExpCharacterClassEscape cc | + q1 = before(cc) and + lbl = CharClass(cc.getRawValue() + "|" + getCanonicalizationFlags(cc.getRootTerm())) and + q2 = after(cc) + ) + or + exists(RegExpAlt alt | lbl = Epsilon() | q1 = before(alt) and q2 = before(alt.getAChild())) + or + exists(RegExpSequence seq | lbl = Epsilon() | q1 = before(seq) and q2 = before(seq.getChild(0))) + or + exists(RegExpGroup grp | lbl = Epsilon() | q1 = before(grp) and q2 = before(grp.getChild(0))) + or + exists(RegExpStar star | lbl = Epsilon() | + q1 = before(star) and q2 = before(star.getChild(0)) + or + q1 = before(star) and q2 = after(star) + ) + or + exists(RegExpPlus plus | lbl = Epsilon() | q1 = before(plus) and q2 = before(plus.getChild(0))) + or + exists(RegExpOpt opt | lbl = Epsilon() | + q1 = before(opt) and q2 = before(opt.getChild(0)) + or + q1 = before(opt) and q2 = after(opt) + ) + or + exists(RegExpRoot root | q1 = AcceptAnySuffix(root) | + lbl = Any() and q2 = q1 + or + lbl = Epsilon() and q2 = Accept(root) + ) + or + exists(RegExpRoot root | q1 = Match(root, 0) | lbl = Any() and q2 = q1) + or + exists(RegExpDollar dollar | q1 = before(dollar) | + lbl = Epsilon() and q2 = Accept(getRoot(dollar)) + ) + or + exists(EmptyPositiveSubPatttern empty | q1 = before(empty) | + lbl = Epsilon() and q2 = after(empty) + ) +} + +/** + * Gets a state that `q` has an epsilon transition to. + */ +State epsilonSucc(State q) { delta(q, Epsilon(), result) } + +/** + * Gets a state that has an epsilon transition to `q`. + */ +State epsilonPred(State q) { q = epsilonSucc(result) } + +/** + * Holds if there is a state `q` that can be reached from `q1` + * along epsilon edges, such that there is a transition from + * `q` to `q2` that consumes symbol `s`. + */ +predicate deltaClosed(State q1, InputSymbol s, State q2) { delta(epsilonSucc*(q1), s, q2) } + +/** + * Gets the root containing the given term, that is, the root of the literal, + * or a branch of the root disjunction. + */ +RegExpRoot getRoot(RegExpTerm term) { + result = term or + result = getRoot(term.getParent()) +} + +/** + * A state in the NFA. + */ +private newtype TState = + /** + * A state representing that the NFA is about to match a term. + * `i` is used to index into multi-char literals. + */ + Match(RelevantRegExpTerm t, int i) { + i = 0 + or + exists(t.(RegexpCharacterConstant).getValue().charAt(i)) + } or + /** + * An accept state, where exactly the given input string is accepted. + */ + Accept(RegExpRoot l) { l.isRelevant() } or + /** + * An accept state, where the given input string, or any string that has this + * string as a prefix, is accepted. + */ + AcceptAnySuffix(RegExpRoot l) { l.isRelevant() } + +/** + * Gets a state that is about to match the regular expression `t`. + */ +State mkMatch(RegExpTerm t) { result = Match(t, 0) } + +/** + * A state in the NFA corresponding to a regular expression. + * + * Each regular expression literal `l` has one accepting state + * `Accept(l)`, one state that accepts all suffixes `AcceptAnySuffix(l)`, + * and a state `Match(t, i)` for every subterm `t`, + * which represents the state of the NFA before starting to + * match `t`, or the `i`th character in `t` if `t` is a constant. + */ +class State extends TState { + RegExpTerm repr; + + State() { + this = Match(repr, _) or + this = Accept(repr) or + this = AcceptAnySuffix(repr) + } + + /** + * Gets a string representation for this state in a regular expression. + */ + string toString() { + exists(int i | this = Match(repr, i) | result = "Match(" + repr + "," + i + ")") + or + this instanceof Accept and + result = "Accept(" + repr + ")" + or + this instanceof AcceptAnySuffix and + result = "AcceptAny(" + repr + ")" + } + + /** + * Gets the location for this state. + */ + Location getLocation() { result = repr.getLocation() } + + /** + * Gets the term represented by this state. + */ + RegExpTerm getRepr() { result = repr } +} + +/** + * Gets the minimum char that is matched by both the character classes `c` and `d`. + */ +private string getMinOverlapBetweenCharacterClasses(CharacterClass c, CharacterClass d) { + result = min(getAOverlapBetweenCharacterClasses(c, d)) +} + +/** + * Gets a char that is matched by both the character classes `c` and `d`. + * And `c` and `d` is not the same character class. + */ +private string getAOverlapBetweenCharacterClasses(CharacterClass c, CharacterClass d) { + sharesRoot(c, d) and + result = [c.getARelevantChar(), d.getARelevantChar()] and + c.matches(result) and + d.matches(result) and + not c = d +} + +/** + * Gets a character that is represented by both `c` and `d`. + */ +string intersect(InputSymbol c, InputSymbol d) { + (sharesRoot(c, d) or [c, d] = Any()) and + ( + c = Char(result) and + d = getAnInputSymbolMatching(result) + or + result = getMinOverlapBetweenCharacterClasses(c, d) + or + result = c.(CharacterClass).choose() and + ( + d = c + or + d = Dot() and + not (result = "\n" or result = "\r") + or + d = Any() + ) + or + (c = Dot() or c = Any()) and + (d = Dot() or d = Any()) and + result = "a" + ) + or + result = intersect(d, c) +} + +/** + * Gets a symbol that matches `char`. + */ +bindingset[char] +InputSymbol getAnInputSymbolMatching(string char) { + result = Char(char) + or + result.(CharacterClass).matches(char) + or + result = Dot() and + not (char = "\n" or char = "\r") + or + result = Any() +} + +/** + * Predicates for constructing a prefix string that leads to a given state. + */ +private module PrefixConstruction { + /** + * Holds if `state` starts the string matched by the regular expression. + */ + private predicate isStartState(State state) { + state instanceof StateInPumpableRegexp and + ( + state = Match(any(RegExpRoot r), _) + or + exists(RegExpCaret car | state = after(car)) + ) + } + + /** + * Holds if `state` is the textually last start state for the regular expression. + */ + private predicate lastStartState(State state) { + exists(RegExpRoot root | + state = + max(State s, Location l | + isStartState(s) and getRoot(s.getRepr()) = root and l = s.getRepr().getLocation() + | + s + order by + l.getStartLine(), l.getStartColumn(), s.getRepr().toString(), l.getEndColumn(), + l.getEndLine() + ) + ) + } + + /** + * Holds if there exists any transition (Epsilon() or other) from `a` to `b`. + */ + private predicate existsTransition(State a, State b) { delta(a, _, b) } + + /** + * Gets the minimum number of transitions it takes to reach `state` from the `start` state. + */ + int prefixLength(State start, State state) = + shortestDistances(lastStartState/1, existsTransition/2)(start, state, result) + + /** + * Gets the minimum number of transitions it takes to reach `state` from the start state. + */ + private int lengthFromStart(State state) { result = prefixLength(_, state) } + + /** + * Gets a string for which the regular expression will reach `state`. + * + * Has at most one result for any given `state`. + * This predicate will not always have a result even if there is a ReDoS issue in + * the regular expression. + */ + string prefix(State state) { + lastStartState(state) and + result = "" + or + // the search stops past the last redos candidate state. + lengthFromStart(state) <= max(lengthFromStart(any(State s | isReDoSCandidate(s, _)))) and + exists(State prev | + // select a unique predecessor (by an arbitrary measure) + prev = + min(State s, Location loc | + lengthFromStart(s) = lengthFromStart(state) - 1 and + loc = s.getRepr().getLocation() and + delta(s, _, state) + | + s + order by + loc.getStartLine(), loc.getStartColumn(), loc.getEndLine(), loc.getEndColumn(), + s.getRepr().toString() + ) + | + // greedy search for the shortest prefix + result = prefix(prev) and delta(prev, Epsilon(), state) + or + not delta(prev, Epsilon(), state) and + result = prefix(prev) + getCanonicalEdgeChar(prev, state) + ) + } + + /** + * Gets a canonical char for which there exists a transition from `prev` to `next` in the NFA. + */ + private string getCanonicalEdgeChar(State prev, State next) { + result = + min(string c | delta(prev, any(InputSymbol symbol | c = intersect(Any(), symbol)), next)) + } + + /** + * A state within a regular expression that has a pumpable state. + */ + class StateInPumpableRegexp extends State { + pragma[noinline] + StateInPumpableRegexp() { + exists(State s | isReDoSCandidate(s, _) | getRoot(s.getRepr()) = getRoot(this.getRepr())) + } + } +} + +/** + * Predicates for testing the presence of a rejecting suffix. + * + * These predicates are used to ensure that the all states reached from the fork + * by repeating `w` have a rejecting suffix. + * + * For example, a regexp like `/^(a+)+/` will accept any string as long the prefix is + * some number of `"a"`s, and it is therefore not possible to construct a rejecting suffix. + * + * A regexp like `/(a+)+$/` or `/(a+)+b/` trivially has a rejecting suffix, + * as the suffix "X" will cause both the regular expressions to be rejected. + * + * The string `w` is repeated any number of times because it needs to be + * infinitely repeatedable for the attack to work. + * For the regular expression `/((ab)+)*abab/` the accepting state is not reachable from the fork + * using epsilon transitions. But any attempt at repeating `w` will end in a state that accepts all suffixes. + */ +private module SuffixConstruction { + import PrefixConstruction + + /** + * Holds if all states reachable from `fork` by repeating `w` + * are likely rejectable by appending some suffix. + */ + predicate reachesOnlyRejectableSuffixes(State fork, string w) { + isReDoSCandidate(fork, w) and + forex(State next | next = process(fork, w, w.length() - 1) | isLikelyRejectable(next)) + } + + /** + * Holds if there likely exists a suffix starting from `s` that leads to the regular expression being rejected. + * This predicate might find impossible suffixes when searching for suffixes of length > 1, which can cause FPs. + */ + pragma[noinline] + private predicate isLikelyRejectable(StateInPumpableRegexp s) { + // exists a reject edge with some char. + hasRejectEdge(s) + or + hasEdgeToLikelyRejectable(s) + or + // stopping here is rejection + isRejectState(s) + } + + /** + * Holds if `s` is not an accept state, and there is no epsilon transition to an accept state. + */ + predicate isRejectState(StateInPumpableRegexp s) { not epsilonSucc*(s) = Accept(_) } + + /** + * Holds if there is likely a non-empty suffix leading to rejection starting in `s`. + */ + pragma[noopt] + predicate hasEdgeToLikelyRejectable(StateInPumpableRegexp s) { + // all edges (at least one) with some char leads to another state that is rejectable. + // the `next` states might not share a common suffix, which can cause FPs. + exists(string char | char = hasEdgeToLikelyRejectableHelper(s) | + // noopt to force `hasEdgeToLikelyRejectableHelper` to be first in the join-order. + exists(State next | deltaClosedChar(s, char, next) | isLikelyRejectable(next)) and + forall(State next | deltaClosedChar(s, char, next) | isLikelyRejectable(next)) + ) + } + + /** + * Gets a char for there exists a transition away from `s`, + * and `s` has not been found to be rejectable by `hasRejectEdge` or `isRejectState`. + */ + pragma[noinline] + private string hasEdgeToLikelyRejectableHelper(StateInPumpableRegexp s) { + not hasRejectEdge(s) and + not isRejectState(s) and + deltaClosedChar(s, result, _) + } + + /** + * Holds if there is a state `next` that can be reached from `prev` + * along epsilon edges, such that there is a transition from + * `prev` to `next` that the character symbol `char`. + */ + predicate deltaClosedChar(StateInPumpableRegexp prev, string char, StateInPumpableRegexp next) { + deltaClosed(prev, getAnInputSymbolMatchingRelevant(char), next) + } + + pragma[noinline] + InputSymbol getAnInputSymbolMatchingRelevant(string char) { + char = relevant(_) and + result = getAnInputSymbolMatching(char) + } + + /** + * Gets a char used for finding possible suffixes inside `root`. + */ + pragma[noinline] + private string relevant(RegExpRoot root) { + exists(ascii(result)) + or + exists(InputSymbol s | belongsTo(s, root) | result = intersect(s, _)) + or + // The characters from `hasSimpleRejectEdge`. Only `\n` is really needed (as `\n` is not in the `ascii` relation). + // The three chars must be kept in sync with `hasSimpleRejectEdge`. + result = ["|", "\n", "Z"] + } + + /** + * Holds if there exists a `char` such that there is no edge from `s` labeled `char` in our NFA. + * The NFA does not model reject states, so the above is the same as saying there is a reject edge. + */ + private predicate hasRejectEdge(State s) { + hasSimpleRejectEdge(s) + or + not hasSimpleRejectEdge(s) and + exists(string char | char = relevant(getRoot(s.getRepr())) | not deltaClosedChar(s, char, _)) + } + + /** + * Holds if there is no edge from `s` labeled with "|", "\n", or "Z" in our NFA. + * This predicate is used as a cheap pre-processing to speed up `hasRejectEdge`. + */ + private predicate hasSimpleRejectEdge(State s) { + // The three chars were chosen arbitrarily. The three chars must be kept in sync with `relevant`. + exists(string char | char = ["|", "\n", "Z"] | not deltaClosedChar(s, char, _)) + } + + /** + * Gets a state that can be reached from pumpable `fork` consuming all + * chars in `w` any number of times followed by the first `i+1` characters of `w`. + */ + pragma[noopt] + private State process(State fork, string w, int i) { + exists(State prev | prev = getProcessPrevious(fork, i, w) | + exists(string char, InputSymbol sym | + char = w.charAt(i) and + deltaClosed(prev, sym, result) and + // noopt to prevent joining `prev` with all possible `chars` that could transition away from `prev`. + // Instead only join with the set of `chars` where a relevant `InputSymbol` has already been found. + sym = getAProcessInputSymbol(char) + ) + ) + } + + /** + * Gets a state that can be reached from pumpable `fork` consuming all + * chars in `w` any number of times followed by the first `i` characters of `w`. + */ + private State getProcessPrevious(State fork, int i, string w) { + isReDoSCandidate(fork, w) and + ( + i = 0 and result = fork + or + result = process(fork, w, i - 1) + or + // repeat until fixpoint + i = 0 and + result = process(fork, w, w.length() - 1) + ) + } + + /** + * Gets an InputSymbol that matches `char`. + * The predicate is specialized to only have a result for the `char`s that are relevant for the `process` predicate. + */ + private InputSymbol getAProcessInputSymbol(string char) { + char = getAProcessChar() and + result = getAnInputSymbolMatching(char) + } + + /** + * Gets a `char` that occurs in a `pump` string. + */ + private string getAProcessChar() { result = any(string s | isReDoSCandidate(_, s)).charAt(_) } +} + +/** + * Gets the result of backslash-escaping newlines, carriage-returns and + * backslashes in `s`. + */ +bindingset[s] +private string escape(string s) { + result = + s.replaceAll("\\", "\\\\") + .replaceAll("\n", "\\n") + .replaceAll("\r", "\\r") + .replaceAll("\t", "\\t") +} + +/** + * Gets `str` with the last `i` characters moved to the front. + * + * We use this to adjust the pump string to match with the beginning of + * a RegExpTerm, so it doesn't start in the middle of a constant. + */ +bindingset[str, i] +private string rotate(string str, int i) { + result = str.suffix(str.length() - i) + str.prefix(str.length() - i) +} + +/** + * Holds if `term` may cause superlinear backtracking on strings containing many repetitions of `pump`. + * Gets the shortest string that causes superlinear backtracking. + */ +private predicate isReDoSAttackable(RegExpTerm term, string pump, State s) { + exists(int i, string c | s = Match(term, i) | + c = + min(string w | + any(ReDoSConfiguration conf).isReDoSCandidate(s, w) and + SuffixConstruction::reachesOnlyRejectableSuffixes(s, w) + | + w order by w.length(), w + ) and + pump = escape(rotate(c, i)) + ) +} + +/** + * Holds if the state `s` (represented by the term `t`) can have backtracking with repetitions of `pump`. + * + * `prefixMsg` contains a friendly message for a prefix that reaches `s` (or `prefixMsg` is the empty string if the prefix is empty or if no prefix could be found). + */ +predicate hasReDoSResult(RegExpTerm t, string pump, State s, string prefixMsg) { + isReDoSAttackable(t, pump, s) and + ( + prefixMsg = "starting with '" + escape(PrefixConstruction::prefix(s)) + "' and " and + not PrefixConstruction::prefix(s) = "" + or + PrefixConstruction::prefix(s) = "" and prefixMsg = "" + or + not exists(PrefixConstruction::prefix(s)) and prefixMsg = "" + ) +} diff --git a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll new file mode 100644 index 00000000000..ac220ec8a50 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll @@ -0,0 +1,49 @@ +/** + * This module should provide a class hierarchy corresponding to a parse tree of regular expressions. + */ + +import java +import semmle.code.java.regex.RegexTreeView + +/** + * Holds if the regular expression should not be considered. + * + * We make the pragmatic performance optimization to ignore regular expressions in files + * that does not belong to the project code (such as installed dependencies). + */ +predicate isExcluded(RegExpParent parent) { + not exists(parent.getRegex().getLocation().getFile().getRelativePath()) + or + // Regexes with many occurrences of ".*" may cause the polynomial ReDoS computation to explode, so + // we explicitly exclude these. + count(int i | exists(parent.getRegex().getText().regexpFind("\\.\\*", i, _)) | i) > 10 +} + +/** + * A module containing predicates for determining which flags a regular expression have. + */ +module RegExpFlags { + /** + * Holds if `root` has the `i` flag for case-insensitive matching. + */ + predicate isIgnoreCase(RegExpTerm root) { + root.isRootTerm() and + root.getLiteral().isIgnoreCase() + } + + /** + * Gets the flags for `root`, or the empty string if `root` has no flags. + */ + string getFlags(RegExpTerm root) { + root.isRootTerm() and + result = root.getLiteral().getFlags() + } + + /** + * Holds if `root` has the `s` flag for multi-line matching. + */ + predicate isDotAll(RegExpTerm root) { + root.isRootTerm() and + root.getLiteral().isDotAll() + } +} diff --git a/java/ql/lib/semmle/code/java/security/performance/SuperlinearBackTracking.qll b/java/ql/lib/semmle/code/java/security/performance/SuperlinearBackTracking.qll new file mode 100644 index 00000000000..2b42165ff7e --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/performance/SuperlinearBackTracking.qll @@ -0,0 +1,420 @@ +/** + * Provides classes for working with regular expressions that can + * perform backtracking in superlinear time. + */ + +import ReDoSUtil + +/* + * This module implements the analysis described in the paper: + * Valentin Wustholz, Oswaldo Olivo, Marijn J. H. Heule, and Isil Dillig: + * Static Detection of DoS Vulnerabilities in + * Programs that use Regular Expressions + * (Extended Version). + * (https://arxiv.org/pdf/1701.04045.pdf) + * + * Theorem 3 from the paper describes the basic idea. + * + * The following explains the idea using variables and predicate names that are used in the implementation: + * We consider a pair of repetitions, which we will call `pivot` and `succ`. + * + * We create a product automaton of 3-tuples of states (see `StateTuple`). + * There exists a transition `(a,b,c) -> (d,e,f)` in the product automaton + * iff there exists three transitions in the NFA `a->d, b->e, c->f` where those three + * transitions all match a shared character `char`. (see `getAThreewayIntersect`) + * + * We start a search in the product automaton at `(pivot, pivot, succ)`, + * and search for a series of transitions (a `Trace`), such that we end + * at `(pivot, succ, succ)` (see `isReachableFromStartTuple`). + * + * For example, consider the regular expression `/^\d*5\w*$/`. + * The search will start at the tuple `(\d*, \d*, \w*)` and search + * for a path to `(\d*, \w*, \w*)`. + * This path exists, and consists of a single transition in the product automaton, + * where the three corresponding NFA edges all match the character `"5"`. + * + * The start-state in the NFA has an any-transition to itself, this allows us to + * flag regular expressions such as `/a*$/` - which does not have a start anchor - + * and can thus start matching anywhere. + * + * The implementation is not perfect. + * It has the same suffix detection issue as the `js/redos` query, which can cause false positives. + * It also doesn't find all transitions in the product automaton, which can cause false negatives. + */ + +/** + * An instantiaion of `ReDoSConfiguration` for superlinear ReDoS. + */ +class SuperLinearReDoSConfiguration extends ReDoSConfiguration { + SuperLinearReDoSConfiguration() { this = "SuperLinearReDoSConfiguration" } + + override predicate isReDoSCandidate(State state, string pump) { isPumpable(_, state, pump) } +} + +/** + * Gets any root (start) state of a regular expression. + */ +private State getRootState() { result = mkMatch(any(RegExpRoot r)) } + +private newtype TStateTuple = + MkStateTuple(State q1, State q2, State q3) { + // starts at (pivot, pivot, succ) + isStartLoops(q1, q3) and q1 = q2 + or + step(_, _, _, _, q1, q2, q3) and FeasibleTuple::isFeasibleTuple(q1, q2, q3) + } + +/** + * A state in the product automaton. + * The product automaton contains 3-tuples of states. + * + * We lazily only construct those states that we are actually + * going to need. + * Either a start state `(pivot, pivot, succ)`, or a state + * where there exists a transition from an already existing state. + * + * The exponential variant of this query (`js/redos`) uses an optimization + * trick where `q1 <= q2`. This trick cannot be used here as the order + * of the elements matter. + */ +class StateTuple extends TStateTuple { + State q1; + State q2; + State q3; + + StateTuple() { this = MkStateTuple(q1, q2, q3) } + + /** + * Gest a string repesentation of this tuple. + */ + string toString() { result = "(" + q1 + ", " + q2 + ", " + q3 + ")" } + + /** + * Holds if this tuple is `(r1, r2, r3)`. + */ + pragma[noinline] + predicate isTuple(State r1, State r2, State r3) { r1 = q1 and r2 = q2 and r3 = q3 } +} + +/** + * A module for determining feasible tuples for the product automaton. + * + * The implementation is split into many predicates for performance reasons. + */ +private module FeasibleTuple { + /** + * Holds if the tuple `(r1, r2, r3)` might be on path from a start-state to an end-state in the product automaton. + */ + pragma[inline] + predicate isFeasibleTuple(State r1, State r2, State r3) { + // The first element is either inside a repetition (or the start state itself) + isRepetitionOrStart(r1) and + // The last element is inside a repetition + stateInsideRepetition(r3) and + // The states are reachable in the NFA in the order r1 -> r2 -> r3 + delta+(r1) = r2 and + delta+(r2) = r3 and + // The first element can reach a beginning (the "pivot" state in a `(pivot, succ)` pair). + canReachABeginning(r1) and + // The last element can reach a target (the "succ" state in a `(pivot, succ)` pair). + canReachATarget(r3) + } + + /** + * Holds if `s` is either inside a repetition, or is the start state (which is a repetition). + */ + pragma[noinline] + private predicate isRepetitionOrStart(State s) { stateInsideRepetition(s) or s = getRootState() } + + /** + * Holds if state `s` might be inside a backtracking repetition. + */ + pragma[noinline] + private predicate stateInsideRepetition(State s) { + s.getRepr().getParent*() instanceof InfiniteRepetitionQuantifier + } + + /** + * Holds if there exists a path in the NFA from `s` to a "pivot" state + * (from a `(pivot, succ)` pair that starts the search). + */ + pragma[noinline] + private predicate canReachABeginning(State s) { + delta+(s) = any(State pivot | isStartLoops(pivot, _)) + } + + /** + * Holds if there exists a path in the NFA from `s` to a "succ" state + * (from a `(pivot, succ)` pair that starts the search). + */ + pragma[noinline] + private predicate canReachATarget(State s) { delta+(s) = any(State succ | isStartLoops(_, succ)) } +} + +/** + * Holds if `pivot` and `succ` are a pair of loops that could be the beginning of a quadratic blowup. + * + * There is a slight implementation difference compared to the paper: this predicate requires that `pivot != succ`. + * The case where `pivot = succ` causes exponential backtracking and is handled by the `js/redos` query. + */ +predicate isStartLoops(State pivot, State succ) { + pivot != succ and + succ.getRepr() instanceof InfiniteRepetitionQuantifier and + delta+(pivot) = succ and + ( + pivot.getRepr() instanceof InfiniteRepetitionQuantifier + or + pivot = mkMatch(any(RegExpRoot root)) + ) +} + +/** + * Gets a state for which there exists a transition in the NFA from `s'. + */ +State delta(State s) { delta(s, _, result) } + +/** + * Holds if there are transitions from the components of `q` to the corresponding + * components of `r` labelled with `s1`, `s2`, and `s3`, respectively. + */ +pragma[noinline] +predicate step(StateTuple q, InputSymbol s1, InputSymbol s2, InputSymbol s3, StateTuple r) { + exists(State r1, State r2, State r3 | + step(q, s1, s2, s3, r1, r2, r3) and r = MkStateTuple(r1, r2, r3) + ) +} + +/** + * Holds if there are transitions from the components of `q` to `r1`, `r2`, and `r3 + * labelled with `s1`, `s2`, and `s3`, respectively. + */ +pragma[noopt] +predicate step( + StateTuple q, InputSymbol s1, InputSymbol s2, InputSymbol s3, State r1, State r2, State r3 +) { + exists(State q1, State q2, State q3 | q.isTuple(q1, q2, q3) | + deltaClosed(q1, s1, r1) and + deltaClosed(q2, s2, r2) and + deltaClosed(q3, s3, r3) and + // use noopt to force the join on `getAThreewayIntersect` to happen last. + exists(getAThreewayIntersect(s1, s2, s3)) + ) +} + +/** + * Gets a char that is matched by all the edges `s1`, `s2`, and `s3`. + * + * The result is not complete, and might miss some combination of edges that share some character. + */ +pragma[noinline] +string getAThreewayIntersect(InputSymbol s1, InputSymbol s2, InputSymbol s3) { + result = minAndMaxIntersect(s1, s2) and result = [intersect(s2, s3), intersect(s1, s3)] + or + result = minAndMaxIntersect(s1, s3) and result = [intersect(s2, s3), intersect(s1, s2)] + or + result = minAndMaxIntersect(s2, s3) and result = [intersect(s1, s2), intersect(s1, s3)] +} + +/** + * Gets the minimum and maximum characters that intersect between `a` and `b`. + * This predicate is used to limit the size of `getAThreewayIntersect`. + */ +pragma[noinline] +string minAndMaxIntersect(InputSymbol a, InputSymbol b) { + result = [min(intersect(a, b)), max(intersect(a, b))] +} + +private newtype TTrace = + Nil() or + Step(InputSymbol s1, InputSymbol s2, InputSymbol s3, TTrace t) { + exists(StateTuple p | + isReachableFromStartTuple(_, _, p, t, _) and + step(p, s1, s2, s3, _) + ) + or + exists(State pivot, State succ | isStartLoops(pivot, succ) | + t = Nil() and step(MkStateTuple(pivot, pivot, succ), s1, s2, s3, _) + ) + } + +/** + * A list of tuples of input symbols that describe a path in the product automaton + * starting from some start state. + */ +class Trace extends TTrace { + /** + * Gets a string representation of this Trace that can be used for debug purposes. + */ + string toString() { + this = Nil() and result = "Nil()" + or + exists(InputSymbol s1, InputSymbol s2, InputSymbol s3, Trace t | this = Step(s1, s2, s3, t) | + result = "Step(" + s1 + ", " + s2 + ", " + s3 + ", " + t + ")" + ) + } +} + +/** + * Gets a string corresponding to the trace `t`. + */ +string concretise(Trace t) { + t = Nil() and result = "" + or + exists(InputSymbol s1, InputSymbol s2, InputSymbol s3, Trace rest | t = Step(s1, s2, s3, rest) | + result = concretise(rest) + getAThreewayIntersect(s1, s2, s3) + ) +} + +/** + * Holds if there exists a transition from `r` to `q` in the product automaton. + * Notice that the arguments are flipped, and thus the direction is backwards. + */ +pragma[noinline] +predicate tupleDeltaBackwards(StateTuple q, StateTuple r) { step(r, _, _, _, q) } + +/** + * Holds if `tuple` is an end state in our search. + * That means there exists a pair of loops `(pivot, succ)` such that `tuple = (pivot, succ, succ)`. + */ +predicate isEndTuple(StateTuple tuple) { tuple = getAnEndTuple(_, _) } + +/** + * Gets the minimum length of a path from `r` to some an end state `end`. + * + * The implementation searches backwards from the end-tuple. + * This approach was chosen because it is way more efficient if the first predicate given to `shortestDistances` is small. + * The `end` argument must always be an end state. + */ +int distBackFromEnd(StateTuple r, StateTuple end) = + shortestDistances(isEndTuple/1, tupleDeltaBackwards/2)(end, r, result) + +/** + * Holds if there exists a pair of repetitions `(pivot, succ)` in the regular expression such that: + * `tuple` is reachable from `(pivot, pivot, succ)` in the product automaton, + * and there is a distance of `dist` from `tuple` to the nearest end-tuple `(pivot, succ, succ)`, + * and a path from a start-state to `tuple` follows the transitions in `trace`. + */ +predicate isReachableFromStartTuple(State pivot, State succ, StateTuple tuple, Trace trace, int dist) { + // base case. The first step is inlined to start the search after all possible 1-steps, and not just the ones with the shortest path. + exists(InputSymbol s1, InputSymbol s2, InputSymbol s3, State q1, State q2, State q3 | + isStartLoops(pivot, succ) and + step(MkStateTuple(pivot, pivot, succ), s1, s2, s3, tuple) and + tuple = MkStateTuple(q1, q2, q3) and + trace = Step(s1, s2, s3, Nil()) and + dist = distBackFromEnd(tuple, MkStateTuple(pivot, succ, succ)) + ) + or + // recursive case + exists(StateTuple p, Trace v, InputSymbol s1, InputSymbol s2, InputSymbol s3 | + isReachableFromStartTuple(pivot, succ, p, v, dist + 1) and + dist = isReachableFromStartTupleHelper(pivot, succ, tuple, p, s1, s2, s3) and + trace = Step(s1, s2, s3, v) + ) +} + +/** + * Helper predicate for the recursive case in `isReachableFromStartTuple`. + */ +pragma[noinline] +private int isReachableFromStartTupleHelper( + State pivot, State succ, StateTuple r, StateTuple p, InputSymbol s1, InputSymbol s2, + InputSymbol s3 +) { + result = distBackFromEnd(r, MkStateTuple(pivot, succ, succ)) and + step(p, s1, s2, s3, r) +} + +/** + * Gets the tuple `(pivot, succ, succ)` from the product automaton. + */ +StateTuple getAnEndTuple(State pivot, State succ) { + isStartLoops(pivot, succ) and + result = MkStateTuple(pivot, succ, succ) +} + +/** + * Holds if matching repetitions of `pump` can: + * 1) Transition from `pivot` back to `pivot`. + * 2) Transition from `pivot` to `succ`. + * 3) Transition from `succ` to `succ`. + * + * From theorem 3 in the paper linked in the top of this file we can therefore conclude that + * the regular expression has polynomial backtracking - if a rejecting suffix exists. + * + * This predicate is used by `SuperLinearReDoSConfiguration`, and the final results are + * available in the `hasReDoSResult` predicate. + */ +predicate isPumpable(State pivot, State succ, string pump) { + exists(StateTuple q, Trace t | + isReachableFromStartTuple(pivot, succ, q, t, _) and + q = getAnEndTuple(pivot, succ) and + pump = concretise(t) + ) +} + +/** + * Holds if repetitions of `pump` at `t` will cause polynomial backtracking. + */ +predicate polynimalReDoS(RegExpTerm t, string pump, string prefixMsg, RegExpTerm prev) { + exists(State s, State pivot | + hasReDoSResult(t, pump, s, prefixMsg) and + isPumpable(pivot, s, _) and + prev = pivot.getRepr() + ) +} + +/** + * Gets a message for why `term` can cause polynomial backtracking. + */ +string getReasonString(RegExpTerm term, string pump, string prefixMsg, RegExpTerm prev) { + polynimalReDoS(term, pump, prefixMsg, prev) and + result = + "Strings " + prefixMsg + "with many repetitions of '" + pump + + "' can start matching anywhere after the start of the preceeding " + prev +} + +/** + * A term that may cause a regular expression engine to perform a + * polynomial number of match attempts, relative to the input length. + */ +class PolynomialBackTrackingTerm extends InfiniteRepetitionQuantifier { + string reason; + string pump; + string prefixMsg; + RegExpTerm prev; + + PolynomialBackTrackingTerm() { + reason = getReasonString(this, pump, prefixMsg, prev) and + // there might be many reasons for this term to have polynomial backtracking - we pick the shortest one. + reason = min(string msg | msg = getReasonString(this, _, _, _) | msg order by msg.length(), msg) + } + + /** + * Holds if all non-empty successors to the polynomial backtracking term matches the end of the line. + */ + predicate isAtEndLine() { + forall(RegExpTerm succ | this.getSuccessor+() = succ and not matchesEpsilon(succ) | + succ instanceof RegExpDollar + ) + } + + /** + * Gets the string that should be repeated to cause this regular expression to perform polynomially. + */ + string getPumpString() { result = pump } + + /** + * Gets a message for which prefix a matching string must start with for this term to cause polynomial backtracking. + */ + string getPrefixMessage() { result = prefixMsg } + + /** + * Gets a predecessor to `this`, which also loops on the pump string, and thereby causes polynomial backtracking. + */ + RegExpTerm getPreviousLoop() { result = prev } + + /** + * Gets the reason for the number of match attempts. + */ + string getReason() { result = reason } +} From 37240f01d267f659e6047affe87e52831aa34819 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 6 Dec 2021 11:59:38 +0000 Subject: [PATCH 0297/1618] Copy Redos queries from python Todo: Implement dataflow for polynomialredos; update docs to reference java rather than python --- .../CWE/CWE-730/PolynomialReDoS.qhelp | 108 ++++++++++++++++++ .../Security/CWE/CWE-730/PolynomialReDoS.ql | 34 ++++++ java/ql/src/Security/CWE/CWE-730/ReDoS.qhelp | 34 ++++++ java/ql/src/Security/CWE/CWE-730/ReDoS.ql | 25 ++++ .../CWE/CWE-730/ReDoSIntroduction.inc.qhelp | 54 +++++++++ .../CWE/CWE-730/ReDoSReferences.inc.qhelp | 16 +++ 6 files changed, 271 insertions(+) create mode 100644 java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.qhelp create mode 100644 java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql create mode 100644 java/ql/src/Security/CWE/CWE-730/ReDoS.qhelp create mode 100644 java/ql/src/Security/CWE/CWE-730/ReDoS.ql create mode 100644 java/ql/src/Security/CWE/CWE-730/ReDoSIntroduction.inc.qhelp create mode 100644 java/ql/src/Security/CWE/CWE-730/ReDoSReferences.inc.qhelp diff --git a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.qhelp b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.qhelp new file mode 100644 index 00000000000..fa8a3563d23 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.qhelp @@ -0,0 +1,108 @@ + + + + + + + +

    + + Consider this use of a regular expression, which removes + all leading and trailing whitespace in a string: + +

    + + + re.sub(r"^\s+|\s+$", "", text) # BAD + + +

    + + The sub-expression "\s+$" will match the + whitespace characters in text from left to right, but it + can start matching anywhere within a whitespace sequence. This is + problematic for strings that do not end with a whitespace + character. Such a string will force the regular expression engine to + process each whitespace sequence once per whitespace character in the + sequence. + +

    + +

    + + This ultimately means that the time cost of trimming a + string is quadratic in the length of the string. So a string like + "a b" will take milliseconds to process, but a similar + string with a million spaces instead of just one will take several + minutes. + +

    + +

    + + Avoid this problem by rewriting the regular expression to + not contain the ambiguity about when to start matching whitespace + sequences. For instance, by using a negative look-behind + (^\s+|(?<!\s)\s+$), or just by using the built-in strip + method (text.strip()). + +

    + +

    + + Note that the sub-expression "^\s+" is + not problematic as the ^ anchor restricts + when that sub-expression can start matching, and as the regular + expression engine matches from left to right. + +

    + +
    + + + +

    + + As a similar, but slightly subtler problem, consider the + regular expression that matches lines with numbers, possibly written + using scientific notation: +

    + + + ^0\.\d+E?\d+$ # BAD + + +

    + + The problem with this regular expression is in the + sub-expression \d+E?\d+ because the second + \d+ can start matching digits anywhere after the first + match of the first \d+ if there is no E in + the input string. + +

    + +

    + + This is problematic for strings that do not + end with a digit. Such a string will force the regular expression + engine to process each digit sequence once per digit in the sequence, + again leading to a quadratic time complexity. + +

    + +

    + + To make the processing faster, the regular expression + should be rewritten such that the two \d+ sub-expressions + do not have overlapping matches: ^0\.\d+(E\d+)?$. + +

    + +
    + + + +
    diff --git a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql new file mode 100644 index 00000000000..13d5bb8e8a6 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql @@ -0,0 +1,34 @@ +/** + * @name Polynomial regular expression used on uncontrolled data + * @description A regular expression that can require polynomial time + * to match may be vulnerable to denial-of-service attacks. + * @kind path-problem + * @problem.severity warning + * @precision high + * @id java/polynomial-redos + * @tags security + * external/cwe/cwe-730 + * external/cwe/cwe-400 + */ + +import java +import semmle.code.java.security.performance.SuperlinearBackTracking +import semmle.code.java.dataflow.DataFlow +// import semmle.python.security.dataflow.PolynomialReDoS +import DataFlow::PathGraph + +from + PolynomialReDoS::Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink, + PolynomialReDoS::Sink sinkNode, PolynomialBackTrackingTerm regexp +where + config.hasFlowPath(source, sink) and + sinkNode = sink.getNode() and + regexp.getRootTerm() = sinkNode.getRegExp() +// not ( +// source.getNode().(Source).getKind() = "url" and +// regexp.isAtEndLine() +// ) +select sinkNode.getHighlight(), source, sink, + "This $@ that depends on $@ may run slow on strings " + regexp.getPrefixMessage() + + "with many repetitions of '" + regexp.getPumpString() + "'.", regexp, "regular expression", + source.getNode(), "a user-provided value" diff --git a/java/ql/src/Security/CWE/CWE-730/ReDoS.qhelp b/java/ql/src/Security/CWE/CWE-730/ReDoS.qhelp new file mode 100644 index 00000000000..9cfbcc32354 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-730/ReDoS.qhelp @@ -0,0 +1,34 @@ + + + + + + + +

    + Consider this regular expression: +

    + + ^_(__|.)+_$ + +

    + Its sub-expression "(__|.)+?" can match the string "__" either by the + first alternative "__" to the left of the "|" operator, or by two + repetitions of the second alternative "." to the right. Thus, a string consisting + of an odd number of underscores followed by some other character will cause the regular + expression engine to run for an exponential amount of time before rejecting the input. +

    +

    + This problem can be avoided by rewriting the regular expression to remove the ambiguity between + the two branches of the alternative inside the repetition: +

    + + ^_(__|[^_])+_$ + +
    + + + +
    diff --git a/java/ql/src/Security/CWE/CWE-730/ReDoS.ql b/java/ql/src/Security/CWE/CWE-730/ReDoS.ql new file mode 100644 index 00000000000..f72bfc3fc13 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-730/ReDoS.ql @@ -0,0 +1,25 @@ +/** + * @name Inefficient regular expression + * @description A regular expression that requires exponential time to match certain inputs + * can be a performance bottleneck, and may be vulnerable to denial-of-service + * attacks. + * @kind problem + * @problem.severity error + * @precision high + * @id java/redos + * @tags security + * external/cwe/cwe-730 + * external/cwe/cwe-400 + */ + +import java +import semmle.code.java.security.performance.ExponentialBackTracking + +from RegExpTerm t, string pump, State s, string prefixMsg +where + hasReDoSResult(t, pump, s, prefixMsg) and + // exclude verbose mode regexes for now + not t.getRegex().getAMode() = "VERBOSE" +select t, + "This part of the regular expression may cause exponential backtracking on strings " + prefixMsg + + "containing many repetitions of '" + pump + "'." diff --git a/java/ql/src/Security/CWE/CWE-730/ReDoSIntroduction.inc.qhelp b/java/ql/src/Security/CWE/CWE-730/ReDoSIntroduction.inc.qhelp new file mode 100644 index 00000000000..f533097c222 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-730/ReDoSIntroduction.inc.qhelp @@ -0,0 +1,54 @@ + + + +

    + + Some regular expressions take a long time to match certain + input strings to the point where the time it takes to match a string + of length n is proportional to nk or even + 2n. Such regular expressions can negatively affect + performance, or even allow a malicious user to perform a Denial of + Service ("DoS") attack by crafting an expensive input string for the + regular expression to match. + +

    + +

    + + The regular expression engine provided by Python uses a backtracking non-deterministic finite + automata to implement regular expression matching. While this approach + is space-efficient and allows supporting advanced features like + capture groups, it is not time-efficient in general. The worst-case + time complexity of such an automaton can be polynomial or even + exponential, meaning that for strings of a certain shape, increasing + the input length by ten characters may make the automaton about 1000 + times slower. + +

    + +

    + + Typically, a regular expression is affected by this + problem if it contains a repetition of the form r* or + r+ where the sub-expression r is ambiguous + in the sense that it can match some string in multiple ways. More + information about the precise circumstances can be found in the + references. + +

    +
    + + + +

    + + Modify the regular expression to remove the ambiguity, or + ensure that the strings matched with the regular expression are short + enough that the time-complexity does not matter. + +

    + +
    +
    diff --git a/java/ql/src/Security/CWE/CWE-730/ReDoSReferences.inc.qhelp b/java/ql/src/Security/CWE/CWE-730/ReDoSReferences.inc.qhelp new file mode 100644 index 00000000000..2b3e5f17c62 --- /dev/null +++ b/java/ql/src/Security/CWE/CWE-730/ReDoSReferences.inc.qhelp @@ -0,0 +1,16 @@ + + + +
  • + OWASP: + Regular expression Denial of Service - ReDoS. +
  • +
  • Wikipedia: ReDoS.
  • +
  • Wikipedia: Time complexity.
  • +
  • James Kirrage, Asiri Rathnayake, Hayo Thielecke: + Static Analysis for Regular Expression Denial-of-Service Attack. +
  • +
    +
    From 59945cd8b3e6d29d1500e8c729c770be57d0f7f1 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 7 Dec 2021 12:33:52 +0000 Subject: [PATCH 0298/1618] Add dataflow logic to PolynomialRedDoS --- .../code/java/dataflow/ExternalFlow.qll | 2 +- .../code/java/regex/RegexFlowConfigs.qll | 192 ++++++++++++++++++ .../{RegexFlow.qll => RegexFlowModels.qll} | 14 +- java/ql/lib/semmle/code/java/regex/regex.qll | 20 +- .../Security/CWE/CWE-730/PolynomialReDoS.ql | 30 ++- 5 files changed, 223 insertions(+), 35 deletions(-) create mode 100644 java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll rename java/ql/lib/semmle/code/java/regex/{RegexFlow.qll => RegexFlowModels.qll} (82%) diff --git a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll index 6d14dc5f95c..77e2d98c654 100644 --- a/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/ExternalFlow.qll @@ -140,7 +140,7 @@ private module Frameworks { private import semmle.code.java.frameworks.jOOQ private import semmle.code.java.frameworks.JMS private import semmle.code.java.frameworks.RabbitMQ - private import semmle.code.java.regex.RegexFlow + private import semmle.code.java.regex.RegexFlowModels } private predicate sourceModelCsv(string row) { diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll new file mode 100644 index 00000000000..9769a7ce8f7 --- /dev/null +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -0,0 +1,192 @@ +/** + * Defines configurations and steps for handling regexes + */ + +import java +private import semmle.code.java.dataflow.DataFlow +private import semmle.code.java.dataflow.DataFlow2 +private import semmle.code.java.dataflow.DataFlow3 +private import RegexFlowModels + +private class RegexCompileFlowConf extends DataFlow2::Configuration { + RegexCompileFlowConf() { this = "RegexCompileFlowConfig" } + + override predicate isSource(DataFlow::Node node) { node.asExpr() instanceof StringLiteral } + + override predicate isSink(DataFlow::Node node) { sinkNode(node, "regex-compile") } +} + +/** + * Holds if `s` is used as a regex, with the mode `mode` (if known). + * If regex mode is not known, `mode` will be `"None"`. + */ +predicate used_as_regex(Expr s, string mode) { + any(RegexCompileFlowConf c).hasFlow(DataFlow2::exprNode(s), _) and + mode = "None" // TODO: proper mode detection +} + +/** + * A method access that can match a regex against a string + */ +abstract class RegexMatchMethodAccess extends MethodAccess { + string package; + string type; + string name; + int regexArg; + int stringArg; + Method m; + + RegexMatchMethodAccess() { + this.getMethod().overrides*(m) and + m.hasQualifiedName(package, type, name) and + regexArg in [-1 .. m.getNumberOfParameters() - 1] and + stringArg in [-1 .. m.getNumberOfParameters() - 1] + } + + /** Gets the argument of this call that the regex to be matched against flows into */ + Expr getRegexArg() { result = argOf(this, regexArg) } + + /** Gets the argument of this call that the */ + Expr getStringArg() { result = argOf(this, stringArg) } +} + +private Expr argOf(MethodAccess ma, int arg) { + arg = -1 and result = ma.getQualifier() + or + result = ma.getArgument(arg) +} + +/** + * A unit class for adding additional regex flow steps. + * + * Extend this class to add additional flow steps that should apply to regex flow configurations. + */ +class RegexAdditionalFlowStep extends Unit { + /** + * Holds if the step from `node1` to `node2` should be considered a flow + * step for regex flow configurations. + */ + abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); +} + +// TODO: can this be done with the models-as-data framework? +private class JdkRegexMatchMethodAccess extends RegexMatchMethodAccess { + JdkRegexMatchMethodAccess() { + package = "java.util.regex" and + type = "Pattern" and + ( + name = "matcher" and regexArg = -1 and stringArg = 0 + or + name = "matches" and regexArg = 0 and stringArg = 1 + or + name = "split" and regexArg = 0 and stringArg = 1 + or + name = "splitAsStream" and regexArg = 0 and stringArg = 1 + ) + or + package = "java.lang" and + type = "String" and + name = ["matches", "split"] and + regexArg = 0 and + stringArg = -1 + or + package = "java.util" and + type = "Predicate" and + name = "test" and + regexArg = -1 and + stringArg = 0 + } +} + +private class JdkRegexFlowStep extends RegexAdditionalFlowStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma, Method m, string package, string type, string name, int arg | + ma.getMethod().overrides*(m) and + m.hasQualifiedName(package, type, name) and + node1.asExpr() = argOf(ma, arg) and + node2.asExpr() = ma + | + package = "java.util.regex" and + type = "Pattern" and + ( + name = ["asMatchPredicate", "asPredicate"] and + arg = -1 + or + name = "compile" and + arg = 0 + ) + or + package = "java.util" and + type = "Predicate" and + name = ["and", "or", "not", "negate"] and + arg = [-1, 0] + ) + } +} + +private class GuavaRegexMatchMethodAccess extends RegexMatchMethodAccess { + GuavaRegexMatchMethodAccess() { + package = "com.google.common.collect" and + regexArg = -1 and + stringArg = 0 and + type = ["Splitter", "Splitter$MapSplitter"] and + name = ["split", "splitToList"] + } +} + +private class GuavaRegexFlowStep extends RegexAdditionalFlowStep { + override predicate step(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma, Method m, string package, string type, string name, int arg | + ma.getMethod().overrides*(m) and + m.hasQualifiedName(package, type, name) and + node1.asExpr() = argOf(ma, arg) and + node2.asExpr() = ma + | + package = "com.google.common.base" and + type = "Splitter" and + ( + name = "on" and + m.getParameterType(0).(RefType).hasQualifiedName("java.util.regex", "Pattern") and + arg = 0 + or + name = "withKeyValueSeparator" and + m.getParameterType(0).(RefType).hasQualifiedName("com.google.common.base", "Splitter") and + arg = 0 + or + name = "onPattern" and + arg = 0 + or + name = ["limit", "omitEmptyStrings", "trimResults", "withKeyValueSeparator"] and + arg = -1 + ) + ) + } +} + +private class RegexMatchFlowConf extends DataFlow2::Configuration { + RegexMatchFlowConf() { this = "RegexMatchFlowConf" } + + override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof StringLiteral } + + override predicate isSink(DataFlow::Node sink) { + exists(RegexMatchMethodAccess ma | sink.asExpr() = ma.getRegexArg()) + } + + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + any(RegexAdditionalFlowStep s).step(node1, node2) + } +} + +/** + * Holds if the string literal `regex` is matched against the expression `str`. + */ +predicate regex_match(StringLiteral regex, Expr str) { + exists( + DataFlow::Node src, DataFlow::Node sink, RegexMatchMethodAccess ma, RegexMatchFlowConf conf + | + src.asExpr() = regex and + sink.asExpr() = ma.getRegexArg() and + conf.hasFlow(src, sink) and + str = ma.getStringArg() + ) +} diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlow.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll similarity index 82% rename from java/ql/lib/semmle/code/java/regex/RegexFlow.qll rename to java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll index 54b16ae8a4b..65ff6199088 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlow.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll @@ -6,13 +6,13 @@ private class RegexSinkCsv extends SinkModelCsv { row = [ //"namespace;type;subtypes;name;signature;ext;input;kind" - "java.util.regex;Pattern;false;compile;(String);;Argument[0];regex-use", - "java.util.regex;Pattern;false;compile;(String,int);;Argument[0];regex-use", - "java.util.regex;Pattern;false;matches;(String,CharSequence);;Argument[0];regex-use", - "java.util;String;false;matches;(String);;Argument[0];regex-use", - "java.util;String;false;split;(String);;Argument[0];regex-use", - "java.util;String;false;split;(String,int);;Argument[0];regex-use", - "com.google.common.base;Splitter;false;onPattern;(String);;Argument[0];regex-use" + "java.util.regex;Pattern;false;compile;(String);;Argument[0];regex-compile", + "java.util.regex;Pattern;false;compile;(String,int);;Argument[0];regex-compile", + "java.util.regex;Pattern;false;matches;(String,CharSequence);;Argument[0];regex-compile", + "java.util;String;false;matches;(String);;Argument[0];regex-compile", + "java.util;String;false;split;(String);;Argument[0];regex-compile", + "java.util;String;false;split;(String,int);;Argument[0];regex-compile", + "com.google.common.base;Splitter;false;onPattern;(String);;Argument[0];regex-compile" ] } } diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 5dae7020fd9..4ad795cdd39 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -1,23 +1,5 @@ import java -import semmle.code.java.dataflow.DataFlow2 -import semmle.code.java.dataflow.ExternalFlow - -class RegexFlowConf extends DataFlow2::Configuration { - RegexFlowConf() { this = "RegexFlowConf" } - - override predicate isSource(DataFlow2::Node node) { node.asExpr() instanceof StringLiteral } - - override predicate isSink(DataFlow2::Node node) { sinkNode(node, "regex-use") } -} - -/** - * Holds if `s` is used as a regex, with the mode `mode` (if known). - * If regex mode is not known, `mode` will be `"None"`. - */ -predicate used_as_regex(Expr s, string mode) { - any(RegexFlowConf c).hasFlow(DataFlow2::exprNode(s), _) and - mode = "None" // TODO: proper mode detection -} +private import RegexFlowConfigs /** * A string literal that is used as a regular exprssion. diff --git a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql index 13d5bb8e8a6..40bc4845a7c 100644 --- a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql +++ b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql @@ -14,21 +14,35 @@ import java import semmle.code.java.security.performance.SuperlinearBackTracking import semmle.code.java.dataflow.DataFlow -// import semmle.python.security.dataflow.PolynomialReDoS +import semmle.code.java.regex.RegexTreeView +import semmle.code.java.regex.RegexFlowConfigs +import semmle.code.java.dataflow.FlowSources import DataFlow::PathGraph +class PolynomialRedosSink extends DataFlow::Node { + RegExpLiteral reg; + + PolynomialRedosSink() { regex_match(reg.getRegex(), this.asExpr()) } + + RegExpTerm getRegExp() { result = reg } +} + +class PolynomialRedosConfig extends DataFlow::Configuration { + PolynomialRedosConfig() { this = "PolynomialRodisConfig" } + + override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof PolynomialRedosSink } +} + from - PolynomialReDoS::Configuration config, DataFlow::PathNode source, DataFlow::PathNode sink, - PolynomialReDoS::Sink sinkNode, PolynomialBackTrackingTerm regexp + PolynomialRedosConfig config, DataFlow::PathNode source, DataFlow::PathNode sink, + PolynomialRedosSink sinkNode, PolynomialBackTrackingTerm regexp where config.hasFlowPath(source, sink) and sinkNode = sink.getNode() and regexp.getRootTerm() = sinkNode.getRegExp() -// not ( -// source.getNode().(Source).getKind() = "url" and -// regexp.isAtEndLine() -// ) -select sinkNode.getHighlight(), source, sink, +select sinkNode, source, sink, "This $@ that depends on $@ may run slow on strings " + regexp.getPrefixMessage() + "with many repetitions of '" + regexp.getPumpString() + "'.", regexp, "regular expression", source.getNode(), "a user-provided value" From d04c99b0beba80bbfb70a24adbb5550eb7fc3ca7 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 13 Jan 2022 14:15:06 +0000 Subject: [PATCH 0299/1618] Support quote sequences --- .../semmle/code/java/regex/RegexTreeView.qll | 35 +++++++++- java/ql/lib/semmle/code/java/regex/regex.qll | 65 ++++++++++++++++++- 2 files changed, 94 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index 1b6013b26a0..89242eea4d6 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -40,6 +40,8 @@ newtype TRegExpParent = TRegExpSpecialChar(Regex re, int start, int end) { re.specialCharacter(start, end, _) } or /** A normal character */ TRegExpNormalChar(Regex re, int start, int end) { re.normalCharacter(start, end) } or + /** A quoted sequence */ + TRegExpQuote(Regex re, int start, int end) { re.quote(start, end) } or /** A back reference */ TRegExpBackRef(Regex re, int start, int end) { re.backreference(start, end) } @@ -107,6 +109,8 @@ class RegExpTerm extends RegExpParent { or this = TRegExpNormalChar(re, start, end) or + this = TRegExpQuote(re, start, end) + or this = TRegExpGroup(re, start, end) or this = TRegExpQuantifier(re, start, end) @@ -675,9 +679,34 @@ class RegExpNormalChar extends RegExpTerm, TRegExpNormalChar { override string getPrimaryQLClass() { result = "RegExpNormalChar" } } +/** + * A quoted sequence. + * + * Example: + * ``` + * \Qabc\E + * ``` + */ +class RegExpQuote extends RegExpTerm, TRegExpQuote { + string value; + + RegExpQuote() { + exists(int inner_start, int inner_end | + this = TRegExpQuote(re, start, end) and + re.quote(start, end, inner_start, inner_end) and + value = re.getText().substring(inner_start, inner_end) + ) + } + + /** Gets the string matched by this quote term. */ + string getValue() { result = value } + + override string getPrimaryQLClass() { result = "RegExpQuote" } +} + /** * A constant regular expression term, that is, a regular expression - * term matching a single string. Currently, this will always be a single character. + * term matching a single string. This can be a single character or a quoted sequence. * * Example: * @@ -689,14 +718,14 @@ class RegExpConstant extends RegExpTerm { string value; RegExpConstant() { - this = TRegExpNormalChar(re, start, end) and + (this = TRegExpNormalChar(re, start, end) or this = TRegExpQuote(re, start, end)) and not this instanceof RegExpCharacterClassEscape and // exclude chars in qualifiers // TODO: push this into regex library not exists(int qstart, int qend | re.qualifiedPart(_, qstart, qend, _, _) | qstart <= start and end <= qend ) and - value = this.(RegExpNormalChar).getValue() + (value = this.(RegExpNormalChar).getValue() or value = this.(RegExpQuote).getValue()) } /** diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 4ad795cdd39..185a4981b00 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -189,13 +189,17 @@ abstract class RegexString extends Expr { } /** Holds if the character at `pos` is a "\" that is actually escaping what comes after. */ - predicate escapingChar(int pos) { this.escaping(pos) = true } + predicate escapingChar(int pos) { + this.escaping(pos) = true and + not exists(int x, int y | this.quote(x, y) and pos in [x .. y - 1]) + } /** * Helper predicate for `escapingChar`. * In order to avoid negative recusrion, we return a boolean. * This way, we can refer to `escaping(pos - 1).booleanNot()` * rather than to a negated version of `escaping(pos)`. + * Does not take into account escape characters inside quote sequences. */ private boolean escaping(int pos) { pos = -1 and result = false @@ -205,6 +209,53 @@ abstract class RegexString extends Expr { this.getChar(pos) != "\\" and result = false } + /** + * Helper predicate for `quoteSequence`. + * Holds if the char at `pos` could be the beginning of a quote delimiter, i.e. `\Q` (non-escaped) or `\E` (escaping not checked, as quote sequences turn off escapes). + * Result is `true` for `\Q` and `false` for `\E`. + */ + private boolean quote_delimiter(int pos) { + result = true and + this.escaping(pos) = true and + this.getChar(pos + 1) = "Q" + or + result = false and + this.getChar(pos) = "\\" and + this.getChar(pos + 1) = "E" + } + + /** + * Helper predicate for `quoteSequence`. + * Holds if the char at `pos` is the one-based `index`th occourence of a quote delimiter (`\Q` or `\E`) + * Result is `true` for `\Q` and `false` for `\E`. + */ + private boolean quote_delimiter(int index, int pos) { + result = this.quote_delimiter(pos) and + pos = rank[index](int p | this.quote_delimiter(p) = [true, false]) + } + + /** Holds if a quoted sequence is found between `start` and `end` */ + predicate quote(int start, int end) { this.quote(start, end, _, _) } + + /** Holds if a quoted sequence is fund between `start` and `end`, with ontent found between `inner_start` and `inner_end`. */ + predicate quote(int start, int end, int inner_start, int inner_end) { + exists(int index | + this.quote_delimiter(index, start) = true and + ( + index = 1 + or + this.quote_delimiter(index - 1, _) = false + ) and + inner_start = start + 2 and + inner_end = end - 2 and + inner_end > inner_start and + this.quote_delimiter(inner_end) = false and + not exists(int mid | + this.quote_delimiter(mid) = false and mid in [inner_start .. inner_end - 1] + ) + ) + } + /** Gets the text of this regex */ string getText() { result = this.(StringLiteral).getValue() } @@ -212,7 +263,8 @@ abstract class RegexString extends Expr { string nonEscapedCharAt(int i) { result = this.getText().charAt(i) and - not exists(int x, int y | this.escapedCharacter(x, y) and i in [x .. y - 1]) + not exists(int x, int y | this.escapedCharacter(x, y) and i in [x .. y - 1]) and + not exists(int x, int y | this.quote(x, y) and i in [x .. y - 1]) } private predicate isOptionDivider(int i) { this.nonEscapedCharAt(i) = "|" } @@ -728,7 +780,8 @@ abstract class RegexString extends Expr { this.character(start, _) or this.isGroupStart(start) or this.charSet(start, _) or - this.backreference(start, _) + this.backreference(start, _) or + this.quote(start, _) } private predicate item_end(int end) { @@ -739,6 +792,8 @@ abstract class RegexString extends Expr { this.charSet(_, end) or this.qualifier(_, end, _, _) + or + this.quote(_, end) } private predicate top_level(int start, int end) { @@ -846,6 +901,8 @@ abstract class RegexString extends Expr { this.qualifiedItem(start, end, _, _) or this.charSet(start, end) + or + this.quote(start, end) ) and this.firstPart(start, end) } @@ -861,6 +918,8 @@ abstract class RegexString extends Expr { this.qualifiedItem(start, end, _, _) or this.charSet(start, end) + or + this.quote(start, end) ) and this.lastPart(start, end) } From 7530902ad70bf76e78f335d3858a01c1dea6fa5d Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 19 Jan 2022 11:43:46 +0000 Subject: [PATCH 0300/1618] Add approximate support for nested character classes. This shouldn't fail to parse on any correctly formed character class; but may give incorrect contents when nested classes are involved. --- java/ql/lib/semmle/code/java/regex/regex.qll | 126 +++++++------------ 1 file changed, 45 insertions(+), 81 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 185a4981b00..71b2cc7369e 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -3,87 +3,13 @@ private import RegexFlowConfigs /** * A string literal that is used as a regular exprssion. - * TODO: adjust parser for java regex syntax */ abstract class RegexString extends Expr { RegexString() { this instanceof StringLiteral } - /** - * Helper predicate for `char_set_start(int start, int end)`. - * - * In order to identify left brackets ('[') which actually start a character class, - * we perform a left to right scan of the string. - * - * To avoid negative recursion we return a boolean. See `escaping`, - * the helper for `escapingChar`, for a clean use of this pattern. - * - * result is true for those start chars that actually mark a start of a char set. - */ - boolean char_set_start(int pos) { - exists(int index | - // is opening bracket - this.char_set_delimiter(index, pos) = true and - ( - // if this is the first bracket, `pos` starts a char set - index = 1 and result = true - or - // if the previous char set delimiter was not a closing bracket, `pos` does - // not start a char set. This is needed to handle cases such as `[[]` (a - // char set that matches the `[` char) - index > 1 and - not this.char_set_delimiter(index - 1, _) = false and - result = false - or - // special handling of cases such as `[][]` (the character-set of the characters `]` and `[`). - exists(int prev_closing_bracket_pos | - // previous bracket is a closing bracket - this.char_set_delimiter(index - 1, prev_closing_bracket_pos) = false and - if - // check if the character that comes before the previous closing bracket - // is an opening bracket (taking `^` into account) - exists(int pos_before_prev_closing_bracket | - if this.getChar(prev_closing_bracket_pos - 1) = "^" - then pos_before_prev_closing_bracket = prev_closing_bracket_pos - 2 - else pos_before_prev_closing_bracket = prev_closing_bracket_pos - 1 - | - this.char_set_delimiter(index - 2, pos_before_prev_closing_bracket) = true - ) - then - // brackets without anything in between is not valid character ranges, so - // the first closing bracket in `[]]` and `[^]]` does not count, - // - // and we should _not_ mark the second opening bracket in `[][]` and `[^][]` - // as starting a new char set. ^ ^ - exists(int pos_before_prev_closing_bracket | - this.char_set_delimiter(index - 2, pos_before_prev_closing_bracket) = true - | - result = this.char_set_start(pos_before_prev_closing_bracket).booleanNot() - ) - else - // if not, `pos` does in fact mark a real start of a character range - result = true - ) - ) - ) - } - - /** - * Helper predicate for chars that could be character-set delimiters. - * Holds if the (non-escaped) char at `pos` in the string, is the (one-based) `index` occurrence of a bracket (`[` or `]`) in the string. - * Result if `true` is the char is `[`, and `false` if the char is `]`. - */ - boolean char_set_delimiter(int index, int pos) { - pos = rank[index](int p | this.nonEscapedCharAt(p) = "[" or this.nonEscapedCharAt(p) = "]") and - ( - this.nonEscapedCharAt(pos) = "[" and result = true - or - this.nonEscapedCharAt(pos) = "]" and result = false - ) - } - - /** Hold is a character set starts between `start` and `end`. */ - predicate char_set_start(int start, int end) { - this.char_set_start(start) = true and + /** Holds if a character set starts between `start` and `end`. */ + private predicate char_set_start0(int start, int end) { + this.nonEscapedCharAt(start) = "[" and ( this.getChar(start + 1) = "^" and end = start + 2 or @@ -91,7 +17,41 @@ abstract class RegexString extends Expr { ) } - /** Whether there is a character class, between start (inclusive) and end (exclusive) */ + /** Holds if the character at `pos` marks the end of a character class. */ + private predicate char_set_end0(int pos) { + this.nonEscapedCharAt(pos) = "]" and + /* special case: `[]]` and `[^]]` are valid char classes. */ + not char_set_start0(_, pos - 1) + } + + /** + * Gets the nesting depth of charcter classes at position `pos` + */ + private int char_set_depth(int pos) { + exists(this.getChar(pos)) and + result = + count(int i | i < pos and this.char_set_start0(i, _)) - + count(int i | i < pos and this.char_set_end0(i)) + } + + /** Hold if a top-level character set starts between `start` and `end`. */ + predicate char_set_start(int start, int end) { + this.char_set_start0(start, end) and + this.char_set_depth(start) = 0 + } + + /** Holds if a top-level character set ends at `pos`. */ + predicate char_set_end(int pos) { + this.char_set_end0(pos) and + this.char_set_depth(pos) = 1 + } + + /** + * Whether there is a top-level character class, between start (inclusive) and end (exclusive) + * + * For now, nested character classes are approximated by only considering the top-level class for parsing. + * This leads to very similar results for ReDoS queries. + */ predicate charSet(int start, int end) { exists(int inner_start, int inner_end | this.char_set_start(start, inner_start) and @@ -99,8 +59,8 @@ abstract class RegexString extends Expr { | end = inner_end + 1 and inner_end > inner_start and - this.nonEscapedCharAt(inner_end) = "]" and - not exists(int mid | this.nonEscapedCharAt(mid) = "]" | mid > inner_start and mid < inner_end) + this.char_set_end(inner_end) and + not exists(int mid | char_set_end(mid) | mid > inner_start and mid < inner_end) ) } @@ -118,6 +78,8 @@ abstract class RegexString extends Expr { this.escapedCharacter(start, end) or exists(this.nonEscapedCharAt(start)) and end = start + 1 + or + this.quote(start, end) ) or this.char_set_token(charset_start, _, start) and @@ -126,7 +88,9 @@ abstract class RegexString extends Expr { or exists(this.nonEscapedCharAt(start)) and end = start + 1 and - not this.getChar(start) = "]" + not this.char_set_end(start) + or + this.quote(start, end) ) } From 11e465f2acb63c823039f877d7df78597f3e6c8f Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 19 Jan 2022 16:57:23 +0000 Subject: [PATCH 0301/1618] Implement remaining syntax differences --- .../semmle/code/java/regex/RegexTreeView.qll | 10 +- java/ql/lib/semmle/code/java/regex/regex.qll | 95 ++++++++++++------- 2 files changed, 70 insertions(+), 35 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index 89242eea4d6..5603ad82108 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -472,6 +472,7 @@ class RegExpEscape extends RegExpNormalChar { this.getUnescaped() = "t" and result = "\t" or // TODO: Find a way to include a formfeed character + // also the alert/bell character for \a and escape character for \e. // this.getUnescaped() = "f" and result = " " // or this.isUnicode() and @@ -479,7 +480,7 @@ class RegExpEscape extends RegExpNormalChar { } /** Holds if this terms name is given by the part following the escape character. */ - predicate isIdentityEscape() { not this.getUnescaped() in ["n", "r", "t", "f"] } + predicate isIdentityEscape() { not this.getUnescaped() in ["n", "r", "t", "f", "a", "e"] } override string getPrimaryQLClass() { result = "RegExpEscape" } @@ -494,7 +495,7 @@ class RegExpEscape extends RegExpNormalChar { /** * Holds if this is a unicode escape. */ - private predicate isUnicode() { this.getText().prefix(2) = ["\\u", "\\U"] } + private predicate isUnicode() { this.getText().prefix(2) = "\\u" } /** * Gets the unicode char for this escape. @@ -551,7 +552,10 @@ private int toHex(string hex) { * ``` */ class RegExpCharacterClassEscape extends RegExpEscape { - RegExpCharacterClassEscape() { this.getValue() in ["d", "D", "s", "S", "w", "W"] } + RegExpCharacterClassEscape() { + this.getValue() in ["d", "D", "s", "S", "w", "W", "h", "H", "v", "V"] or + this.getValue().charAt(0) in ["p", "P"] + } override RegExpTerm getChild(int i) { none() } diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 71b2cc7369e..f3d96d828b9 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -30,8 +30,12 @@ abstract class RegexString extends Expr { private int char_set_depth(int pos) { exists(this.getChar(pos)) and result = - count(int i | i < pos and this.char_set_start0(i, _)) - - count(int i | i < pos and this.char_set_end0(i)) + max(int j | + j = 0 or + j = + count(int i | i < pos and this.char_set_start0(i, _)) - + count(int i | i < pos and this.char_set_end0(i)) + ) } /** Hold if a top-level character set starts between `start` and `end`. */ @@ -168,7 +172,12 @@ abstract class RegexString extends Expr { private boolean escaping(int pos) { pos = -1 and result = false or - this.getChar(pos) = "\\" and result = this.escaping(pos - 1).booleanNot() + this.getChar(pos) = "\\" and + ( + if this.getChar(pos - 1) = "c" // in `\c\`, the latter `\` isn't escaping + then result = this.escaping(pos - 2).booleanNot() + else result = this.escaping(pos - 1).booleanNot() + ) or this.getChar(pos) != "\\" and result = false } @@ -220,6 +229,16 @@ abstract class RegexString extends Expr { ) } + /** + * A control sequence, `\cx` + * `x` may be any ascii character including special characters. + */ + predicate controlEscape(int start, int end) { + this.escapingChar(start) and + this.getChar(start + 1) = "c" and + end = start + 3 + } + /** Gets the text of this regex */ string getText() { result = this.(StringLiteral).getValue() } @@ -228,7 +247,8 @@ abstract class RegexString extends Expr { string nonEscapedCharAt(int i) { result = this.getText().charAt(i) and not exists(int x, int y | this.escapedCharacter(x, y) and i in [x .. y - 1]) and - not exists(int x, int y | this.quote(x, y) and i in [x .. y - 1]) + not exists(int x, int y | this.quote(x, y) and i in [x .. y - 1]) and + not exists(int x, int y | this.controlEscape(x, y) and i in [x .. y - 1]) } private predicate isOptionDivider(int i) { this.nonEscapedCharAt(i) = "|" } @@ -246,10 +266,10 @@ abstract class RegexString extends Expr { ) } - /** Named unicode characters, eg \N{degree sign} */ - private predicate escapedName(int start, int end) { + /** An escape sequence that includes braces, such as named characters (\N{degree sign}), named classes (\p{Lower}), or hex values (\x{h..h}) */ + private predicate escapedBraces(int start, int end) { this.escapingChar(start) and - this.getChar(start + 1) = "N" and + this.getChar(start + 1) = ["N", "p", "P", "x"] and this.getChar(start + 2) = "{" and this.getChar(end - 1) = "}" and end > start and @@ -266,26 +286,38 @@ abstract class RegexString extends Expr { not this.numbered_backreference(start, _, _) and ( // hex value \xhh - this.getChar(start + 1) = "x" and end = start + 4 + this.getChar(start + 1) = "x" and + this.getChar(start + 2) != "{" and + end = start + 4 or - // octal value \o, \oo, or \ooo - end in [start + 2 .. start + 4] and + // octal value \0o, \0oo, or \0ooo. Max of 0377. + this.getChar(start + 1) = "0" and + end in [start + 3 .. start + 5] and forall(int i | i in [start + 1 .. end - 1] | this.isOctal(i)) and + (end = start + 5 implies this.getChar(start + 2) <= "3") and not ( - end < start + 4 and - this.isOctal(end) + end < start + 5 and + this.isOctal(end) and + (end = start + 4 implies this.getChar(start + 2) <= "3") ) or // 16-bit hex value \uhhhh this.getChar(start + 1) = "u" and end = start + 6 or - // 32-bit hex value \Uhhhhhhhh - this.getChar(start + 1) = "U" and end = start + 10 + escapedBraces(start, end) or - escapedName(start, end) + // Boundry matchers \b, \b{g} + this.getChar(start + 1) = "b" and + ( + if this.getText().substring(start + 2, start + 5) = "{g}" + then end = start + 5 + else end = start + 2 + ) + or + this.controlEscape(start, end) or // escape not handled above, update when adding a new case - not this.getChar(start + 1) in ["x", "u", "U", "N"] and + not this.getChar(start + 1) in ["x", "0", "u", "p", "P", "N", "b", "c"] and not exists(this.getChar(start + 1).toInt()) and end = start + 2 ) @@ -370,7 +402,7 @@ abstract class RegexString extends Expr { this.group(start, end) and exists(int name_end | this.named_group_start(start, name_end) and - result = this.getText().substring(start + 4, name_end - 1) + result = this.getText().substring(start + 3, name_end - 1) ) } @@ -464,7 +496,7 @@ abstract class RegexString extends Expr { or this.negative_lookbehind_assertion_start(start, end) or - this.comment_group_start(start, end) + this.atomic_group_start(start, end) or this.simple_group_start(start, end) } @@ -485,12 +517,11 @@ abstract class RegexString extends Expr { private predicate named_group_start(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and - this.getChar(start + 2) = "P" and - this.getChar(start + 3) = "<" and - not this.getChar(start + 4) = "=" and - not this.getChar(start + 4) = "!" and + this.getChar(start + 2) = "<" and + not this.getChar(start + 3) = "=" and + not this.getChar(start + 3) = "!" and exists(int name_end | - name_end = min(int i | i > start + 4 and this.getChar(i) = ">") and + name_end = min(int i | i > start + 3 and this.getChar(i) = ">") and end = name_end + 1 ) } @@ -498,7 +529,7 @@ abstract class RegexString extends Expr { private predicate named_backreference_start(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and - this.getChar(start + 2) = "P" and + this.getChar(start + 2) = "k" and this.getChar(start + 3) = "=" and // Should this be looking for unescaped ")"? // TODO: test this @@ -510,7 +541,7 @@ abstract class RegexString extends Expr { this.getChar(start + 1) = "?" and end = start + 3 and c = this.getChar(start + 2) and - c in ["i", "L", "m", "s", "u", "x"] + c in ["i", "m", "s", "u", "x", "U"] } /** @@ -521,8 +552,6 @@ abstract class RegexString extends Expr { exists(string c | this.flag_group_start(_, _, c) | c = "i" and result = "IGNORECASE" or - c = "L" and result = "LOCALE" - or c = "m" and result = "MULTILINE" or c = "s" and result = "DOTALL" @@ -530,6 +559,8 @@ abstract class RegexString extends Expr { c = "u" and result = "UNICODE" or c = "x" and result = "VERBOSE" + or + c = "U" and result = "UNICODECLASS" ) } @@ -563,10 +594,10 @@ abstract class RegexString extends Expr { end = start + 4 } - private predicate comment_group_start(int start, int end) { + private predicate atomic_group_start(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and - this.getChar(start + 2) = "#" and + this.getChar(start + 2) = ">" and end = start + 3 } @@ -633,10 +664,10 @@ abstract class RegexString extends Expr { private predicate qualifier(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { this.short_qualifier(start, end, maybe_empty, may_repeat_forever) and - not this.getChar(end) = "?" + not this.getChar(end) = ["?", "+"] or exists(int short_end | this.short_qualifier(start, short_end, maybe_empty, may_repeat_forever) | - if this.getChar(short_end) = "?" then end = short_end + 1 else end = short_end + if this.getChar(short_end) = ["?", "+"] then end = short_end + 1 else end = short_end ) } @@ -897,11 +928,11 @@ class Regex extends RegexString { * Gets a mode (if any) of this regular expression. Can be any of: * DEBUG * IGNORECASE - * LOCALE * MULTILINE * DOTALL * UNICODE * VERBOSE + * UNICODECLASS */ string getAMode() { result != "None" and From f9f7a01f578b3a1d4c6e5e586f906c5d3674240e Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 2 Feb 2022 13:53:41 +0000 Subject: [PATCH 0302/1618] Add Java ReDoS libraries to identical-files.json --- config/identical-files.json | 15 +- .../java/security/performance/ReDoSUtil.qll | 152 ++++++++++++------ .../security/performance/RegExpTreeView.qll | 8 + 3 files changed, 120 insertions(+), 55 deletions(-) diff --git a/config/identical-files.json b/config/identical-files.json index 2ff65c453f0..841274f3a3a 100644 --- a/config/identical-files.json +++ b/config/identical-files.json @@ -475,20 +475,23 @@ "python/ql/lib/semmle/python/security/internal/SensitiveDataHeuristics.qll", "ruby/ql/lib/codeql/ruby/security/internal/SensitiveDataHeuristics.qll" ], - "ReDoS Util Python/JS/Ruby": [ + "ReDoS Util Python/JS/Ruby/Java": [ "javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtil.qll", "python/ql/lib/semmle/python/security/performance/ReDoSUtil.qll", - "ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll" + "ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll", + "java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll" ], - "ReDoS Exponential Python/JS/Ruby": [ + "ReDoS Exponential Python/JS/Ruby/Java": [ "javascript/ql/lib/semmle/javascript/security/performance/ExponentialBackTracking.qll", "python/ql/lib/semmle/python/security/performance/ExponentialBackTracking.qll", - "ruby/ql/lib/codeql/ruby/security/performance/ExponentialBackTracking.qll" + "ruby/ql/lib/codeql/ruby/security/performance/ExponentialBackTracking.qll", + "java/ql/lib/semmle/code/java/security/performance/ExponentialBackTracking.qll" ], - "ReDoS Polynomial Python/JS/Ruby": [ + "ReDoS Polynomial Python/JS/Ruby/Java": [ "javascript/ql/lib/semmle/javascript/security/performance/SuperlinearBackTracking.qll", "python/ql/lib/semmle/python/security/performance/SuperlinearBackTracking.qll", - "ruby/ql/lib/codeql/ruby/security/performance/SuperlinearBackTracking.qll" + "ruby/ql/lib/codeql/ruby/security/performance/SuperlinearBackTracking.qll", + "java/ql/lib/semmle/code/java/security/performance/SuperlinearBackTracking.qll" ], "BadTagFilterQuery Python/JS/Ruby": [ "javascript/ql/lib/semmle/javascript/security/BadTagFilterQuery.qll", diff --git a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll index 2cd324ed8f7..54e69cc3178 100644 --- a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll +++ b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll @@ -140,9 +140,9 @@ class RegExpRoot extends RegExpTerm { // there is at least one repetition getRoot(any(InfiniteRepetitionQuantifier q)) = this and // is actually used as a RegExp - isUsedAsRegExp() and + this.isUsedAsRegExp() and // not excluded for library specific reasons - not isExcluded(getRootTerm().getParent()) + not isExcluded(this.getRootTerm().getParent()) } } @@ -218,7 +218,7 @@ private newtype TInputSymbol = recc instanceof RegExpCharacterClass and not recc.(RegExpCharacterClass).isUniversalClass() or - recc instanceof RegExpCharacterClassEscape + isEscapeClass(recc, _) ) } or /** An input symbol representing all characters matched by `.`. */ @@ -302,7 +302,7 @@ abstract class CharacterClass extends InputSymbol { /** * Gets a character matched by this character class. */ - string choose() { result = getARelevantChar() and matches(result) } + string choose() { result = this.getARelevantChar() and this.matches(result) } } /** @@ -340,13 +340,13 @@ private module CharacterClasses { char <= hi ) or - exists(RegExpCharacterClassEscape escape | escape = child | - escape.getValue() = escape.getValue().toLowerCase() and - classEscapeMatches(escape.getValue(), char) + exists(string charClass | isEscapeClass(child, charClass) | + charClass.toLowerCase() = charClass and + classEscapeMatches(charClass, char) or char = getARelevantChar() and - escape.getValue() = escape.getValue().toUpperCase() and - not classEscapeMatches(escape.getValue().toLowerCase(), char) + charClass.toUpperCase() = charClass and + not classEscapeMatches(charClass, char) ) ) } @@ -409,10 +409,10 @@ private module CharacterClasses { or child.(RegExpCharacterRange).isRange(_, result) or - exists(RegExpCharacterClassEscape escape | child = escape | - result = min(string s | classEscapeMatches(escape.getValue().toLowerCase(), s)) + exists(string charClass | isEscapeClass(child, charClass) | + result = min(string s | classEscapeMatches(charClass.toLowerCase(), s)) or - result = max(string s | classEscapeMatches(escape.getValue().toLowerCase(), s)) + result = max(string s | classEscapeMatches(charClass.toLowerCase(), s)) ) ) } @@ -466,33 +466,36 @@ private module CharacterClasses { * An implementation of `CharacterClass` for \d, \s, and \w. */ private class PositiveCharacterClassEscape extends CharacterClass { - RegExpCharacterClassEscape cc; + RegExpTerm cc; + string charClass; PositiveCharacterClassEscape() { - this = getCanonicalCharClass(cc) and cc.getValue() = ["d", "s", "w"] + isEscapeClass(cc, charClass) and + this = getCanonicalCharClass(cc) and + charClass = ["d", "s", "w"] } override string getARelevantChar() { - cc.getValue() = "d" and + charClass = "d" and result = ["0", "9"] or - cc.getValue() = "s" and + charClass = "s" and result = " " or - cc.getValue() = "w" and + charClass = "w" and result = ["a", "Z", "_", "0", "9"] } - override predicate matches(string char) { classEscapeMatches(cc.getValue(), char) } + override predicate matches(string char) { classEscapeMatches(charClass, char) } override string choose() { - cc.getValue() = "d" and + charClass = "d" and result = "9" or - cc.getValue() = "s" and + charClass = "s" and result = " " or - cc.getValue() = "w" and + charClass = "w" and result = "a" } } @@ -501,26 +504,29 @@ private module CharacterClasses { * An implementation of `CharacterClass` for \D, \S, and \W. */ private class NegativeCharacterClassEscape extends CharacterClass { - RegExpCharacterClassEscape cc; + RegExpTerm cc; + string charClass; NegativeCharacterClassEscape() { - this = getCanonicalCharClass(cc) and cc.getValue() = ["D", "S", "W"] + isEscapeClass(cc, charClass) and + this = getCanonicalCharClass(cc) and + charClass = ["D", "S", "W"] } override string getARelevantChar() { - cc.getValue() = "D" and + charClass = "D" and result = ["a", "Z", "!"] or - cc.getValue() = "S" and + charClass = "S" and result = ["a", "9", "!"] or - cc.getValue() = "W" and + charClass = "W" and result = [" ", "!"] } bindingset[char] override predicate matches(string char) { - not classEscapeMatches(cc.getValue().toLowerCase(), char) + not classEscapeMatches(charClass.toLowerCase(), char) } } } @@ -533,6 +539,55 @@ private class EdgeLabel extends TInputSymbol { } } +/** + * A RegExp term that acts like a plus. + * Either it's a RegExpPlus, or it is a range {1,X} where X is >= 30. + * 30 has been chosen as a threshold because for exponential blowup 2^30 is enough to get a decent DOS attack. + */ +private class EffectivelyPlus extends RegExpTerm { + EffectivelyPlus() { + this instanceof RegExpPlus + or + exists(RegExpRange range | + range.getLowerBound() = 1 and + (range.getUpperBound() >= 30 or not exists(range.getUpperBound())) + | + this = range + ) + } +} + +/** + * A RegExp term that acts like a star. + * Either it's a RegExpStar, or it is a range {0,X} where X is >= 30. + */ +private class EffectivelyStar extends RegExpTerm { + EffectivelyStar() { + this instanceof RegExpStar + or + exists(RegExpRange range | + range.getLowerBound() = 0 and + (range.getUpperBound() >= 30 or not exists(range.getUpperBound())) + | + this = range + ) + } +} + +/** + * A RegExp term that acts like a question mark. + * Either it's a RegExpQuestion, or it is a range {0,1}. + */ +private class EffectivelyQuestion extends RegExpTerm { + EffectivelyQuestion() { + this instanceof RegExpOpt + or + exists(RegExpRange range | range.getLowerBound() = 0 and range.getUpperBound() = 1 | + this = range + ) + } +} + /** * Gets the state before matching `t`. */ @@ -542,7 +597,7 @@ private State before(RegExpTerm t) { result = Match(t, 0) } /** * Gets a state the NFA may be in after matching `t`. */ -private State after(RegExpTerm t) { +State after(RegExpTerm t) { exists(RegExpAlt alt | t = alt.getAChild() | result = after(alt)) or exists(RegExpSequence seq, int i | t = seq.getChild(i) | @@ -553,14 +608,14 @@ private State after(RegExpTerm t) { or exists(RegExpGroup grp | t = grp.getAChild() | result = after(grp)) or - exists(RegExpStar star | t = star.getAChild() | result = before(star)) + exists(EffectivelyStar star | t = star.getAChild() | result = before(star)) or - exists(RegExpPlus plus | t = plus.getAChild() | + exists(EffectivelyPlus plus | t = plus.getAChild() | result = before(plus) or result = after(plus) ) or - exists(RegExpOpt opt | t = opt.getAChild() | result = after(opt)) + exists(EffectivelyQuestion opt | t = opt.getAChild() | result = after(opt)) or exists(RegExpRoot root | t = root | result = AcceptAnySuffix(root)) } @@ -599,7 +654,7 @@ predicate delta(State q1, EdgeLabel lbl, State q2) { q2 = after(cc) ) or - exists(RegExpCharacterClassEscape cc | + exists(RegExpTerm cc | isEscapeClass(cc, _) | q1 = before(cc) and lbl = CharClass(cc.getRawValue() + "|" + getCanonicalizationFlags(cc.getRootTerm())) and q2 = after(cc) @@ -611,15 +666,17 @@ predicate delta(State q1, EdgeLabel lbl, State q2) { or exists(RegExpGroup grp | lbl = Epsilon() | q1 = before(grp) and q2 = before(grp.getChild(0))) or - exists(RegExpStar star | lbl = Epsilon() | + exists(EffectivelyStar star | lbl = Epsilon() | q1 = before(star) and q2 = before(star.getChild(0)) or q1 = before(star) and q2 = after(star) ) or - exists(RegExpPlus plus | lbl = Epsilon() | q1 = before(plus) and q2 = before(plus.getChild(0))) + exists(EffectivelyPlus plus | lbl = Epsilon() | + q1 = before(plus) and q2 = before(plus.getChild(0)) + ) or - exists(RegExpOpt opt | lbl = Epsilon() | + exists(EffectivelyQuestion opt | lbl = Epsilon() | q1 = before(opt) and q2 = before(opt.getChild(0)) or q1 = before(opt) and q2 = after(opt) @@ -671,7 +728,7 @@ RegExpRoot getRoot(RegExpTerm term) { /** * A state in the NFA. */ -private newtype TState = +newtype TState = /** * A state representing that the NFA is about to match a term. * `i` is used to index into multi-char literals. @@ -801,29 +858,26 @@ InputSymbol getAnInputSymbolMatching(string char) { result = Any() } +/** + * Holds if `state` is a start state. + */ +predicate isStartState(State state) { + state = mkMatch(any(RegExpRoot r)) + or + exists(RegExpCaret car | state = after(car)) +} + /** * Predicates for constructing a prefix string that leads to a given state. */ private module PrefixConstruction { - /** - * Holds if `state` starts the string matched by the regular expression. - */ - private predicate isStartState(State state) { - state instanceof StateInPumpableRegexp and - ( - state = Match(any(RegExpRoot r), _) - or - exists(RegExpCaret car | state = after(car)) - ) - } - /** * Holds if `state` is the textually last start state for the regular expression. */ private predicate lastStartState(State state) { exists(RegExpRoot root | state = - max(State s, Location l | + max(StateInPumpableRegexp s, Location l | isStartState(s) and getRoot(s.getRepr()) = root and l = s.getRepr().getLocation() | s diff --git a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll index ac220ec8a50..97c7fd5951e 100644 --- a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll +++ b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll @@ -5,6 +5,14 @@ import java import semmle.code.java.regex.RegexTreeView +/** + * Holds if `term` is an ecape class representing e.g. `\d`. + * `clazz` is which character class it represents, e.g. "d" for `\d`. + */ +predicate isEscapeClass(RegExpTerm term, string clazz) { + exists(RegExpCharacterClassEscape escape | term = escape | escape.getValue() = clazz) +} + /** * Holds if the regular expression should not be considered. * From ca422a2186e440c15189a0a23a66e868a60186eb Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 2 Feb 2022 13:59:31 +0000 Subject: [PATCH 0303/1618] Use explicit `this` --- java/ql/lib/semmle/code/java/regex/RegexTreeView.qll | 2 +- java/ql/lib/semmle/code/java/regex/regex.qll | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index 5603ad82108..6e5c1785f8c 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -495,7 +495,7 @@ class RegExpEscape extends RegExpNormalChar { /** * Holds if this is a unicode escape. */ - private predicate isUnicode() { this.getText().prefix(2) = "\\u" } + private predicate isUnicode() { this.getText().matches("\\u%") } /** * Gets the unicode char for this escape. diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index f3d96d828b9..557c0cb495b 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -21,7 +21,7 @@ abstract class RegexString extends Expr { private predicate char_set_end0(int pos) { this.nonEscapedCharAt(pos) = "]" and /* special case: `[]]` and `[^]]` are valid char classes. */ - not char_set_start0(_, pos - 1) + not this.char_set_start0(_, pos - 1) } /** @@ -64,7 +64,7 @@ abstract class RegexString extends Expr { end = inner_end + 1 and inner_end > inner_start and this.char_set_end(inner_end) and - not exists(int mid | char_set_end(mid) | mid > inner_start and mid < inner_end) + not exists(int mid | this.char_set_end(mid) | mid > inner_start and mid < inner_end) ) } @@ -304,7 +304,7 @@ abstract class RegexString extends Expr { // 16-bit hex value \uhhhh this.getChar(start + 1) = "u" and end = start + 6 or - escapedBraces(start, end) + this.escapedBraces(start, end) or // Boundry matchers \b, \b{g} this.getChar(start + 1) = "b" and From 8e1918216e9683b5c58ed8e52e77023134474b1a Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 2 Feb 2022 17:18:14 +0000 Subject: [PATCH 0304/1618] Add PrintAst support for regex terms --- java/ql/lib/semmle/code/java/PrintAst.qll | 51 +++++++++++++++++++ .../semmle/code/java/regex/RegexTreeView.qll | 4 +- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/PrintAst.qll b/java/ql/lib/semmle/code/java/PrintAst.qll index 9527787e3a4..4279c0e8e58 100644 --- a/java/ql/lib/semmle/code/java/PrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrintAst.qll @@ -7,6 +7,7 @@ */ import java +import semmle.code.java.regex.RegexTreeView private newtype TPrintAstConfiguration = MkPrintAstConfiguration() @@ -131,6 +132,9 @@ private newtype TPrintAstNode = } or TImportsNode(CompilationUnit cu) { shouldPrint(cu, _) and exists(Import i | i.getCompilationUnit() = cu) + } or + TRegExpTermNode(RegExpTerm term) { + exists(StringLiteral str | term.getRootTerm() = getParsedRegExp(str) and shouldPrint(str, _)) } /** @@ -163,6 +167,12 @@ class PrintAstNode extends TPrintAstNode { */ Location getLocation() { none() } + predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + this.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } + /** * Gets the value of the property of this node, where the name of the property * is `key`. @@ -274,6 +284,47 @@ final class AnnotationPartNode extends ExprStmtNode { } } +/** + * A node representing a `StringLiteral`. + * It has a child if it is used as a regular expression, which is the root of the regular expression. + */ +final class StringLiteralNode extends ExprStmtNode { + StringLiteralNode() { element instanceof StringLiteral } + + override PrintAstNode getChild(int childIndex) { + childIndex = 0 and + result.(RegExpTermNode).getTerm() = getParsedRegExp(element) + } +} + +/** + * A node representing a regular expression term. + */ +class RegExpTermNode extends TRegExpTermNode, PrintAstNode { + RegExpTerm term; + + RegExpTermNode() { this = TRegExpTermNode(term) } + + /** Gets the `RegExpTerm` for this node. */ + RegExpTerm getTerm() { result = term } + + override PrintAstNode getChild(int childIndex) { + result.(RegExpTermNode).getTerm() = term.getChild(childIndex) + } + + override string toString() { + result = "[" + strictconcat(term.getPrimaryQLClass(), " | ") + "] " + term.toString() + } + + override Location getLocation() { result = term.getLocation() } + + override predicate hasLocationInfo( + string filepath, int startline, int startcolumn, int endline, int endcolumn + ) { + term.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) + } +} + /** * A node representing a `LocalVariableDeclExpr`. */ diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index 6e5c1785f8c..0bf2437c634 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -189,8 +189,8 @@ class RegExpTerm extends RegExpParent { ) { exists(int re_start, int re_end | re.getLocation().hasLocationInfo(filepath, startline, re_start, endline, re_end) and - startcolumn = re_start + start + 4 and - endcolumn = re_start + end + 3 + startcolumn = re_start + start + 1 and + endcolumn = re_start + end ) } From 28649da187e3e0f62ea39d1dc140e48a478b3b29 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 9 Feb 2022 14:06:26 +0000 Subject: [PATCH 0305/1618] Add parser tests; fix some parser issues. [temporarily renamed existing regex/Test.java during rebasing to avoid conflict] --- java/ql/lib/semmle/code/java/regex/regex.qll | 29 ++--- .../regex/RegexParseTests.expected | 68 ++++++++++ .../library-tests/regex/RegexParseTests.ql | 10 ++ java/ql/test/library-tests/regex/Test.java | 117 +++--------------- java/ql/test/library-tests/regex/Test2.java | 104 ++++++++++++++++ 5 files changed, 211 insertions(+), 117 deletions(-) create mode 100644 java/ql/test/library-tests/regex/RegexParseTests.expected create mode 100644 java/ql/test/library-tests/regex/RegexParseTests.ql create mode 100644 java/ql/test/library-tests/regex/Test2.java diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 557c0cb495b..35ca6fa9998 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -21,7 +21,7 @@ abstract class RegexString extends Expr { private predicate char_set_end0(int pos) { this.nonEscapedCharAt(pos) = "]" and /* special case: `[]]` and `[^]]` are valid char classes. */ - not this.char_set_start0(_, pos - 1) + not this.char_set_start0(_, pos) } /** @@ -283,7 +283,7 @@ abstract class RegexString extends Expr { */ predicate escapedCharacter(int start, int end) { this.escapingChar(start) and - not this.numbered_backreference(start, _, _) and + not this.backreference(start, _) and ( // hex value \xhh this.getChar(start + 1) = "x" and @@ -362,7 +362,8 @@ abstract class RegexString extends Expr { predicate character(int start, int end) { ( this.simpleCharacter(start, end) and - not exists(int x, int y | this.escapedCharacter(x, y) and x <= start and y >= end) + not exists(int x, int y | this.escapedCharacter(x, y) and x <= start and y >= end) and + not exists(int x, int y | this.quote(x, y) and x <= start and y >= end) or this.escapedCharacter(start, end) ) and @@ -486,8 +487,6 @@ abstract class RegexString extends Expr { or this.named_group_start(start, end) or - this.named_backreference_start(start, end) - or this.lookahead_assertion_start(start, end) or this.negative_lookahead_assertion_start(start, end) @@ -526,16 +525,6 @@ abstract class RegexString extends Expr { ) } - private predicate named_backreference_start(int start, int end) { - this.isGroupStart(start) and - this.getChar(start + 1) = "?" and - this.getChar(start + 2) = "k" and - this.getChar(start + 3) = "=" and - // Should this be looking for unescaped ")"? - // TODO: test this - end = min(int i | i > start + 4 and this.getChar(i) = "?") - } - private predicate flag_group_start(int start, int end, string c) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and @@ -609,9 +598,11 @@ abstract class RegexString extends Expr { } private predicate named_backreference(int start, int end, string name) { - this.named_backreference_start(start, start + 4) and - end = min(int i | i > start + 4 and this.getChar(i) = ")") + 1 and - name = this.getText().substring(start + 4, end - 2) + this.escapingChar(start) and + this.getChar(start + 1) = "k" and + this.getChar(start + 2) = "<" and + end = min(int i | i > start + 2 and this.getChar(i) = ">") + 1 and + name = this.getText().substring(start + 3, end - 2) } private predicate numbered_backreference(int start, int end, int value) { @@ -660,6 +651,8 @@ abstract class RegexString extends Expr { this.charSet(start, end) or this.backreference(start, end) + or + this.quote(start, end) } private predicate qualifier(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { diff --git a/java/ql/test/library-tests/regex/RegexParseTests.expected b/java/ql/test/library-tests/regex/RegexParseTests.expected new file mode 100644 index 00000000000..5a9b632d7c9 --- /dev/null +++ b/java/ql/test/library-tests/regex/RegexParseTests.expected @@ -0,0 +1,68 @@ +parseFailures +#select +| Test.java:5:10:5:16 | [A-Z\\d] | [RegExpCharacterClass] | +| Test.java:5:10:5:18 | [A-Z\\d]++ | [RegExpPlus] | +| Test.java:5:11:5:11 | A | [RegExpConstant,RegExpNormalChar] | +| Test.java:5:11:5:13 | A-Z | [RegExpCharacterRange] | +| Test.java:5:13:5:13 | Z | [RegExpConstant,RegExpNormalChar] | +| Test.java:5:14:5:15 | \\d | [RegExpCharacterClassEscape] | +| Test.java:6:10:6:39 | \\Q hello world [ *** \\Q ) ( \\E | [RegExpConstant,RegExpQuote] | +| Test.java:7:10:7:21 | [\\Q hi ] \\E] | [RegExpCharacterClass] | +| Test.java:7:11:7:20 | \\Q hi ] \\E | [RegExpConstant,RegExpQuote] | +| Test.java:8:10:8:12 | []] | [RegExpCharacterClass] | +| Test.java:8:11:8:11 | ] | [RegExpConstant,RegExpNormalChar] | +| Test.java:9:10:9:13 | [^]] | [RegExpCharacterClass] | +| Test.java:9:12:9:12 | ] | [RegExpConstant,RegExpNormalChar] | +| Test.java:10:10:10:20 | [abc[defg]] | [RegExpCharacterClass] | +| Test.java:10:11:10:11 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:10:12:10:12 | b | [RegExpConstant,RegExpNormalChar] | +| Test.java:10:13:10:13 | c | [RegExpConstant,RegExpNormalChar] | +| Test.java:10:14:10:14 | [ | [RegExpConstant,RegExpNormalChar] | +| Test.java:10:15:10:15 | d | [RegExpConstant,RegExpNormalChar] | +| Test.java:10:16:10:16 | e | [RegExpConstant,RegExpNormalChar] | +| Test.java:10:17:10:17 | f | [RegExpConstant,RegExpNormalChar] | +| Test.java:10:18:10:18 | g | [RegExpConstant,RegExpNormalChar] | +| Test.java:10:19:10:19 | ] | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:10:11:53 | [abc&&[\\W\\p{Lower}\\P{Space}\\N{degree sign}]] | [RegExpCharacterClass] | +| Test.java:11:10:11:62 | [abc&&[\\W\\p{Lower}\\P{Space}\\N{degree sign}]]\\b7\\b{g}8 | [RegExpSequence] | +| Test.java:11:11:11:11 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:12:11:12 | b | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:13:11:13 | c | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:14:11:14 | & | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:15:11:15 | & | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:16:11:16 | [ | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:17:11:18 | \\W | [RegExpCharacterClassEscape] | +| Test.java:11:19:11:27 | \\p{Lower} | [RegExpCharacterClassEscape] | +| Test.java:11:28:11:36 | \\P{Space} | [RegExpCharacterClassEscape] | +| Test.java:11:37:11:51 | \\N{degree sign} | [RegExpConstant,RegExpEscape] | +| Test.java:11:52:11:52 | ] | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:54:11:55 | \\b | [RegExpConstant,RegExpEscape] | +| Test.java:11:56:11:56 | 7 | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:57:11:61 | \\b{g} | [RegExpConstant,RegExpEscape] | +| Test.java:11:62:11:62 | 8 | [RegExpConstant,RegExpNormalChar] | +| Test.java:12:10:12:12 | \\cA | [RegExpConstant,RegExpEscape] | +| Test.java:13:10:13:12 | \\c( | [RegExpConstant,RegExpEscape] | +| Test.java:14:10:14:12 | \\c\\ | [RegExpConstant,RegExpEscape] | +| Test.java:14:10:14:16 | \\c\\(ab) | [RegExpSequence] | +| Test.java:14:13:14:16 | (ab) | [RegExpGroup] | +| Test.java:14:14:14:14 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:14:14:14:15 | ab | [RegExpSequence] | +| Test.java:14:15:14:15 | b | [RegExpConstant,RegExpNormalChar] | +| Test.java:15:10:15:15 | (?>hi) | [RegExpGroup] | +| Test.java:15:10:15:44 | (?>hi)(?hell*?o*+)123\\k | [RegExpSequence] | +| Test.java:15:13:15:13 | h | [RegExpConstant,RegExpNormalChar] | +| Test.java:15:13:15:14 | hi | [RegExpSequence] | +| Test.java:15:14:15:14 | i | [RegExpConstant,RegExpNormalChar] | +| Test.java:15:16:15:33 | (?hell*?o*+) | [RegExpGroup] | +| Test.java:15:24:15:24 | h | [RegExpConstant,RegExpNormalChar] | +| Test.java:15:24:15:32 | hell*?o*+ | [RegExpSequence] | +| Test.java:15:25:15:25 | e | [RegExpConstant,RegExpNormalChar] | +| Test.java:15:26:15:26 | l | [RegExpConstant,RegExpNormalChar] | +| Test.java:15:27:15:27 | l | [RegExpConstant,RegExpNormalChar] | +| Test.java:15:27:15:29 | l*? | [RegExpStar] | +| Test.java:15:30:15:30 | o | [RegExpConstant,RegExpNormalChar] | +| Test.java:15:30:15:32 | o*+ | [RegExpStar] | +| Test.java:15:34:15:34 | 1 | [RegExpConstant,RegExpNormalChar] | +| Test.java:15:35:15:35 | 2 | [RegExpConstant,RegExpNormalChar] | +| Test.java:15:36:15:36 | 3 | [RegExpConstant,RegExpNormalChar] | +| Test.java:15:37:15:44 | \\k | [RegExpBackRef] | diff --git a/java/ql/test/library-tests/regex/RegexParseTests.ql b/java/ql/test/library-tests/regex/RegexParseTests.ql new file mode 100644 index 00000000000..345031a3b2d --- /dev/null +++ b/java/ql/test/library-tests/regex/RegexParseTests.ql @@ -0,0 +1,10 @@ +import java +import semmle.code.java.regex.RegexTreeView +import semmle.code.java.regex.regex + +string getQLClases(RegExpTerm t) { result = "[" + strictconcat(t.getPrimaryQLClass(), ",") + "]" } + +query predicate parseFailures(Regex r, int i) { r.failedToParse(i) } + +from RegExpTerm t +select t, getQLClases(t) diff --git a/java/ql/test/library-tests/regex/Test.java b/java/ql/test/library-tests/regex/Test.java index b351c31812a..e061e48f9f9 100644 --- a/java/ql/test/library-tests/regex/Test.java +++ b/java/ql/test/library-tests/regex/Test.java @@ -1,104 +1,23 @@ -package generatedtest; - -import java.util.regex.Matcher; import java.util.regex.Pattern; -// Test case generated by GenerateFlowTestCase.ql -public class Test { +class Test { + static String[] regs = { + "[A-Z\\d]++", + "\\Q hello world [ *** \\Q ) ( \\E", + "[\\Q hi ] \\E]", + "[]]", + "[^]]", + "[abc[defg]]", + "[abc&&[\\W\\p{Lower}\\P{Space}\\N{degree sign}]]\\b7\\b{g}8", + "\\cA", + "\\c(", + "\\c\\(ab)", + "(?>hi)(?hell*?o*+)123\\k" + }; - private final String str_pattern = "\\$\\{(.*)\\}"; - private final Pattern pattern = Pattern.compile(str_pattern); - - Object source() { return null; } - void sink(Object o) { } - - public void test() throws Exception { - - { - // "java.util.regex;Matcher;false;group;;;Argument[-1];ReturnValue;taint" - String out = null; - String in = (String) source(); - Matcher m = pattern.matcher(in); - out = m.group("foo"); - sink(out); // $ hasTaintFlow + void test() { + for (int i = 0; i < regs.length; i++) { + Pattern.compile(regs[i]); + } } - { - // "java.util.regex;Matcher;false;group;;;Argument[-1];ReturnValue;taint" - String out = null; - String in = (String) source(); - Matcher m = pattern.matcher(in); - out = m.group(); - sink(out); // $ hasTaintFlow - } - { - // "java.util.regex;Matcher;false;group;;;Argument[-1];ReturnValue;taint" - String out = null; - String in = (String) source(); - Matcher m = pattern.matcher(in); - out = m.group(0); - sink(out); // $ hasTaintFlow - } - { - // "java.util.regex;Matcher;false;replaceAll;;;Argument[-1];ReturnValue;taint" - String out = null; - String in = (String) source(); - Matcher m = pattern.matcher(in); - out = m.replaceAll("foo"); - sink(out); // $ hasTaintFlow - } - { - // "java.util.regex;Matcher;false;replaceAll;;;Argument[0];ReturnValue;taint" - String out = null; - String in = (String) source(); - Matcher m = pattern.matcher("foo"); - out = m.replaceAll(in); - sink(out); // $ hasTaintFlow - } - { - // "java.util.regex;Matcher;false;replaceFirst;;;Argument[-1];ReturnValue;taint" - String out = null; - String in = (String) source(); - Matcher m = pattern.matcher(in); - out = m.replaceFirst("foo"); - sink(out); // $ hasTaintFlow - } - { - // "java.util.regex;Matcher;false;replaceFirst;;;Argument[0];ReturnValue;taint" - String out = null; - String in = (String) source(); - Matcher m = pattern.matcher("foo"); - out = m.replaceFirst(in); - sink(out); // $ hasTaintFlow - } - { - // "java.util.regex;Pattern;false;matcher;;;Argument[0];ReturnValue;taint" - Matcher out = null; - CharSequence in = (CharSequence)source(); - out = pattern.matcher(in); - sink(out); // $ hasTaintFlow - } - { - // "java.util.regex;Pattern;false;quote;;;Argument[0];ReturnValue;taint" - String out = null; - String in = (String)source(); - out = Pattern.quote(in); - sink(out); // $ hasTaintFlow - } - { - // "java.util.regex;Pattern;false;split;;;Argument[0];ReturnValue;taint" - String[] out = null; - CharSequence in = (CharSequence)source(); - out = pattern.split(in); - sink(out); // $ hasTaintFlow - } - { - // "java.util.regex;Pattern;false;split;;;Argument[0];ReturnValue;taint" - String[] out = null; - CharSequence in = (CharSequence)source(); - out = pattern.split(in, 0); - sink(out); // $ hasTaintFlow - } - - } - } diff --git a/java/ql/test/library-tests/regex/Test2.java b/java/ql/test/library-tests/regex/Test2.java new file mode 100644 index 00000000000..fd9be63b68b --- /dev/null +++ b/java/ql/test/library-tests/regex/Test2.java @@ -0,0 +1,104 @@ +package generatedtest; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +// Test case generated by GenerateFlowTestCase.ql +public class Test { + + private final String str_pattern = "\\$\\{(.*)\\}"; + private final Pattern pattern = Pattern.compile(str_pattern); + + Object source() { return null; } + void sink(Object o) { } + + public void test() throws Exception { + + { + // "java.util.regex;Matcher;false;group;;;Argument[-1];ReturnValue;taint" + String out = null; + String in = (String) source(); + Matcher m = pattern.matcher(in); + out = m.group("foo"); + sink(out); // $ hasTaintFlow + } + { + // "java.util.regex;Matcher;false;group;;;Argument[-1];ReturnValue;taint" + String out = null; + String in = (String) source(); + Matcher m = pattern.matcher(in); + out = m.group(); + sink(out); // $ hasTaintFlow + } + { + // "java.util.regex;Matcher;false;group;;;Argument[-1];ReturnValue;taint" + String out = null; + String in = (String) source(); + Matcher m = pattern.matcher(in); + out = m.group(0); + sink(out); // $ hasTaintFlow + } + { + // "java.util.regex;Matcher;false;replaceAll;;;Argument[-1];ReturnValue;taint" + String out = null; + String in = (String) source(); + Matcher m = pattern.matcher(in); + out = m.replaceAll("foo"); + sink(out); // $ hasTaintFlow + } + { + // "java.util.regex;Matcher;false;replaceAll;;;Argument[0];ReturnValue;taint" + String out = null; + String in = (String) source(); + Matcher m = pattern.matcher("foo"); + out = m.replaceAll(in); + sink(out); // $ hasTaintFlow + } + { + // "java.util.regex;Matcher;false;replaceFirst;;;Argument[-1];ReturnValue;taint" + String out = null; + String in = (String) source(); + Matcher m = pattern.matcher(in); + out = m.replaceFirst("foo"); + sink(out); // $ hasTaintFlow + } + { + // "java.util.regex;Matcher;false;replaceFirst;;;Argument[0];ReturnValue;taint" + String out = null; + String in = (String) source(); + Matcher m = pattern.matcher("foo"); + out = m.replaceFirst(in); + sink(out); // $ hasTaintFlow + } + { + // "java.util.regex;Pattern;false;matcher;;;Argument[0];ReturnValue;taint" + Matcher out = null; + CharSequence in = (CharSequence)source(); + out = pattern.matcher(in); + sink(out); // $ hasTaintFlow + } + { + // "java.util.regex;Pattern;false;quote;;;Argument[0];ReturnValue;taint" + String out = null; + String in = (String)source(); + out = Pattern.quote(in); + sink(out); // $ hasTaintFlow + } + { + // "java.util.regex;Pattern;false;split;;;Argument[0];ReturnValue;taint" + String[] out = null; + CharSequence in = (CharSequence)source(); + out = pattern.split(in); + sink(out); // $ hasTaintFlow + } + { + // "java.util.regex;Pattern;false;split;;;Argument[0];ReturnValue;taint" + String[] out = null; + CharSequence in = (CharSequence)source(); + out = pattern.split(in, 0); + sink(out); // $ hasTaintFlow + } + + } + +} \ No newline at end of file From 5b61de67de7fa12350cebf53896e0dd74eadbf8f Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 9 Feb 2022 14:54:13 +0000 Subject: [PATCH 0306/1618] Implement style/doc suggestions from code review --- java/ql/lib/semmle/code/java/PrintAst.qll | 2 +- .../code/java/regex/RegexFlowConfigs.qll | 10 +- .../semmle/code/java/regex/RegexTreeView.qll | 42 ++++----- java/ql/lib/semmle/code/java/regex/regex.qll | 91 +++++++++---------- .../Security/CWE/CWE-730/PolynomialReDoS.ql | 4 +- 5 files changed, 73 insertions(+), 76 deletions(-) diff --git a/java/ql/lib/semmle/code/java/PrintAst.qll b/java/ql/lib/semmle/code/java/PrintAst.qll index 4279c0e8e58..ee3a2800584 100644 --- a/java/ql/lib/semmle/code/java/PrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrintAst.qll @@ -286,7 +286,7 @@ final class AnnotationPartNode extends ExprStmtNode { /** * A node representing a `StringLiteral`. - * It has a child if it is used as a regular expression, which is the root of the regular expression. + * If it is used as a regular expression, then it has a single child, the root of the parsed regular expression. */ final class StringLiteralNode extends ExprStmtNode { StringLiteralNode() { element instanceof StringLiteral } diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index 9769a7ce8f7..f86d787a96b 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -20,7 +20,7 @@ private class RegexCompileFlowConf extends DataFlow2::Configuration { * Holds if `s` is used as a regex, with the mode `mode` (if known). * If regex mode is not known, `mode` will be `"None"`. */ -predicate used_as_regex(Expr s, string mode) { +predicate usedAsRegex(StringLiteral s, string mode) { any(RegexCompileFlowConf c).hasFlow(DataFlow2::exprNode(s), _) and mode = "None" // TODO: proper mode detection } @@ -43,10 +43,10 @@ abstract class RegexMatchMethodAccess extends MethodAccess { stringArg in [-1 .. m.getNumberOfParameters() - 1] } - /** Gets the argument of this call that the regex to be matched against flows into */ + /** Gets the argument of this call that the regex to be matched against flows into. */ Expr getRegexArg() { result = argOf(this, regexArg) } - /** Gets the argument of this call that the */ + /** Gets the argument of this call that the string being matched flows into. */ Expr getStringArg() { result = argOf(this, stringArg) } } @@ -178,9 +178,9 @@ private class RegexMatchFlowConf extends DataFlow2::Configuration { } /** - * Holds if the string literal `regex` is matched against the expression `str`. + * Holds if the string literal `regex` is a regular expression that is matched against the expression `str`. */ -predicate regex_match(StringLiteral regex, Expr str) { +predicate regexMatchedAgainst(StringLiteral regex, Expr str) { exists( DataFlow::Node src, DataFlow::Node sink, RegexMatchMethodAccess ma, RegexMatchFlowConf conf | diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index 0bf2437c634..9c4ee401135 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -5,18 +5,18 @@ private import semmle.code.java.regex.regex /** * An element containing a regular expression term, that is, either - * a string literal (parsed as a regular expression) - * or another regular expression term. + * a string literal (parsed as a regular expression; the root of the parse tree) + * or another regular expression term (a decendent of the root). * - * For sequences and alternations, we require at least one child. + * For sequences and alternations, we require at least two children. * Otherwise, we wish to represent the term differently. * This avoids multiple representations of the same term. */ -newtype TRegExpParent = +private newtype TRegExpParent = /** A string literal used as a regular expression */ TRegExpLiteral(Regex re) or /** A quantified term */ - TRegExpQuantifier(Regex re, int start, int end) { re.qualifiedItem(start, end, _, _) } or + TRegExpQuantifier(Regex re, int start, int end) { re.quantifiedItem(start, end, _, _) } or /** A sequence term */ TRegExpSequence(Regex re, int start, int end) { re.sequence(start, end) and @@ -47,8 +47,8 @@ newtype TRegExpParent = /** * An element containing a regular expression term, that is, either - * a string literal (parsed as a regular expression) - * or another regular expression term. + * a string literal (parsed as a regular expression; the root of the parse tree) + * or another regular expression term (a decendent of the root). */ class RegExpParent extends TRegExpParent { /** Gets a textual representation of this element. */ @@ -92,6 +92,7 @@ class RegExpLiteral extends TRegExpLiteral, RegExpParent { /** * A regular expression term, that is, a syntactic part of a regular expression. + * These are the tree nodes that form the parse tree of a regular expression literal. */ class RegExpTerm extends RegExpParent { Regex re; @@ -187,6 +188,8 @@ class RegExpTerm extends RegExpParent { predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { + // This currently gives incorrect results for string literals including backslashes. TODO: fix that. + // There are also more complex cases where it fails. Handling all of them would be difficult for not much gain. exists(int re_start, int re_end | re.getLocation().hasLocationInfo(filepath, startline, re_start, endline, re_end) and startcolumn = re_start + start + 1 and @@ -245,7 +248,7 @@ class RegExpQuantifier extends RegExpTerm, TRegExpQuantifier { RegExpQuantifier() { this = TRegExpQuantifier(re, start, end) and - re.qualifiedPart(start, part_end, end, maybe_empty, may_repeat_forever) + re.quantifiedPart(start, part_end, end, maybe_empty, may_repeat_forever) } override RegExpTerm getChild(int i) { @@ -255,11 +258,11 @@ class RegExpQuantifier extends RegExpTerm, TRegExpQuantifier { result.getEnd() = part_end } - /** Hols if this term may match an unlimited number of times. */ + /** Holds if this term may match an unlimited number of times. */ predicate mayRepeatForever() { may_repeat_forever = true } - /** Gets the qualifier for this term. That is e.g "?" for "a?". */ - string getQualifier() { result = re.getText().substring(part_end, end) } + /** Gets the quantifier for this term. That is e.g "?" for "a?". */ + string getquantifier() { result = re.getText().substring(part_end, end) } override string getPrimaryQLClass() { result = "RegExpQuantifier" } } @@ -281,7 +284,7 @@ class InfiniteRepetitionQuantifier extends RegExpQuantifier { * ``` */ class RegExpStar extends InfiniteRepetitionQuantifier { - RegExpStar() { this.getQualifier().charAt(0) = "*" } + RegExpStar() { this.getquantifier().charAt(0) = "*" } override string getPrimaryQLClass() { result = "RegExpStar" } } @@ -296,7 +299,7 @@ class RegExpStar extends InfiniteRepetitionQuantifier { * ``` */ class RegExpPlus extends InfiniteRepetitionQuantifier { - RegExpPlus() { this.getQualifier().charAt(0) = "+" } + RegExpPlus() { this.getquantifier().charAt(0) = "+" } override string getPrimaryQLClass() { result = "RegExpPlus" } } @@ -311,7 +314,7 @@ class RegExpPlus extends InfiniteRepetitionQuantifier { * ``` */ class RegExpOpt extends RegExpQuantifier { - RegExpOpt() { this.getQualifier().charAt(0) = "?" } + RegExpOpt() { this.getquantifier().charAt(0) = "?" } override string getPrimaryQLClass() { result = "RegExpOpt" } } @@ -333,10 +336,10 @@ class RegExpRange extends RegExpQuantifier { RegExpRange() { re.multiples(part_end, end, lower, upper) } - /** Gets the string defining the upper bound of this range, if any. */ + /** Gets the string defining the upper bound of this range, which is empty when no such bound exists. */ string getUpper() { result = upper } - /** Gets the string defining the lower bound of this range, if any. */ + /** Gets the string defining the lower bound of this range, which is empty when no such bound exists. */ string getLower() { result = lower } /** @@ -578,9 +581,6 @@ class RegExpCharacterClass extends RegExpTerm, TRegExpCharacterClass { /** Holds if this character class is inverted, matching the opposite of its content. */ predicate isInverted() { re.getChar(start + 1) = "^" } - /** Gets the `i`th char inside this charater class. */ - string getCharThing(int i) { result = re.getChar(i + start) } - /** Holds if this character class can match anything. */ predicate isUniversalClass() { // [^] @@ -724,9 +724,9 @@ class RegExpConstant extends RegExpTerm { RegExpConstant() { (this = TRegExpNormalChar(re, start, end) or this = TRegExpQuote(re, start, end)) and not this instanceof RegExpCharacterClassEscape and - // exclude chars in qualifiers + // exclude chars in quantifiers // TODO: push this into regex library - not exists(int qstart, int qend | re.qualifiedPart(_, qstart, qend, _, _) | + not exists(int qstart, int qend | re.quantifiedPart(_, qstart, qend, _, _) | qstart <= start and end <= qend ) and (value = this.(RegExpNormalChar).getValue() or value = this.(RegExpQuote).getValue()) diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 35ca6fa9998..a2a7f22c07e 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -1,20 +1,15 @@ import java private import RegexFlowConfigs +// In all ranges handled by this library, `start` is inclusive and `end` is exclusive. /** - * A string literal that is used as a regular exprssion. + * A string literal that is used as a regular expression. */ -abstract class RegexString extends Expr { - RegexString() { this instanceof StringLiteral } - - /** Holds if a character set starts between `start` and `end`. */ +abstract class RegexString extends StringLiteral { + /** Holds if a character set starts between `start` and `end`, including any negation character (`^`). */ private predicate char_set_start0(int start, int end) { this.nonEscapedCharAt(start) = "[" and - ( - this.getChar(start + 1) = "^" and end = start + 2 - or - not this.getChar(start + 1) = "^" and end = start + 1 - ) + (if this.getChar(start + 1) = "^" then end = start + 2 else end = start + 1) } /** Holds if the character at `pos` marks the end of a character class. */ @@ -25,7 +20,7 @@ abstract class RegexString extends Expr { } /** - * Gets the nesting depth of charcter classes at position `pos` + * Gets the nesting depth of character classes at position `pos` */ private int char_set_depth(int pos) { exists(this.getChar(pos)) and @@ -51,7 +46,7 @@ abstract class RegexString extends Expr { } /** - * Whether there is a top-level character class, between start (inclusive) and end (exclusive) + * Holds if there is a top-level character class beginning at `start` (inclusive) and ending at `end` (exclusive) * * For now, nested character classes are approximated by only considering the top-level class for parsing. * This leads to very similar results for ReDoS queries. @@ -355,7 +350,7 @@ abstract class RegexString extends Expr { not c = "[" and not c = ")" and not c = "|" and - not this.qualifier(start, _, _, _) + not this.quantifier(start, _, _, _) ) } @@ -384,7 +379,7 @@ abstract class RegexString extends Expr { not this.inCharSet(start) } - /** Whether the text in the range start,end is a group */ + /** Holds if the text in the range start,end is a group */ predicate group(int start, int end) { this.groupContents(start, end, _, _) or @@ -407,7 +402,7 @@ abstract class RegexString extends Expr { ) } - /** Whether the text in the range start, end is a group and can match the empty string. */ + /** Holds if the text in the range start, end is a group and can match the empty string. */ predicate zeroWidthMatch(int start, int end) { this.emptyGroup(start, end) or @@ -629,7 +624,7 @@ abstract class RegexString extends Expr { ) } - /** Whether the text in the range start,end is a back reference */ + /** Holds if the text in the range start,end is a back reference */ predicate backreference(int start, int end) { this.numbered_backreference(start, end, _) or @@ -655,16 +650,18 @@ abstract class RegexString extends Expr { this.quote(start, end) } - private predicate qualifier(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { - this.short_qualifier(start, end, maybe_empty, may_repeat_forever) and + private predicate quantifier(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { + this.short_quantifier(start, end, maybe_empty, may_repeat_forever) and not this.getChar(end) = ["?", "+"] or - exists(int short_end | this.short_qualifier(start, short_end, maybe_empty, may_repeat_forever) | + exists(int short_end | + this.short_quantifier(start, short_end, maybe_empty, may_repeat_forever) + | if this.getChar(short_end) = ["?", "+"] then end = short_end + 1 else end = short_end ) } - private predicate short_qualifier( + private predicate short_quantifier( int start, int end, boolean maybe_empty, boolean may_repeat_forever ) { ( @@ -708,32 +705,32 @@ abstract class RegexString extends Expr { } /** - * Whether the text in the range start,end is a qualified item, where item is a character, + * Holds if the text in the range start,end is a quantified item, where item is a character, * a character set or a group. */ - predicate qualifiedItem(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { - this.qualifiedPart(start, _, end, maybe_empty, may_repeat_forever) + predicate quantifiedItem(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { + this.quantifiedPart(start, _, end, maybe_empty, may_repeat_forever) } /** - * Holds if a qualified part is found between `start` and `part_end` and the qualifier is + * Holds if a quantified part is found between `start` and `part_end` and the quantifier is * found between `part_end` and `end`. * * `maybe_empty` is true if the part is optional. * `may_repeat_forever` is true if the part may be repeated unboundedly. */ - predicate qualifiedPart( + predicate quantifiedPart( int start, int part_end, int end, boolean maybe_empty, boolean may_repeat_forever ) { this.baseItem(start, part_end) and - this.qualifier(part_end, end, maybe_empty, may_repeat_forever) + this.quantifier(part_end, end, maybe_empty, may_repeat_forever) } /** Holds if the range `start`, `end` contains a character, a quantifier, a character set or a group. */ predicate item(int start, int end) { - this.qualifiedItem(start, end, _, _) + this.quantifiedItem(start, end, _, _) or - this.baseItem(start, end) and not this.qualifier(end, _, _, _) + this.baseItem(start, end) and not this.quantifier(end, _, _, _) } private predicate subsequence(int start, int end) { @@ -751,15 +748,15 @@ abstract class RegexString extends Expr { } /** - * Whether the text in the range start,end is a sequence of 1 or more items, where an item is a character, + * Holds if the text in the range start,end is a sequence of 1 or more items, where an item is a character, * a character set or a group. */ predicate sequence(int start, int end) { - this.sequenceOrQualified(start, end) and - not this.qualifiedItem(start, end, _, _) + this.sequenceOrquantified(start, end) and + not this.quantifiedItem(start, end, _, _) } - private predicate sequenceOrQualified(int start, int end) { + private predicate sequenceOrquantified(int start, int end) { this.subsequence(start, end) and not this.item_start(end) } @@ -779,7 +776,7 @@ abstract class RegexString extends Expr { or this.charSet(_, end) or - this.qualifier(_, end, _, _) + this.quantifier(_, end, _, _) or this.quote(_, end) } @@ -790,7 +787,7 @@ abstract class RegexString extends Expr { } private predicate subalternation(int start, int end, int item_start) { - this.sequenceOrQualified(start, end) and + this.sequenceOrquantified(start, end) and not this.isOptionDivider(start - 1) and item_start = start or @@ -804,14 +801,14 @@ abstract class RegexString extends Expr { this.isOptionDivider(mid) and item_start = mid + 1 | - this.sequenceOrQualified(item_start, end) + this.sequenceOrquantified(item_start, end) or not this.item_start(end) and end = item_start ) } /** - * Whether the text in the range start,end is an alternation + * Holds if the text in the range start,end is an alternation */ predicate alternation(int start, int end) { this.top_level(start, end) and @@ -819,7 +816,7 @@ abstract class RegexString extends Expr { } /** - * Whether the text in the range start,end is an alternation and the text in part_start, part_end is one of the + * Holds if the text in the range start,end is an alternation and the text in part_start, part_end is one of the * options in that alternation. */ predicate alternationOption(int start, int end, int part_start, int part_end) { @@ -833,14 +830,14 @@ abstract class RegexString extends Expr { or exists(int x | this.firstPart(x, end) | this.emptyMatchAtStartGroup(x, start) or - this.qualifiedItem(x, start, true, _) or + this.quantifiedItem(x, start, true, _) or this.specialCharacter(x, start, "^") ) or exists(int y | this.firstPart(start, y) | this.item(start, end) or - this.qualifiedPart(start, end, y, _, _) + this.quantifiedPart(start, end, y, _, _) ) or exists(int x, int y | this.firstPart(x, y) | @@ -857,7 +854,7 @@ abstract class RegexString extends Expr { exists(int y | this.lastPart(start, y) | this.emptyMatchAtEndGroup(end, y) or - this.qualifiedItem(end, y, true, _) + this.quantifiedItem(end, y, true, _) or this.specialCharacter(end, y, "$") or @@ -869,7 +866,7 @@ abstract class RegexString extends Expr { this.item(start, end) ) or - exists(int y | this.lastPart(start, y) | this.qualifiedPart(start, end, y, _, _)) + exists(int y | this.lastPart(start, y) | this.quantifiedPart(start, end, y, _, _)) or exists(int x, int y | this.lastPart(x, y) | this.groupContents(x, y, start, end) @@ -879,14 +876,14 @@ abstract class RegexString extends Expr { } /** - * Whether the item at [start, end) is one of the first items + * Holds if the item at [start, end) is one of the first items * to be matched. */ predicate firstItem(int start, int end) { ( this.character(start, end) or - this.qualifiedItem(start, end, _, _) + this.quantifiedItem(start, end, _, _) or this.charSet(start, end) or @@ -896,14 +893,14 @@ abstract class RegexString extends Expr { } /** - * Whether the item at [start, end) is one of the last items + * Holds if the item at [start, end) is one of the last items * to be matched. */ predicate lastItem(int start, int end) { ( this.character(start, end) or - this.qualifiedItem(start, end, _, _) + this.quantifiedItem(start, end, _, _) or this.charSet(start, end) or @@ -915,7 +912,7 @@ abstract class RegexString extends Expr { /** A string literal used as a regular expression */ class Regex extends RegexString { - Regex() { used_as_regex(this, _) } + Regex() { usedAsRegex(this, _) } /** * Gets a mode (if any) of this regular expression. Can be any of: @@ -929,7 +926,7 @@ class Regex extends RegexString { */ string getAMode() { result != "None" and - used_as_regex(this, result) + usedAsRegex(this, result) or result = this.getModeFromPrefix() } diff --git a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql index 40bc4845a7c..1c8f3299f7f 100644 --- a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql +++ b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql @@ -22,12 +22,12 @@ import DataFlow::PathGraph class PolynomialRedosSink extends DataFlow::Node { RegExpLiteral reg; - PolynomialRedosSink() { regex_match(reg.getRegex(), this.asExpr()) } + PolynomialRedosSink() { regexMatchedAgainst(reg.getRegex(), this.asExpr()) } RegExpTerm getRegExp() { result = reg } } -class PolynomialRedosConfig extends DataFlow::Configuration { +class PolynomialRedosConfig extends TaintTracking::Configuration { PolynomialRedosConfig() { this = "PolynomialRodisConfig" } override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } From e954db293a6791a4e0b081ab11c1e471cd569c0c Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 9 Feb 2022 15:11:01 +0000 Subject: [PATCH 0307/1618] Convert snake case predicates to camel case --- .../semmle/code/java/regex/RegexTreeView.qll | 6 +- java/ql/lib/semmle/code/java/regex/regex.qll | 190 +++++++++--------- 2 files changed, 98 insertions(+), 98 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index 9c4ee401135..114e24f9d49 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -601,8 +601,8 @@ class RegExpCharacterClass extends RegExpTerm, TRegExpCharacterClass { result.getRegex() = re and exists(int itemStart, int itemEnd | result.getStart() = itemStart and - re.char_set_start(start, itemStart) and - re.char_set_child(start, itemStart, itemEnd) and + re.charSetStart(start, itemStart) and + re.charSetChild(start, itemStart, itemEnd) and result.getEnd() = itemEnd ) or @@ -610,7 +610,7 @@ class RegExpCharacterClass extends RegExpTerm, TRegExpCharacterClass { result.getRegex() = re and exists(int itemStart | itemStart = this.getChild(i - 1).getEnd() | result.getStart() = itemStart and - re.char_set_child(start, itemStart, result.getEnd()) + re.charSetChild(start, itemStart, result.getEnd()) ) } diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index a2a7f22c07e..3aed361ec9e 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -7,42 +7,42 @@ private import RegexFlowConfigs */ abstract class RegexString extends StringLiteral { /** Holds if a character set starts between `start` and `end`, including any negation character (`^`). */ - private predicate char_set_start0(int start, int end) { + private predicate charSetStart0(int start, int end) { this.nonEscapedCharAt(start) = "[" and (if this.getChar(start + 1) = "^" then end = start + 2 else end = start + 1) } /** Holds if the character at `pos` marks the end of a character class. */ - private predicate char_set_end0(int pos) { + private predicate charSetEnd0(int pos) { this.nonEscapedCharAt(pos) = "]" and /* special case: `[]]` and `[^]]` are valid char classes. */ - not this.char_set_start0(_, pos) + not this.charSetStart0(_, pos) } /** * Gets the nesting depth of character classes at position `pos` */ - private int char_set_depth(int pos) { + private int charSetDepth(int pos) { exists(this.getChar(pos)) and result = max(int j | j = 0 or j = - count(int i | i < pos and this.char_set_start0(i, _)) - - count(int i | i < pos and this.char_set_end0(i)) + count(int i | i < pos and this.charSetStart0(i, _)) - + count(int i | i < pos and this.charSetEnd0(i)) ) } /** Hold if a top-level character set starts between `start` and `end`. */ - predicate char_set_start(int start, int end) { - this.char_set_start0(start, end) and - this.char_set_depth(start) = 0 + predicate charSetStart(int start, int end) { + this.charSetStart0(start, end) and + this.charSetDepth(start) = 0 } /** Holds if a top-level character set ends at `pos`. */ - predicate char_set_end(int pos) { - this.char_set_end0(pos) and - this.char_set_depth(pos) = 1 + predicate charSetEnd(int pos) { + this.charSetEnd0(pos) and + this.charSetDepth(pos) = 1 } /** @@ -53,26 +53,26 @@ abstract class RegexString extends StringLiteral { */ predicate charSet(int start, int end) { exists(int inner_start, int inner_end | - this.char_set_start(start, inner_start) and - not this.char_set_start(_, start) + this.charSetStart(start, inner_start) and + not this.charSetStart(_, start) | end = inner_end + 1 and inner_end > inner_start and - this.char_set_end(inner_end) and - not exists(int mid | this.char_set_end(mid) | mid > inner_start and mid < inner_end) + this.charSetEnd(inner_end) and + not exists(int mid | this.charSetEnd(mid) | mid > inner_start and mid < inner_end) ) } - /** An indexed version of `char_set_token/3` */ - private predicate char_set_token(int charset_start, int index, int token_start, int token_end) { + /** An indexed version of `charSetToken/3` */ + private predicate charSetToken(int charset_start, int index, int token_start, int token_end) { token_start = - rank[index](int start, int end | this.char_set_token(charset_start, start, end) | start) and - this.char_set_token(charset_start, token_start, token_end) + rank[index](int start, int end | this.charSetToken(charset_start, start, end) | start) and + this.charSetToken(charset_start, token_start, token_end) } /** Either a char or a - */ - private predicate char_set_token(int charset_start, int start, int end) { - this.char_set_start(charset_start, start) and + private predicate charSetToken(int charset_start, int start, int end) { + this.charSetStart(charset_start, start) and ( this.escapedCharacter(start, end) or @@ -81,13 +81,13 @@ abstract class RegexString extends StringLiteral { this.quote(start, end) ) or - this.char_set_token(charset_start, _, start) and + this.charSetToken(charset_start, _, start) and ( this.escapedCharacter(start, end) or exists(this.nonEscapedCharAt(start)) and end = start + 1 and - not this.char_set_end(start) + not this.charSetEnd(start) or this.quote(start, end) ) @@ -97,8 +97,8 @@ abstract class RegexString extends StringLiteral { * Holds if the character set starting at `charset_start` contains either * a character or a range found between `start` and `end`. */ - predicate char_set_child(int charset_start, int start, int end) { - this.char_set_token(charset_start, start, end) and + predicate charSetChild(int charset_start, int start, int end) { + this.charSetToken(charset_start, start, end) and not exists(int range_start, int range_end | this.charRange(charset_start, range_start, _, _, range_end) and range_start <= start and @@ -116,8 +116,8 @@ abstract class RegexString extends StringLiteral { predicate charRange(int charset_start, int start, int lower_end, int upper_start, int end) { exists(int index | this.charRangeEnd(charset_start, index) = true and - this.char_set_token(charset_start, index - 2, start, lower_end) and - this.char_set_token(charset_start, index, upper_start, end) + this.charSetToken(charset_start, index - 2, start, lower_end) and + this.charSetToken(charset_start, index, upper_start, end) ) } @@ -129,13 +129,13 @@ abstract class RegexString extends StringLiteral { * the helper for `escapingChar`, for a clean use of this pattern. */ private boolean charRangeEnd(int charset_start, int index) { - this.char_set_token(charset_start, index, _, _) and + this.charSetToken(charset_start, index, _, _) and ( index in [1, 2] and result = false or index > 2 and exists(int connector_start | - this.char_set_token(charset_start, index - 1, connector_start, _) and + this.charSetToken(charset_start, index - 1, connector_start, _) and this.nonEscapedCharAt(connector_start) = "-" and result = this.charRangeEnd(charset_start, index - 2) @@ -144,7 +144,7 @@ abstract class RegexString extends StringLiteral { ) or not exists(int connector_start | - this.char_set_token(charset_start, index - 1, connector_start, _) and + this.charSetToken(charset_start, index - 1, connector_start, _) and this.nonEscapedCharAt(connector_start) = "-" ) and result = false @@ -182,7 +182,7 @@ abstract class RegexString extends StringLiteral { * Holds if the char at `pos` could be the beginning of a quote delimiter, i.e. `\Q` (non-escaped) or `\E` (escaping not checked, as quote sequences turn off escapes). * Result is `true` for `\Q` and `false` for `\E`. */ - private boolean quote_delimiter(int pos) { + private boolean quoteDelimiter(int pos) { result = true and this.escaping(pos) = true and this.getChar(pos + 1) = "Q" @@ -197,9 +197,9 @@ abstract class RegexString extends StringLiteral { * Holds if the char at `pos` is the one-based `index`th occourence of a quote delimiter (`\Q` or `\E`) * Result is `true` for `\Q` and `false` for `\E`. */ - private boolean quote_delimiter(int index, int pos) { - result = this.quote_delimiter(pos) and - pos = rank[index](int p | this.quote_delimiter(p) = [true, false]) + private boolean quoteDelimiter(int index, int pos) { + result = this.quoteDelimiter(pos) and + pos = rank[index](int p | this.quoteDelimiter(p) = [true, false]) } /** Holds if a quoted sequence is found between `start` and `end` */ @@ -208,18 +208,18 @@ abstract class RegexString extends StringLiteral { /** Holds if a quoted sequence is fund between `start` and `end`, with ontent found between `inner_start` and `inner_end`. */ predicate quote(int start, int end, int inner_start, int inner_end) { exists(int index | - this.quote_delimiter(index, start) = true and + this.quoteDelimiter(index, start) = true and ( index = 1 or - this.quote_delimiter(index - 1, _) = false + this.quoteDelimiter(index - 1, _) = false ) and inner_start = start + 2 and inner_end = end - 2 and inner_end > inner_start and - this.quote_delimiter(inner_end) = false and + this.quoteDelimiter(inner_end) = false and not exists(int mid | - this.quote_delimiter(mid) = false and mid in [inner_start .. inner_end - 1] + this.quoteDelimiter(mid) = false and mid in [inner_start .. inner_end - 1] ) ) } @@ -255,7 +255,7 @@ abstract class RegexString extends StringLiteral { predicate failedToParse(int i) { exists(this.getChar(i)) and not exists(int start, int end | - this.top_level(start, end) and + this.topLevel(start, end) and start <= i and end > i ) @@ -336,7 +336,7 @@ abstract class RegexString extends StringLiteral { exists(string c | c = this.getChar(start) | exists(int x, int y, int z | this.charSet(x, z) and - this.char_set_start(x, y) + this.charSetStart(x, y) | start = y or @@ -362,7 +362,7 @@ abstract class RegexString extends StringLiteral { or this.escapedCharacter(start, end) ) and - not exists(int x, int y | this.group_start(x, y) and x <= start and y >= end) and + not exists(int x, int y | this.groupStart(x, y) and x <= start and y >= end) and not exists(int x, int y | this.backreference(x, y) and x <= start and y >= end) } @@ -390,14 +390,14 @@ abstract class RegexString extends StringLiteral { int getGroupNumber(int start, int end) { this.group(start, end) and result = - count(int i | this.group(i, _) and i < start and not this.non_capturing_group_start(i, _)) + 1 + count(int i | this.group(i, _) and i < start and not this.nonCapturingGroupStart(i, _)) + 1 } /** Gets the name, if it has one, of the group in start,end */ string getGroupName(int start, int end) { this.group(start, end) and exists(int name_end | - this.named_group_start(start, name_end) and + this.namedGroupStart(start, name_end) and result = this.getText().substring(start + 3, name_end - 1) ) } @@ -416,7 +416,7 @@ abstract class RegexString extends StringLiteral { /** Holds if an empty group is found between `start` and `end`. */ predicate emptyGroup(int start, int end) { exists(int endm1 | end = endm1 + 1 | - this.group_start(start, endm1) and + this.groupStart(start, endm1) and this.isGroupEnd(endm1) ) } @@ -439,9 +439,9 @@ abstract class RegexString extends StringLiteral { private predicate negativeAssertionGroup(int start, int end) { exists(int in_start | - this.negative_lookahead_assertion_start(start, in_start) + this.negativeLookaheadAssertionStart(start, in_start) or - this.negative_lookbehind_assertion_start(start, in_start) + this.negativeLookbehindAssertionStart(start, in_start) | this.groupContents(start, end, in_start, _) ) @@ -449,66 +449,66 @@ abstract class RegexString extends StringLiteral { /** Holds if a negative lookahead is found between `start` and `end` */ predicate negativeLookaheadAssertionGroup(int start, int end) { - exists(int in_start | this.negative_lookahead_assertion_start(start, in_start) | + exists(int in_start | this.negativeLookaheadAssertionStart(start, in_start) | this.groupContents(start, end, in_start, _) ) } /** Holds if a negative lookbehind is found between `start` and `end` */ predicate negativeLookbehindAssertionGroup(int start, int end) { - exists(int in_start | this.negative_lookbehind_assertion_start(start, in_start) | + exists(int in_start | this.negativeLookbehindAssertionStart(start, in_start) | this.groupContents(start, end, in_start, _) ) } /** Holds if a positive lookahead is found between `start` and `end` */ predicate positiveLookaheadAssertionGroup(int start, int end) { - exists(int in_start | this.lookahead_assertion_start(start, in_start) | + exists(int in_start | this.lookaheadAssertionStart(start, in_start) | this.groupContents(start, end, in_start, _) ) } /** Holds if a positive lookbehind is found between `start` and `end` */ predicate positiveLookbehindAssertionGroup(int start, int end) { - exists(int in_start | this.lookbehind_assertion_start(start, in_start) | + exists(int in_start | this.lookbehindAssertionStart(start, in_start) | this.groupContents(start, end, in_start, _) ) } - private predicate group_start(int start, int end) { - this.non_capturing_group_start(start, end) + private predicate groupStart(int start, int end) { + this.nonCapturingGroupStart(start, end) or - this.flag_group_start(start, end, _) + this.flagGroupStart(start, end, _) or - this.named_group_start(start, end) + this.namedGroupStart(start, end) or - this.lookahead_assertion_start(start, end) + this.lookaheadAssertionStart(start, end) or - this.negative_lookahead_assertion_start(start, end) + this.negativeLookaheadAssertionStart(start, end) or - this.lookbehind_assertion_start(start, end) + this.lookbehindAssertionStart(start, end) or - this.negative_lookbehind_assertion_start(start, end) + this.negativeLookbehindAssertionStart(start, end) or - this.atomic_group_start(start, end) + this.atomicGroupStart(start, end) or - this.simple_group_start(start, end) + this.simpleGroupStart(start, end) } - private predicate non_capturing_group_start(int start, int end) { + private predicate nonCapturingGroupStart(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and this.getChar(start + 2) = ":" and end = start + 3 } - private predicate simple_group_start(int start, int end) { + private predicate simpleGroupStart(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) != "?" and end = start + 1 } - private predicate named_group_start(int start, int end) { + private predicate namedGroupStart(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and this.getChar(start + 2) = "<" and @@ -520,7 +520,7 @@ abstract class RegexString extends StringLiteral { ) } - private predicate flag_group_start(int start, int end, string c) { + private predicate flagGroupStart(int start, int end, string c) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and end = start + 3 and @@ -533,7 +533,7 @@ abstract class RegexString extends StringLiteral { * it is defined by a prefix. */ string getModeFromPrefix() { - exists(string c | this.flag_group_start(_, _, c) | + exists(string c | this.flagGroupStart(_, _, c) | c = "i" and result = "IGNORECASE" or c = "m" and result = "MULTILINE" @@ -548,21 +548,21 @@ abstract class RegexString extends StringLiteral { ) } - private predicate lookahead_assertion_start(int start, int end) { + private predicate lookaheadAssertionStart(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and this.getChar(start + 2) = "=" and end = start + 3 } - private predicate negative_lookahead_assertion_start(int start, int end) { + private predicate negativeLookaheadAssertionStart(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and this.getChar(start + 2) = "!" and end = start + 3 } - private predicate lookbehind_assertion_start(int start, int end) { + private predicate lookbehindAssertionStart(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and this.getChar(start + 2) = "<" and @@ -570,7 +570,7 @@ abstract class RegexString extends StringLiteral { end = start + 4 } - private predicate negative_lookbehind_assertion_start(int start, int end) { + private predicate negativeLookbehindAssertionStart(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and this.getChar(start + 2) = "<" and @@ -578,7 +578,7 @@ abstract class RegexString extends StringLiteral { end = start + 4 } - private predicate atomic_group_start(int start, int end) { + private predicate atomicGroupStart(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and this.getChar(start + 2) = ">" and @@ -586,13 +586,13 @@ abstract class RegexString extends StringLiteral { } predicate groupContents(int start, int end, int in_start, int in_end) { - this.group_start(start, in_start) and + this.groupStart(start, in_start) and end = in_end + 1 and - this.top_level(in_start, in_end) and + this.topLevel(in_start, in_end) and this.isGroupEnd(in_end) } - private predicate named_backreference(int start, int end, string name) { + private predicate namedBackreference(int start, int end, string name) { this.escapingChar(start) and this.getChar(start + 1) = "k" and this.getChar(start + 2) = "<" and @@ -600,7 +600,7 @@ abstract class RegexString extends StringLiteral { name = this.getText().substring(start + 3, end - 2) } - private predicate numbered_backreference(int start, int end, int value) { + private predicate numberedBackreference(int start, int end, int value) { this.escapingChar(start) and // starting with 0 makes it an octal escape not this.getChar(start + 1) = "0" and @@ -626,16 +626,16 @@ abstract class RegexString extends StringLiteral { /** Holds if the text in the range start,end is a back reference */ predicate backreference(int start, int end) { - this.numbered_backreference(start, end, _) + this.numberedBackreference(start, end, _) or - this.named_backreference(start, end, _) + this.namedBackreference(start, end, _) } /** Gets the number of the back reference in start,end */ - int getBackrefNumber(int start, int end) { this.numbered_backreference(start, end, result) } + int getBackrefNumber(int start, int end) { this.numberedBackreference(start, end, result) } /** Gets the name, if it has one, of the back reference in start,end */ - string getBackrefName(int start, int end) { this.named_backreference(start, end, result) } + string getBackrefName(int start, int end) { this.namedBackreference(start, end, result) } private predicate baseItem(int start, int end) { this.character(start, end) and @@ -651,17 +651,17 @@ abstract class RegexString extends StringLiteral { } private predicate quantifier(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { - this.short_quantifier(start, end, maybe_empty, may_repeat_forever) and + this.shortQuantifier(start, end, maybe_empty, may_repeat_forever) and not this.getChar(end) = ["?", "+"] or exists(int short_end | - this.short_quantifier(start, short_end, maybe_empty, may_repeat_forever) + this.shortQuantifier(start, short_end, maybe_empty, may_repeat_forever) | if this.getChar(short_end) = ["?", "+"] then end = short_end + 1 else end = short_end ) } - private predicate short_quantifier( + private predicate shortQuantifier( int start, int end, boolean maybe_empty, boolean may_repeat_forever ) { ( @@ -736,7 +736,7 @@ abstract class RegexString extends StringLiteral { private predicate subsequence(int start, int end) { ( start = 0 or - this.group_start(_, start) or + this.groupStart(_, start) or this.isOptionDivider(start - 1) ) and this.item(start, end) @@ -758,10 +758,10 @@ abstract class RegexString extends StringLiteral { private predicate sequenceOrquantified(int start, int end) { this.subsequence(start, end) and - not this.item_start(end) + not this.itemStart(end) } - private predicate item_start(int start) { + private predicate itemStart(int start) { this.character(start, _) or this.isGroupStart(start) or this.charSet(start, _) or @@ -769,7 +769,7 @@ abstract class RegexString extends StringLiteral { this.quote(start, _) } - private predicate item_end(int end) { + private predicate itemEnd(int end) { this.character(_, end) or exists(int endm1 | this.isGroupEnd(endm1) and end = endm1 + 1) @@ -781,29 +781,29 @@ abstract class RegexString extends StringLiteral { this.quote(_, end) } - private predicate top_level(int start, int end) { + private predicate topLevel(int start, int end) { this.subalternation(start, end, _) and not this.isOptionDivider(end) } - private predicate subalternation(int start, int end, int item_start) { + private predicate subalternation(int start, int end, int itemStart) { this.sequenceOrquantified(start, end) and not this.isOptionDivider(start - 1) and - item_start = start + itemStart = start or start = end and - not this.item_end(start) and + not this.itemEnd(start) and this.isOptionDivider(end) and - item_start = start + itemStart = start or exists(int mid | this.subalternation(start, mid, _) and this.isOptionDivider(mid) and - item_start = mid + 1 + itemStart = mid + 1 | - this.sequenceOrquantified(item_start, end) + this.sequenceOrquantified(itemStart, end) or - not this.item_start(end) and end = item_start + not this.itemStart(end) and end = itemStart ) } @@ -811,7 +811,7 @@ abstract class RegexString extends StringLiteral { * Holds if the text in the range start,end is an alternation */ predicate alternation(int start, int end) { - this.top_level(start, end) and + this.topLevel(start, end) and exists(int less | this.subalternation(start, less, _) and less < end) } From aa1337db86c87571e4b1428aee5e54defe0f53cd Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 10 Feb 2022 11:16:37 +0000 Subject: [PATCH 0308/1618] Apply style suggestions from code review --- .../semmle/code/java/regex/RegexTreeView.qll | 5 +-- java/ql/lib/semmle/code/java/regex/regex.qll | 43 ++++++++----------- .../security/performance/RegExpTreeView.qll | 9 ++-- 3 files changed, 24 insertions(+), 33 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index 114e24f9d49..b55548d2095 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -527,8 +527,7 @@ class RegExpEscape extends RegExpNormalChar { * Gets the hex number for the `hex` char. */ private int toHex(string hex) { - hex = [0 .. 9].toString() and - result = hex.toInt() + result = [0 .. 9] and hex = result.toString() or result = 10 and hex = ["a", "A"] or @@ -545,7 +544,7 @@ private int toHex(string hex) { /** * A character class escape in a regular expression. - * That is, an escaped charachter that denotes multiple characters. + * That is, an escaped character that denotes multiple characters. * * Examples: * diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 3aed361ec9e..9116a883269 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -52,14 +52,10 @@ abstract class RegexString extends StringLiteral { * This leads to very similar results for ReDoS queries. */ predicate charSet(int start, int end) { - exists(int inner_start, int inner_end | - this.charSetStart(start, inner_start) and - not this.charSetStart(_, start) - | + exists(int inner_start, int inner_end | this.charSetStart(start, inner_start) | end = inner_end + 1 and - inner_end > inner_start and - this.charSetEnd(inner_end) and - not exists(int mid | this.charSetEnd(mid) | mid > inner_start and mid < inner_end) + inner_end = + min(int end_delimiter | this.charSetEnd(end_delimiter) and end_delimiter > inner_start) ) } @@ -159,7 +155,7 @@ abstract class RegexString extends StringLiteral { /** * Helper predicate for `escapingChar`. - * In order to avoid negative recusrion, we return a boolean. + * In order to avoid negative recursion, we return a boolean. * This way, we can refer to `escaping(pos - 1).booleanNot()` * rather than to a negated version of `escaping(pos)`. * Does not take into account escape characters inside quote sequences. @@ -199,13 +195,13 @@ abstract class RegexString extends StringLiteral { */ private boolean quoteDelimiter(int index, int pos) { result = this.quoteDelimiter(pos) and - pos = rank[index](int p | this.quoteDelimiter(p) = [true, false]) + pos = rank[index](int p | exists(this.quoteDelimiter(p))) } /** Holds if a quoted sequence is found between `start` and `end` */ predicate quote(int start, int end) { this.quote(start, end, _, _) } - /** Holds if a quoted sequence is fund between `start` and `end`, with ontent found between `inner_start` and `inner_end`. */ + /** Holds if a quoted sequence is found between `start` and `end`, with ontent found between `inner_start` and `inner_end`. */ predicate quote(int start, int end, int inner_start, int inner_end) { exists(int index | this.quoteDelimiter(index, start) = true and @@ -216,11 +212,10 @@ abstract class RegexString extends StringLiteral { ) and inner_start = start + 2 and inner_end = end - 2 and - inner_end > inner_start and - this.quoteDelimiter(inner_end) = false and - not exists(int mid | - this.quoteDelimiter(mid) = false and mid in [inner_start .. inner_end - 1] - ) + inner_end = + min(int end_delimiter | + this.quoteDelimiter(end_delimiter) = false and end_delimiter > inner_start + ) ) } @@ -266,9 +261,7 @@ abstract class RegexString extends StringLiteral { this.escapingChar(start) and this.getChar(start + 1) = ["N", "p", "P", "x"] and this.getChar(start + 2) = "{" and - this.getChar(end - 1) = "}" and - end > start and - not exists(int i | start + 2 < i and i < end - 1 | this.getChar(i) = "}") + end = min(int i | start + 2 < i and this.getChar(i - 1) = "}") } /** @@ -301,7 +294,7 @@ abstract class RegexString extends StringLiteral { or this.escapedBraces(start, end) or - // Boundry matchers \b, \b{g} + // Boundary matchers \b, \b{g} this.getChar(start + 1) = "b" and ( if this.getText().substring(start + 2, start + 5) = "{g}" @@ -654,9 +647,7 @@ abstract class RegexString extends StringLiteral { this.shortQuantifier(start, end, maybe_empty, may_repeat_forever) and not this.getChar(end) = ["?", "+"] or - exists(int short_end | - this.shortQuantifier(start, short_end, maybe_empty, may_repeat_forever) - | + exists(int short_end | this.shortQuantifier(start, short_end, maybe_empty, may_repeat_forever) | if this.getChar(short_end) = ["?", "+"] then end = short_end + 1 else end = short_end ) } @@ -752,11 +743,11 @@ abstract class RegexString extends StringLiteral { * a character set or a group. */ predicate sequence(int start, int end) { - this.sequenceOrquantified(start, end) and + this.sequenceOrQuantified(start, end) and not this.quantifiedItem(start, end, _, _) } - private predicate sequenceOrquantified(int start, int end) { + private predicate sequenceOrQuantified(int start, int end) { this.subsequence(start, end) and not this.itemStart(end) } @@ -787,7 +778,7 @@ abstract class RegexString extends StringLiteral { } private predicate subalternation(int start, int end, int itemStart) { - this.sequenceOrquantified(start, end) and + this.sequenceOrQuantified(start, end) and not this.isOptionDivider(start - 1) and itemStart = start or @@ -801,7 +792,7 @@ abstract class RegexString extends StringLiteral { this.isOptionDivider(mid) and itemStart = mid + 1 | - this.sequenceOrquantified(itemStart, end) + this.sequenceOrQuantified(itemStart, end) or not this.itemStart(end) and end = itemStart ) diff --git a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll index 97c7fd5951e..ff3443acbca 100644 --- a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll +++ b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll @@ -1,30 +1,31 @@ /** * This module should provide a class hierarchy corresponding to a parse tree of regular expressions. + * This is the interface to the shared ReDoS library. */ import java import semmle.code.java.regex.RegexTreeView /** - * Holds if `term` is an ecape class representing e.g. `\d`. + * Holds if `term` is an escape class representing e.g. `\d`. * `clazz` is which character class it represents, e.g. "d" for `\d`. */ predicate isEscapeClass(RegExpTerm term, string clazz) { - exists(RegExpCharacterClassEscape escape | term = escape | escape.getValue() = clazz) + term.(RegExpCharacterClassEscape).getValue() = clazz } /** * Holds if the regular expression should not be considered. * * We make the pragmatic performance optimization to ignore regular expressions in files - * that does not belong to the project code (such as installed dependencies). + * that do not belong to the project code (such as installed dependencies). */ predicate isExcluded(RegExpParent parent) { not exists(parent.getRegex().getLocation().getFile().getRelativePath()) or // Regexes with many occurrences of ".*" may cause the polynomial ReDoS computation to explode, so // we explicitly exclude these. - count(int i | exists(parent.getRegex().getText().regexpFind("\\.\\*", i, _)) | i) > 10 + strictcount(int i | exists(parent.getRegex().getText().regexpFind("\\.\\*", i, _)) | i) > 10 } /** From 9e88c67c19f61214276908e847a9fae0c4e2a3e8 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 10 Feb 2022 12:03:03 +0000 Subject: [PATCH 0309/1618] Add more test cases; make some fixes --- .../semmle/code/java/regex/RegexTreeView.qll | 3 - java/ql/lib/semmle/code/java/regex/regex.qll | 9 ++- .../regex/RegexParseTests.expected | 64 +++++++++++++++++++ java/ql/test/library-tests/regex/Test.java | 5 +- 4 files changed, 74 insertions(+), 7 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index b55548d2095..fd9b93a142f 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -725,9 +725,6 @@ class RegExpConstant extends RegExpTerm { not this instanceof RegExpCharacterClassEscape and // exclude chars in quantifiers // TODO: push this into regex library - not exists(int qstart, int qend | re.quantifiedPart(_, qstart, qend, _, _) | - qstart <= start and end <= qend - ) and (value = this.(RegExpNormalChar).getValue() or value = this.(RegExpQuote).getValue()) } diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 9116a883269..6646aa6f152 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -174,7 +174,7 @@ abstract class RegexString extends StringLiteral { } /** - * Helper predicate for `quoteSequence`. + * Helper predicate for `quote`. * Holds if the char at `pos` could be the beginning of a quote delimiter, i.e. `\Q` (non-escaped) or `\E` (escaping not checked, as quote sequences turn off escapes). * Result is `true` for `\Q` and `false` for `\E`. */ @@ -189,7 +189,7 @@ abstract class RegexString extends StringLiteral { } /** - * Helper predicate for `quoteSequence`. + * Helper predicate for `quote`. * Holds if the char at `pos` is the one-based `index`th occourence of a quote delimiter (`\Q` or `\E`) * Result is `true` for `\Q` and `false` for `\E`. */ @@ -343,7 +343,10 @@ abstract class RegexString extends StringLiteral { not c = "[" and not c = ")" and not c = "|" and - not this.quantifier(start, _, _, _) + not c = "{" and + not exists(int qstart, int qend | this.quantifier(qstart, qend, _, _) | + qstart <= start and start < qend + ) ) } diff --git a/java/ql/test/library-tests/regex/RegexParseTests.expected b/java/ql/test/library-tests/regex/RegexParseTests.expected index 5a9b632d7c9..e997975be95 100644 --- a/java/ql/test/library-tests/regex/RegexParseTests.expected +++ b/java/ql/test/library-tests/regex/RegexParseTests.expected @@ -66,3 +66,67 @@ parseFailures | Test.java:15:35:15:35 | 2 | [RegExpConstant,RegExpNormalChar] | | Test.java:15:36:15:36 | 3 | [RegExpConstant,RegExpNormalChar] | | Test.java:15:37:15:44 | \\k | [RegExpBackRef] | +| Test.java:16:10:16:10 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:10:16:11 | a+ | [RegExpPlus] | +| Test.java:16:10:16:108 | a+b*c?d{2}e{3,4}f{,5}g{6,}h+?i*?j??k{7}?l{8,9}?m{,10}?n{11,}?o++p*+q?+r{12}+s{13,14}+t{,15}+u{16,}+ | [RegExpSequence] | +| Test.java:16:12:16:12 | b | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:12:16:13 | b* | [RegExpStar] | +| Test.java:16:14:16:14 | c | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:14:16:15 | c? | [RegExpOpt] | +| Test.java:16:16:16:16 | d | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:16:16:19 | d{2} | [RegExpRange] | +| Test.java:16:20:16:20 | e | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:20:16:25 | e{3,4} | [RegExpRange] | +| Test.java:16:26:16:26 | f | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:26:16:30 | f{,5} | [RegExpRange] | +| Test.java:16:31:16:31 | g | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:31:16:35 | g{6,} | [RegExpRange] | +| Test.java:16:36:16:36 | h | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:36:16:38 | h+? | [RegExpPlus] | +| Test.java:16:39:16:39 | i | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:39:16:41 | i*? | [RegExpStar] | +| Test.java:16:42:16:42 | j | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:42:16:44 | j?? | [RegExpOpt] | +| Test.java:16:45:16:45 | k | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:45:16:49 | k{7}? | [RegExpQuantifier] | +| Test.java:16:50:16:50 | l | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:50:16:56 | l{8,9}? | [RegExpQuantifier] | +| Test.java:16:57:16:57 | m | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:57:16:63 | m{,10}? | [RegExpQuantifier] | +| Test.java:16:64:16:64 | n | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:64:16:70 | n{11,}? | [RegExpQuantifier] | +| Test.java:16:71:16:71 | o | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:71:16:73 | o++ | [RegExpPlus] | +| Test.java:16:74:16:74 | p | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:74:16:76 | p*+ | [RegExpStar] | +| Test.java:16:77:16:77 | q | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:77:16:79 | q?+ | [RegExpOpt] | +| Test.java:16:80:16:80 | r | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:80:16:85 | r{12}+ | [RegExpQuantifier] | +| Test.java:16:86:16:86 | s | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:86:16:94 | s{13,14}+ | [RegExpQuantifier] | +| Test.java:16:95:16:95 | t | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:95:16:101 | t{,15}+ | [RegExpQuantifier] | +| Test.java:16:102:16:102 | u | [RegExpConstant,RegExpNormalChar] | +| Test.java:16:102:16:108 | u{16,}+ | [RegExpQuantifier] | +| Test.java:17:10:17:13 | (?i) | [RegExpZeroWidthMatch] | +| Test.java:17:10:17:35 | (?i)(?=a)(?!b)(?<=c)(?hi)(?hell*?o*+)123\\k" + "(?>hi)(?hell*?o*+)123\\k", + "a+b*c?d{2}e{3,4}f{,5}g{6,}h+?i*?j??k{7}?l{8,9}?m{,10}?n{11,}?o++p*+q?+r{12}+s{13,14}+t{,15}+u{16,}+", + "(?i)(?=a)(?!b)(?<=c)(? Date: Thu, 10 Feb 2022 12:12:38 +0000 Subject: [PATCH 0310/1618] Simplify octal handling --- java/ql/lib/semmle/code/java/regex/regex.qll | 15 ++++++++------- .../library-tests/regex/RegexParseTests.expected | 7 +++++++ java/ql/test/library-tests/regex/Test.java | 3 ++- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 6646aa6f152..975d8e28309 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -280,13 +280,14 @@ abstract class RegexString extends StringLiteral { or // octal value \0o, \0oo, or \0ooo. Max of 0377. this.getChar(start + 1) = "0" and - end in [start + 3 .. start + 5] and - forall(int i | i in [start + 1 .. end - 1] | this.isOctal(i)) and - (end = start + 5 implies this.getChar(start + 2) <= "3") and - not ( - end < start + 5 and - this.isOctal(end) and - (end = start + 4 implies this.getChar(start + 2) <= "3") + this.isOctal(start + 2) and + ( + if this.isOctal(start + 3) + then + if this.isOctal(start + 4) and this.getChar(start + 2) in ["0", "1", "2", "3"] + then end = start + 5 + else end = start + 4 + else end = start + 3 ) or // 16-bit hex value \uhhhh diff --git a/java/ql/test/library-tests/regex/RegexParseTests.expected b/java/ql/test/library-tests/regex/RegexParseTests.expected index e997975be95..ebd0317bcc2 100644 --- a/java/ql/test/library-tests/regex/RegexParseTests.expected +++ b/java/ql/test/library-tests/regex/RegexParseTests.expected @@ -130,3 +130,10 @@ parseFailures | Test.java:18:18:18:18 | e | [RegExpConstant,RegExpNormalChar] | | Test.java:18:20:18:20 | f | [RegExpConstant,RegExpNormalChar] | | Test.java:18:22:18:22 | g | [RegExpConstant,RegExpNormalChar] | +| Test.java:19:10:19:12 | \\01 | [RegExpConstant,RegExpEscape] | +| Test.java:19:10:19:27 | \\018\\033\\0377\\0777 | [RegExpSequence] | +| Test.java:19:13:19:13 | 8 | [RegExpConstant,RegExpNormalChar] | +| Test.java:19:14:19:17 | \\033 | [RegExpConstant,RegExpEscape] | +| Test.java:19:18:19:22 | \\0377 | [RegExpConstant,RegExpEscape] | +| Test.java:19:23:19:26 | \\077 | [RegExpConstant,RegExpEscape] | +| Test.java:19:27:19:27 | 7 | [RegExpConstant,RegExpNormalChar] | diff --git a/java/ql/test/library-tests/regex/Test.java b/java/ql/test/library-tests/regex/Test.java index a60a323996f..c7ec1ecf69a 100644 --- a/java/ql/test/library-tests/regex/Test.java +++ b/java/ql/test/library-tests/regex/Test.java @@ -15,7 +15,8 @@ class Test { "(?>hi)(?hell*?o*+)123\\k", "a+b*c?d{2}e{3,4}f{,5}g{6,}h+?i*?j??k{7}?l{8,9}?m{,10}?n{11,}?o++p*+q?+r{12}+s{13,14}+t{,15}+u{16,}+", "(?i)(?=a)(?!b)(?<=c)(? Date: Thu, 10 Feb 2022 13:44:24 +0000 Subject: [PATCH 0311/1618] Topologically sort RegexString --- java/ql/lib/semmle/code/java/regex/regex.qll | 697 ++++++++----------- 1 file changed, 300 insertions(+), 397 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 975d8e28309..ce441e0e477 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -6,153 +6,22 @@ private import RegexFlowConfigs * A string literal that is used as a regular expression. */ abstract class RegexString extends StringLiteral { - /** Holds if a character set starts between `start` and `end`, including any negation character (`^`). */ - private predicate charSetStart0(int start, int end) { - this.nonEscapedCharAt(start) = "[" and - (if this.getChar(start + 1) = "^" then end = start + 2 else end = start + 1) - } + /** Gets the text of this regex */ + string getText() { result = this.(StringLiteral).getValue() } - /** Holds if the character at `pos` marks the end of a character class. */ - private predicate charSetEnd0(int pos) { - this.nonEscapedCharAt(pos) = "]" and - /* special case: `[]]` and `[^]]` are valid char classes. */ - not this.charSetStart0(_, pos) - } + /** Gets the `i`th character of this regex. */ + string getChar(int i) { result = this.getText().charAt(i) } - /** - * Gets the nesting depth of character classes at position `pos` - */ - private int charSetDepth(int pos) { - exists(this.getChar(pos)) and - result = - max(int j | - j = 0 or - j = - count(int i | i < pos and this.charSetStart0(i, _)) - - count(int i | i < pos and this.charSetEnd0(i)) - ) - } - - /** Hold if a top-level character set starts between `start` and `end`. */ - predicate charSetStart(int start, int end) { - this.charSetStart0(start, end) and - this.charSetDepth(start) = 0 - } - - /** Holds if a top-level character set ends at `pos`. */ - predicate charSetEnd(int pos) { - this.charSetEnd0(pos) and - this.charSetDepth(pos) = 1 - } - - /** - * Holds if there is a top-level character class beginning at `start` (inclusive) and ending at `end` (exclusive) - * - * For now, nested character classes are approximated by only considering the top-level class for parsing. - * This leads to very similar results for ReDoS queries. - */ - predicate charSet(int start, int end) { - exists(int inner_start, int inner_end | this.charSetStart(start, inner_start) | - end = inner_end + 1 and - inner_end = - min(int end_delimiter | this.charSetEnd(end_delimiter) and end_delimiter > inner_start) + /** Holds if the regex failed to parse. */ + predicate failedToParse(int i) { + exists(this.getChar(i)) and + not exists(int start, int end | + this.topLevel(start, end) and + start <= i and + end > i ) } - /** An indexed version of `charSetToken/3` */ - private predicate charSetToken(int charset_start, int index, int token_start, int token_end) { - token_start = - rank[index](int start, int end | this.charSetToken(charset_start, start, end) | start) and - this.charSetToken(charset_start, token_start, token_end) - } - - /** Either a char or a - */ - private predicate charSetToken(int charset_start, int start, int end) { - this.charSetStart(charset_start, start) and - ( - this.escapedCharacter(start, end) - or - exists(this.nonEscapedCharAt(start)) and end = start + 1 - or - this.quote(start, end) - ) - or - this.charSetToken(charset_start, _, start) and - ( - this.escapedCharacter(start, end) - or - exists(this.nonEscapedCharAt(start)) and - end = start + 1 and - not this.charSetEnd(start) - or - this.quote(start, end) - ) - } - - /** - * Holds if the character set starting at `charset_start` contains either - * a character or a range found between `start` and `end`. - */ - predicate charSetChild(int charset_start, int start, int end) { - this.charSetToken(charset_start, start, end) and - not exists(int range_start, int range_end | - this.charRange(charset_start, range_start, _, _, range_end) and - range_start <= start and - range_end >= end - ) - or - this.charRange(charset_start, start, _, _, end) - } - - /** - * Holds if the character set starting at `charset_start` contains a character range - * with lower bound found between `start` and `lower_end` - * and upper bound found between `upper_start` and `end`. - */ - predicate charRange(int charset_start, int start, int lower_end, int upper_start, int end) { - exists(int index | - this.charRangeEnd(charset_start, index) = true and - this.charSetToken(charset_start, index - 2, start, lower_end) and - this.charSetToken(charset_start, index, upper_start, end) - ) - } - - /** - * Helper predicate for `charRange`. - * We can determine where character ranges end by a left to right sweep. - * - * To avoid negative recursion we return a boolean. See `escaping`, - * the helper for `escapingChar`, for a clean use of this pattern. - */ - private boolean charRangeEnd(int charset_start, int index) { - this.charSetToken(charset_start, index, _, _) and - ( - index in [1, 2] and result = false - or - index > 2 and - exists(int connector_start | - this.charSetToken(charset_start, index - 1, connector_start, _) and - this.nonEscapedCharAt(connector_start) = "-" and - result = - this.charRangeEnd(charset_start, index - 2) - .booleanNot() - .booleanAnd(this.charRangeEnd(charset_start, index - 1).booleanNot()) - ) - or - not exists(int connector_start | - this.charSetToken(charset_start, index - 1, connector_start, _) and - this.nonEscapedCharAt(connector_start) = "-" - ) and - result = false - ) - } - - /** Holds if the character at `pos` is a "\" that is actually escaping what comes after. */ - predicate escapingChar(int pos) { - this.escaping(pos) = true and - not exists(int x, int y | this.quote(x, y) and pos in [x .. y - 1]) - } - /** * Helper predicate for `escapingChar`. * In order to avoid negative recursion, we return a boolean. @@ -219,6 +88,12 @@ abstract class RegexString extends StringLiteral { ) } + /** Holds if the character at `pos` is a "\" that is actually escaping what comes after. */ + predicate escapingChar(int pos) { + this.escaping(pos) = true and + not exists(int x, int y | this.quote(x, y) and pos in [x .. y - 1]) + } + /** * A control sequence, `\cx` * `x` may be any ascii character including special characters. @@ -229,11 +104,6 @@ abstract class RegexString extends StringLiteral { end = start + 3 } - /** Gets the text of this regex */ - string getText() { result = this.(StringLiteral).getValue() } - - string getChar(int i) { result = this.getText().charAt(i) } - string nonEscapedCharAt(int i) { result = this.getText().charAt(i) and not exists(int x, int y | this.escapedCharacter(x, y) and i in [x .. y - 1]) and @@ -241,21 +111,152 @@ abstract class RegexString extends StringLiteral { not exists(int x, int y | this.controlEscape(x, y) and i in [x .. y - 1]) } - private predicate isOptionDivider(int i) { this.nonEscapedCharAt(i) = "|" } + /** Holds if a character set starts between `start` and `end`, including any negation character (`^`). */ + private predicate charSetStart0(int start, int end) { + this.nonEscapedCharAt(start) = "[" and + (if this.getChar(start + 1) = "^" then end = start + 2 else end = start + 1) + } - private predicate isGroupEnd(int i) { this.nonEscapedCharAt(i) = ")" and not this.inCharSet(i) } + /** Holds if the character at `pos` marks the end of a character class. */ + private predicate charSetEnd0(int pos) { + this.nonEscapedCharAt(pos) = "]" and + /* special case: `[]]` and `[^]]` are valid char classes. */ + not this.charSetStart0(_, pos) + } - private predicate isGroupStart(int i) { this.nonEscapedCharAt(i) = "(" and not this.inCharSet(i) } + /** + * Gets the nesting depth of character classes at position `pos` + */ + private int charSetDepth(int pos) { + pos = -1 and result = 0 + or + exists(this.getChar(pos)) and + result = + max(int j | + j = 0 or + j = + count(int i | i < pos and this.charSetStart0(i, _)) - + count(int i | i < pos and this.charSetEnd0(i)) + ) + } - predicate failedToParse(int i) { - exists(this.getChar(i)) and - not exists(int start, int end | - this.topLevel(start, end) and - start <= i and - end > i + /** Hold if a top-level character set starts between `start` and `end`. */ + predicate charSetStart(int start, int end) { + this.charSetStart0(start, end) and + this.charSetDepth(start) = 0 + } + + /** Holds if a top-level character set ends at `pos`. */ + predicate charSetEnd(int pos) { + this.charSetEnd0(pos) and + this.charSetDepth(pos) = 1 + } + + /** + * Holds if there is a top-level character class beginning at `start` (inclusive) and ending at `end` (exclusive) + * + * For now, nested character classes are approximated by only considering the top-level class for parsing. + * This leads to very similar results for ReDoS queries. + */ + predicate charSet(int start, int end) { + exists(int inner_start, int inner_end | this.charSetStart(start, inner_start) | + end = inner_end + 1 and + inner_end = + min(int end_delimiter | this.charSetEnd(end_delimiter) and end_delimiter > inner_start) ) } + /** Either a char or a - */ + private predicate charSetToken(int charset_start, int start, int end) { + this.charSetStart(charset_start, start) and + ( + this.escapedCharacter(start, end) + or + exists(this.nonEscapedCharAt(start)) and end = start + 1 + or + this.quote(start, end) + ) + or + this.charSetToken(charset_start, _, start) and + ( + this.escapedCharacter(start, end) + or + exists(this.nonEscapedCharAt(start)) and + end = start + 1 and + not this.charSetEnd(start) + or + this.quote(start, end) + ) + } + + /** An indexed version of `charSetToken/3` */ + private predicate charSetToken(int charset_start, int index, int token_start, int token_end) { + token_start = + rank[index](int start, int end | this.charSetToken(charset_start, start, end) | start) and + this.charSetToken(charset_start, token_start, token_end) + } + + /** + * Holds if the character set starting at `charset_start` contains either + * a character or a range found between `start` and `end`. + */ + predicate charSetChild(int charset_start, int start, int end) { + this.charSetToken(charset_start, start, end) and + not exists(int range_start, int range_end | + this.charRange(charset_start, range_start, _, _, range_end) and + range_start <= start and + range_end >= end + ) + or + this.charRange(charset_start, start, _, _, end) + } + + /** + * Helper predicate for `charRange`. + * We can determine where character ranges end by a left to right sweep. + * + * To avoid negative recursion we return a boolean. See `escaping`, + * the helper for `escapingChar`, for a clean use of this pattern. + */ + private boolean charRangeEnd(int charset_start, int index) { + this.charSetToken(charset_start, index, _, _) and + ( + index in [1, 2] and result = false + or + index > 2 and + exists(int connector_start | + this.charSetToken(charset_start, index - 1, connector_start, _) and + this.nonEscapedCharAt(connector_start) = "-" and + result = + this.charRangeEnd(charset_start, index - 2) + .booleanNot() + .booleanAnd(this.charRangeEnd(charset_start, index - 1).booleanNot()) + ) + or + not exists(int connector_start | + this.charSetToken(charset_start, index - 1, connector_start, _) and + this.nonEscapedCharAt(connector_start) = "-" + ) and + result = false + ) + } + + /** + * Holds if the character set starting at `charset_start` contains a character range + * with lower bound found between `start` and `lower_end` + * and upper bound found between `upper_start` and `end`. + */ + predicate charRange(int charset_start, int start, int lower_end, int upper_start, int end) { + exists(int index | + this.charRangeEnd(charset_start, index) = true and + this.charSetToken(charset_start, index - 2, start, lower_end) and + this.charSetToken(charset_start, index, upper_start, end) + ) + } + + pragma[inline] + private predicate isOctal(int index) { this.getChar(index) = [0 .. 7].toString() } + /** An escape sequence that includes braces, such as named characters (\N{degree sign}), named classes (\p{Lower}), or hex values (\x{h..h}) */ private predicate escapedBraces(int start, int end) { this.escapingChar(start) and @@ -312,9 +313,6 @@ abstract class RegexString extends StringLiteral { ) } - pragma[inline] - private predicate isOctal(int index) { this.getChar(index) = [0 .. 7].toString() } - /** Holds if `index` is inside a character set. */ predicate inCharSet(int index) { exists(int x, int y | this.charSet(x, y) and index in [x + 1 .. y - 2]) @@ -351,7 +349,7 @@ abstract class RegexString extends StringLiteral { ) } - predicate character(int start, int end) { + private predicate character(int start, int end) { ( this.simpleCharacter(start, end) and not exists(int x, int y | this.escapedCharacter(x, y) and x <= start and y >= end) and @@ -376,39 +374,9 @@ abstract class RegexString extends StringLiteral { not this.inCharSet(start) } - /** Holds if the text in the range start,end is a group */ - predicate group(int start, int end) { - this.groupContents(start, end, _, _) - or - this.emptyGroup(start, end) - } + private predicate isGroupEnd(int i) { this.nonEscapedCharAt(i) = ")" and not this.inCharSet(i) } - /** Gets the number of the group in start,end */ - int getGroupNumber(int start, int end) { - this.group(start, end) and - result = - count(int i | this.group(i, _) and i < start and not this.nonCapturingGroupStart(i, _)) + 1 - } - - /** Gets the name, if it has one, of the group in start,end */ - string getGroupName(int start, int end) { - this.group(start, end) and - exists(int name_end | - this.namedGroupStart(start, name_end) and - result = this.getText().substring(start + 3, name_end - 1) - ) - } - - /** Holds if the text in the range start, end is a group and can match the empty string. */ - predicate zeroWidthMatch(int start, int end) { - this.emptyGroup(start, end) - or - this.negativeAssertionGroup(start, end) - or - this.positiveLookaheadAssertionGroup(start, end) - or - this.positiveLookbehindAssertionGroup(start, end) - } + private predicate isGroupStart(int i) { this.nonEscapedCharAt(i) = "(" and not this.inCharSet(i) } /** Holds if an empty group is found between `start` and `end`. */ predicate emptyGroup(int start, int end) { @@ -418,80 +386,6 @@ abstract class RegexString extends StringLiteral { ) } - private predicate emptyMatchAtStartGroup(int start, int end) { - this.emptyGroup(start, end) - or - this.negativeAssertionGroup(start, end) - or - this.positiveLookaheadAssertionGroup(start, end) - } - - private predicate emptyMatchAtEndGroup(int start, int end) { - this.emptyGroup(start, end) - or - this.negativeAssertionGroup(start, end) - or - this.positiveLookbehindAssertionGroup(start, end) - } - - private predicate negativeAssertionGroup(int start, int end) { - exists(int in_start | - this.negativeLookaheadAssertionStart(start, in_start) - or - this.negativeLookbehindAssertionStart(start, in_start) - | - this.groupContents(start, end, in_start, _) - ) - } - - /** Holds if a negative lookahead is found between `start` and `end` */ - predicate negativeLookaheadAssertionGroup(int start, int end) { - exists(int in_start | this.negativeLookaheadAssertionStart(start, in_start) | - this.groupContents(start, end, in_start, _) - ) - } - - /** Holds if a negative lookbehind is found between `start` and `end` */ - predicate negativeLookbehindAssertionGroup(int start, int end) { - exists(int in_start | this.negativeLookbehindAssertionStart(start, in_start) | - this.groupContents(start, end, in_start, _) - ) - } - - /** Holds if a positive lookahead is found between `start` and `end` */ - predicate positiveLookaheadAssertionGroup(int start, int end) { - exists(int in_start | this.lookaheadAssertionStart(start, in_start) | - this.groupContents(start, end, in_start, _) - ) - } - - /** Holds if a positive lookbehind is found between `start` and `end` */ - predicate positiveLookbehindAssertionGroup(int start, int end) { - exists(int in_start | this.lookbehindAssertionStart(start, in_start) | - this.groupContents(start, end, in_start, _) - ) - } - - private predicate groupStart(int start, int end) { - this.nonCapturingGroupStart(start, end) - or - this.flagGroupStart(start, end, _) - or - this.namedGroupStart(start, end) - or - this.lookaheadAssertionStart(start, end) - or - this.negativeLookaheadAssertionStart(start, end) - or - this.lookbehindAssertionStart(start, end) - or - this.negativeLookbehindAssertionStart(start, end) - or - this.atomicGroupStart(start, end) - or - this.simpleGroupStart(start, end) - } - private predicate nonCapturingGroupStart(int start, int end) { this.isGroupStart(start) and this.getChar(start + 1) = "?" and @@ -582,6 +476,26 @@ abstract class RegexString extends StringLiteral { end = start + 3 } + private predicate groupStart(int start, int end) { + this.nonCapturingGroupStart(start, end) + or + this.flagGroupStart(start, end, _) + or + this.namedGroupStart(start, end) + or + this.lookaheadAssertionStart(start, end) + or + this.negativeLookaheadAssertionStart(start, end) + or + this.lookbehindAssertionStart(start, end) + or + this.negativeLookbehindAssertionStart(start, end) + or + this.atomicGroupStart(start, end) + or + this.simpleGroupStart(start, end) + } + predicate groupContents(int start, int end, int in_start, int in_end) { this.groupStart(start, in_start) and end = in_end + 1 and @@ -589,6 +503,78 @@ abstract class RegexString extends StringLiteral { this.isGroupEnd(in_end) } + /** Holds if the text in the range start,end is a group */ + predicate group(int start, int end) { + this.groupContents(start, end, _, _) + or + this.emptyGroup(start, end) + } + + /** Gets the number of the group in start,end */ + int getGroupNumber(int start, int end) { + this.group(start, end) and + result = + count(int i | this.group(i, _) and i < start and not this.nonCapturingGroupStart(i, _)) + 1 + } + + /** Gets the name, if it has one, of the group in start,end */ + string getGroupName(int start, int end) { + this.group(start, end) and + exists(int name_end | + this.namedGroupStart(start, name_end) and + result = this.getText().substring(start + 3, name_end - 1) + ) + } + + /** Holds if a negative lookahead is found between `start` and `end` */ + predicate negativeLookaheadAssertionGroup(int start, int end) { + exists(int in_start | this.negativeLookaheadAssertionStart(start, in_start) | + this.groupContents(start, end, in_start, _) + ) + } + + /** Holds if a negative lookbehind is found between `start` and `end` */ + predicate negativeLookbehindAssertionGroup(int start, int end) { + exists(int in_start | this.negativeLookbehindAssertionStart(start, in_start) | + this.groupContents(start, end, in_start, _) + ) + } + + private predicate negativeAssertionGroup(int start, int end) { + exists(int in_start | + this.negativeLookaheadAssertionStart(start, in_start) + or + this.negativeLookbehindAssertionStart(start, in_start) + | + this.groupContents(start, end, in_start, _) + ) + } + + /** Holds if a positive lookahead is found between `start` and `end` */ + predicate positiveLookaheadAssertionGroup(int start, int end) { + exists(int in_start | this.lookaheadAssertionStart(start, in_start) | + this.groupContents(start, end, in_start, _) + ) + } + + /** Holds if a positive lookbehind is found between `start` and `end` */ + predicate positiveLookbehindAssertionGroup(int start, int end) { + exists(int in_start | this.lookbehindAssertionStart(start, in_start) | + this.groupContents(start, end, in_start, _) + ) + } + + /** Holds if the text in the range start, end is a group and can match the empty string. */ + predicate zeroWidthMatch(int start, int end) { + this.emptyGroup(start, end) + or + this.negativeAssertionGroup(start, end) + or + this.positiveLookaheadAssertionGroup(start, end) + or + this.positiveLookbehindAssertionGroup(start, end) + } + private predicate namedBackreference(int start, int end, string name) { this.escapingChar(start) and this.getChar(start + 1) = "k" and @@ -647,15 +633,6 @@ abstract class RegexString extends StringLiteral { this.quote(start, end) } - private predicate quantifier(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { - this.shortQuantifier(start, end, maybe_empty, may_repeat_forever) and - not this.getChar(end) = ["?", "+"] - or - exists(int short_end | this.shortQuantifier(start, short_end, maybe_empty, may_repeat_forever) | - if this.getChar(short_end) = ["?", "+"] then end = short_end + 1 else end = short_end - ) - } - private predicate shortQuantifier( int start, int end, boolean maybe_empty, boolean may_repeat_forever ) { @@ -699,12 +676,13 @@ abstract class RegexString extends StringLiteral { ) } - /** - * Holds if the text in the range start,end is a quantified item, where item is a character, - * a character set or a group. - */ - predicate quantifiedItem(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { - this.quantifiedPart(start, _, end, maybe_empty, may_repeat_forever) + private predicate quantifier(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { + this.shortQuantifier(start, end, maybe_empty, may_repeat_forever) and + not this.getChar(end) = ["?", "+"] + or + exists(int short_end | this.shortQuantifier(start, short_end, maybe_empty, may_repeat_forever) | + if this.getChar(short_end) = ["?", "+"] then end = short_end + 1 else end = short_end + ) } /** @@ -721,6 +699,14 @@ abstract class RegexString extends StringLiteral { this.quantifier(part_end, end, maybe_empty, may_repeat_forever) } + /** + * Holds if the text in the range start,end is a quantified item, where item is a character, + * a character set or a group. + */ + predicate quantifiedItem(int start, int end, boolean maybe_empty, boolean may_repeat_forever) { + this.quantifiedPart(start, _, end, maybe_empty, may_repeat_forever) + } + /** Holds if the range `start`, `end` contains a character, a quantifier, a character set or a group. */ predicate item(int start, int end) { this.quantifiedItem(start, end, _, _) @@ -728,34 +714,6 @@ abstract class RegexString extends StringLiteral { this.baseItem(start, end) and not this.quantifier(end, _, _, _) } - private predicate subsequence(int start, int end) { - ( - start = 0 or - this.groupStart(_, start) or - this.isOptionDivider(start - 1) - ) and - this.item(start, end) - or - exists(int mid | - this.subsequence(start, mid) and - this.item(mid, end) - ) - } - - /** - * Holds if the text in the range start,end is a sequence of 1 or more items, where an item is a character, - * a character set or a group. - */ - predicate sequence(int start, int end) { - this.sequenceOrQuantified(start, end) and - not this.quantifiedItem(start, end, _, _) - } - - private predicate sequenceOrQuantified(int start, int end) { - this.subsequence(start, end) and - not this.itemStart(end) - } - private predicate itemStart(int start) { this.character(start, _) or this.isGroupStart(start) or @@ -776,9 +734,34 @@ abstract class RegexString extends StringLiteral { this.quote(_, end) } - private predicate topLevel(int start, int end) { - this.subalternation(start, end, _) and - not this.isOptionDivider(end) + private predicate isOptionDivider(int i) { this.nonEscapedCharAt(i) = "|" } + + private predicate subsequence(int start, int end) { + ( + start = 0 or + this.groupStart(_, start) or + this.isOptionDivider(start - 1) + ) and + this.item(start, end) + or + exists(int mid | + this.subsequence(start, mid) and + this.item(mid, end) + ) + } + + private predicate sequenceOrQuantified(int start, int end) { + this.subsequence(start, end) and + not this.itemStart(end) + } + + /** + * Holds if the text in the range start,end is a sequence of 1 or more items, where an item is a character, + * a character set or a group. + */ + predicate sequence(int start, int end) { + this.sequenceOrQuantified(start, end) and + not this.quantifiedItem(start, end, _, _) } private predicate subalternation(int start, int end, int itemStart) { @@ -802,6 +785,11 @@ abstract class RegexString extends StringLiteral { ) } + private predicate topLevel(int start, int end) { + this.subalternation(start, end, _) and + not this.isOptionDivider(end) + } + /** * Holds if the text in the range start,end is an alternation */ @@ -818,91 +806,6 @@ abstract class RegexString extends StringLiteral { this.alternation(start, end) and this.subalternation(start, part_end, part_start) } - - /** A part of the regex that may match the start of the string. */ - private predicate firstPart(int start, int end) { - start = 0 and end = this.getText().length() - or - exists(int x | this.firstPart(x, end) | - this.emptyMatchAtStartGroup(x, start) or - this.quantifiedItem(x, start, true, _) or - this.specialCharacter(x, start, "^") - ) - or - exists(int y | this.firstPart(start, y) | - this.item(start, end) - or - this.quantifiedPart(start, end, y, _, _) - ) - or - exists(int x, int y | this.firstPart(x, y) | - this.groupContents(x, y, start, end) - or - this.alternationOption(x, y, start, end) - ) - } - - /** A part of the regex that may match the end of the string. */ - private predicate lastPart(int start, int end) { - start = 0 and end = this.getText().length() - or - exists(int y | this.lastPart(start, y) | - this.emptyMatchAtEndGroup(end, y) - or - this.quantifiedItem(end, y, true, _) - or - this.specialCharacter(end, y, "$") - or - y = end + 2 and this.escapingChar(end) and this.getChar(end + 1) = "Z" - ) - or - exists(int x | - this.lastPart(x, end) and - this.item(start, end) - ) - or - exists(int y | this.lastPart(start, y) | this.quantifiedPart(start, end, y, _, _)) - or - exists(int x, int y | this.lastPart(x, y) | - this.groupContents(x, y, start, end) - or - this.alternationOption(x, y, start, end) - ) - } - - /** - * Holds if the item at [start, end) is one of the first items - * to be matched. - */ - predicate firstItem(int start, int end) { - ( - this.character(start, end) - or - this.quantifiedItem(start, end, _, _) - or - this.charSet(start, end) - or - this.quote(start, end) - ) and - this.firstPart(start, end) - } - - /** - * Holds if the item at [start, end) is one of the last items - * to be matched. - */ - predicate lastItem(int start, int end) { - ( - this.character(start, end) - or - this.quantifiedItem(start, end, _, _) - or - this.charSet(start, end) - or - this.quote(start, end) - ) and - this.lastPart(start, end) - } } /** A string literal used as a regular expression */ From dd200e29d40126d043db442f6b475a75da4e895e Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 11 Feb 2022 16:32:00 +0000 Subject: [PATCH 0312/1618] Improve char set depth calculation --- java/ql/lib/semmle/code/java/regex/regex.qll | 42 ++++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index ce441e0e477..71ec4d1f7d2 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -125,31 +125,47 @@ abstract class RegexString extends StringLiteral { } /** - * Gets the nesting depth of character classes at position `pos` + * Holds if the character at `pos` starts a character set delimiter. + * Result is 1 for `[` and 0 for `]`. */ - private int charSetDepth(int pos) { - pos = -1 and result = 0 + private int charSetDelimiter(int pos) { + result = 1 and this.charSetStart0(pos, _) or - exists(this.getChar(pos)) and - result = - max(int j | - j = 0 or - j = - count(int i | i < pos and this.charSetStart0(i, _)) - - count(int i | i < pos and this.charSetEnd0(i)) - ) + result = -1 and this.charSetEnd0(pos) + } + + /** + * Holds if the char at `pos` is the one-based `index`th occourence of a character set delimiter (`[` or `]`). + * Result is 1 for `[` and -1 for `]`. + */ + private int charSetDelimiter(int index, int pos) { + result = this.charSetDelimiter(pos) and + pos = rank[index](int p | exists(this.charSetDelimiter(p))) + } + + bindingset[x] + int max_zero(int x) { result = max([x, 0]) } + + /** + * Gets the nesting depth of character classes after position `pos`, + * where `pos` is the position of a character set delimiter. + */ + private int charSetDepth(int index, int pos) { + index = 1 and result = max_zero(charSetDelimiter(index, pos)) + or + result = max_zero(charSetDelimiter(index, pos) + charSetDepth(index - 1, _)) } /** Hold if a top-level character set starts between `start` and `end`. */ predicate charSetStart(int start, int end) { this.charSetStart0(start, end) and - this.charSetDepth(start) = 0 + this.charSetDepth(_, start) = 1 } /** Holds if a top-level character set ends at `pos`. */ predicate charSetEnd(int pos) { this.charSetEnd0(pos) and - this.charSetDepth(pos) = 1 + this.charSetDepth(_, pos) = 0 } /** From 9f4da6503042291b5828a0dfb4fe8be6609605cb Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 11 Feb 2022 17:35:38 +0000 Subject: [PATCH 0313/1618] Improve calculation of locations of regex terms --- .../semmle/code/java/regex/RegexTreeView.qll | 16 ++-- java/ql/lib/semmle/code/java/regex/regex.qll | 68 ++++++++++++-- .../regex/RegexParseTests.expected | 90 ++++++++++--------- java/ql/test/library-tests/regex/Test.java | 5 +- 4 files changed, 123 insertions(+), 56 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index fd9b93a142f..c022ba6b2ac 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -188,12 +188,18 @@ class RegExpTerm extends RegExpParent { predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { - // This currently gives incorrect results for string literals including backslashes. TODO: fix that. - // There are also more complex cases where it fails. Handling all of them would be difficult for not much gain. - exists(int re_start, int re_end | + /* + * This is an approximation that handles the simple and common case of single, + * normal string literal written in the source, but does not give correct results in more complex cases + * such as compile-time concatenation, or multi-line string literals. + */ + + exists(int re_start, int re_end, int src_start, int src_end | re.getLocation().hasLocationInfo(filepath, startline, re_start, endline, re_end) and - startcolumn = re_start + start + 1 and - endcolumn = re_start + end + re.sourceCharacter(start, src_start, _) and + re.sourceCharacter(end - 1, _, src_end) and + startcolumn = re_start + src_start and + endcolumn = re_start + src_end - 1 ) } diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 71ec4d1f7d2..9bd49037cdd 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -27,7 +27,6 @@ abstract class RegexString extends StringLiteral { * In order to avoid negative recursion, we return a boolean. * This way, we can refer to `escaping(pos - 1).booleanNot()` * rather than to a negated version of `escaping(pos)`. - * Does not take into account escape characters inside quote sequences. */ private boolean escaping(int pos) { pos = -1 and result = false @@ -104,11 +103,10 @@ abstract class RegexString extends StringLiteral { end = start + 3 } - string nonEscapedCharAt(int i) { - result = this.getText().charAt(i) and + private string nonEscapedCharAt(int i) { + result = this.getChar(i) and not exists(int x, int y | this.escapedCharacter(x, y) and i in [x .. y - 1]) and - not exists(int x, int y | this.quote(x, y) and i in [x .. y - 1]) and - not exists(int x, int y | this.controlEscape(x, y) and i in [x .. y - 1]) + not exists(int x, int y | this.quote(x, y) and i in [x .. y - 1]) } /** Holds if a character set starts between `start` and `end`, including any negation character (`^`). */ @@ -822,6 +820,66 @@ abstract class RegexString extends StringLiteral { this.alternation(start, end) and this.subalternation(start, part_end, part_start) } + + /** + * Gets the `i`th character of this literal as it was written in the source code. + */ + string getSourceChar(int i) { result = this.(StringLiteral).getLiteral().charAt(i) } + + /** + * Helper predicate for `sourceEscapingChar` that + * results in a boolean in order to avoid negative recursion. + */ + private boolean sourceEscaping(int pos) { + pos = -1 and result = false + or + this.getSourceChar(pos) = "\\" and + result = this.sourceEscaping(pos - 1).booleanNot() + or + this.getSourceChar(pos) != "\\" and result = false + } + + /** + * Equivalent of `escapingChar` for the literal source rather than the string value. + * Holds if the character at position `pos` in the source literal is a '\' that is + * actually escaping what comes after it. + */ + private predicate sourceEcapingChar(int pos) { this.sourceEscaping(pos) = true } + + /** + * Holds if an escaped character exists between `start` and `end` in the source iteral. + */ + private predicate sourceEscapedCharacter(int start, int end) { + this.sourceEcapingChar(start) and + (if this.getSourceChar(start + 1) = "u" then end = start + 6 else end = start + 2) + } + + private predicate sourceNonEscapedCharacter(int i) { + exists(this.getSourceChar(i)) and + not exists(int x, int y | this.sourceEscapedCharacter(x, y) and i in [x .. y - 1]) + } + + /** + * Holds if a character is represented between `start` and `end` in the source literal. + */ + private predicate sourceCharacter(int start, int end) { + sourceEscapedCharacter(start, end) + or + sourceNonEscapedCharacter(start) and + end = start + 1 + } + + /** + * Holds if the `i`th character of the string is represented between offsets + * `start` (inclusive) and `end` (exclusive) in the source code of this literal. + * This only gives correct results if the literal is written as a normal single-line string literal; + * without compile-time concatenation involved. + */ + predicate sourceCharacter(int pos, int start, int end) { + exists(this.getChar(pos)) and + sourceCharacter(start, end) and + start = rank[pos + 2](int s | sourceCharacter(s, _)) + } } /** A string literal used as a regular expression */ diff --git a/java/ql/test/library-tests/regex/RegexParseTests.expected b/java/ql/test/library-tests/regex/RegexParseTests.expected index ebd0317bcc2..c6d8322e5c1 100644 --- a/java/ql/test/library-tests/regex/RegexParseTests.expected +++ b/java/ql/test/library-tests/regex/RegexParseTests.expected @@ -1,14 +1,14 @@ parseFailures #select -| Test.java:5:10:5:16 | [A-Z\\d] | [RegExpCharacterClass] | -| Test.java:5:10:5:18 | [A-Z\\d]++ | [RegExpPlus] | +| Test.java:5:10:5:17 | [A-Z\\d] | [RegExpCharacterClass] | +| Test.java:5:10:5:19 | [A-Z\\d]++ | [RegExpPlus] | | Test.java:5:11:5:11 | A | [RegExpConstant,RegExpNormalChar] | | Test.java:5:11:5:13 | A-Z | [RegExpCharacterRange] | | Test.java:5:13:5:13 | Z | [RegExpConstant,RegExpNormalChar] | -| Test.java:5:14:5:15 | \\d | [RegExpCharacterClassEscape] | -| Test.java:6:10:6:39 | \\Q hello world [ *** \\Q ) ( \\E | [RegExpConstant,RegExpQuote] | -| Test.java:7:10:7:21 | [\\Q hi ] \\E] | [RegExpCharacterClass] | -| Test.java:7:11:7:20 | \\Q hi ] \\E | [RegExpConstant,RegExpQuote] | +| Test.java:5:14:5:16 | \\d | [RegExpCharacterClassEscape] | +| Test.java:6:10:6:42 | \\Q hello world [ *** \\Q ) ( \\E | [RegExpConstant,RegExpQuote] | +| Test.java:7:10:7:23 | [\\Q hi ] \\E] | [RegExpCharacterClass] | +| Test.java:7:11:7:22 | \\Q hi ] \\E | [RegExpConstant,RegExpQuote] | | Test.java:8:10:8:12 | []] | [RegExpCharacterClass] | | Test.java:8:11:8:11 | ] | [RegExpConstant,RegExpNormalChar] | | Test.java:9:10:9:13 | [^]] | [RegExpCharacterClass] | @@ -23,33 +23,33 @@ parseFailures | Test.java:10:17:10:17 | f | [RegExpConstant,RegExpNormalChar] | | Test.java:10:18:10:18 | g | [RegExpConstant,RegExpNormalChar] | | Test.java:10:19:10:19 | ] | [RegExpConstant,RegExpNormalChar] | -| Test.java:11:10:11:53 | [abc&&[\\W\\p{Lower}\\P{Space}\\N{degree sign}]] | [RegExpCharacterClass] | -| Test.java:11:10:11:62 | [abc&&[\\W\\p{Lower}\\P{Space}\\N{degree sign}]]\\b7\\b{g}8 | [RegExpSequence] | +| Test.java:11:10:11:57 | [abc&&[\\W\\p{Lower}\\P{Space}\\N{degree sign}]] | [RegExpCharacterClass] | +| Test.java:11:10:11:68 | [abc&&[\\W\\p{Lower}\\P{Space}\\N{degree sign}]]\\b7\\b{g}8 | [RegExpSequence] | | Test.java:11:11:11:11 | a | [RegExpConstant,RegExpNormalChar] | | Test.java:11:12:11:12 | b | [RegExpConstant,RegExpNormalChar] | | Test.java:11:13:11:13 | c | [RegExpConstant,RegExpNormalChar] | | Test.java:11:14:11:14 | & | [RegExpConstant,RegExpNormalChar] | | Test.java:11:15:11:15 | & | [RegExpConstant,RegExpNormalChar] | | Test.java:11:16:11:16 | [ | [RegExpConstant,RegExpNormalChar] | -| Test.java:11:17:11:18 | \\W | [RegExpCharacterClassEscape] | -| Test.java:11:19:11:27 | \\p{Lower} | [RegExpCharacterClassEscape] | -| Test.java:11:28:11:36 | \\P{Space} | [RegExpCharacterClassEscape] | -| Test.java:11:37:11:51 | \\N{degree sign} | [RegExpConstant,RegExpEscape] | -| Test.java:11:52:11:52 | ] | [RegExpConstant,RegExpNormalChar] | -| Test.java:11:54:11:55 | \\b | [RegExpConstant,RegExpEscape] | -| Test.java:11:56:11:56 | 7 | [RegExpConstant,RegExpNormalChar] | -| Test.java:11:57:11:61 | \\b{g} | [RegExpConstant,RegExpEscape] | -| Test.java:11:62:11:62 | 8 | [RegExpConstant,RegExpNormalChar] | -| Test.java:12:10:12:12 | \\cA | [RegExpConstant,RegExpEscape] | -| Test.java:13:10:13:12 | \\c( | [RegExpConstant,RegExpEscape] | -| Test.java:14:10:14:12 | \\c\\ | [RegExpConstant,RegExpEscape] | -| Test.java:14:10:14:16 | \\c\\(ab) | [RegExpSequence] | -| Test.java:14:13:14:16 | (ab) | [RegExpGroup] | -| Test.java:14:14:14:14 | a | [RegExpConstant,RegExpNormalChar] | -| Test.java:14:14:14:15 | ab | [RegExpSequence] | -| Test.java:14:15:14:15 | b | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:17:11:19 | \\W | [RegExpCharacterClassEscape] | +| Test.java:11:20:11:29 | \\p{Lower} | [RegExpCharacterClassEscape] | +| Test.java:11:30:11:39 | \\P{Space} | [RegExpCharacterClassEscape] | +| Test.java:11:40:11:55 | \\N{degree sign} | [RegExpConstant,RegExpEscape] | +| Test.java:11:56:11:56 | ] | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:58:11:60 | \\b | [RegExpConstant,RegExpEscape] | +| Test.java:11:61:11:61 | 7 | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:62:11:67 | \\b{g} | [RegExpConstant,RegExpEscape] | +| Test.java:11:68:11:68 | 8 | [RegExpConstant,RegExpNormalChar] | +| Test.java:12:10:12:13 | \\cA | [RegExpConstant,RegExpEscape] | +| Test.java:13:10:13:13 | \\c( | [RegExpConstant,RegExpEscape] | +| Test.java:14:10:14:14 | \\c\\ | [RegExpConstant,RegExpEscape] | +| Test.java:14:10:14:18 | \\c\\(ab) | [RegExpSequence] | +| Test.java:14:15:14:18 | (ab) | [RegExpGroup] | +| Test.java:14:16:14:16 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:14:16:14:17 | ab | [RegExpSequence] | +| Test.java:14:17:14:17 | b | [RegExpConstant,RegExpNormalChar] | | Test.java:15:10:15:15 | (?>hi) | [RegExpGroup] | -| Test.java:15:10:15:44 | (?>hi)(?hell*?o*+)123\\k | [RegExpSequence] | +| Test.java:15:10:15:45 | (?>hi)(?hell*?o*+)123\\k | [RegExpSequence] | | Test.java:15:13:15:13 | h | [RegExpConstant,RegExpNormalChar] | | Test.java:15:13:15:14 | hi | [RegExpSequence] | | Test.java:15:14:15:14 | i | [RegExpConstant,RegExpNormalChar] | @@ -65,7 +65,7 @@ parseFailures | Test.java:15:34:15:34 | 1 | [RegExpConstant,RegExpNormalChar] | | Test.java:15:35:15:35 | 2 | [RegExpConstant,RegExpNormalChar] | | Test.java:15:36:15:36 | 3 | [RegExpConstant,RegExpNormalChar] | -| Test.java:15:37:15:44 | \\k | [RegExpBackRef] | +| Test.java:15:37:15:45 | \\k | [RegExpBackRef] | | Test.java:16:10:16:10 | a | [RegExpConstant,RegExpNormalChar] | | Test.java:16:10:16:11 | a+ | [RegExpPlus] | | Test.java:16:10:16:108 | a+b*c?d{2}e{3,4}f{,5}g{6,}h+?i*?j??k{7}?l{8,9}?m{,10}?n{11,}?o++p*+q?+r{12}+s{13,14}+t{,15}+u{16,}+ | [RegExpSequence] | @@ -120,20 +120,22 @@ parseFailures | Test.java:17:30:17:35 | (?hi)(?hell*?o*+)123\\k", "a+b*c?d{2}e{3,4}f{,5}g{6,}h+?i*?j??k{7}?l{8,9}?m{,10}?n{11,}?o++p*+q?+r{12}+s{13,14}+t{,15}+u{16,}+", "(?i)(?=a)(?!b)(?<=c)(? Date: Fri, 11 Feb 2022 17:36:44 +0000 Subject: [PATCH 0314/1618] Move test cases to their own directory to avoid conflict --- java/ql/test/library-tests/regex/Test.java | 122 ++++++++++++++---- java/ql/test/library-tests/regex/Test2.java | 104 --------------- .../{ => parser}/RegexParseTests.expected | 0 .../regex/{ => parser}/RegexParseTests.ql | 0 .../test/library-tests/regex/parser/Test.java | 28 ++++ 5 files changed, 127 insertions(+), 127 deletions(-) delete mode 100644 java/ql/test/library-tests/regex/Test2.java rename java/ql/test/library-tests/regex/{ => parser}/RegexParseTests.expected (100%) rename java/ql/test/library-tests/regex/{ => parser}/RegexParseTests.ql (100%) create mode 100644 java/ql/test/library-tests/regex/parser/Test.java diff --git a/java/ql/test/library-tests/regex/Test.java b/java/ql/test/library-tests/regex/Test.java index 4609856f682..fd9be63b68b 100644 --- a/java/ql/test/library-tests/regex/Test.java +++ b/java/ql/test/library-tests/regex/Test.java @@ -1,28 +1,104 @@ +package generatedtest; + +import java.util.regex.Matcher; import java.util.regex.Pattern; -class Test { - static String[] regs = { - "[A-Z\\d]++", - "\\Q hello world [ *** \\Q ) ( \\E", - "[\\Q hi ] \\E]", - "[]]", - "[^]]", - "[abc[defg]]", - "[abc&&[\\W\\p{Lower}\\P{Space}\\N{degree sign}]]\\b7\\b{g}8", - "\\cA", - "\\c(", - "\\c\\(ab)", - "(?>hi)(?hell*?o*+)123\\k", - "a+b*c?d{2}e{3,4}f{,5}g{6,}h+?i*?j??k{7}?l{8,9}?m{,10}?n{11,}?o++p*+q?+r{12}+s{13,14}+t{,15}+u{16,}+", - "(?i)(?=a)(?!b)(?<=c)(?hi)(?hell*?o*+)123\\k", + "a+b*c?d{2}e{3,4}f{,5}g{6,}h+?i*?j??k{7}?l{8,9}?m{,10}?n{11,}?o++p*+q?+r{12}+s{13,14}+t{,15}+u{16,}+", + "(?i)(?=a)(?!b)(?<=c)(? Date: Mon, 14 Feb 2022 15:15:48 +0000 Subject: [PATCH 0315/1618] Support more escaped characters --- .../semmle/code/java/regex/RegexTreeView.qll | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index c022ba6b2ac..a6d459cfeb8 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -480,10 +480,12 @@ class RegExpEscape extends RegExpNormalChar { or this.getUnescaped() = "t" and result = "\t" or - // TODO: Find a way to include a formfeed character - // also the alert/bell character for \a and escape character for \e. - // this.getUnescaped() = "f" and result = " " - // or + this.getUnescaped() = "f" and result = 12.toUnicode() // form feed + or + this.getUnescaped() = "a" and result = 7.toUnicode() // alert/bell + or + this.getUnescaped() = "e" and result = 27.toUnicode() // escape (0x1B) + or this.isUnicode() and result = this.getUnicode() } @@ -664,6 +666,7 @@ class RegExpCharacterRange extends RegExpTerm, TRegExpCharacterRange { /** * A normal character in a regular expression, that is, a character * without special meaning. This includes escaped characters. + * It also includes escape sequences that represent character classes. * * Examples: * ``` @@ -727,11 +730,8 @@ class RegExpConstant extends RegExpTerm { string value; RegExpConstant() { - (this = TRegExpNormalChar(re, start, end) or this = TRegExpQuote(re, start, end)) and - not this instanceof RegExpCharacterClassEscape and - // exclude chars in quantifiers - // TODO: push this into regex library - (value = this.(RegExpNormalChar).getValue() or value = this.(RegExpQuote).getValue()) + (value = this.(RegExpNormalChar).getValue() or value = this.(RegExpQuote).getValue()) and + not this instanceof RegExpCharacterClassEscape } /** From 5a4316d94508b4d6467ee3858e6753c02af2063f Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 15 Feb 2022 13:06:28 +0000 Subject: [PATCH 0316/1618] Add test cases for exponential redos query --- .../security/CWE-730/PolynomialReDoS.expected | 0 .../security/CWE-730/PolynomialReDoS.ql | 29 ++ .../security/CWE-730/ReDoS.expected | 0 .../query-tests/security/CWE-730/ReDoS.ql | 29 ++ .../query-tests/security/CWE-730/Test.java | 393 ++++++++++++++++++ 5 files changed, 451 insertions(+) create mode 100644 java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.expected create mode 100644 java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql create mode 100644 java/ql/test/query-tests/security/CWE-730/ReDoS.expected create mode 100644 java/ql/test/query-tests/security/CWE-730/ReDoS.ql create mode 100644 java/ql/test/query-tests/security/CWE-730/Test.java diff --git a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.expected b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql new file mode 100644 index 00000000000..98865781dbe --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql @@ -0,0 +1,29 @@ +import java +import TestUtilities.InlineExpectationsTest +import TestUtilities.InlineFlowTest +import semmle.code.java.security.performance.SuperlinearBackTracking +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.regex.RegexTreeView +import semmle.code.java.regex.RegexFlowConfigs +import semmle.code.java.dataflow.FlowSources + +class PolynomialRedosSink extends DataFlow::Node { + RegExpLiteral reg; + + PolynomialRedosSink() { regexMatchedAgainst(reg.getRegex(), this.asExpr()) } + // RegExpTerm getRegExp() { result = reg } +} + +class PolynomialRedosConfig extends TaintTracking::Configuration { + PolynomialRedosConfig() { this = "PolynomialRodisConfig" } + + override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof PolynomialRedosSink } +} + +class HasFlowTest extends InlineFlowTest { + override DataFlow::Configuration getTaintFlowConfig() { result = any(PolynomialRedosConfig c) } + + override DataFlow::Configuration getValueFlowConfig() { none() } +} diff --git a/java/ql/test/query-tests/security/CWE-730/ReDoS.expected b/java/ql/test/query-tests/security/CWE-730/ReDoS.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/query-tests/security/CWE-730/ReDoS.ql b/java/ql/test/query-tests/security/CWE-730/ReDoS.ql new file mode 100644 index 00000000000..79cb8243cd7 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-730/ReDoS.ql @@ -0,0 +1,29 @@ +import java +import TestUtilities.InlineExpectationsTest +import semmle.code.java.security.performance.ExponentialBackTracking +import semmle.code.java.regex.regex + +class HasExpRedos extends InlineExpectationsTest { + HasExpRedos() { this = "HasExpRedos" } + + override string getARelevantTag() { result = ["hasExpRedos", "hasParseFailure"] } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasExpRedos" and + exists(RegExpTerm t, string pump, State s, string prefixMsg | + hasReDoSResult(t, pump, s, prefixMsg) and + not t.getRegex().getAMode() = "VERBOSE" and + value = "" and + location = t.getLocation() and + element = t.toString() + ) + or + tag = "hasParseFailure" and + exists(Regex r | + r.failedToParse(_) and + value = "" and + location = r.getLocation() and + element = r.toString() + ) + } +} diff --git a/java/ql/test/query-tests/security/CWE-730/Test.java b/java/ql/test/query-tests/security/CWE-730/Test.java new file mode 100644 index 00000000000..e8e4a7bcf1d --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-730/Test.java @@ -0,0 +1,393 @@ + +import java.util.regex.Pattern; + +class Test { + static String[] regs = { + + // NOT GOOD; attack: "_" + "__".repeat(100) + // Adapted from marked (https://github.com/markedjs/marked), which is licensed + // under the MIT license; see file marked-LICENSE. + "^\\b_((?:__|[\\s\\S])+?)_\\b|^\\*((?:\\*\\*|[\\s\\S])+?)\\*(?!\\*)", // $ hasExpRedos + + // GOOD + // Adapted from marked (https://github.com/markedjs/marked), which is licensed + // under the MIT license; see file marked-LICENSE. + "^\\b_((?:__|[^_])+?)_\\b|^\\*((?:\\*\\*|[^*])+?)\\*(?!\\*)", + + // GOOD - there is no witness in the end that could cause the regexp to not match + // Adapted from brace-expansion (https://github.com/juliangruber/brace-expansion), + // which is licensed under the MIT license; see file brace-expansion-LICENSE. + "(.*,)+.+", + + // NOT GOOD; attack: " '" + "\\\\".repeat(100) + // Adapted from CodeMirror (https://github.com/codemirror/codemirror), + // which is licensed under the MIT license; see file CodeMirror-LICENSE. + "^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\\\\\|\\\\.)+\"|'(?:[^'\\\\]|\\\\\\\\|\\\\.)+'|\\((?:[^)\\\\]|\\\\\\\\|\\\\.)+\\)))?", // $ hasExpRedos + + // GOOD + // Adapted from lulucms2 (https://github.com/yiifans/lulucms2). + "\\(\\*(?:[\\s\\S]*?\\(\\*[\\s\\S]*?\\*\\))*[\\s\\S]*?\\*\\)", + + // GOOD + // Adapted from jest (https://github.com/facebook/jest), which is licensed + // under the MIT license; see file jest-LICENSE. + "^ *(\\S.*\\|.*)\\n *([-:]+ *\\|[-| :]*)\\n((?:.*\\|.*(?:\\n|$))*)\\n*", + + // NOT GOOD, variant of good3; attack: "a|\n:|\n" + "||\n".repeat(100) + "^ *(\\S.*\\|.*)\\n *([-:]+ *\\|[-| :]*)\\n((?:.*\\|.*(?:\\n|$))*)a", // $ hasExpRedos + + // NOT GOOD; attack: "/" + "\\/a".repeat(100) + // Adapted from ANodeBlog (https://github.com/gefangshuai/ANodeBlog), + // which is licensed under the Apache License 2.0; see file ANodeBlog-LICENSE. + "\\/(?![ *])(\\\\\\/|.)*?\\/[gim]*(?=\\W|$)", // $ hasExpRedos + + // NOT GOOD; attack: "##".repeat(100) + "\na" + // Adapted from CodeMirror (https://github.com/codemirror/codemirror), + // which is licensed under the MIT license; see file CodeMirror-LICENSE. + "^([\\s\\[\\{\\(]|#.*)*$", // $ hasExpRedos + + // GOOD + "(\\r\\n|\\r|\\n)+", + + // BAD - PoC: `node -e "/((?:[^\"\']|\".*?\"|\'.*?\')*?)([(,)]|$)/.test(\"'''''''''''''''''''''''''''''''''''''''''''''\\\"\");"`. It's complicated though, because the regexp still matches something, it just matches the empty-string after the attack string. + + // NOT GOOD; attack: "a" + "[]".repeat(100) + ".b\n" + // Adapted from Knockout (https://github.com/knockout/knockout), which is + // licensed under the MIT license; see file knockout-LICENSE + "^[\\_$a-z][\\_$a-z0-9]*(\\[.*?\\])*(\\.[\\_$a-z][\\_$a-z0-9]*(\\[.*?\\])*)*$", // $ hasExpRedos + + // GOOD + "(a|.)*", + + // Testing the NFA - only some of the below are detected. + "^([a-z]+)+$", // $ hasExpRedos + "^([a-z]*)*$", // $ hasExpRedos + "^([a-zA-Z0-9])(([\\\\-.]|[_]+)?([a-zA-Z0-9]+))*(@){1}[a-z0-9]+[.]{1}(([a-z]{2,3})|([a-z]{2,3}[.]{1}[a-z]{2,3}))$", // $ hasExpRedos + "^(([a-z])+.)+[A-Z]([a-z])+$", // $ hasExpRedos + + // NOT GOOD; attack: "[" + "][".repeat(100) + "]!" + // Adapted from Prototype.js (https://github.com/prototypejs/prototype), which + // is licensed under the MIT license; see file Prototype.js-LICENSE. + "(([\\w#:.~>+()\\s-]+|\\*|\\[.*?\\])+)\\s*(,|$)", // $ hasExpRedos + + // NOT GOOD; attack: "'" + "\\a".repeat(100) + '"' + // Adapted from Prism (https://github.com/PrismJS/prism), which is licensed + // under the MIT license; see file Prism-LICENSE. + "(\"|')(\\\\?.)*?\\1", // $ hasExpRedos + + // NOT GOOD + "(b|a?b)*c", // $ hasExpRedos + + // NOT GOOD + "(a|aa?)*b", // $ hasExpRedos + + // GOOD + "(.|\\n)*!", + + // NOT GOOD; attack: "\n".repeat(100) + "." + "(?s)(.|\\n)*!", // $ hasExpRedos + + // GOOD + "([\\w.]+)*", + + // NOT GOOD + "(a|aa?)*b", // $ hasExpRedos + + // NOT GOOD + "(([\\s\\S]|[^a])*)\"", // $ hasExpRedos + + // GOOD - there is no witness in the end that could cause the regexp to not match + "([^\"']+)*", + + // NOT GOOD + "((.|[^a])*)\"", // $ hasExpRedos + + // GOOD + "((a|[^a])*)\"", + + // NOT GOOD + "((b|[^a])*)\"", // $ hasExpRedos + + // NOT GOOD + "((G|[^a])*)\"", // $ hasExpRedos + + // NOT GOOD + "(([0-9]|[^a])*)\"", // $ hasExpRedos + + // NOT GOOD + "(?:=(?:([!#\\$%&'\\*\\+\\-\\.\\^_`\\|~0-9A-Za-z]+)|\"((?:\\\\[\\x00-\\x7f]|[^\\x00-\\x08\\x0a-\\x1f\\x7f\"])*)\"))?", // $ MISSING: hasExpRedos + + // NOT GOOD + "\"((?:\\\\[\\x00-\\x7f]|[^\\x00-\\x08\\x0a-\\x1f\\x7f\"])*)\"", // $ MISSING: hasExpRedos + + // GOOD + "\"((?:\\\\[\\x00-\\x7f]|[^\\x00-\\x08\\x0a-\\x1f\\x7f\"\\\\])*)\"", + + // NOT GOOD + "(([a-z]|[d-h])*)\"", // $ hasExpRedos + + // NOT GOOD + "(([^a-z]|[^0-9])*)\"", // $ hasExpRedos + + // NOT GOOD + "((\\d|[0-9])*)\"", // $ hasExpRedos + + // NOT GOOD + "((\\s|\\s)*)\"", // $ hasExpRedos + + // NOT GOOD + "((\\w|G)*)\"", // $ hasExpRedos + + // GOOD + "((\\s|\\d)*)\"", + + // NOT GOOD + "((\\d|\\w)*)\"", // $ hasExpRedos + + // NOT GOOD + "((\\d|5)*)\"", // $ hasExpRedos + + // NOT GOOD + "((\\s|[\\f])*)\"", // $ hasExpRedos + + // NOT GOOD - but not detected (likely because \v is a character class in Java rather than a specific character in other langs) + "((\\s|[\\v]|\\\\v)*)\"", // $ MISSING: hasExpRedos + + // NOT GOOD + "((\\f|[\\f])*)\"", // $ hasExpRedos + + // NOT GOOD + "((\\W|\\D)*)\"", // $ hasExpRedos + + // NOT GOOD + "((\\S|\\w)*)\"", // $ hasExpRedos + + // NOT GOOD + "((\\S|[\\w])*)\"", // $ hasExpRedos + + // NOT GOOD + "((1s|[\\da-z])*)\"", // $ hasExpRedos + + // NOT GOOD + "((0|[\\d])*)\"", // $ hasExpRedos + + // NOT GOOD + "(([\\d]+)*)\"", // $ hasExpRedos + + // GOOD - there is no witness in the end that could cause the regexp to not match + "(\\d+(X\\d+)?)+", + + // GOOD - there is no witness in the end that could cause the regexp to not match + "([0-9]+(X[0-9]*)?)*", + + // GOOD + "^([^>]+)*(>|$)", + + // NOT GOOD + "^([^>a]+)*(>|$)", // $ hasExpRedos + + // NOT GOOD + "(\\n\\s*)+$", // $ hasExpRedos + + // NOT GOOD + "^(?:\\s+|#.*|\\(\\?#[^)]*\\))*(?:[?*+]|\\{\\d+(?:,\\d*)?})", // $ hasExpRedos + + // NOT GOOD + "\\{\\[\\s*([a-zA-Z]+)\\(([a-zA-Z]+)\\)((\\s*([a-zA-Z]+)\\: ?([ a-zA-Z{}]+),?)+)*\\s*\\]\\}", // $ hasExpRedos + + // NOT GOOD + "(a+|b+|c+)*c", // $ hasExpRedos + + // NOT GOOD + "(((a+a?)*)+b+)", // $ hasExpRedos + + // NOT GOOD + "(a+)+bbbb", // $ hasExpRedos + + // GOOD + "(a+)+aaaaa*a+", + + // NOT GOOD + "(a+)+aaaaa$", // $ hasExpRedos + + // GOOD + "(\\n+)+\\n\\n", + + // NOT GOOD + "(\\n+)+\\n\\n$", // $ hasExpRedos + + // NOT GOOD + "([^X]+)*$", // $ hasExpRedos + + // NOT GOOD + "(([^X]b)+)*$", // $ hasExpRedos + + // GOOD + "(([^X]b)+)*($|[^X]b)", + + // NOT GOOD + "(([^X]b)+)*($|[^X]c)", // $ hasExpRedos + + // GOOD + "((ab)+)*ababab", + + // GOOD + "((ab)+)*abab(ab)*(ab)+", + + // GOOD + "((ab)+)*", + + // NOT GOOD + "((ab)+)*$", // $ hasExpRedos + + // GOOD + "((ab)+)*[a1][b1][a2][b2][a3][b3]", + + // NOT GOOD + "([\\n\\s]+)*(.)", // $ hasExpRedos + + // GOOD - any witness passes through the accept state. + "(A*A*X)*", + + // GOOD + "([^\\\\\\]]+)*", + + // NOT GOOD + "(\\w*foobarbaz\\w*foobarbaz\\w*foobarbaz\\w*foobarbaz\\s*foobarbaz\\d*foobarbaz\\w*)+-", // $ hasExpRedos + + // NOT GOOD + "(.thisisagoddamnlongstringforstresstestingthequery|\\sthisisagoddamnlongstringforstresstestingthequery)*-", // $ hasExpRedos + + // NOT GOOD + "(thisisagoddamnlongstringforstresstestingthequery|this\\w+query)*-", // $ hasExpRedos + + // GOOD + "(thisisagoddamnlongstringforstresstestingthequery|imanotherbutunrelatedstringcomparedtotheotherstring)*-", + + // GOOD (but false positive caused by the extractor converting all four unpaired surrogates to \uFFFD) + "foo([\uDC66\uDC67]|[\uDC68\uDC69])*foo", // $ SPURIOUS: hasExpRedos + + // GOOD (but false positive caused by the extractor converting all four unpaired surrogates to \uFFFD) + "foo((\uDC66|\uDC67)|(\uDC68|\uDC69))*foo", // $ SPURIOUS: hasExpRedos + + // NOT GOOD (but cannot currently construct a prefix) + "a{2,3}(b+)+X", // $ hasExpRedos + + // NOT GOOD (and a good prefix test) + "^<(\\w+)((?:\\s+\\w+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)>", // $ hasExpRedos + + // GOOD + "(a+)*[\\s\\S][\\s\\S][\\s\\S]?", + + // GOOD - but we fail to see that repeating the attack string ends in the "accept any" state (due to not parsing the range `[\s\S]{2,3}`). + "(a+)*[\\s\\S]{2,3}", // $ SPURIOUS: hasExpRedos + + // GOOD - but we spuriously conclude that a rejecting suffix exists (due to not parsing the range `[\s\S]{2,}` when constructing the NFA). + "(a+)*([\\s\\S]{2,}|X)$", // $ SPURIOUS: hasExpRedos + + // GOOD + "(a+)*([\\s\\S]*|X)$", + + // NOT GOOD + "((a+)*$|[\\s\\S]+)", // $ hasExpRedos + + // GOOD - but still flagged. The only change compared to the above is the order of alternatives, which we don't model. + "([\\s\\S]+|(a+)*$)", // $ SPURIOUS: hasExpRedos + + // GOOD + "((;|^)a+)+$", + + // NOT GOOD (a good prefix test) + "(^|;)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(0|1)(e+)+f", // $ hasExpRedos + + // NOT GOOD + "^ab(c+)+$", // $ hasExpRedos + + // NOT GOOD + "(\\d(\\s+)*){20}", // $ hasExpRedos + + // GOOD - but we spuriously conclude that a rejecting suffix exists. + "(([^/]|X)+)(\\/[\\s\\S]*)*$", // $ SPURIOUS: hasExpRedos + + // GOOD - but we spuriously conclude that a rejecting suffix exists. + "^((x([^Y]+)?)*(Y|$))", // $ SPURIOUS: hasExpRedos + + // NOT GOOD + "(a*)+b", // $ hasExpRedos + + // NOT GOOD + "foo([\\w-]*)+bar", // $ hasExpRedos + + // NOT GOOD + "((ab)*)+c", // $ hasExpRedos + + // NOT GOOD + "(a?a?)*b", // $ hasExpRedos + + // GOOD + "(a?)*b", + + // NOT GOOD - but not detected + "(c?a?)*b", // $ MISSING: hasExpRedos + + // NOT GOOD + "(?:a|a?)+b", // $ hasExpRedos + + // NOT GOOD - but not detected. + "(a?b?)*$", // $ MISSING: hasExpRedos + + // NOT GOOD + "PRE(([a-c]|[c-d])T(e?e?e?e?|X))+(cTcT|cTXcTX$)", // $ hasExpRedos + + // NOT GOOD + "^((a)+\\w)+$", // $ hasExpRedos + + // NOT GOOD + "^(b+.)+$", // $ hasExpRedos + + // GOOD + "a*b", + + // All 4 bad combinations of nested * and + + "(a*)*b", // $ hasExpRedos + "(a+)*b", // $ hasExpRedos + "(a*)+b", // $ hasExpRedos + "(a+)+b", // $ hasExpRedos + + // GOOD + "(a|b)+", + "(?:[\\s;,\"'<>(){}|\\[\\]@=+*]|:(?![/\\\\]))+", + + "^((?:a{|-)|\\w\\{)+X$", // $ hasParseFailure + "^((?:a{0|-)|\\w\\{\\d)+X$", // $ hasParseFailure + "^((?:a{0,|-)|\\w\\{\\d,)+X$", // $ hasParseFailure + "^((?:a{0,2|-)|\\w\\{\\d,\\d)+X$", // $ hasParseFailure + + // GOOD + "^((?:a{0,2}|-)|\\w\\{\\d,\\d\\})+X$", + + // NOT GOOD + "X(\\u0061|a)*Y", // $ hasExpRedos + + // GOOD + "X(\\u0061|b)+Y", + + // GOOD + "(\"[^\"]*?\"|[^\"\\s]+)+(?=\\s*|\\s*$)", + + // BAD + "/(\"[^\"]*?\"|[^\"\\s]+)+(?=\\s*|\\s*$)X", // $ hasExpRedos + "/(\"[^\"]*?\"|[^\"\\s]+)+(?=X)", // $ hasExpRedos + + // BAD + "\\A(\\d|0)*x", // $ hasExpRedos + "(\\d|0)*\\Z", // $ hasExpRedos + "\\b(\\d|0)*x", // $ hasExpRedos + }; + + void test() { + for (int i = 0; i < regs.length; i++) { + Pattern.compile(regs[i]); + } + } +} From e23162d91bc450b05bb18b7aabc5d3b4039fbc17 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 15 Feb 2022 17:50:50 +0000 Subject: [PATCH 0317/1618] Add test cases for PolynomialRedos dataflow logic; make fixes --- .../code/java/regex/RegexFlowConfigs.qll | 16 ++--- .../CWE-730/{Test.java => ExpRedosTest.java} | 3 +- .../security/CWE-730/PolyRedosTest.java | 35 ++++++++++ .../test/query-tests/security/CWE-730/options | 1 + .../com/google/common/base/CharMatcher.java | 53 +++++++++++++++ .../com/google/common/base/Splitter.java | 67 ++++++++----------- 6 files changed, 125 insertions(+), 50 deletions(-) rename java/ql/test/query-tests/security/CWE-730/{Test.java => ExpRedosTest.java} (99%) create mode 100644 java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java create mode 100644 java/ql/test/query-tests/security/CWE-730/options create mode 100644 java/ql/test/stubs/guava-30.0/com/google/common/base/CharMatcher.java diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index f86d787a96b..bce55552acd 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -37,7 +37,7 @@ abstract class RegexMatchMethodAccess extends MethodAccess { Method m; RegexMatchMethodAccess() { - this.getMethod().overrides*(m) and + this.getMethod().getSourceDeclaration().overrides*(m) and m.hasQualifiedName(package, type, name) and regexArg in [-1 .. m.getNumberOfParameters() - 1] and stringArg in [-1 .. m.getNumberOfParameters() - 1] @@ -79,9 +79,9 @@ private class JdkRegexMatchMethodAccess extends RegexMatchMethodAccess { or name = "matches" and regexArg = 0 and stringArg = 1 or - name = "split" and regexArg = 0 and stringArg = 1 + name = "split" and regexArg = -1 and stringArg = 0 or - name = "splitAsStream" and regexArg = 0 and stringArg = 1 + name = "splitAsStream" and regexArg = -1 and stringArg = 0 ) or package = "java.lang" and @@ -90,7 +90,7 @@ private class JdkRegexMatchMethodAccess extends RegexMatchMethodAccess { regexArg = 0 and stringArg = -1 or - package = "java.util" and + package = "java.util.function" and type = "Predicate" and name = "test" and regexArg = -1 and @@ -101,7 +101,7 @@ private class JdkRegexMatchMethodAccess extends RegexMatchMethodAccess { private class JdkRegexFlowStep extends RegexAdditionalFlowStep { override predicate step(DataFlow::Node node1, DataFlow::Node node2) { exists(MethodAccess ma, Method m, string package, string type, string name, int arg | - ma.getMethod().overrides*(m) and + ma.getMethod().getSourceDeclaration().overrides*(m) and m.hasQualifiedName(package, type, name) and node1.asExpr() = argOf(ma, arg) and node2.asExpr() = ma @@ -116,7 +116,7 @@ private class JdkRegexFlowStep extends RegexAdditionalFlowStep { arg = 0 ) or - package = "java.util" and + package = "java.util.function" and type = "Predicate" and name = ["and", "or", "not", "negate"] and arg = [-1, 0] @@ -126,7 +126,7 @@ private class JdkRegexFlowStep extends RegexAdditionalFlowStep { private class GuavaRegexMatchMethodAccess extends RegexMatchMethodAccess { GuavaRegexMatchMethodAccess() { - package = "com.google.common.collect" and + package = "com.google.common.base" and regexArg = -1 and stringArg = 0 and type = ["Splitter", "Splitter$MapSplitter"] and @@ -137,7 +137,7 @@ private class GuavaRegexMatchMethodAccess extends RegexMatchMethodAccess { private class GuavaRegexFlowStep extends RegexAdditionalFlowStep { override predicate step(DataFlow::Node node1, DataFlow::Node node2) { exists(MethodAccess ma, Method m, string package, string type, string name, int arg | - ma.getMethod().overrides*(m) and + ma.getMethod().getSourceDeclaration().overrides*(m) and m.hasQualifiedName(package, type, name) and node1.asExpr() = argOf(ma, arg) and node2.asExpr() = ma diff --git a/java/ql/test/query-tests/security/CWE-730/Test.java b/java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java similarity index 99% rename from java/ql/test/query-tests/security/CWE-730/Test.java rename to java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java index e8e4a7bcf1d..846f6139d08 100644 --- a/java/ql/test/query-tests/security/CWE-730/Test.java +++ b/java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java @@ -1,7 +1,6 @@ - import java.util.regex.Pattern; -class Test { +class ExpRedosTest { static String[] regs = { // NOT GOOD; attack: "_" + "__".repeat(100) diff --git a/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java new file mode 100644 index 00000000000..a3d9872c8e9 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java @@ -0,0 +1,35 @@ +import java.util.regex.Pattern; +import java.util.function.Predicate; +import javax.servlet.http.HttpServletRequest; +import com.google.common.base.Splitter; + +class PolyRedosTest { + void test(HttpServletRequest request) { + String tainted = request.getParameter("inp"); + String reg = "a\\.\\d+E?\\d+b"; + Predicate dummyPred = (s -> s.length() % 7 == 0); + + tainted.matches(reg); // $ hasTaintFlow + tainted.split(reg); // $ hasTaintFlow + tainted.split(reg, 7); // $ hasTaintFlow + Pattern.matches(reg, tainted); // $ hasTaintFlow + Pattern.compile(reg).matcher(tainted).matches(); // $ hasTaintFlow + Pattern.compile(reg).split(tainted); // $ hasTaintFlow + Pattern.compile(reg, Pattern.DOTALL).split(tainted); // $ hasTaintFlow + Pattern.compile(reg).split(tainted, 7); // $ hasTaintFlow + Pattern.compile(reg).splitAsStream(tainted); // $ hasTaintFlow + Pattern.compile(reg).asPredicate().test(tainted); // $ hasTaintFlow + Pattern.compile(reg).asMatchPredicate().negate().and(dummyPred).or(dummyPred).test(tainted); // $ hasTaintFlow + Predicate.not(dummyPred.and(dummyPred.or(Pattern.compile(reg).asPredicate()))).test(tainted); // $ hasTaintFlow + + Splitter.on(Pattern.compile(reg)).split(tainted); // $ hasTaintFlow + Splitter.on(reg).split(tainted); + Splitter.onPattern(reg).split(tainted); // $ hasTaintFlow + Splitter.onPattern(reg).splitToList(tainted); // $ hasTaintFlow + Splitter.onPattern(reg).limit(7).omitEmptyStrings().trimResults().split(tainted); // $ hasTaintFlow + Splitter.onPattern(reg).withKeyValueSeparator(" => ").split(tainted); // $ hasTaintFlow + Splitter.on(";").withKeyValueSeparator(reg).split(tainted); + Splitter.on(";").withKeyValueSeparator(Splitter.onPattern(reg)).split(tainted); // $ hasTaintFlow + + } +} \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-730/options b/java/ql/test/query-tests/security/CWE-730/options new file mode 100644 index 00000000000..2f7d22dc61c --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-730/options @@ -0,0 +1 @@ +// semmle-extractor-options: --javac-args -cp ${testdir}/../../../stubs/servlet-api-2.4:${testdir}/../../../stubs/guava-30.0 \ No newline at end of file diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/base/CharMatcher.java b/java/ql/test/stubs/guava-30.0/com/google/common/base/CharMatcher.java new file mode 100644 index 00000000000..bcc9a0f30b4 --- /dev/null +++ b/java/ql/test/stubs/guava-30.0/com/google/common/base/CharMatcher.java @@ -0,0 +1,53 @@ +// Generated automatically from com.google.common.base.CharMatcher for testing purposes + +package com.google.common.base; + +import com.google.common.base.Predicate; + +abstract public class CharMatcher implements Predicate +{ + protected CharMatcher(){} + public CharMatcher and(CharMatcher p0){ return null; } + public CharMatcher negate(){ return null; } + public CharMatcher or(CharMatcher p0){ return null; } + public CharMatcher precomputed(){ return null; } + public String collapseFrom(CharSequence p0, char p1){ return null; } + public String removeFrom(CharSequence p0){ return null; } + public String replaceFrom(CharSequence p0, CharSequence p1){ return null; } + public String replaceFrom(CharSequence p0, char p1){ return null; } + public String retainFrom(CharSequence p0){ return null; } + public String toString(){ return null; } + public String trimAndCollapseFrom(CharSequence p0, char p1){ return null; } + public String trimFrom(CharSequence p0){ return null; } + public String trimLeadingFrom(CharSequence p0){ return null; } + public String trimTrailingFrom(CharSequence p0){ return null; } + public abstract boolean matches(char p0); + public boolean apply(Character p0){ return false; } + public boolean matchesAllOf(CharSequence p0){ return false; } + public boolean matchesAnyOf(CharSequence p0){ return false; } + public boolean matchesNoneOf(CharSequence p0){ return false; } + public int countIn(CharSequence p0){ return 0; } + public int indexIn(CharSequence p0){ return 0; } + public int indexIn(CharSequence p0, int p1){ return 0; } + public int lastIndexIn(CharSequence p0){ return 0; } + public static CharMatcher any(){ return null; } + public static CharMatcher anyOf(CharSequence p0){ return null; } + public static CharMatcher ascii(){ return null; } + public static CharMatcher breakingWhitespace(){ return null; } + public static CharMatcher digit(){ return null; } + public static CharMatcher forPredicate(Predicate p0){ return null; } + public static CharMatcher inRange(char p0, char p1){ return null; } + public static CharMatcher invisible(){ return null; } + public static CharMatcher is(char p0){ return null; } + public static CharMatcher isNot(char p0){ return null; } + public static CharMatcher javaDigit(){ return null; } + public static CharMatcher javaIsoControl(){ return null; } + public static CharMatcher javaLetter(){ return null; } + public static CharMatcher javaLetterOrDigit(){ return null; } + public static CharMatcher javaLowerCase(){ return null; } + public static CharMatcher javaUpperCase(){ return null; } + public static CharMatcher none(){ return null; } + public static CharMatcher noneOf(CharSequence p0){ return null; } + public static CharMatcher singleWidth(){ return null; } + public static CharMatcher whitespace(){ return null; } +} diff --git a/java/ql/test/stubs/guava-30.0/com/google/common/base/Splitter.java b/java/ql/test/stubs/guava-30.0/com/google/common/base/Splitter.java index 521b6a605a5..0575f99cffd 100644 --- a/java/ql/test/stubs/guava-30.0/com/google/common/base/Splitter.java +++ b/java/ql/test/stubs/guava-30.0/com/google/common/base/Splitter.java @@ -1,48 +1,35 @@ -/* - * Copyright (C) 2009 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ +// Generated automatically from com.google.common.base.Splitter for testing purposes package com.google.common.base; -import java.util.Iterator; +import com.google.common.base.CharMatcher; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; +import java.util.stream.Stream; -public final class Splitter { - - public static Splitter on(final String separator) { - return null; - } - - public Splitter omitEmptyStrings() { - return null; - } - - public Iterable split(final CharSequence sequence) { - return null; - } - - public List splitToList(CharSequence sequence) { - return null; - } - - public MapSplitter withKeyValueSeparator(String separator) { - return null; - } - - public static final class MapSplitter { - public Map split(CharSequence sequence) { - return null; +public class Splitter +{ + protected Splitter() {} + public Iterable split(CharSequence p0){ return null; } + public List splitToList(CharSequence p0){ return null; } + public Splitter limit(int p0){ return null; } + public Splitter omitEmptyStrings(){ return null; } + public Splitter trimResults(){ return null; } + public Splitter trimResults(CharMatcher p0){ return null; } + public Splitter.MapSplitter withKeyValueSeparator(Splitter p0){ return null; } + public Splitter.MapSplitter withKeyValueSeparator(String p0){ return null; } + public Splitter.MapSplitter withKeyValueSeparator(char p0){ return null; } + public Stream splitToStream(CharSequence p0){ return null; } + public static Splitter fixedLength(int p0){ return null; } + public static Splitter on(CharMatcher p0){ return null; } + public static Splitter on(Pattern p0){ return null; } + public static Splitter on(String p0){ return null; } + public static Splitter on(char p0){ return null; } + public static Splitter onPattern(String p0){ return null; } + static public class MapSplitter + { + protected MapSplitter() {} + public Map split(CharSequence p0){ return null; } } - } } From 91887ab2299cd8105d68687b9fcfa0acef5c3d92 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 16 Feb 2022 13:14:22 +0000 Subject: [PATCH 0318/1618] Sync shared files --- .../lib/semmle/code/java/security/performance/ReDoSUtil.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll index 54e69cc3178..824eb9de7ae 100644 --- a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll +++ b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll @@ -1052,13 +1052,13 @@ private module SuffixConstruction { */ pragma[noinline] private string relevant(RegExpRoot root) { - exists(ascii(result)) + exists(ascii(result)) and exists(root) or exists(InputSymbol s | belongsTo(s, root) | result = intersect(s, _)) or // The characters from `hasSimpleRejectEdge`. Only `\n` is really needed (as `\n` is not in the `ascii` relation). // The three chars must be kept in sync with `hasSimpleRejectEdge`. - result = ["|", "\n", "Z"] + result = ["|", "\n", "Z"] and exists(root) } /** From 51435850803f6c2ad30eb80ae0ea596b47ca12d1 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 16 Feb 2022 16:31:50 +0000 Subject: [PATCH 0319/1618] Fix to PolynomialRedos not finding results and to test cases not finding that --- .../semmle/code/java/regex/RegexTreeView.qll | 2 + .../Security/CWE/CWE-730/PolynomialReDoS.ql | 4 +- .../security/CWE-730/PolyRedosTest.java | 38 +++++++++---------- .../security/CWE-730/PolynomialReDoS.ql | 27 ++++++++++--- 4 files changed, 44 insertions(+), 27 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index a6d459cfeb8..f7e85fe3edf 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -73,6 +73,8 @@ class RegExpLiteral extends TRegExpLiteral, RegExpParent { RegExpLiteral() { this = TRegExpLiteral(re) } + override string toString() { result = re.toString() } + override RegExpTerm getChild(int i) { i = 0 and result.getRegex() = re and result.isRootTerm() } /** Holds if dot, `.`, matches all characters, including newlines. */ diff --git a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql index 1c8f3299f7f..563be6febb0 100644 --- a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql +++ b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql @@ -24,11 +24,11 @@ class PolynomialRedosSink extends DataFlow::Node { PolynomialRedosSink() { regexMatchedAgainst(reg.getRegex(), this.asExpr()) } - RegExpTerm getRegExp() { result = reg } + RegExpTerm getRegExp() { result.getParent() = reg } } class PolynomialRedosConfig extends TaintTracking::Configuration { - PolynomialRedosConfig() { this = "PolynomialRodisConfig" } + PolynomialRedosConfig() { this = "PolynomialRedosConfig" } override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } diff --git a/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java index a3d9872c8e9..ee6ede347da 100644 --- a/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java +++ b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java @@ -6,30 +6,30 @@ import com.google.common.base.Splitter; class PolyRedosTest { void test(HttpServletRequest request) { String tainted = request.getParameter("inp"); - String reg = "a\\.\\d+E?\\d+b"; + String reg = "0\\.\\d+E?\\d+!"; Predicate dummyPred = (s -> s.length() % 7 == 0); - tainted.matches(reg); // $ hasTaintFlow - tainted.split(reg); // $ hasTaintFlow - tainted.split(reg, 7); // $ hasTaintFlow - Pattern.matches(reg, tainted); // $ hasTaintFlow - Pattern.compile(reg).matcher(tainted).matches(); // $ hasTaintFlow - Pattern.compile(reg).split(tainted); // $ hasTaintFlow - Pattern.compile(reg, Pattern.DOTALL).split(tainted); // $ hasTaintFlow - Pattern.compile(reg).split(tainted, 7); // $ hasTaintFlow - Pattern.compile(reg).splitAsStream(tainted); // $ hasTaintFlow - Pattern.compile(reg).asPredicate().test(tainted); // $ hasTaintFlow - Pattern.compile(reg).asMatchPredicate().negate().and(dummyPred).or(dummyPred).test(tainted); // $ hasTaintFlow - Predicate.not(dummyPred.and(dummyPred.or(Pattern.compile(reg).asPredicate()))).test(tainted); // $ hasTaintFlow + tainted.matches(reg); // $ hasPolyRedos + tainted.split(reg); // $ hasPolyRedos + tainted.split(reg, 7); // $ hasPolyRedos + Pattern.matches(reg, tainted); // $ hasPolyRedos + Pattern.compile(reg).matcher(tainted).matches(); // $ hasPolyRedos + Pattern.compile(reg).split(tainted); // $ hasPolyRedos + Pattern.compile(reg, Pattern.DOTALL).split(tainted); // $ hasPolyRedos + Pattern.compile(reg).split(tainted, 7); // $ hasPolyRedos + Pattern.compile(reg).splitAsStream(tainted); // $ hasPolyRedos + Pattern.compile(reg).asPredicate().test(tainted); // $ hasPolyRedos + Pattern.compile(reg).asMatchPredicate().negate().and(dummyPred).or(dummyPred).test(tainted); // $ hasPolyRedos + Predicate.not(dummyPred.and(dummyPred.or(Pattern.compile(reg).asPredicate()))).test(tainted); // $ hasPolyRedos - Splitter.on(Pattern.compile(reg)).split(tainted); // $ hasTaintFlow + Splitter.on(Pattern.compile(reg)).split(tainted); // $ hasPolyRedos Splitter.on(reg).split(tainted); - Splitter.onPattern(reg).split(tainted); // $ hasTaintFlow - Splitter.onPattern(reg).splitToList(tainted); // $ hasTaintFlow - Splitter.onPattern(reg).limit(7).omitEmptyStrings().trimResults().split(tainted); // $ hasTaintFlow - Splitter.onPattern(reg).withKeyValueSeparator(" => ").split(tainted); // $ hasTaintFlow + Splitter.onPattern(reg).split(tainted); // $ hasPolyRedos + Splitter.onPattern(reg).splitToList(tainted); // $ hasPolyRedos + Splitter.onPattern(reg).limit(7).omitEmptyStrings().trimResults().split(tainted); // $ hasPolyRedos + Splitter.onPattern(reg).withKeyValueSeparator(" => ").split(tainted); // $ hasPolyRedos Splitter.on(";").withKeyValueSeparator(reg).split(tainted); - Splitter.on(";").withKeyValueSeparator(Splitter.onPattern(reg)).split(tainted); // $ hasTaintFlow + Splitter.on(";").withKeyValueSeparator(Splitter.onPattern(reg)).split(tainted); // $ hasPolyRedos } } \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql index 98865781dbe..372f1792083 100644 --- a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql +++ b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql @@ -1,6 +1,5 @@ import java import TestUtilities.InlineExpectationsTest -import TestUtilities.InlineFlowTest import semmle.code.java.security.performance.SuperlinearBackTracking import semmle.code.java.dataflow.DataFlow import semmle.code.java.regex.RegexTreeView @@ -11,19 +10,35 @@ class PolynomialRedosSink extends DataFlow::Node { RegExpLiteral reg; PolynomialRedosSink() { regexMatchedAgainst(reg.getRegex(), this.asExpr()) } - // RegExpTerm getRegExp() { result = reg } + + RegExpTerm getRegExp() { result.getParent() = reg } } class PolynomialRedosConfig extends TaintTracking::Configuration { - PolynomialRedosConfig() { this = "PolynomialRodisConfig" } + PolynomialRedosConfig() { this = "PolynomialRedosConfig" } override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } override predicate isSink(DataFlow::Node sink) { sink instanceof PolynomialRedosSink } } -class HasFlowTest extends InlineFlowTest { - override DataFlow::Configuration getTaintFlowConfig() { result = any(PolynomialRedosConfig c) } +class HasPolyRedos extends InlineExpectationsTest { + HasPolyRedos() { this = "HasPolyRedos" } - override DataFlow::Configuration getValueFlowConfig() { none() } + override string getARelevantTag() { result = ["hasPolyRedos"] } + + override predicate hasActualResult(Location location, string element, string tag, string value) { + tag = "hasPolyRedos" and + exists( + PolynomialRedosConfig config, DataFlow::PathNode source, DataFlow::PathNode sink, + PolynomialRedosSink sinkNode, PolynomialBackTrackingTerm regexp + | + config.hasFlowPath(source, sink) and + sinkNode = sink.getNode() and + regexp.getRootTerm() = sinkNode.getRegExp() and + location = sinkNode.getLocation() and + element = sinkNode.toString() and + value = "" + ) + } } From 57ba8a4d1b9d4f8a1c112834191fba5dc593ea5e Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 21 Feb 2022 16:39:59 +0000 Subject: [PATCH 0320/1618] Improve handling of hex escapes; and support some named character classes --- .../semmle/code/java/regex/RegexTreeView.qll | 81 +++++++++++++------ .../security/performance/RegExpTreeView.qll | 2 + .../security/CWE-730/ExpRedosTest.java | 36 +++++++++ 3 files changed, 96 insertions(+), 23 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index f7e85fe3edf..04bda79e9ad 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -55,7 +55,7 @@ class RegExpParent extends TRegExpParent { string toString() { result = "RegExpParent" } /** Gets the `i`th child term. */ - abstract RegExpTerm getChild(int i); + RegExpTerm getChild(int i) { none() } /** Gets a child term . */ RegExpTerm getAChild() { result = this.getChild(_) } @@ -143,26 +143,6 @@ class RegExpTerm extends RegExpParent { */ predicate isRootTerm() { start = 0 and end = re.getText().length() } - override RegExpTerm getChild(int i) { - result = this.(RegExpAlt).getChild(i) - or - result = this.(RegExpBackRef).getChild(i) - or - result = this.(RegExpCharacterClass).getChild(i) - or - result = this.(RegExpCharacterRange).getChild(i) - or - result = this.(RegExpNormalChar).getChild(i) - or - result = this.(RegExpGroup).getChild(i) - or - result = this.(RegExpQuantifier).getChild(i) - or - result = this.(RegExpSequence).getChild(i) - or - result = this.(RegExpSpecialChar).getChild(i) - } - /** * Gets the parent term of this regular expression term, or the * regular expression literal if this is the root term. @@ -508,7 +488,7 @@ class RegExpEscape extends RegExpNormalChar { /** * Holds if this is a unicode escape. */ - private predicate isUnicode() { this.getText().matches("\\u%") } + private predicate isUnicode() { this.getText().matches(["\\u%", "\\x%"]) } /** * Gets the unicode char for this escape. @@ -520,13 +500,24 @@ class RegExpEscape extends RegExpNormalChar { ) } + /** Gets the part of this escape that is a hexidecimal string */ + private string getHexString() { + this.isUnicode() and + if this.getText().matches("\\u%") // \uhhhh + then result = this.getText().suffix(2) + else + if this.getText().matches("\\x{%") // \x{h..h} + then result = this.getText().substring(3, this.getText().length() - 1) + else result = this.getText().suffix(2) // \xhh + } + /** * Gets int value for the `index`th char in the hex number of the unicode escape. * E.g. for `\u0061` and `index = 2` this returns 96 (the number `6` interpreted as hex). */ private int getHexValueFromUnicode(int index) { this.isUnicode() and - exists(string hex, string char | hex = this.getText().suffix(2) | + exists(string hex, string char | hex = this.getHexString() | char = hex.charAt(index) and result = 16.pow(hex.length() - index - 1) * toHex(char) ) @@ -574,6 +565,50 @@ class RegExpCharacterClassEscape extends RegExpEscape { override string getPrimaryQLClass() { result = "RegExpCharacterClassEscape" } } +/** + * A named character class in a regular expression. + * + * Examples: + * + * ``` + * \p{Digit} + * \p{IsLowerCase} + */ +class RegExpNamedProperty extends RegExpCharacterClassEscape { + boolean inverted; + string name; + + RegExpNamedProperty() { + name = this.getValue().substring(2, this.getValue().length() - 1) and + ( + inverted = false and + this.getValue().charAt(0) = "p" + or + inverted = true and + this.getValue().charAt(0) = "P" + ) + } + + /** Holds if this class is inverted. */ + predicate isInverted() { inverted = true } + + /** Gets the name of this class. */ + string getClassName() { result = name } + + /** + * Gets an equivalent single-chcracter escape sequence for this class (e.g. \d) if possible, excluding the escape character. + */ + string getBackslashEquivalent() { + exists(string eq | if inverted = true then result = eq.toUpperCase() else result = eq | + name = ["Digit", "IsDigit"] and + eq = "d" + or + name = ["Space", "IsWhite_Space"] and + eq = "s" + ) + } +} + /** * A character class in a regular expression. * diff --git a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll index ff3443acbca..608c03d006a 100644 --- a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll +++ b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll @@ -12,6 +12,8 @@ import semmle.code.java.regex.RegexTreeView */ predicate isEscapeClass(RegExpTerm term, string clazz) { term.(RegExpCharacterClassEscape).getValue() = clazz + or + term.(RegExpNamedProperty).getBackslashEquivalent() = clazz } /** diff --git a/java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java b/java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java index 846f6139d08..a9fc19e5d50 100644 --- a/java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java +++ b/java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java @@ -371,6 +371,42 @@ class ExpRedosTest { // GOOD "X(\\u0061|b)+Y", + // NOT GOOD + "X(\\x61|a)*Y", // $ hasExpRedos + + // GOOD + "X(\\x61|b)+Y", + + // NOT GOOD + "X(\\x{061}|a)*Y", // $ hasExpRedos + + // GOOD + "X(\\x{061}|b)+Y", + + // NOT GOOD + "X(\\p{Digit}|7)*Y", // $ hasExpRedos + + // GOOD + "X(\\p{Digit}|b)+Y", + + // NOT GOOD + "X(\\P{Digit}|b)*Y", // $ hasExpRedos + + // GOOD + "X(\\P{Digit}|7)+Y", + + // NOT GOOD + "X(\\p{IsDigit}|7)*Y", // $ hasExpRedos + + // GOOD + "X(\\p{IsDigit}|b)+Y", + + // NOT GOOD - but not detected + "X(\\p{Alpha}|a)*Y", // $ MISSING: hasExpRedos + + // GOOD + "X(\\p{Alpha}|7)+Y", + // GOOD "(\"[^\"]*?\"|[^\"\\s]+)+(?=\\s*|\\s*$)", From c312b4b6b0e131def14fbc5bac9587db1d9da520 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 22 Feb 2022 14:51:38 +0000 Subject: [PATCH 0321/1618] Add missing qldoc --- java/ql/lib/semmle/code/java/PrintAst.qll | 7 +++++++ java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll | 2 ++ java/ql/lib/semmle/code/java/regex/regex.qll | 9 ++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/PrintAst.qll b/java/ql/lib/semmle/code/java/PrintAst.qll index ee3a2800584..fa36821f6c7 100644 --- a/java/ql/lib/semmle/code/java/PrintAst.qll +++ b/java/ql/lib/semmle/code/java/PrintAst.qll @@ -167,6 +167,13 @@ class PrintAstNode extends TPrintAstNode { */ Location getLocation() { none() } + /** + * Holds if this node is at the specified location. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `filepath`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ predicate hasLocationInfo( string filepath, int startline, int startcolumn, int endline, int endcolumn ) { diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll index 65ff6199088..c8ba5e882b6 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll @@ -1,3 +1,5 @@ +/** Definitions of data flow steps for determining flow of regular expressions. */ + import java import semmle.code.java.dataflow.ExternalFlow diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 9bd49037cdd..8f168ea2255 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -1,3 +1,7 @@ +/** + * Definitions for parsing regular expressions. + */ + import java private import RegexFlowConfigs @@ -142,7 +146,7 @@ abstract class RegexString extends StringLiteral { } bindingset[x] - int max_zero(int x) { result = max([x, 0]) } + private int max_zero(int x) { result = max([x, 0]) } /** * Gets the nesting depth of character classes after position `pos`, @@ -375,11 +379,13 @@ abstract class RegexString extends StringLiteral { not exists(int x, int y | this.backreference(x, y) and x <= start and y >= end) } + /** Holds if a normal character or escape sequence is between `start` and `end`. */ predicate normalCharacter(int start, int end) { this.character(start, end) and not this.specialCharacter(start, end, _) } + /** Holds if a special character `char` is between `start` and `end`. */ predicate specialCharacter(int start, int end, string char) { this.character(start, end) and end = start + 1 and @@ -510,6 +516,7 @@ abstract class RegexString extends StringLiteral { this.simpleGroupStart(start, end) } + /** Holds if the text in the range start,end is a group with contents in the range in_start,in_end */ predicate groupContents(int start, int end, int in_start, int in_end) { this.groupStart(start, in_start) and end = in_end + 1 and From 5364001aa2e64846982fb80c29a0fa8bb6c31dce Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 22 Feb 2022 17:10:20 +0000 Subject: [PATCH 0322/1618] Update docs to be about Java --- .../Security/CWE/CWE-730/PolynomialReDoS.qhelp | 18 +++++++++--------- java/ql/src/Security/CWE/CWE-730/ReDoS.qhelp | 4 ++-- .../CWE/CWE-730/ReDoSIntroduction.inc.qhelp | 9 ++++++++- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.qhelp b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.qhelp index fa8a3563d23..dbb1f4c37f5 100644 --- a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.qhelp +++ b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.qhelp @@ -14,13 +14,13 @@

    - - re.sub(r"^\s+|\s+$", "", text) # BAD + + Pattern.compile("^\\s+|\\s+$").matcher(text).replaceAll("") // BAD

    - The sub-expression "\s+$" will match the + The sub-expression "\\s+$" will match the whitespace characters in text from left to right, but it can start matching anywhere within a whitespace sequence. This is problematic for strings that do not end with a whitespace @@ -45,14 +45,14 @@ Avoid this problem by rewriting the regular expression to not contain the ambiguity about when to start matching whitespace sequences. For instance, by using a negative look-behind - (^\s+|(?<!\s)\s+$), or just by using the built-in strip - method (text.strip()). + ("^\\s+|(?<!\\s)\\s+$"), or just by using the built-in trim + method (text.trim()).

    - Note that the sub-expression "^\s+" is + Note that the sub-expression "^\\s+" is not problematic as the ^ anchor restricts when that sub-expression can start matching, and as the regular expression engine matches from left to right. @@ -70,8 +70,8 @@ using scientific notation:

    - - ^0\.\d+E?\d+$ # BAD + + "^0\\.\\d+E?\\d+$""

    @@ -97,7 +97,7 @@ To make the processing faster, the regular expression should be rewritten such that the two \d+ sub-expressions - do not have overlapping matches: ^0\.\d+(E\d+)?$. + do not have overlapping matches: "^0\\.\\d+(E\\d+)?$".

    diff --git a/java/ql/src/Security/CWE/CWE-730/ReDoS.qhelp b/java/ql/src/Security/CWE/CWE-730/ReDoS.qhelp index 9cfbcc32354..08b67acb638 100644 --- a/java/ql/src/Security/CWE/CWE-730/ReDoS.qhelp +++ b/java/ql/src/Security/CWE/CWE-730/ReDoS.qhelp @@ -10,7 +10,7 @@

    Consider this regular expression:

    - + ^_(__|.)+_$

    @@ -24,7 +24,7 @@ This problem can be avoided by rewriting the regular expression to remove the ambiguity between the two branches of the alternative inside the repetition:

    - + ^_(__|[^_])+_$ diff --git a/java/ql/src/Security/CWE/CWE-730/ReDoSIntroduction.inc.qhelp b/java/ql/src/Security/CWE/CWE-730/ReDoSIntroduction.inc.qhelp index f533097c222..f6e4dbd0a5f 100644 --- a/java/ql/src/Security/CWE/CWE-730/ReDoSIntroduction.inc.qhelp +++ b/java/ql/src/Security/CWE/CWE-730/ReDoSIntroduction.inc.qhelp @@ -17,7 +17,7 @@

    - The regular expression engine provided by Python uses a backtracking non-deterministic finite + The regular expression engine provided by Java uses a backtracking non-deterministic finite automata to implement regular expression matching. While this approach is space-efficient and allows supporting advanced features like capture groups, it is not time-efficient in general. The worst-case @@ -38,6 +38,11 @@ references.

    + +

    + Note that Java versions 9 and above have some mitigations against ReDoS; however they aren't perfect + and more complex regular expressions can still be affected by this problem. +

    @@ -48,6 +53,8 @@ ensure that the strings matched with the regular expression are short enough that the time-complexity does not matter. + Alternatively, an alternate regex library that guarantees linear time execution, such as Google's RE2J, may be used. +

    From 3ce0c2c23b66247f714a29417bcc701fcf7f5e2c Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 3 Mar 2022 11:51:14 +0000 Subject: [PATCH 0323/1618] Add more regex use functions in String --- java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll | 2 +- java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll | 2 ++ java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index bce55552acd..948cc557169 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -86,7 +86,7 @@ private class JdkRegexMatchMethodAccess extends RegexMatchMethodAccess { or package = "java.lang" and type = "String" and - name = ["matches", "split"] and + name = ["matches", "split", "replaceAll", "replaceFirst"] and regexArg = 0 and stringArg = -1 or diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll index c8ba5e882b6..c6ee2ace865 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll @@ -14,6 +14,8 @@ private class RegexSinkCsv extends SinkModelCsv { "java.util;String;false;matches;(String);;Argument[0];regex-compile", "java.util;String;false;split;(String);;Argument[0];regex-compile", "java.util;String;false;split;(String,int);;Argument[0];regex-compile", + "java.util;String;false;replaceAll;(String,String);;Argument[0];regex-compile", + "java.util;String;false;replaceFirst;(String,String);;Argument[0];regex-compile", "com.google.common.base;Splitter;false;onPattern;(String);;Argument[0];regex-compile" ] } diff --git a/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java index ee6ede347da..e825e1ad2db 100644 --- a/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java +++ b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java @@ -12,6 +12,8 @@ class PolyRedosTest { tainted.matches(reg); // $ hasPolyRedos tainted.split(reg); // $ hasPolyRedos tainted.split(reg, 7); // $ hasPolyRedos + tainted.replaceAll(reg, "a"); // $ hasPolyRedos + tainted.replaceFirst(reg, "a"); // $ hasPolyRedos Pattern.matches(reg, tainted); // $ hasPolyRedos Pattern.compile(reg).matcher(tainted).matches(); // $ hasPolyRedos Pattern.compile(reg).split(tainted); // $ hasPolyRedos From 9bd39168003b66df4e4dd35dbd430e0adffd4e65 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 3 Mar 2022 12:06:29 +0000 Subject: [PATCH 0324/1618] Add change note --- java/ql/lib/change-notes/2022-03-03-redos.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 java/ql/lib/change-notes/2022-03-03-redos.md diff --git a/java/ql/lib/change-notes/2022-03-03-redos.md b/java/ql/lib/change-notes/2022-03-03-redos.md new file mode 100644 index 00000000000..daf1dd51be1 --- /dev/null +++ b/java/ql/lib/change-notes/2022-03-03-redos.md @@ -0,0 +1,6 @@ +--- +category: newQuery +--- + +* Two new queries "Inefficient regular expression" (`java/redos`) and "Polynomial regular expression used on uncontrolled data" (`java/polynomial-redos`) have been added. +These queries help find instances of Regular Expression Denial of Service vulnerabilities. \ No newline at end of file From 2d963176bf02d5c858e4719bef5977fd3a0bfd6a Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 3 Mar 2022 12:41:28 +0000 Subject: [PATCH 0325/1618] Fix change note --- java/ql/{lib => src}/change-notes/2022-03-03-redos.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java/ql/{lib => src}/change-notes/2022-03-03-redos.md (100%) diff --git a/java/ql/lib/change-notes/2022-03-03-redos.md b/java/ql/src/change-notes/2022-03-03-redos.md similarity index 100% rename from java/ql/lib/change-notes/2022-03-03-redos.md rename to java/ql/src/change-notes/2022-03-03-redos.md From f5809a7440a7cbb26bef8a47c323672b9e8103a5 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 3 Mar 2022 20:31:23 +0000 Subject: [PATCH 0326/1618] ReDoS performance fixes --- .../semmle/code/java/regex/RegexTreeView.qll | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index 04bda79e9ad..fbe1d10ea72 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -157,6 +157,11 @@ class RegExpTerm extends RegExpParent { /** Gets the offset at which this term ends. */ int getEnd() { result = end } + /** Holds if this term occurs in regex `inRe` offsets `startOffset` to `endOffset`. */ + predicate occursInRegex(Regex inRe, int startOffset, int endOffset) { + inRe = re and startOffset = start and endOffset = end + } + override string toString() { result = re.getText().substring(start, end) } /** @@ -385,18 +390,15 @@ private RegExpTerm seqChild(Regex re, int start, int end, int i) { re.sequence(start, end) and ( i = 0 and - result.getRegex() = re and - result.getStart() = start and exists(int itemEnd | re.item(start, itemEnd) and - result.getEnd() = itemEnd + result.occursInRegex(re, start, itemEnd) ) or i > 0 and - result.getRegex() = re and exists(int itemStart | itemStart = seqChildEnd(re, start, end, i - 1) | - result.getStart() = itemStart and - re.item(itemStart, result.getEnd()) + re.item(itemStart, result.getEnd()) and + result.occursInRegex(re, itemStart, _) ) ) } @@ -642,18 +644,15 @@ class RegExpCharacterClass extends RegExpTerm, TRegExpCharacterClass { override RegExpTerm getChild(int i) { i = 0 and - result.getRegex() = re and exists(int itemStart, int itemEnd | - result.getStart() = itemStart and re.charSetStart(start, itemStart) and re.charSetChild(start, itemStart, itemEnd) and - result.getEnd() = itemEnd + result.occursInRegex(re, itemStart, itemEnd) ) or i > 0 and - result.getRegex() = re and exists(int itemStart | itemStart = this.getChild(i - 1).getEnd() | - result.getStart() = itemStart and + result.occursInRegex(re, itemStart, _) and re.charSetChild(start, itemStart, result.getEnd()) ) } @@ -823,6 +822,16 @@ class RegExpGroup extends RegExpTerm, TRegExpGroup { } override string getPrimaryQLClass() { result = "RegExpGroup" } + + /** Holds if this is the `n`th numbered group of literal `lit`. */ + predicate isNumberedGroupOfLiteral(RegExpLiteral lit, int n) { + lit = this.getLiteral() and n = this.getNumber() + } + + /** Holds if this is a group with name `name` of literal `lit`. */ + predicate isNamedGroupOfLiteral(RegExpLiteral lit, string name) { + lit = this.getLiteral() and name = this.getName() + } } /** @@ -1054,11 +1063,9 @@ class RegExpBackRef extends RegExpTerm, TRegExpBackRef { /** Gets the capture group this back reference refers to. */ RegExpGroup getGroup() { - result.getLiteral() = this.getLiteral() and - ( - result.getNumber() = this.getNumber() or - result.getName() = this.getName() - ) + result.isNumberedGroupOfLiteral(this.getLiteral(), this.getNumber()) + or + result.isNamedGroupOfLiteral(this.getLiteral(), this.getName()) } override RegExpTerm getChild(int i) { none() } From 5ba6bafbef9873af76f2c678bda2f8a8bf5d6103 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 4 Mar 2022 10:56:18 +0000 Subject: [PATCH 0327/1618] Use occursInRegex more ccnsistently throughout --- .../semmle/code/java/regex/RegexTreeView.qll | 44 +++++++------------ 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index fbe1d10ea72..a7e3928f085 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -246,9 +246,7 @@ class RegExpQuantifier extends RegExpTerm, TRegExpQuantifier { override RegExpTerm getChild(int i) { i = 0 and - result.getRegex() = re and - result.getStart() = start and - result.getEnd() = part_end + result.occursInRegex(re, start, part_end) } /** Holds if this term may match an unlimited number of times. */ @@ -396,9 +394,9 @@ private RegExpTerm seqChild(Regex re, int start, int end, int i) { ) or i > 0 and - exists(int itemStart | itemStart = seqChildEnd(re, start, end, i - 1) | - re.item(itemStart, result.getEnd()) and - result.occursInRegex(re, itemStart, _) + exists(int itemStart, int itemEnd | itemStart = seqChildEnd(re, start, end, i - 1) | + re.item(itemStart, itemEnd) and + result.occursInRegex(re, itemStart, itemEnd) ) ) } @@ -417,20 +415,17 @@ class RegExpAlt extends RegExpTerm, TRegExpAlt { override RegExpTerm getChild(int i) { i = 0 and - result.getRegex() = re and - result.getStart() = start and exists(int part_end | re.alternationOption(start, end, start, part_end) and - result.getEnd() = part_end + result.occursInRegex(re, start, part_end) ) or i > 0 and - result.getRegex() = re and - exists(int part_start | + exists(int part_start, int part_end | part_start = this.getChild(i - 1).getEnd() + 1 // allow for the | | - result.getStart() = part_start and - re.alternationOption(start, end, part_start, result.getEnd()) + re.alternationOption(start, end, part_start, part_end) and + result.occursInRegex(re, part_start, part_end) ) } @@ -651,9 +646,9 @@ class RegExpCharacterClass extends RegExpTerm, TRegExpCharacterClass { ) or i > 0 and - exists(int itemStart | itemStart = this.getChild(i - 1).getEnd() | - result.occursInRegex(re, itemStart, _) and - re.charSetChild(start, itemStart, result.getEnd()) + exists(int itemStart, int itemEnd | itemStart = this.getChild(i - 1).getEnd() | + result.occursInRegex(re, itemStart, itemEnd) and + re.charSetChild(start, itemStart, itemEnd) ) } @@ -686,14 +681,10 @@ class RegExpCharacterRange extends RegExpTerm, TRegExpCharacterRange { override RegExpTerm getChild(int i) { i = 0 and - result.getRegex() = re and - result.getStart() = start and - result.getEnd() = lower_end + result.occursInRegex(re, start, lower_end) or i = 1 and - result.getRegex() = re and - result.getStart() = upper_start and - result.getEnd() = end + result.occursInRegex(re, upper_start, end) } override string getPrimaryQLClass() { result = "RegExpCharacterRange" } @@ -816,9 +807,10 @@ class RegExpGroup extends RegExpTerm, TRegExpGroup { string getName() { result = re.getGroupName(start, end) } override RegExpTerm getChild(int i) { - result.getRegex() = re and i = 0 and - re.groupContents(start, end, result.getStart(), result.getEnd()) + exists(int in_start, int in_end | re.groupContents(start, end, in_start, in_end) | + result.occursInRegex(re, in_start, in_end) + ) } override string getPrimaryQLClass() { result = "RegExpGroup" } @@ -946,9 +938,7 @@ class RegExpSubPattern extends RegExpZeroWidthMatch { /** Gets the lookahead term. */ RegExpTerm getOperand() { exists(int in_start, int in_end | re.groupContents(start, end, in_start, in_end) | - result.getRegex() = re and - result.getStart() = in_start and - result.getEnd() = in_end + result.occursInRegex(re, in_start, in_end) ) } } From 49374b877af3e0bf1e5dfc09a9cff9b5bb85e0a5 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 8 Mar 2022 16:23:24 +0000 Subject: [PATCH 0328/1618] Fix parsing of alternations in character classes --- java/ql/lib/semmle/code/java/regex/regex.qll | 1 + .../ql/test/library-tests/regex/parser/RegexParseTests.expected | 2 ++ java/ql/test/library-tests/regex/parser/Test.java | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 8f168ea2255..2cd3b9a4035 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -807,6 +807,7 @@ abstract class RegexString extends StringLiteral { } private predicate topLevel(int start, int end) { + not this.inCharSet(start) and this.subalternation(start, end, _) and not this.isOptionDivider(end) } diff --git a/java/ql/test/library-tests/regex/parser/RegexParseTests.expected b/java/ql/test/library-tests/regex/parser/RegexParseTests.expected index c6d8322e5c1..66d63f70808 100644 --- a/java/ql/test/library-tests/regex/parser/RegexParseTests.expected +++ b/java/ql/test/library-tests/regex/parser/RegexParseTests.expected @@ -139,3 +139,5 @@ parseFailures | Test.java:19:26:19:30 | \\077 | [RegExpConstant,RegExpEscape] | | Test.java:19:31:19:31 | 7 | [RegExpConstant,RegExpNormalChar] | | Test.java:19:32:19:37 | \u1337 | [RegExpConstant,RegExpNormalChar] | +| Test.java:20:10:20:12 | [\|] | [RegExpCharacterClass] | +| Test.java:20:11:20:11 | \| | [RegExpConstant,RegExpNormalChar] | diff --git a/java/ql/test/library-tests/regex/parser/Test.java b/java/ql/test/library-tests/regex/parser/Test.java index 4609856f682..61822294397 100644 --- a/java/ql/test/library-tests/regex/parser/Test.java +++ b/java/ql/test/library-tests/regex/parser/Test.java @@ -17,7 +17,7 @@ class Test { "(?i)(?=a)(?!b)(?<=c)(? Date: Tue, 8 Mar 2022 16:47:39 +0000 Subject: [PATCH 0329/1618] Support possessive quantifiers, which cannot backtrack. They are approximated by limiting them to up to one repetition (effectively making *+ like ? and ++ like a no-op). --- .../ql/lib/semmle/code/java/regex/RegexTreeView.qll | 13 +++++++++---- .../code/java/security/performance/ReDoSUtil.qll | 9 +++++++-- .../java/security/performance/RegExpTreeView.qll | 5 +++++ .../query-tests/security/CWE-730/ExpRedosTest.java | 11 +++++++++++ 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index a7e3928f085..27074913a7e 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -253,7 +253,12 @@ class RegExpQuantifier extends RegExpTerm, TRegExpQuantifier { predicate mayRepeatForever() { may_repeat_forever = true } /** Gets the quantifier for this term. That is e.g "?" for "a?". */ - string getquantifier() { result = re.getText().substring(part_end, end) } + string getQuantifier() { result = re.getText().substring(part_end, end) } + + /** Holds if this is a possessive quantifier, e.g. a*+. */ + predicate isPossessive() { + exists(string q | q = this.getQuantifier() | q.length() > 1 and q.charAt(q.length() - 1) = "+") + } override string getPrimaryQLClass() { result = "RegExpQuantifier" } } @@ -275,7 +280,7 @@ class InfiniteRepetitionQuantifier extends RegExpQuantifier { * ``` */ class RegExpStar extends InfiniteRepetitionQuantifier { - RegExpStar() { this.getquantifier().charAt(0) = "*" } + RegExpStar() { this.getQuantifier().charAt(0) = "*" } override string getPrimaryQLClass() { result = "RegExpStar" } } @@ -290,7 +295,7 @@ class RegExpStar extends InfiniteRepetitionQuantifier { * ``` */ class RegExpPlus extends InfiniteRepetitionQuantifier { - RegExpPlus() { this.getquantifier().charAt(0) = "+" } + RegExpPlus() { this.getQuantifier().charAt(0) = "+" } override string getPrimaryQLClass() { result = "RegExpPlus" } } @@ -305,7 +310,7 @@ class RegExpPlus extends InfiniteRepetitionQuantifier { * ``` */ class RegExpOpt extends RegExpQuantifier { - RegExpOpt() { this.getquantifier().charAt(0) = "?" } + RegExpOpt() { this.getQuantifier().charAt(0) = "?" } override string getPrimaryQLClass() { result = "RegExpOpt" } } diff --git a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll index 824eb9de7ae..f0e26580158 100644 --- a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll +++ b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll @@ -608,10 +608,15 @@ State after(RegExpTerm t) { or exists(RegExpGroup grp | t = grp.getAChild() | result = after(grp)) or - exists(EffectivelyStar star | t = star.getAChild() | result = before(star)) + exists(EffectivelyStar star | t = star.getAChild() | + not isPossessive(star) and + result = before(star) + ) or exists(EffectivelyPlus plus | t = plus.getAChild() | - result = before(plus) or + not isPossessive(plus) and + result = before(plus) + or result = after(plus) ) or diff --git a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll index 608c03d006a..f59b1f43ca9 100644 --- a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll +++ b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll @@ -16,6 +16,11 @@ predicate isEscapeClass(RegExpTerm term, string clazz) { term.(RegExpNamedProperty).getBackslashEquivalent() = clazz } +/** + * Holds if `term` is a possessive quantifier, e.g. `a*+`. + */ +predicate isPossessive(RegExpQuantifier term) { term.isPossessive() } + /** * Holds if the regular expression should not be considered. * diff --git a/java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java b/java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java index a9fc19e5d50..e7e876cb696 100644 --- a/java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java +++ b/java/ql/test/query-tests/security/CWE-730/ExpRedosTest.java @@ -418,6 +418,17 @@ class ExpRedosTest { "\\A(\\d|0)*x", // $ hasExpRedos "(\\d|0)*\\Z", // $ hasExpRedos "\\b(\\d|0)*x", // $ hasExpRedos + + // GOOD - possessive quantifiers don't backtrack + "(a*+)*+b", + "(a*)*+b", + "(a*+)*b", + + // BAD + "(a*)*b", // $ hasExpRedos + + // BAD - but not detected due to the way possessive quantifiers are approximated + "((aa|a*+)b)*c" // $ MISSING: hasExpRedos }; void test() { From 0a5268aeb4e12ebcb2d75d80a9b51ecb6c18009d Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 8 Mar 2022 16:57:36 +0000 Subject: [PATCH 0330/1618] Sync shared library changes across languages. --- .../semmle/javascript/security/performance/ReDoSUtil.qll | 9 +++++++-- .../security/performance/ReDoSUtilSpecific.qll | 6 ++++++ .../lib/semmle/python/security/performance/ReDoSUtil.qll | 9 +++++++-- .../python/security/performance/ReDoSUtilSpecific.qll | 6 ++++++ .../lib/codeql/ruby/security/performance/ReDoSUtil.qll | 9 +++++++-- .../ruby/security/performance/ReDoSUtilSpecific.qll | 6 ++++++ 6 files changed, 39 insertions(+), 6 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtil.qll b/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtil.qll index 6f695b5035b..aea089f0715 100644 --- a/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtil.qll +++ b/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtil.qll @@ -610,10 +610,15 @@ State after(RegExpTerm t) { or exists(RegExpGroup grp | t = grp.getAChild() | result = after(grp)) or - exists(EffectivelyStar star | t = star.getAChild() | result = before(star)) + exists(EffectivelyStar star | t = star.getAChild() | + not isPossessive(star) and + result = before(star) + ) or exists(EffectivelyPlus plus | t = plus.getAChild() | - result = before(plus) or + not isPossessive(plus) and + result = before(plus) + or result = after(plus) ) or diff --git a/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtilSpecific.qll b/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtilSpecific.qll index 4f247b0ce50..bc5ef32536c 100644 --- a/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtilSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtilSpecific.qll @@ -12,6 +12,12 @@ predicate isEscapeClass(RegExpTerm term, string clazz) { exists(RegExpCharacterClassEscape escape | term = escape | escape.getValue() = clazz) } +/** + * Holds if `term` is a possessive quantifier. + * As javascript's regexes do not support possessive quantifiers, this never holds, but is used by the shared library. + */ +predicate isPossessive(RegExpQuantifier term) { none() } + /** * Holds if the regular expression should not be considered. * diff --git a/python/ql/lib/semmle/python/security/performance/ReDoSUtil.qll b/python/ql/lib/semmle/python/security/performance/ReDoSUtil.qll index 6f695b5035b..aea089f0715 100644 --- a/python/ql/lib/semmle/python/security/performance/ReDoSUtil.qll +++ b/python/ql/lib/semmle/python/security/performance/ReDoSUtil.qll @@ -610,10 +610,15 @@ State after(RegExpTerm t) { or exists(RegExpGroup grp | t = grp.getAChild() | result = after(grp)) or - exists(EffectivelyStar star | t = star.getAChild() | result = before(star)) + exists(EffectivelyStar star | t = star.getAChild() | + not isPossessive(star) and + result = before(star) + ) or exists(EffectivelyPlus plus | t = plus.getAChild() | - result = before(plus) or + not isPossessive(plus) and + result = before(plus) + or result = after(plus) ) or diff --git a/python/ql/lib/semmle/python/security/performance/ReDoSUtilSpecific.qll b/python/ql/lib/semmle/python/security/performance/ReDoSUtilSpecific.qll index 4193fd5a1e5..2db1579126d 100644 --- a/python/ql/lib/semmle/python/security/performance/ReDoSUtilSpecific.qll +++ b/python/ql/lib/semmle/python/security/performance/ReDoSUtilSpecific.qll @@ -13,6 +13,12 @@ predicate isEscapeClass(RegExpTerm term, string clazz) { exists(RegExpCharacterClassEscape escape | term = escape | escape.getValue() = clazz) } +/** + * Holds if `term` is a possessive quantifier. + * As python's regexes do not support possessive quantifiers, this never holds, but is used by the shared library. + */ +predicate isPossessive(RegExpQuantifier term) { none() } + /** * Holds if the regular expression should not be considered. * diff --git a/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll b/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll index 6f695b5035b..aea089f0715 100644 --- a/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll +++ b/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll @@ -610,10 +610,15 @@ State after(RegExpTerm t) { or exists(RegExpGroup grp | t = grp.getAChild() | result = after(grp)) or - exists(EffectivelyStar star | t = star.getAChild() | result = before(star)) + exists(EffectivelyStar star | t = star.getAChild() | + not isPossessive(star) and + result = before(star) + ) or exists(EffectivelyPlus plus | t = plus.getAChild() | - result = before(plus) or + not isPossessive(plus) and + result = before(plus) + or result = after(plus) ) or diff --git a/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtilSpecific.qll b/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtilSpecific.qll index de125f4a9db..2df67573a9c 100644 --- a/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtilSpecific.qll +++ b/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtilSpecific.qll @@ -33,6 +33,12 @@ predicate isExcluded(RegExpParent parent) { parent.(RegExpTerm).getRegExp().(AST::RegExpLiteral).hasFreeSpacingFlag() // exclude free-spacing mode regexes } +/** + * Holds if `term` is a possessive quantifier. + * Not currently implemented, but is used by the shared library. + */ +predicate isPossessive(RegExpQuantifier term) { none() } + /** * A module containing predicates for determining which flags a regular expression have. */ From 5555985ad6fb9e29d526956c99de2b07f3204a47 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 9 Mar 2022 14:29:49 +0000 Subject: [PATCH 0331/1618] Distingush between whether or not a regex is matched against a full string Also some fixes and additional tests --- .../code/java/regex/RegexFlowConfigs.qll | 40 +++++++++++++++++-- .../code/java/regex/RegexFlowModels.qll | 27 +++++++++---- java/ql/lib/semmle/code/java/regex/regex.qll | 12 +++++- .../java/security/performance/ReDoSUtil.qll | 6 ++- .../security/performance/RegExpTreeView.qll | 10 +++++ .../security/CWE-730/PolyRedosTest.java | 38 ++++++++++++++++++ 6 files changed, 118 insertions(+), 15 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index 948cc557169..86f1172ff0a 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -13,16 +13,48 @@ private class RegexCompileFlowConf extends DataFlow2::Configuration { override predicate isSource(DataFlow::Node node) { node.asExpr() instanceof StringLiteral } - override predicate isSink(DataFlow::Node node) { sinkNode(node, "regex-compile") } + override predicate isSink(DataFlow::Node node) { + sinkNode(node, ["regex-compile", "regex-compile-match", "regex-compile-find"]) + } } /** * Holds if `s` is used as a regex, with the mode `mode` (if known). * If regex mode is not known, `mode` will be `"None"`. */ -predicate usedAsRegex(StringLiteral s, string mode) { - any(RegexCompileFlowConf c).hasFlow(DataFlow2::exprNode(s), _) and - mode = "None" // TODO: proper mode detection +predicate usedAsRegex(StringLiteral s, string mode, boolean match_full_string) { + exists(DataFlow::Node sink | + any(RegexCompileFlowConf c).hasFlow(DataFlow2::exprNode(s), sink) and + mode = "None" and // TODO: proper mode detection + (if matchesFullString(sink) then match_full_string = true else match_full_string = false) + ) +} + +/** + * Holds if the regex that flows to `sink` is used to match against a full string, + * as though it was implicitly surrounded by ^ and $. + */ +private predicate matchesFullString(DataFlow::Node sink) { + sinkNode(sink, "regex-compile-match") + or + exists(DataFlow::Node matchSource, RegexCompileToMatchConf conf | + matchSource.asExpr().(MethodAccess).getAnArgument() = sink.asExpr() and + conf.hasFlow(matchSource, _) + ) +} + +private class RegexCompileToMatchConf extends DataFlow2::Configuration { + RegexCompileToMatchConf() { this = "RegexCompileToMatchConfig" } + + override predicate isSource(DataFlow::Node node) { sourceNode(node, "regex-compile") } + + override predicate isSink(DataFlow::Node node) { sinkNode(node, "regex-match") } + + override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { + exists(MethodAccess ma | node2.asExpr() = ma and node1.asExpr() = ma.getQualifier() | + ma.getMethod().hasQualifiedName("java.util.regex", "Pattern", "matcher") + ) + } } /** diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll index c6ee2ace865..fd0858639c4 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll @@ -3,6 +3,16 @@ import java import semmle.code.java.dataflow.ExternalFlow +private class RegexSourceCsv extends SourceModelCsv { + override predicate row(string row) { + row = + [ + //"namespace;type;subtypes;name;signature;ext;output;kind" + "java.util.regex;Pattern;false;compile;(String);;ReturnValue;regex-compile", + ] + } +} + private class RegexSinkCsv extends SinkModelCsv { override predicate row(string row) { row = @@ -10,13 +20,16 @@ private class RegexSinkCsv extends SinkModelCsv { //"namespace;type;subtypes;name;signature;ext;input;kind" "java.util.regex;Pattern;false;compile;(String);;Argument[0];regex-compile", "java.util.regex;Pattern;false;compile;(String,int);;Argument[0];regex-compile", - "java.util.regex;Pattern;false;matches;(String,CharSequence);;Argument[0];regex-compile", - "java.util;String;false;matches;(String);;Argument[0];regex-compile", - "java.util;String;false;split;(String);;Argument[0];regex-compile", - "java.util;String;false;split;(String,int);;Argument[0];regex-compile", - "java.util;String;false;replaceAll;(String,String);;Argument[0];regex-compile", - "java.util;String;false;replaceFirst;(String,String);;Argument[0];regex-compile", - "com.google.common.base;Splitter;false;onPattern;(String);;Argument[0];regex-compile" + "java.util.regex;Pattern;false;matches;(String,CharSequence);;Argument[0];regex-compile-match", + "java.lang;String;false;matches;(String);;Argument[0];regex-compile-match", + "java.lang;String;false;split;(String);;Argument[0];regex-compile-find", + "java.lang;String;false;split;(String,int);;Argument[0];regex-compile-find", + "java.lang;String;false;replaceAll;(String,String);;Argument[0];regex-compile-find", + "java.lang;String;false;replaceFirst;(String,String);;Argument[0];regex-compile-find", + "com.google.common.base;Splitter;false;onPattern;(String);;Argument[0];regex-compile-find", + // regex-match sinks + "java.util.regex;Pattern;false;asMatchPredicate;();;Argument[-1];regex-match", + "java.util.regex;Matcher;false;matches;();;Argument[-1];regex-match", ] } } diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 2cd3b9a4035..9a7da15999e 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -892,7 +892,9 @@ abstract class RegexString extends StringLiteral { /** A string literal used as a regular expression */ class Regex extends RegexString { - Regex() { usedAsRegex(this, _) } + boolean matches_full_string; + + Regex() { usedAsRegex(this, _, matches_full_string) } /** * Gets a mode (if any) of this regular expression. Can be any of: @@ -906,8 +908,14 @@ class Regex extends RegexString { */ string getAMode() { result != "None" and - usedAsRegex(this, result) + usedAsRegex(this, result, _) or result = this.getModeFromPrefix() } + + /** + * Holds if this regex is used to match against a full string, + * as though it was implicitly surrounded by ^ and $. + */ + predicate matchesFullString() { matches_full_string = true } } diff --git a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll index f0e26580158..a05261611c7 100644 --- a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll +++ b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll @@ -622,7 +622,9 @@ State after(RegExpTerm t) { or exists(EffectivelyQuestion opt | t = opt.getAChild() | result = after(opt)) or - exists(RegExpRoot root | t = root | result = AcceptAnySuffix(root)) + exists(RegExpRoot root | t = root | + if matchesAnySuffix(root) then result = AcceptAnySuffix(root) else result = Accept(root) + ) } /** @@ -693,7 +695,7 @@ predicate delta(State q1, EdgeLabel lbl, State q2) { lbl = Epsilon() and q2 = Accept(root) ) or - exists(RegExpRoot root | q1 = Match(root, 0) | lbl = Any() and q2 = q1) + exists(RegExpRoot root | q1 = Match(root, 0) | matchesAnyPrefix(root) and lbl = Any() and q2 = q1) or exists(RegExpDollar dollar | q1 = before(dollar) | lbl = Epsilon() and q2 = Accept(getRoot(dollar)) diff --git a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll index f59b1f43ca9..daef79ceb1e 100644 --- a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll +++ b/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll @@ -21,6 +21,16 @@ predicate isEscapeClass(RegExpTerm term, string clazz) { */ predicate isPossessive(RegExpQuantifier term) { term.isPossessive() } +/** + * Holds if the regex that `term` is part of is used in a way that ignores any leading prefix of the input it's matched against. + */ +predicate matchesAnyPrefix(RegExpTerm term) { not term.getRegex().matchesFullString() } + +/** + * Holds if the regex that `term` is part of is used in a way that ignores any trailing suffix of the input it's matched against. + */ +predicate matchesAnySuffix(RegExpTerm term) { not term.getRegex().matchesFullString() } + /** * Holds if the regular expression should not be considered. * diff --git a/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java index e825e1ad2db..dd6a77b5be0 100644 --- a/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java +++ b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java @@ -34,4 +34,42 @@ class PolyRedosTest { Splitter.on(";").withKeyValueSeparator(Splitter.onPattern(reg)).split(tainted); // $ hasPolyRedos } + + void test2(HttpServletRequest request) { + String tainted = request.getParameter("inp"); + + Pattern p1 = Pattern.compile(".*a"); + Pattern p2 = Pattern.compile(".*b"); + + p1.matcher(tainted).matches(); + p2.matcher(tainted).find(); // $ hasPolyRedos + } + + void test3(HttpServletRequest request) { + String tainted = request.getParameter("inp"); + + Pattern p1 = Pattern.compile("ab*b*"); + Pattern p2 = Pattern.compile("cd*d*"); + + p1.matcher(tainted).matches(); // $ hasPolyRedos + p2.matcher(tainted).find(); + } + + void test4(HttpServletRequest request) { + String tainted = request.getParameter("inp"); + + tainted.matches(".*a"); + tainted.replaceAll(".*b", "c"); // $ hasPolyRedos + } + + static Pattern p3 = Pattern.compile(".*a"); + static Pattern p4 = Pattern.compile(".*b"); + + + void test5(HttpServletRequest request) { + String tainted = request.getParameter("inp"); + + p3.asMatchPredicate().test(tainted); + p4.asPredicate().test(tainted); // $ hasPolyRedos + } } \ No newline at end of file From c1290d9e2bae7a4f7b082c7249854ca5ddba66e9 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 9 Mar 2022 14:34:50 +0000 Subject: [PATCH 0332/1618] Sync shared redos library files. --- .../javascript/security/performance/ReDoSUtil.qll | 6 ++++-- .../security/performance/ReDoSUtilSpecific.qll | 12 ++++++++++++ .../semmle/python/security/performance/ReDoSUtil.qll | 6 ++++-- .../security/performance/ReDoSUtilSpecific.qll | 12 ++++++++++++ .../codeql/ruby/security/performance/ReDoSUtil.qll | 6 ++++-- .../ruby/security/performance/ReDoSUtilSpecific.qll | 12 ++++++++++++ 6 files changed, 48 insertions(+), 6 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtil.qll b/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtil.qll index aea089f0715..8aa348bf62f 100644 --- a/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtil.qll +++ b/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtil.qll @@ -624,7 +624,9 @@ State after(RegExpTerm t) { or exists(EffectivelyQuestion opt | t = opt.getAChild() | result = after(opt)) or - exists(RegExpRoot root | t = root | result = AcceptAnySuffix(root)) + exists(RegExpRoot root | t = root | + if matchesAnySuffix(root) then result = AcceptAnySuffix(root) else result = Accept(root) + ) } /** @@ -695,7 +697,7 @@ predicate delta(State q1, EdgeLabel lbl, State q2) { lbl = Epsilon() and q2 = Accept(root) ) or - exists(RegExpRoot root | q1 = Match(root, 0) | lbl = Any() and q2 = q1) + exists(RegExpRoot root | q1 = Match(root, 0) | matchesAnyPrefix(root) and lbl = Any() and q2 = q1) or exists(RegExpDollar dollar | q1 = before(dollar) | lbl = Epsilon() and q2 = Accept(getRoot(dollar)) diff --git a/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtilSpecific.qll b/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtilSpecific.qll index bc5ef32536c..d363e25d83d 100644 --- a/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtilSpecific.qll +++ b/javascript/ql/lib/semmle/javascript/security/performance/ReDoSUtilSpecific.qll @@ -18,6 +18,18 @@ predicate isEscapeClass(RegExpTerm term, string clazz) { */ predicate isPossessive(RegExpQuantifier term) { none() } +/** + * Holds if the regex that `term` is part of is used in a way that ignores any leading prefix of the input it's matched against. + * Not yet implemented for Javascript. + */ +predicate matchesAnyPrefix(RegExpTerm term) { any() } + +/** + * Holds if the regex that `term` is part of is used in a way that ignores any trailing suffix of the input it's matched against. + * Not yet implemented for Javascript. + */ +predicate matchesAnySuffix(RegExpTerm term) { any() } + /** * Holds if the regular expression should not be considered. * diff --git a/python/ql/lib/semmle/python/security/performance/ReDoSUtil.qll b/python/ql/lib/semmle/python/security/performance/ReDoSUtil.qll index aea089f0715..8aa348bf62f 100644 --- a/python/ql/lib/semmle/python/security/performance/ReDoSUtil.qll +++ b/python/ql/lib/semmle/python/security/performance/ReDoSUtil.qll @@ -624,7 +624,9 @@ State after(RegExpTerm t) { or exists(EffectivelyQuestion opt | t = opt.getAChild() | result = after(opt)) or - exists(RegExpRoot root | t = root | result = AcceptAnySuffix(root)) + exists(RegExpRoot root | t = root | + if matchesAnySuffix(root) then result = AcceptAnySuffix(root) else result = Accept(root) + ) } /** @@ -695,7 +697,7 @@ predicate delta(State q1, EdgeLabel lbl, State q2) { lbl = Epsilon() and q2 = Accept(root) ) or - exists(RegExpRoot root | q1 = Match(root, 0) | lbl = Any() and q2 = q1) + exists(RegExpRoot root | q1 = Match(root, 0) | matchesAnyPrefix(root) and lbl = Any() and q2 = q1) or exists(RegExpDollar dollar | q1 = before(dollar) | lbl = Epsilon() and q2 = Accept(getRoot(dollar)) diff --git a/python/ql/lib/semmle/python/security/performance/ReDoSUtilSpecific.qll b/python/ql/lib/semmle/python/security/performance/ReDoSUtilSpecific.qll index 2db1579126d..bc495f88c3c 100644 --- a/python/ql/lib/semmle/python/security/performance/ReDoSUtilSpecific.qll +++ b/python/ql/lib/semmle/python/security/performance/ReDoSUtilSpecific.qll @@ -19,6 +19,18 @@ predicate isEscapeClass(RegExpTerm term, string clazz) { */ predicate isPossessive(RegExpQuantifier term) { none() } +/** + * Holds if the regex that `term` is part of is used in a way that ignores any leading prefix of the input it's matched against. + * Not yet implemented for Python. + */ +predicate matchesAnyPrefix(RegExpTerm term) { any() } + +/** + * Holds if the regex that `term` is part of is used in a way that ignores any trailing suffix of the input it's matched against. + * Not yet implemented for Python. + */ +predicate matchesAnySuffix(RegExpTerm term) { any() } + /** * Holds if the regular expression should not be considered. * diff --git a/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll b/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll index aea089f0715..8aa348bf62f 100644 --- a/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll +++ b/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtil.qll @@ -624,7 +624,9 @@ State after(RegExpTerm t) { or exists(EffectivelyQuestion opt | t = opt.getAChild() | result = after(opt)) or - exists(RegExpRoot root | t = root | result = AcceptAnySuffix(root)) + exists(RegExpRoot root | t = root | + if matchesAnySuffix(root) then result = AcceptAnySuffix(root) else result = Accept(root) + ) } /** @@ -695,7 +697,7 @@ predicate delta(State q1, EdgeLabel lbl, State q2) { lbl = Epsilon() and q2 = Accept(root) ) or - exists(RegExpRoot root | q1 = Match(root, 0) | lbl = Any() and q2 = q1) + exists(RegExpRoot root | q1 = Match(root, 0) | matchesAnyPrefix(root) and lbl = Any() and q2 = q1) or exists(RegExpDollar dollar | q1 = before(dollar) | lbl = Epsilon() and q2 = Accept(getRoot(dollar)) diff --git a/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtilSpecific.qll b/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtilSpecific.qll index 2df67573a9c..8d6b14607e0 100644 --- a/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtilSpecific.qll +++ b/ruby/ql/lib/codeql/ruby/security/performance/ReDoSUtilSpecific.qll @@ -39,6 +39,18 @@ predicate isExcluded(RegExpParent parent) { */ predicate isPossessive(RegExpQuantifier term) { none() } +/** + * Holds if the regex that `term` is part of is used in a way that ignores any leading prefix of the input it's matched against. + * Not yet implemented for Ruby. + */ +predicate matchesAnyPrefix(RegExpTerm term) { any() } + +/** + * Holds if the regex that `term` is part of is used in a way that ignores any trailing suffix of the input it's matched against. + * Not yet implemented for Ruby. + */ +predicate matchesAnySuffix(RegExpTerm term) { any() } + /** * A module containing predicates for determining which flags a regular expression have. */ From 6794268a3c3deb6b350315ec665ea1196f78c4ca Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 16 Mar 2022 13:30:06 +0000 Subject: [PATCH 0333/1618] Split PolynomialRedos definition into a library to avoid duplication in the tests --- .../performance/PolynomialReDosQuery.qll | 34 ++++++++++++++++++ .../Security/CWE/CWE-730/PolynomialReDoS.ql | 33 +++-------------- .../security/CWE-730/PolynomialReDoS.ql | 35 +++---------------- 3 files changed, 43 insertions(+), 59 deletions(-) create mode 100644 java/ql/lib/semmle/code/java/security/performance/PolynomialReDosQuery.qll diff --git a/java/ql/lib/semmle/code/java/security/performance/PolynomialReDosQuery.qll b/java/ql/lib/semmle/code/java/security/performance/PolynomialReDosQuery.qll new file mode 100644 index 00000000000..f13e8ffc8e7 --- /dev/null +++ b/java/ql/lib/semmle/code/java/security/performance/PolynomialReDosQuery.qll @@ -0,0 +1,34 @@ +/** Definitions and configurations for the Polynomial ReDos query */ + +import semmle.code.java.security.performance.SuperlinearBackTracking +import semmle.code.java.dataflow.DataFlow +import semmle.code.java.regex.RegexTreeView +import semmle.code.java.regex.RegexFlowConfigs +import semmle.code.java.dataflow.FlowSources + +/** A sink for polynomial redos queries, where a regex is matched. */ +class PolynomialRedosSink extends DataFlow::Node { + RegExpLiteral reg; + + PolynomialRedosSink() { regexMatchedAgainst(reg.getRegex(), this.asExpr()) } + + /** Gets the regex that is matched against this node. */ + RegExpTerm getRegExp() { result.getParent() = reg } +} + +/** A configuration for Polynomial ReDoS queries. */ +class PolynomialRedosConfig extends TaintTracking::Configuration { + PolynomialRedosConfig() { this = "PolynomialRedosConfig" } + + override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof PolynomialRedosSink } +} + +/** Holds if there is flow from `source` to `sink` that is matched against the regexp term `regexp` that is vulnerable to Polynomial ReDoS. */ +predicate hasPolynomialReDosResult( + DataFlow::PathNode source, DataFlow::PathNode sink, PolynomialBackTrackingTerm regexp +) { + any(PolynomialRedosConfig config).hasFlowPath(source, sink) and + regexp.getRootTerm() = sink.getNode().(PolynomialRedosSink).getRegExp() +} diff --git a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql index 563be6febb0..b37f51aec9a 100644 --- a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql +++ b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql @@ -12,37 +12,12 @@ */ import java -import semmle.code.java.security.performance.SuperlinearBackTracking -import semmle.code.java.dataflow.DataFlow -import semmle.code.java.regex.RegexTreeView -import semmle.code.java.regex.RegexFlowConfigs -import semmle.code.java.dataflow.FlowSources +import semmle.code.java.security.performance.PolynomialReDosQuery import DataFlow::PathGraph -class PolynomialRedosSink extends DataFlow::Node { - RegExpLiteral reg; - - PolynomialRedosSink() { regexMatchedAgainst(reg.getRegex(), this.asExpr()) } - - RegExpTerm getRegExp() { result.getParent() = reg } -} - -class PolynomialRedosConfig extends TaintTracking::Configuration { - PolynomialRedosConfig() { this = "PolynomialRedosConfig" } - - override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof PolynomialRedosSink } -} - -from - PolynomialRedosConfig config, DataFlow::PathNode source, DataFlow::PathNode sink, - PolynomialRedosSink sinkNode, PolynomialBackTrackingTerm regexp -where - config.hasFlowPath(source, sink) and - sinkNode = sink.getNode() and - regexp.getRootTerm() = sinkNode.getRegExp() -select sinkNode, source, sink, +from DataFlow::PathNode source, DataFlow::PathNode sink, PolynomialBackTrackingTerm regexp +where hasPolynomialReDosResult(source, sink, regexp) +select sink, source, sink, "This $@ that depends on $@ may run slow on strings " + regexp.getPrefixMessage() + "with many repetitions of '" + regexp.getPumpString() + "'.", regexp, "regular expression", source.getNode(), "a user-provided value" diff --git a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql index 372f1792083..698f658d508 100644 --- a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql +++ b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql @@ -1,26 +1,6 @@ import java import TestUtilities.InlineExpectationsTest -import semmle.code.java.security.performance.SuperlinearBackTracking -import semmle.code.java.dataflow.DataFlow -import semmle.code.java.regex.RegexTreeView -import semmle.code.java.regex.RegexFlowConfigs -import semmle.code.java.dataflow.FlowSources - -class PolynomialRedosSink extends DataFlow::Node { - RegExpLiteral reg; - - PolynomialRedosSink() { regexMatchedAgainst(reg.getRegex(), this.asExpr()) } - - RegExpTerm getRegExp() { result.getParent() = reg } -} - -class PolynomialRedosConfig extends TaintTracking::Configuration { - PolynomialRedosConfig() { this = "PolynomialRedosConfig" } - - override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } - - override predicate isSink(DataFlow::Node sink) { sink instanceof PolynomialRedosSink } -} +import semmle.code.java.security.performance.PolynomialReDosQuery class HasPolyRedos extends InlineExpectationsTest { HasPolyRedos() { this = "HasPolyRedos" } @@ -29,15 +9,10 @@ class HasPolyRedos extends InlineExpectationsTest { override predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasPolyRedos" and - exists( - PolynomialRedosConfig config, DataFlow::PathNode source, DataFlow::PathNode sink, - PolynomialRedosSink sinkNode, PolynomialBackTrackingTerm regexp - | - config.hasFlowPath(source, sink) and - sinkNode = sink.getNode() and - regexp.getRootTerm() = sinkNode.getRegExp() and - location = sinkNode.getLocation() and - element = sinkNode.toString() and + exists(DataFlow::PathNode source, DataFlow::PathNode sink, PolynomialBackTrackingTerm regexp | + hasPolynomialReDosResult(source, sink, regexp) and + location = sink.getNode().getLocation() and + element = sink.getNode().toString() and value = "" ) } From 04edc10f1ee102a6aa5f6af0ffea6dc19e1cdb9c Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 16 Mar 2022 14:22:50 +0000 Subject: [PATCH 0334/1618] Exclude regexes from test code --- java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index 86f1172ff0a..25d984c39ab 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -7,6 +7,7 @@ private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.DataFlow2 private import semmle.code.java.dataflow.DataFlow3 private import RegexFlowModels +private import semmle.code.java.security.SecurityTests private class RegexCompileFlowConf extends DataFlow2::Configuration { RegexCompileFlowConf() { this = "RegexCompileFlowConfig" } @@ -207,6 +208,10 @@ private class RegexMatchFlowConf extends DataFlow2::Configuration { override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { any(RegexAdditionalFlowStep s).step(node1, node2) } + + override predicate isBarrier(DataFlow::Node node) { + node.getEnclosingCallable().getDeclaringType() instanceof NonSecurityTestClass + } } /** From 1605d36ddff5d5723012fa99d2e8c9af6d02540b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 16 Mar 2022 15:59:41 +0000 Subject: [PATCH 0335/1618] Refine polynomial redos sources to exclude length limited methods --- .../performance/PolynomialReDosQuery.qll | 27 +++++++++++++++++-- .../Security/CWE/CWE-730/PolynomialReDoS.ql | 4 +-- .../security/CWE-730/PolyRedosTest.java | 9 +++++++ .../security/CWE-730/PolynomialReDoS.ql | 4 +-- 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/performance/PolynomialReDosQuery.qll b/java/ql/lib/semmle/code/java/security/performance/PolynomialReDosQuery.qll index f13e8ffc8e7..1cd628e420a 100644 --- a/java/ql/lib/semmle/code/java/security/performance/PolynomialReDosQuery.qll +++ b/java/ql/lib/semmle/code/java/security/performance/PolynomialReDosQuery.qll @@ -1,4 +1,4 @@ -/** Definitions and configurations for the Polynomial ReDos query */ +/** Definitions and configurations for the Polynomial ReDoS query */ import semmle.code.java.security.performance.SuperlinearBackTracking import semmle.code.java.dataflow.DataFlow @@ -16,6 +16,22 @@ class PolynomialRedosSink extends DataFlow::Node { RegExpTerm getRegExp() { result.getParent() = reg } } +/** + * A method whose result typically has a limited length, + * such as HTTP headers, and values derrived from them. + */ +private class LengthRestrictedMethod extends Method { + LengthRestrictedMethod() { + this.getName().toLowerCase().matches(["%header%", "%requesturi%", "%requesturl%", "%cookie%"]) + or + this.getDeclaringType().getName().toLowerCase().matches("%cookie%") and + this.getName().matches("get%") + or + this.getDeclaringType().getName().toLowerCase().matches("%request%") and + this.getName().toLowerCase().matches(["%get%path%", "get%user%", "%querystring%"]) + } +} + /** A configuration for Polynomial ReDoS queries. */ class PolynomialRedosConfig extends TaintTracking::Configuration { PolynomialRedosConfig() { this = "PolynomialRedosConfig" } @@ -23,10 +39,17 @@ class PolynomialRedosConfig extends TaintTracking::Configuration { override predicate isSource(DataFlow::Node src) { src instanceof RemoteFlowSource } override predicate isSink(DataFlow::Node sink) { sink instanceof PolynomialRedosSink } + + override predicate isSanitizer(DataFlow::Node node) { + super.isSanitizer(node) or + node.getType() instanceof PrimitiveType or + node.getType() instanceof BoxedType or + node.asExpr().(MethodAccess).getMethod() instanceof LengthRestrictedMethod + } } /** Holds if there is flow from `source` to `sink` that is matched against the regexp term `regexp` that is vulnerable to Polynomial ReDoS. */ -predicate hasPolynomialReDosResult( +predicate hasPolynomialReDoSResult( DataFlow::PathNode source, DataFlow::PathNode sink, PolynomialBackTrackingTerm regexp ) { any(PolynomialRedosConfig config).hasFlowPath(source, sink) and diff --git a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql index b37f51aec9a..e1907b39414 100644 --- a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql +++ b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql @@ -12,11 +12,11 @@ */ import java -import semmle.code.java.security.performance.PolynomialReDosQuery +import semmle.code.java.security.performance.PolynomialReDoSQuery import DataFlow::PathGraph from DataFlow::PathNode source, DataFlow::PathNode sink, PolynomialBackTrackingTerm regexp -where hasPolynomialReDosResult(source, sink, regexp) +where hasPolynomialReDoSResult(source, sink, regexp) select sink, source, sink, "This $@ that depends on $@ may run slow on strings " + regexp.getPrefixMessage() + "with many repetitions of '" + regexp.getPumpString() + "'.", regexp, "regular expression", diff --git a/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java index dd6a77b5be0..44931190460 100644 --- a/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java +++ b/java/ql/test/query-tests/security/CWE-730/PolyRedosTest.java @@ -72,4 +72,13 @@ class PolyRedosTest { p3.asMatchPredicate().test(tainted); p4.asPredicate().test(tainted); // $ hasPolyRedos } + + void test6(HttpServletRequest request) { + Pattern p = Pattern.compile("^a*a*$"); + + p.matcher(request.getParameter("inp")).matches(); // $ hasPolyRedos + p.matcher(request.getHeader("If-None-Match")).matches(); + p.matcher(request.getRequestURI()).matches(); + p.matcher(request.getCookies()[0].getName()).matches(); + } } \ No newline at end of file diff --git a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql index 698f658d508..e5fb58d4794 100644 --- a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql +++ b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql @@ -1,6 +1,6 @@ import java import TestUtilities.InlineExpectationsTest -import semmle.code.java.security.performance.PolynomialReDosQuery +import semmle.code.java.security.performance.PolynomialReDoSQuery class HasPolyRedos extends InlineExpectationsTest { HasPolyRedos() { this = "HasPolyRedos" } @@ -10,7 +10,7 @@ class HasPolyRedos extends InlineExpectationsTest { override predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasPolyRedos" and exists(DataFlow::PathNode source, DataFlow::PathNode sink, PolynomialBackTrackingTerm regexp | - hasPolynomialReDosResult(source, sink, regexp) and + hasPolynomialReDoSResult(source, sink, regexp) and location = sink.getNode().getLocation() and element = sink.getNode().toString() and value = "" From 375ded4edeb30fd018da1b4d9e3e740a5b24475b Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 16 Mar 2022 16:04:48 +0000 Subject: [PATCH 0336/1618] Move check to exlude test cases so that it also covers exponential redos --- java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index 25d984c39ab..adcda1e2516 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -17,6 +17,10 @@ private class RegexCompileFlowConf extends DataFlow2::Configuration { override predicate isSink(DataFlow::Node node) { sinkNode(node, ["regex-compile", "regex-compile-match", "regex-compile-find"]) } + + override predicate isBarrier(DataFlow::Node node) { + node.getEnclosingCallable().getDeclaringType() instanceof NonSecurityTestClass + } } /** @@ -208,10 +212,6 @@ private class RegexMatchFlowConf extends DataFlow2::Configuration { override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { any(RegexAdditionalFlowStep s).step(node1, node2) } - - override predicate isBarrier(DataFlow::Node node) { - node.getEnclosingCallable().getDeclaringType() instanceof NonSecurityTestClass - } } /** From 3d65a9cafc407a0e26c2a04aa794322ba5110dfb Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 16 Mar 2022 17:03:27 +0000 Subject: [PATCH 0337/1618] Update shared files --- .../java/security/performance/ReDoSUtil.qll | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll index a05261611c7..a7d843ac7f8 100644 --- a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll +++ b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll @@ -119,18 +119,18 @@ class EmptyPositiveSubPatttern extends RegExpSubPattern { * whose root node is not a disjunction. */ class RegExpRoot extends RegExpTerm { - RegExpParent parent; - RegExpRoot() { - exists(RegExpAlt alt | - alt.isRootTerm() and - this = alt.getAChild() and - parent = alt.getParent() + exists(RegExpParent parent | + exists(RegExpAlt alt | + alt.isRootTerm() and + this = alt.getAChild() and + parent = alt.getParent() + ) + or + this.isRootTerm() and + not this instanceof RegExpAlt and + parent = this.getParent() ) - or - this.isRootTerm() and - not this instanceof RegExpAlt and - parent = this.getParent() } /** @@ -466,13 +466,14 @@ private module CharacterClasses { * An implementation of `CharacterClass` for \d, \s, and \w. */ private class PositiveCharacterClassEscape extends CharacterClass { - RegExpTerm cc; string charClass; PositiveCharacterClassEscape() { - isEscapeClass(cc, charClass) and - this = getCanonicalCharClass(cc) and - charClass = ["d", "s", "w"] + exists(RegExpTerm cc | + isEscapeClass(cc, charClass) and + this = getCanonicalCharClass(cc) and + charClass = ["d", "s", "w"] + ) } override string getARelevantChar() { @@ -504,13 +505,14 @@ private module CharacterClasses { * An implementation of `CharacterClass` for \D, \S, and \W. */ private class NegativeCharacterClassEscape extends CharacterClass { - RegExpTerm cc; string charClass; NegativeCharacterClassEscape() { - isEscapeClass(cc, charClass) and - this = getCanonicalCharClass(cc) and - charClass = ["D", "S", "W"] + exists(RegExpTerm cc | + isEscapeClass(cc, charClass) and + this = getCanonicalCharClass(cc) and + charClass = ["D", "S", "W"] + ) } override string getARelevantChar() { From 522a8aff6fea78329b376a2a394f5c162f456c6f Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 17 Mar 2022 13:08:00 +0000 Subject: [PATCH 0338/1618] Fix filename case --- .../{PolynomialReDosQuery.qll => PolynomialReDoSQuery.qll} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java/ql/lib/semmle/code/java/security/performance/{PolynomialReDosQuery.qll => PolynomialReDoSQuery.qll} (100%) diff --git a/java/ql/lib/semmle/code/java/security/performance/PolynomialReDosQuery.qll b/java/ql/lib/semmle/code/java/security/performance/PolynomialReDoSQuery.qll similarity index 100% rename from java/ql/lib/semmle/code/java/security/performance/PolynomialReDosQuery.qll rename to java/ql/lib/semmle/code/java/security/performance/PolynomialReDoSQuery.qll From 0f606d987dd4437dd8ab707a6628cb290f303049 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 23 Mar 2022 12:28:08 +0000 Subject: [PATCH 0339/1618] Remove redundant `super` call. Co-authored-by: Tony Torralba --- .../code/java/security/performance/PolynomialReDoSQuery.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/security/performance/PolynomialReDoSQuery.qll b/java/ql/lib/semmle/code/java/security/performance/PolynomialReDoSQuery.qll index 1cd628e420a..2a33e15c74a 100644 --- a/java/ql/lib/semmle/code/java/security/performance/PolynomialReDoSQuery.qll +++ b/java/ql/lib/semmle/code/java/security/performance/PolynomialReDoSQuery.qll @@ -41,7 +41,6 @@ class PolynomialRedosConfig extends TaintTracking::Configuration { override predicate isSink(DataFlow::Node sink) { sink instanceof PolynomialRedosSink } override predicate isSanitizer(DataFlow::Node node) { - super.isSanitizer(node) or node.getType() instanceof PrimitiveType or node.getType() instanceof BoxedType or node.asExpr().(MethodAccess).getMethod() instanceof LengthRestrictedMethod From 0d13864bc8f0b8343b12f45ec79ff909de17dff6 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 28 Mar 2022 17:03:24 +0100 Subject: [PATCH 0340/1618] Restrict polynomial ReDoS' strings-parsed-as-regexes search to those that could possibly be interesting In practice for polynomial ReDoS this means those regexes containing at least one potentially-infinite quantifier (* or +). --- .../lib/semmle/code/java/regex/RegexFlowConfigs.qll | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index adcda1e2516..77b6d40b791 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -9,10 +9,16 @@ private import semmle.code.java.dataflow.DataFlow3 private import RegexFlowModels private import semmle.code.java.security.SecurityTests +private class ExploitableStringLiteral extends StringLiteral { + ExploitableStringLiteral() { this.getValue().matches(["%+%", "%*%"]) } +} + private class RegexCompileFlowConf extends DataFlow2::Configuration { RegexCompileFlowConf() { this = "RegexCompileFlowConfig" } - override predicate isSource(DataFlow::Node node) { node.asExpr() instanceof StringLiteral } + override predicate isSource(DataFlow::Node node) { + node.asExpr() instanceof ExploitableStringLiteral + } override predicate isSink(DataFlow::Node node) { sinkNode(node, ["regex-compile", "regex-compile-match", "regex-compile-find"]) @@ -203,7 +209,9 @@ private class GuavaRegexFlowStep extends RegexAdditionalFlowStep { private class RegexMatchFlowConf extends DataFlow2::Configuration { RegexMatchFlowConf() { this = "RegexMatchFlowConf" } - override predicate isSource(DataFlow::Node src) { src.asExpr() instanceof StringLiteral } + override predicate isSource(DataFlow::Node src) { + src.asExpr() instanceof ExploitableStringLiteral + } override predicate isSink(DataFlow::Node sink) { exists(RegexMatchMethodAccess ma | sink.asExpr() = ma.getRegexArg()) From bc17d4b91f28e435dec320663a62f3d5dbd98dc2 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 28 Mar 2022 17:05:09 +0100 Subject: [PATCH 0341/1618] Break the recursion between seqChild, RegExpTerm and TRegExpSequence --- java/ql/lib/semmle/code/java/regex/RegexTreeView.qll | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index 27074913a7e..f4bd6682583 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -20,7 +20,11 @@ private newtype TRegExpParent = /** A sequence term */ TRegExpSequence(Regex re, int start, int end) { re.sequence(start, end) and - exists(seqChild(re, start, end, 1)) // if a sequence does not have more than one element, it should be treated as that element instead. + // Only create sequence nodes for sequences with two or more children. + exists(int mid | + re.item(start, mid) and + re.item(mid, _) + ) } or /** An alternation term */ TRegExpAlt(Regex re, int start, int end) { From e5ca92424029315be395ab860ccdc9190138b70f Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 29 Mar 2022 11:07:24 +0100 Subject: [PATCH 0342/1618] Allow quantifiers invoving {}; add comments --- java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll | 8 +++++++- java/ql/lib/semmle/code/java/regex/RegexTreeView.qll | 7 ++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index 77b6d40b791..6339ff238f3 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -10,7 +10,7 @@ private import RegexFlowModels private import semmle.code.java.security.SecurityTests private class ExploitableStringLiteral extends StringLiteral { - ExploitableStringLiteral() { this.getValue().matches(["%+%", "%*%"]) } + ExploitableStringLiteral() { this.getValue().matches(["%+%", "%*%", "%{%}%"]) } } private class RegexCompileFlowConf extends DataFlow2::Configuration { @@ -32,6 +32,9 @@ private class RegexCompileFlowConf extends DataFlow2::Configuration { /** * Holds if `s` is used as a regex, with the mode `mode` (if known). * If regex mode is not known, `mode` will be `"None"`. + * + * As an optimisation, only regexes containing an infinite repitition quatifier (`+`, `*`, or `{x,}`) + * and therefore may be relevant for ReDoS queries are considered. */ predicate usedAsRegex(StringLiteral s, string mode, boolean match_full_string) { exists(DataFlow::Node sink | @@ -224,6 +227,9 @@ private class RegexMatchFlowConf extends DataFlow2::Configuration { /** * Holds if the string literal `regex` is a regular expression that is matched against the expression `str`. + * + * As an optimisation, only regexes containing an infinite repitition quatifier (`+`, `*`, or `{x,}`) + * and therefore may be relevant for ReDoS queries are considered. */ predicate regexMatchedAgainst(StringLiteral regex, Expr str) { exists( diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index f4bd6682583..c447774906e 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -71,7 +71,12 @@ class RegExpParent extends TRegExpParent { abstract Regex getRegex(); } -/** A string literal used as a regular expression */ +/** + * A string literal used as a regular expression. + * + * As an optimisation, only regexes containing an infinite repitition quatifier (`+`, `*`, or `{x,}`) + * and therefore may be relevant for ReDoS queries are considered. + */ class RegExpLiteral extends TRegExpLiteral, RegExpParent { Regex re; From 4ed2e8d1fdd870bcff8e658f497bd2444931b39f Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 29 Mar 2022 11:12:37 +0100 Subject: [PATCH 0343/1618] Update tests to account for only regexes with quantifiers being considered --- .../regex/parser/RegexParseTests.expected | 25 +++++++++++++----- .../test/library-tests/regex/parser/Test.java | 26 +++++++++---------- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/java/ql/test/library-tests/regex/parser/RegexParseTests.expected b/java/ql/test/library-tests/regex/parser/RegexParseTests.expected index 66d63f70808..97e8c397682 100644 --- a/java/ql/test/library-tests/regex/parser/RegexParseTests.expected +++ b/java/ql/test/library-tests/regex/parser/RegexParseTests.expected @@ -7,13 +7,18 @@ parseFailures | Test.java:5:13:5:13 | Z | [RegExpConstant,RegExpNormalChar] | | Test.java:5:14:5:16 | \\d | [RegExpCharacterClassEscape] | | Test.java:6:10:6:42 | \\Q hello world [ *** \\Q ) ( \\E | [RegExpConstant,RegExpQuote] | +| Test.java:6:10:6:43 | \\Q hello world [ *** \\Q ) ( \\E+ | [RegExpPlus] | | Test.java:7:10:7:23 | [\\Q hi ] \\E] | [RegExpCharacterClass] | +| Test.java:7:10:7:24 | [\\Q hi ] \\E]+ | [RegExpPlus] | | Test.java:7:11:7:22 | \\Q hi ] \\E | [RegExpConstant,RegExpQuote] | | Test.java:8:10:8:12 | []] | [RegExpCharacterClass] | +| Test.java:8:10:8:13 | []]+ | [RegExpPlus] | | Test.java:8:11:8:11 | ] | [RegExpConstant,RegExpNormalChar] | | Test.java:9:10:9:13 | [^]] | [RegExpCharacterClass] | +| Test.java:9:10:9:14 | [^]]+ | [RegExpPlus] | | Test.java:9:12:9:12 | ] | [RegExpConstant,RegExpNormalChar] | | Test.java:10:10:10:20 | [abc[defg]] | [RegExpCharacterClass] | +| Test.java:10:10:10:21 | [abc[defg]]+ | [RegExpPlus] | | Test.java:10:11:10:11 | a | [RegExpConstant,RegExpNormalChar] | | Test.java:10:12:10:12 | b | [RegExpConstant,RegExpNormalChar] | | Test.java:10:13:10:13 | c | [RegExpConstant,RegExpNormalChar] | @@ -24,7 +29,7 @@ parseFailures | Test.java:10:18:10:18 | g | [RegExpConstant,RegExpNormalChar] | | Test.java:10:19:10:19 | ] | [RegExpConstant,RegExpNormalChar] | | Test.java:11:10:11:57 | [abc&&[\\W\\p{Lower}\\P{Space}\\N{degree sign}]] | [RegExpCharacterClass] | -| Test.java:11:10:11:68 | [abc&&[\\W\\p{Lower}\\P{Space}\\N{degree sign}]]\\b7\\b{g}8 | [RegExpSequence] | +| Test.java:11:10:11:69 | [abc&&[\\W\\p{Lower}\\P{Space}\\N{degree sign}]]\\b7\\b{g}8+ | [RegExpSequence] | | Test.java:11:11:11:11 | a | [RegExpConstant,RegExpNormalChar] | | Test.java:11:12:11:12 | b | [RegExpConstant,RegExpNormalChar] | | Test.java:11:13:11:13 | c | [RegExpConstant,RegExpNormalChar] | @@ -40,11 +45,15 @@ parseFailures | Test.java:11:61:11:61 | 7 | [RegExpConstant,RegExpNormalChar] | | Test.java:11:62:11:67 | \\b{g} | [RegExpConstant,RegExpEscape] | | Test.java:11:68:11:68 | 8 | [RegExpConstant,RegExpNormalChar] | +| Test.java:11:68:11:69 | 8+ | [RegExpPlus] | | Test.java:12:10:12:13 | \\cA | [RegExpConstant,RegExpEscape] | +| Test.java:12:10:12:14 | \\cA+ | [RegExpPlus] | | Test.java:13:10:13:13 | \\c( | [RegExpConstant,RegExpEscape] | +| Test.java:13:10:13:14 | \\c(+ | [RegExpPlus] | | Test.java:14:10:14:14 | \\c\\ | [RegExpConstant,RegExpEscape] | -| Test.java:14:10:14:18 | \\c\\(ab) | [RegExpSequence] | +| Test.java:14:10:14:19 | \\c\\(ab)+ | [RegExpSequence] | | Test.java:14:15:14:18 | (ab) | [RegExpGroup] | +| Test.java:14:15:14:19 | (ab)+ | [RegExpPlus] | | Test.java:14:16:14:16 | a | [RegExpConstant,RegExpNormalChar] | | Test.java:14:16:14:17 | ab | [RegExpSequence] | | Test.java:14:17:14:17 | b | [RegExpConstant,RegExpNormalChar] | @@ -110,7 +119,7 @@ parseFailures | Test.java:16:102:16:102 | u | [RegExpConstant,RegExpNormalChar] | | Test.java:16:102:16:108 | u{16,}+ | [RegExpQuantifier] | | Test.java:17:10:17:13 | (?i) | [RegExpZeroWidthMatch] | -| Test.java:17:10:17:35 | (?i)(?=a)(?!b)(?<=c)(?hi)(?hell*?o*+)123\\k", "a+b*c?d{2}e{3,4}f{,5}g{6,}h+?i*?j??k{7}?l{8,9}?m{,10}?n{11,}?o++p*+q?+r{12}+s{13,14}+t{,15}+u{16,}+", - "(?i)(?=a)(?!b)(?<=c)(? Date: Tue, 29 Mar 2022 11:20:30 +0100 Subject: [PATCH 0344/1618] Add a test for deeply nested sequences --- .../regex/parser/RegexParseTests.expected | 51 +++++++++++++++++++ .../test/library-tests/regex/parser/Test.java | 3 +- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/java/ql/test/library-tests/regex/parser/RegexParseTests.expected b/java/ql/test/library-tests/regex/parser/RegexParseTests.expected index 97e8c397682..ad94d005289 100644 --- a/java/ql/test/library-tests/regex/parser/RegexParseTests.expected +++ b/java/ql/test/library-tests/regex/parser/RegexParseTests.expected @@ -154,3 +154,54 @@ parseFailures | Test.java:20:10:20:12 | [\|] | [RegExpCharacterClass] | | Test.java:20:10:20:13 | [\|]+ | [RegExpPlus] | | Test.java:20:11:20:11 | \| | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:10:21:37 | (a(a(a(a(a(a((((c))))a)))))) | [RegExpGroup] | +| Test.java:21:10:21:68 | (a(a(a(a(a(a((((c))))a))))))((((((b(((((d)))))b)b)b)b)b)b)+ | [RegExpSequence] | +| Test.java:21:11:21:11 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:11:21:36 | a(a(a(a(a(a((((c))))a))))) | [RegExpSequence] | +| Test.java:21:12:21:36 | (a(a(a(a(a((((c))))a))))) | [RegExpGroup] | +| Test.java:21:13:21:13 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:13:21:35 | a(a(a(a(a((((c))))a)))) | [RegExpSequence] | +| Test.java:21:14:21:35 | (a(a(a(a((((c))))a)))) | [RegExpGroup] | +| Test.java:21:15:21:15 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:15:21:34 | a(a(a(a((((c))))a))) | [RegExpSequence] | +| Test.java:21:16:21:34 | (a(a(a((((c))))a))) | [RegExpGroup] | +| Test.java:21:17:21:17 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:17:21:33 | a(a(a((((c))))a)) | [RegExpSequence] | +| Test.java:21:18:21:33 | (a(a((((c))))a)) | [RegExpGroup] | +| Test.java:21:19:21:19 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:19:21:32 | a(a((((c))))a) | [RegExpSequence] | +| Test.java:21:20:21:32 | (a((((c))))a) | [RegExpGroup] | +| Test.java:21:21:21:21 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:21:21:31 | a((((c))))a | [RegExpSequence] | +| Test.java:21:22:21:30 | ((((c)))) | [RegExpGroup] | +| Test.java:21:23:21:29 | (((c))) | [RegExpGroup] | +| Test.java:21:24:21:28 | ((c)) | [RegExpGroup] | +| Test.java:21:25:21:27 | (c) | [RegExpGroup] | +| Test.java:21:26:21:26 | c | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:31:21:31 | a | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:38:21:67 | ((((((b(((((d)))))b)b)b)b)b)b) | [RegExpGroup] | +| Test.java:21:38:21:68 | ((((((b(((((d)))))b)b)b)b)b)b)+ | [RegExpPlus] | +| Test.java:21:39:21:65 | (((((b(((((d)))))b)b)b)b)b) | [RegExpGroup] | +| Test.java:21:39:21:66 | (((((b(((((d)))))b)b)b)b)b)b | [RegExpSequence] | +| Test.java:21:40:21:63 | ((((b(((((d)))))b)b)b)b) | [RegExpGroup] | +| Test.java:21:40:21:64 | ((((b(((((d)))))b)b)b)b)b | [RegExpSequence] | +| Test.java:21:41:21:61 | (((b(((((d)))))b)b)b) | [RegExpGroup] | +| Test.java:21:41:21:62 | (((b(((((d)))))b)b)b)b | [RegExpSequence] | +| Test.java:21:42:21:59 | ((b(((((d)))))b)b) | [RegExpGroup] | +| Test.java:21:42:21:60 | ((b(((((d)))))b)b)b | [RegExpSequence] | +| Test.java:21:43:21:57 | (b(((((d)))))b) | [RegExpGroup] | +| Test.java:21:43:21:58 | (b(((((d)))))b)b | [RegExpSequence] | +| Test.java:21:44:21:44 | b | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:44:21:56 | b(((((d)))))b | [RegExpSequence] | +| Test.java:21:45:21:55 | (((((d))))) | [RegExpGroup] | +| Test.java:21:46:21:54 | ((((d)))) | [RegExpGroup] | +| Test.java:21:47:21:53 | (((d))) | [RegExpGroup] | +| Test.java:21:48:21:52 | ((d)) | [RegExpGroup] | +| Test.java:21:49:21:51 | (d) | [RegExpGroup] | +| Test.java:21:50:21:50 | d | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:56:21:56 | b | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:58:21:58 | b | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:60:21:60 | b | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:62:21:62 | b | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:64:21:64 | b | [RegExpConstant,RegExpNormalChar] | +| Test.java:21:66:21:66 | b | [RegExpConstant,RegExpNormalChar] | diff --git a/java/ql/test/library-tests/regex/parser/Test.java b/java/ql/test/library-tests/regex/parser/Test.java index 52b354e1c87..713f150243f 100644 --- a/java/ql/test/library-tests/regex/parser/Test.java +++ b/java/ql/test/library-tests/regex/parser/Test.java @@ -17,7 +17,8 @@ class Test { "(?i)(?=a)(?!b)(?<=c)(? Date: Mon, 4 Apr 2022 14:56:03 +0100 Subject: [PATCH 0345/1618] Sync shared files --- .../performance/ExponentialBackTracking.qll | 55 +++++++++++++---- .../java/security/performance/ReDoSUtil.qll | 4 +- ...gExpTreeView.qll => ReDoSUtilSpecific.qll} | 0 .../performance/SuperlinearBackTracking.qll | 60 +++++++++++++++---- 4 files changed, 91 insertions(+), 28 deletions(-) rename java/ql/lib/semmle/code/java/security/performance/{RegExpTreeView.qll => ReDoSUtilSpecific.qll} (100%) diff --git a/java/ql/lib/semmle/code/java/security/performance/ExponentialBackTracking.qll b/java/ql/lib/semmle/code/java/security/performance/ExponentialBackTracking.qll index 8d308a93104..5e0fe18ea00 100644 --- a/java/ql/lib/semmle/code/java/security/performance/ExponentialBackTracking.qll +++ b/java/ql/lib/semmle/code/java/security/performance/ExponentialBackTracking.qll @@ -279,17 +279,6 @@ private class Trace extends TTrace { } } -/** - * Gets a string corresponding to the trace `t`. - */ -private string concretise(Trace t) { - t = Nil() and result = "" - or - exists(InputSymbol s1, InputSymbol s2, Trace rest | t = Step(s1, s2, rest) | - result = concretise(rest) + intersect(s1, s2) - ) -} - /** * Holds if `r` is reachable from `(fork, fork)` under input `w`, and there is * a path from `r` back to `(fork, fork)` with `rem` steps. @@ -321,14 +310,54 @@ private StatePair getAForkPair(State fork) { result = MkStatePair(epsilonPred*(fork), epsilonPred*(fork)) } +private predicate hasSuffix(Trace suffix, Trace t, int i) { + // Declaring `t` to be a `RelevantTrace` currently causes a redundant check in the + // recursive case, so instead we check it explicitly here. + t instanceof RelevantTrace and + i = 0 and + suffix = t + or + hasSuffix(Step(_, _, suffix), t, i - 1) +} + +pragma[noinline] +private predicate hasTuple(InputSymbol s1, InputSymbol s2, Trace t, int i) { + hasSuffix(Step(s1, s2, _), t, i) +} + +private class RelevantTrace extends Trace, Step { + RelevantTrace() { + exists(State fork, StatePair q | + isReachableFromFork(fork, q, this, _) and + q = getAForkPair(fork) + ) + } + + pragma[noinline] + private string intersect(int i) { + exists(InputSymbol s1, InputSymbol s2 | + hasTuple(s1, s2, this, i) and + result = intersect(s1, s2) + ) + } + + /** Gets a string corresponding to this trace. */ + // the pragma is needed for the case where `intersect(s1, s2)` has multiple values, + // not for recursion + language[monotonicAggregates] + string concretise() { + result = strictconcat(int i | hasTuple(_, _, this, i) | this.intersect(i) order by i desc) + } +} + /** * Holds if `fork` is a pumpable fork with word `w`. */ private predicate isPumpable(State fork, string w) { - exists(StatePair q, Trace t | + exists(StatePair q, RelevantTrace t | isReachableFromFork(fork, q, t, _) and q = getAForkPair(fork) and - w = concretise(t) + w = t.concretise() ) } diff --git a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll index a7d843ac7f8..8aa348bf62f 100644 --- a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll +++ b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtil.qll @@ -12,7 +12,7 @@ * states that will cause backtracking (a rejecting suffix exists). */ -import RegExpTreeView +import ReDoSUtilSpecific /** * A configuration for which parts of a regular expression should be considered relevant for @@ -32,7 +32,7 @@ abstract class ReDoSConfiguration extends string { } /** - * Holds if repeating `pump' starting at `state` is a candidate for causing backtracking. + * Holds if repeating `pump` starting at `state` is a candidate for causing backtracking. * No check whether a rejected suffix exists has been made. */ private predicate isReDoSCandidate(State state, string pump) { diff --git a/java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtilSpecific.qll similarity index 100% rename from java/ql/lib/semmle/code/java/security/performance/RegExpTreeView.qll rename to java/ql/lib/semmle/code/java/security/performance/ReDoSUtilSpecific.qll diff --git a/java/ql/lib/semmle/code/java/security/performance/SuperlinearBackTracking.qll b/java/ql/lib/semmle/code/java/security/performance/SuperlinearBackTracking.qll index 2b42165ff7e..4ba9520cdcc 100644 --- a/java/ql/lib/semmle/code/java/security/performance/SuperlinearBackTracking.qll +++ b/java/ql/lib/semmle/code/java/security/performance/SuperlinearBackTracking.qll @@ -254,17 +254,6 @@ class Trace extends TTrace { } } -/** - * Gets a string corresponding to the trace `t`. - */ -string concretise(Trace t) { - t = Nil() and result = "" - or - exists(InputSymbol s1, InputSymbol s2, InputSymbol s3, Trace rest | t = Step(s1, s2, s3, rest) | - result = concretise(rest) + getAThreewayIntersect(s1, s2, s3) - ) -} - /** * Holds if there exists a transition from `r` to `q` in the product automaton. * Notice that the arguments are flipped, and thus the direction is backwards. @@ -332,6 +321,51 @@ StateTuple getAnEndTuple(State pivot, State succ) { result = MkStateTuple(pivot, succ, succ) } +private predicate hasSuffix(Trace suffix, Trace t, int i) { + // Declaring `t` to be a `RelevantTrace` currently causes a redundant check in the + // recursive case, so instead we check it explicitly here. + t instanceof RelevantTrace and + i = 0 and + suffix = t + or + hasSuffix(Step(_, _, _, suffix), t, i - 1) +} + +pragma[noinline] +private predicate hasTuple(InputSymbol s1, InputSymbol s2, InputSymbol s3, Trace t, int i) { + hasSuffix(Step(s1, s2, s3, _), t, i) +} + +private class RelevantTrace extends Trace, Step { + RelevantTrace() { + exists(State pivot, State succ, StateTuple q | + isReachableFromStartTuple(pivot, succ, q, this, _) and + q = getAnEndTuple(pivot, succ) + ) + } + + pragma[noinline] + private string getAThreewayIntersect(int i) { + exists(InputSymbol s1, InputSymbol s2, InputSymbol s3 | + hasTuple(s1, s2, s3, this, i) and + result = getAThreewayIntersect(s1, s2, s3) + ) + } + + /** Gets a string corresponding to this trace. */ + // the pragma is needed for the case where `getAThreewayIntersect(s1, s2, s3)` has multiple values, + // not for recursion + language[monotonicAggregates] + string concretise() { + result = + strictconcat(int i | + hasTuple(_, _, _, this, i) + | + this.getAThreewayIntersect(i) order by i desc + ) + } +} + /** * Holds if matching repetitions of `pump` can: * 1) Transition from `pivot` back to `pivot`. @@ -345,10 +379,10 @@ StateTuple getAnEndTuple(State pivot, State succ) { * available in the `hasReDoSResult` predicate. */ predicate isPumpable(State pivot, State succ, string pump) { - exists(StateTuple q, Trace t | + exists(StateTuple q, RelevantTrace t | isReachableFromStartTuple(pivot, succ, q, t, _) and q = getAnEndTuple(pivot, succ) and - pump = concretise(t) + pump = t.concretise() ) } From eec57d4f25bfca3eb6e5b4339169df532df2ff44 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 5 Apr 2022 15:39:46 +0100 Subject: [PATCH 0346/1618] Simplify dataflow logic by using only one configuration, and expessing more sinks with models-as-data --- .../code/java/regex/RegexFlowConfigs.qll | 198 +++++++----------- .../code/java/regex/RegexFlowModels.qll | 41 ++-- 2 files changed, 93 insertions(+), 146 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index 6339ff238f3..c400b521f80 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -13,87 +13,53 @@ private class ExploitableStringLiteral extends StringLiteral { ExploitableStringLiteral() { this.getValue().matches(["%+%", "%*%", "%{%}%"]) } } -private class RegexCompileFlowConf extends DataFlow2::Configuration { - RegexCompileFlowConf() { this = "RegexCompileFlowConfig" } - - override predicate isSource(DataFlow::Node node) { - node.asExpr() instanceof ExploitableStringLiteral - } - - override predicate isSink(DataFlow::Node node) { - sinkNode(node, ["regex-compile", "regex-compile-match", "regex-compile-find"]) - } - - override predicate isBarrier(DataFlow::Node node) { - node.getEnclosingCallable().getDeclaringType() instanceof NonSecurityTestClass - } -} - /** - * Holds if `s` is used as a regex, with the mode `mode` (if known). - * If regex mode is not known, `mode` will be `"None"`. - * - * As an optimisation, only regexes containing an infinite repitition quatifier (`+`, `*`, or `{x,}`) - * and therefore may be relevant for ReDoS queries are considered. + * Holds if `kind` is an external sink kind that is relevant for regex flow. + * `full` is true if sinks with this kind match against the full string of its input. + * `strArg` is the index of the argument to methods with this sink kind that contan the string to be matched against, + * where -1 is the qualifier; or -2 if no such argument exists. */ -predicate usedAsRegex(StringLiteral s, string mode, boolean match_full_string) { - exists(DataFlow::Node sink | - any(RegexCompileFlowConf c).hasFlow(DataFlow2::exprNode(s), sink) and - mode = "None" and // TODO: proper mode detection - (if matchesFullString(sink) then match_full_string = true else match_full_string = false) +private predicate regexSinkKindInfo(string kind, boolean full, int strArg) { + sinkModel(_, _, _, _, _, _, _, kind) and + exists(string fullStr, string strArgStr | + ( + full = true and fullStr = "f" + or + full = false and fullStr = "" + ) and + ( + strArgStr.toInt() = strArg + or + strArg = -2 and + strArgStr = "" + ) + | + kind = "regex-use[" + fullStr + strArgStr + "]" ) } -/** - * Holds if the regex that flows to `sink` is used to match against a full string, - * as though it was implicitly surrounded by ^ and $. - */ -private predicate matchesFullString(DataFlow::Node sink) { - sinkNode(sink, "regex-compile-match") - or - exists(DataFlow::Node matchSource, RegexCompileToMatchConf conf | - matchSource.asExpr().(MethodAccess).getAnArgument() = sink.asExpr() and - conf.hasFlow(matchSource, _) - ) -} +/** A sink that is relevant for regex flow. */ +private class RegexFlowSink extends DataFlow::Node { + boolean full; + int strArg; -private class RegexCompileToMatchConf extends DataFlow2::Configuration { - RegexCompileToMatchConf() { this = "RegexCompileToMatchConfig" } - - override predicate isSource(DataFlow::Node node) { sourceNode(node, "regex-compile") } - - override predicate isSink(DataFlow::Node node) { sinkNode(node, "regex-match") } - - override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { - exists(MethodAccess ma | node2.asExpr() = ma and node1.asExpr() = ma.getQualifier() | - ma.getMethod().hasQualifiedName("java.util.regex", "Pattern", "matcher") + RegexFlowSink() { + exists(string kind | + regexSinkKindInfo(kind, full, strArg) and + sinkNode(this, kind) ) } -} -/** - * A method access that can match a regex against a string - */ -abstract class RegexMatchMethodAccess extends MethodAccess { - string package; - string type; - string name; - int regexArg; - int stringArg; - Method m; + /** Holds if a regex that flows here is matched against a full string (rather than a substring). */ + predicate matchesFullString() { full = true } - RegexMatchMethodAccess() { - this.getMethod().getSourceDeclaration().overrides*(m) and - m.hasQualifiedName(package, type, name) and - regexArg in [-1 .. m.getNumberOfParameters() - 1] and - stringArg in [-1 .. m.getNumberOfParameters() - 1] + /** Gets the string expression that a regex that flows here is matched against, if any. */ + Expr getStringArgument() { + exists(MethodAccess ma | + this.asExpr() = argOf(ma, _) and + result = argOf(ma, strArg) + ) } - - /** Gets the argument of this call that the regex to be matched against flows into. */ - Expr getRegexArg() { result = argOf(this, regexArg) } - - /** Gets the argument of this call that the string being matched flows into. */ - Expr getStringArg() { result = argOf(this, stringArg) } } private Expr argOf(MethodAccess ma, int arg) { @@ -115,35 +81,7 @@ class RegexAdditionalFlowStep extends Unit { abstract predicate step(DataFlow::Node node1, DataFlow::Node node2); } -// TODO: can this be done with the models-as-data framework? -private class JdkRegexMatchMethodAccess extends RegexMatchMethodAccess { - JdkRegexMatchMethodAccess() { - package = "java.util.regex" and - type = "Pattern" and - ( - name = "matcher" and regexArg = -1 and stringArg = 0 - or - name = "matches" and regexArg = 0 and stringArg = 1 - or - name = "split" and regexArg = -1 and stringArg = 0 - or - name = "splitAsStream" and regexArg = -1 and stringArg = 0 - ) - or - package = "java.lang" and - type = "String" and - name = ["matches", "split", "replaceAll", "replaceFirst"] and - regexArg = 0 and - stringArg = -1 - or - package = "java.util.function" and - type = "Predicate" and - name = "test" and - regexArg = -1 and - stringArg = 0 - } -} - +// TODO: This may be able to be done with models-as-data if query-specific flow steps beome supported. private class JdkRegexFlowStep extends RegexAdditionalFlowStep { override predicate step(DataFlow::Node node1, DataFlow::Node node2) { exists(MethodAccess ma, Method m, string package, string type, string name, int arg | @@ -155,7 +93,7 @@ private class JdkRegexFlowStep extends RegexAdditionalFlowStep { package = "java.util.regex" and type = "Pattern" and ( - name = ["asMatchPredicate", "asPredicate"] and + name = ["asMatchPredicate", "asPredicate", "matcher"] and arg = -1 or name = "compile" and @@ -170,16 +108,6 @@ private class JdkRegexFlowStep extends RegexAdditionalFlowStep { } } -private class GuavaRegexMatchMethodAccess extends RegexMatchMethodAccess { - GuavaRegexMatchMethodAccess() { - package = "com.google.common.base" and - regexArg = -1 and - stringArg = 0 and - type = ["Splitter", "Splitter$MapSplitter"] and - name = ["split", "splitToList"] - } -} - private class GuavaRegexFlowStep extends RegexAdditionalFlowStep { override predicate step(DataFlow::Node node1, DataFlow::Node node2) { exists(MethodAccess ma, Method m, string package, string type, string name, int arg | @@ -209,20 +137,46 @@ private class GuavaRegexFlowStep extends RegexAdditionalFlowStep { } } -private class RegexMatchFlowConf extends DataFlow2::Configuration { - RegexMatchFlowConf() { this = "RegexMatchFlowConf" } +private class RegexFlowConf extends DataFlow2::Configuration { + RegexFlowConf() { this = "RegexFlowConfig" } - override predicate isSource(DataFlow::Node src) { - src.asExpr() instanceof ExploitableStringLiteral + override predicate isSource(DataFlow::Node node) { + node.asExpr() instanceof ExploitableStringLiteral } - override predicate isSink(DataFlow::Node sink) { - exists(RegexMatchMethodAccess ma | sink.asExpr() = ma.getRegexArg()) - } + override predicate isSink(DataFlow::Node node) { node instanceof RegexFlowSink } override predicate isAdditionalFlowStep(DataFlow::Node node1, DataFlow::Node node2) { any(RegexAdditionalFlowStep s).step(node1, node2) } + + override predicate isBarrier(DataFlow::Node node) { + node.getEnclosingCallable().getDeclaringType() instanceof NonSecurityTestClass + } +} + +/** + * Holds if `regex` is used as a regex, with the mode `mode` (if known). + * If regex mode is not known, `mode` will be `"None"`. + * + * As an optimisation, only regexes containing an infinite repitition quatifier (`+`, `*`, or `{x,}`) + * and therefore may be relevant for ReDoS queries are considered. + */ +predicate usedAsRegex(StringLiteral regex, string mode, boolean match_full_string) { + any(RegexFlowConf c).hasFlow(DataFlow2::exprNode(regex), _) and + mode = "None" and // TODO: proper mode detection + (if matchesFullString(regex) then match_full_string = true else match_full_string = false) +} + +/** + * Holds if `regex` is used as a regular expression that is matched against a full string, + * as though it was implicitly surrounded by ^ and $. + */ +private predicate matchesFullString(StringLiteral regex) { + exists(RegexFlowConf c, RegexFlowSink sink | + sink.matchesFullString() and + c.hasFlow(DataFlow2::exprNode(regex), sink) + ) } /** @@ -232,12 +186,8 @@ private class RegexMatchFlowConf extends DataFlow2::Configuration { * and therefore may be relevant for ReDoS queries are considered. */ predicate regexMatchedAgainst(StringLiteral regex, Expr str) { - exists( - DataFlow::Node src, DataFlow::Node sink, RegexMatchMethodAccess ma, RegexMatchFlowConf conf - | - src.asExpr() = regex and - sink.asExpr() = ma.getRegexArg() and - conf.hasFlow(src, sink) and - str = ma.getStringArg() + exists(RegexFlowConf c, RegexFlowSink sink | + str = sink.getStringArgument() and + c.hasFlow(DataFlow2::exprNode(regex), sink) ) } diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll index fd0858639c4..6934540116f 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowModels.qll @@ -3,33 +3,30 @@ import java import semmle.code.java.dataflow.ExternalFlow -private class RegexSourceCsv extends SourceModelCsv { - override predicate row(string row) { - row = - [ - //"namespace;type;subtypes;name;signature;ext;output;kind" - "java.util.regex;Pattern;false;compile;(String);;ReturnValue;regex-compile", - ] - } -} - private class RegexSinkCsv extends SinkModelCsv { override predicate row(string row) { row = [ //"namespace;type;subtypes;name;signature;ext;input;kind" - "java.util.regex;Pattern;false;compile;(String);;Argument[0];regex-compile", - "java.util.regex;Pattern;false;compile;(String,int);;Argument[0];regex-compile", - "java.util.regex;Pattern;false;matches;(String,CharSequence);;Argument[0];regex-compile-match", - "java.lang;String;false;matches;(String);;Argument[0];regex-compile-match", - "java.lang;String;false;split;(String);;Argument[0];regex-compile-find", - "java.lang;String;false;split;(String,int);;Argument[0];regex-compile-find", - "java.lang;String;false;replaceAll;(String,String);;Argument[0];regex-compile-find", - "java.lang;String;false;replaceFirst;(String,String);;Argument[0];regex-compile-find", - "com.google.common.base;Splitter;false;onPattern;(String);;Argument[0];regex-compile-find", - // regex-match sinks - "java.util.regex;Pattern;false;asMatchPredicate;();;Argument[-1];regex-match", - "java.util.regex;Matcher;false;matches;();;Argument[-1];regex-match", + "java.util.regex;Matcher;false;matches;();;Argument[-1];regex-use[f]", + "java.util.regex;Pattern;false;asMatchPredicate;();;Argument[-1];regex-use[f]", + "java.util.regex;Pattern;false;compile;(String);;Argument[0];regex-use[]", + "java.util.regex;Pattern;false;compile;(String,int);;Argument[0];regex-use[]", + "java.util.regex;Pattern;false;matcher;(CharSequence);;Argument[-1];regex-use[0]", + "java.util.regex;Pattern;false;matches;(String,CharSequence);;Argument[0];regex-use[f1]", + "java.util.regex;Pattern;false;split;(CharSequence);;Argument[-1];regex-use[0]", + "java.util.regex;Pattern;false;split;(CharSequence,int);;Argument[-1];regex-use[0]", + "java.util.regex;Pattern;false;splitAsStream;(CharSequence);;Argument[-1];regex-use[0]", + "java.util.function;Predicate;false;test;(Object);;Argument[-1];regex-use[0]", + "java.lang;String;false;matches;(String);;Argument[0];regex-use[f-1]", + "java.lang;String;false;split;(String);;Argument[0];regex-use[-1]", + "java.lang;String;false;split;(String,int);;Argument[0];regex-use[-1]", + "java.lang;String;false;replaceAll;(String,String);;Argument[0];regex-use[-1]", + "java.lang;String;false;replaceFirst;(String,String);;Argument[0];regex-use[-1]", + "com.google.common.base;Splitter;false;onPattern;(String);;Argument[0];regex-use[]", + "com.google.common.base;Splitter;false;split;(CharSequence);;Argument[-1];regex-use[0]", + "com.google.common.base;Splitter;false;splitToList;(CharSequence);;Argument[-1];regex-use[0]", + "com.google.common.base;Splitter$MapSplitter;false;split;(CharSequence);;Argument[-1];regex-use[0]", ] } } From 66ab2bca75bd72427e42253b02c9528bbff4cabc Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 5 Apr 2022 16:29:01 +0100 Subject: [PATCH 0347/1618] Update PrintAst test output --- java/ql/test/library-tests/JDK/PrintAst.expected | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/java/ql/test/library-tests/JDK/PrintAst.expected b/java/ql/test/library-tests/JDK/PrintAst.expected index e6f240b325e..8074ef1b965 100644 --- a/java/ql/test/library-tests/JDK/PrintAst.expected +++ b/java/ql/test/library-tests/JDK/PrintAst.expected @@ -73,6 +73,11 @@ jdk/StringMatch.java: # 5| 0: [MethodAccess] matches(...) # 5| -1: [VarAccess] STR # 5| 0: [StringLiteral] "[a-z]+" +# 5| 0: [RegExpPlus] [a-z]+ +# 5| 0: [RegExpCharacterClass] [a-z] +# 5| 0: [RegExpCharacterRange] a-z +# 5| 0: [RegExpConstant | RegExpNormalChar] a +# 5| 1: [RegExpConstant | RegExpNormalChar] z # 8| 5: [Method] b # 8| 3: [TypeAccess] void # 8| 5: [BlockStmt] { ... } From b08f22c24dab0fe82630183d474de2023b40e876 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 6 Apr 2022 12:35:24 +0100 Subject: [PATCH 0348/1618] Remove unnecassary import --- java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index c400b521f80..84187f1ba48 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -5,7 +5,6 @@ import java private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.DataFlow2 -private import semmle.code.java.dataflow.DataFlow3 private import RegexFlowModels private import semmle.code.java.security.SecurityTests From b854a2185e00c0e150db9e5dc066b8c4c52a71b8 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 7 Apr 2022 12:20:17 +0100 Subject: [PATCH 0349/1618] Fix use of `sinkModel` --- java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll index 84187f1ba48..8936de5a923 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexFlowConfigs.qll @@ -3,6 +3,7 @@ */ import java +import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.DataFlow private import semmle.code.java.dataflow.DataFlow2 private import RegexFlowModels @@ -19,7 +20,7 @@ private class ExploitableStringLiteral extends StringLiteral { * where -1 is the qualifier; or -2 if no such argument exists. */ private predicate regexSinkKindInfo(string kind, boolean full, int strArg) { - sinkModel(_, _, _, _, _, _, _, kind) and + sinkModel(_, _, _, _, _, _, _, kind, _) and exists(string fullStr, string strArgStr | ( full = true and fullStr = "f" From 9078e13f1c27740d02c4b7b11a1dc1bacb22c38d Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 3 May 2022 14:52:34 +0100 Subject: [PATCH 0350/1618] Apply reveiw suggestions - make java imports private - qdoc fixes - reorder predicates - simplifications --- .../semmle/code/java/regex/RegexTreeView.qll | 2 +- java/ql/lib/semmle/code/java/regex/regex.qll | 340 +++++++++--------- .../performance/ReDoSUtilSpecific.qll | 2 +- 3 files changed, 170 insertions(+), 174 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index c447774906e..2db3da550e2 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -1,6 +1,6 @@ /** Provides a class hierarchy corresponding to a parse tree of regular expressions. */ -import java +private import java private import semmle.code.java.regex.regex /** diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 9a7da15999e..a2cb535bda1 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -62,7 +62,7 @@ abstract class RegexString extends StringLiteral { /** * Helper predicate for `quote`. - * Holds if the char at `pos` is the one-based `index`th occourence of a quote delimiter (`\Q` or `\E`) + * Holds if the char at `pos` is the one-based `index`th occurence of a quote delimiter (`\Q` or `\E`) * Result is `true` for `\Q` and `false` for `\E`. */ private boolean quoteDelimiter(int index, int pos) { @@ -73,7 +73,7 @@ abstract class RegexString extends StringLiteral { /** Holds if a quoted sequence is found between `start` and `end` */ predicate quote(int start, int end) { this.quote(start, end, _, _) } - /** Holds if a quoted sequence is found between `start` and `end`, with ontent found between `inner_start` and `inner_end`. */ + /** Holds if a quoted sequence is found between `start` and `end`, with content found between `inner_start` and `inner_end`. */ predicate quote(int start, int end, int inner_start, int inner_end) { exists(int index | this.quoteDelimiter(index, start) = true and @@ -98,7 +98,7 @@ abstract class RegexString extends StringLiteral { } /** - * A control sequence, `\cx` + * Holds if there is a control sequence, `\cx`, between `start` and `end`. * `x` may be any ascii character including special characters. */ predicate controlEscape(int start, int end) { @@ -107,171 +107,6 @@ abstract class RegexString extends StringLiteral { end = start + 3 } - private string nonEscapedCharAt(int i) { - result = this.getChar(i) and - not exists(int x, int y | this.escapedCharacter(x, y) and i in [x .. y - 1]) and - not exists(int x, int y | this.quote(x, y) and i in [x .. y - 1]) - } - - /** Holds if a character set starts between `start` and `end`, including any negation character (`^`). */ - private predicate charSetStart0(int start, int end) { - this.nonEscapedCharAt(start) = "[" and - (if this.getChar(start + 1) = "^" then end = start + 2 else end = start + 1) - } - - /** Holds if the character at `pos` marks the end of a character class. */ - private predicate charSetEnd0(int pos) { - this.nonEscapedCharAt(pos) = "]" and - /* special case: `[]]` and `[^]]` are valid char classes. */ - not this.charSetStart0(_, pos) - } - - /** - * Holds if the character at `pos` starts a character set delimiter. - * Result is 1 for `[` and 0 for `]`. - */ - private int charSetDelimiter(int pos) { - result = 1 and this.charSetStart0(pos, _) - or - result = -1 and this.charSetEnd0(pos) - } - - /** - * Holds if the char at `pos` is the one-based `index`th occourence of a character set delimiter (`[` or `]`). - * Result is 1 for `[` and -1 for `]`. - */ - private int charSetDelimiter(int index, int pos) { - result = this.charSetDelimiter(pos) and - pos = rank[index](int p | exists(this.charSetDelimiter(p))) - } - - bindingset[x] - private int max_zero(int x) { result = max([x, 0]) } - - /** - * Gets the nesting depth of character classes after position `pos`, - * where `pos` is the position of a character set delimiter. - */ - private int charSetDepth(int index, int pos) { - index = 1 and result = max_zero(charSetDelimiter(index, pos)) - or - result = max_zero(charSetDelimiter(index, pos) + charSetDepth(index - 1, _)) - } - - /** Hold if a top-level character set starts between `start` and `end`. */ - predicate charSetStart(int start, int end) { - this.charSetStart0(start, end) and - this.charSetDepth(_, start) = 1 - } - - /** Holds if a top-level character set ends at `pos`. */ - predicate charSetEnd(int pos) { - this.charSetEnd0(pos) and - this.charSetDepth(_, pos) = 0 - } - - /** - * Holds if there is a top-level character class beginning at `start` (inclusive) and ending at `end` (exclusive) - * - * For now, nested character classes are approximated by only considering the top-level class for parsing. - * This leads to very similar results for ReDoS queries. - */ - predicate charSet(int start, int end) { - exists(int inner_start, int inner_end | this.charSetStart(start, inner_start) | - end = inner_end + 1 and - inner_end = - min(int end_delimiter | this.charSetEnd(end_delimiter) and end_delimiter > inner_start) - ) - } - - /** Either a char or a - */ - private predicate charSetToken(int charset_start, int start, int end) { - this.charSetStart(charset_start, start) and - ( - this.escapedCharacter(start, end) - or - exists(this.nonEscapedCharAt(start)) and end = start + 1 - or - this.quote(start, end) - ) - or - this.charSetToken(charset_start, _, start) and - ( - this.escapedCharacter(start, end) - or - exists(this.nonEscapedCharAt(start)) and - end = start + 1 and - not this.charSetEnd(start) - or - this.quote(start, end) - ) - } - - /** An indexed version of `charSetToken/3` */ - private predicate charSetToken(int charset_start, int index, int token_start, int token_end) { - token_start = - rank[index](int start, int end | this.charSetToken(charset_start, start, end) | start) and - this.charSetToken(charset_start, token_start, token_end) - } - - /** - * Holds if the character set starting at `charset_start` contains either - * a character or a range found between `start` and `end`. - */ - predicate charSetChild(int charset_start, int start, int end) { - this.charSetToken(charset_start, start, end) and - not exists(int range_start, int range_end | - this.charRange(charset_start, range_start, _, _, range_end) and - range_start <= start and - range_end >= end - ) - or - this.charRange(charset_start, start, _, _, end) - } - - /** - * Helper predicate for `charRange`. - * We can determine where character ranges end by a left to right sweep. - * - * To avoid negative recursion we return a boolean. See `escaping`, - * the helper for `escapingChar`, for a clean use of this pattern. - */ - private boolean charRangeEnd(int charset_start, int index) { - this.charSetToken(charset_start, index, _, _) and - ( - index in [1, 2] and result = false - or - index > 2 and - exists(int connector_start | - this.charSetToken(charset_start, index - 1, connector_start, _) and - this.nonEscapedCharAt(connector_start) = "-" and - result = - this.charRangeEnd(charset_start, index - 2) - .booleanNot() - .booleanAnd(this.charRangeEnd(charset_start, index - 1).booleanNot()) - ) - or - not exists(int connector_start | - this.charSetToken(charset_start, index - 1, connector_start, _) and - this.nonEscapedCharAt(connector_start) = "-" - ) and - result = false - ) - } - - /** - * Holds if the character set starting at `charset_start` contains a character range - * with lower bound found between `start` and `lower_end` - * and upper bound found between `upper_start` and `end`. - */ - predicate charRange(int charset_start, int start, int lower_end, int upper_start, int end) { - exists(int index | - this.charRangeEnd(charset_start, index) = true and - this.charSetToken(charset_start, index - 2, start, lower_end) and - this.charSetToken(charset_start, index, upper_start, end) - ) - } - pragma[inline] private predicate isOctal(int index) { this.getChar(index) = [0 .. 7].toString() } @@ -331,6 +166,167 @@ abstract class RegexString extends StringLiteral { ) } + private string nonEscapedCharAt(int i) { + result = this.getChar(i) and + not exists(int x, int y | this.escapedCharacter(x, y) and i in [x .. y - 1]) and + not exists(int x, int y | this.quote(x, y) and i in [x .. y - 1]) + } + + /** Holds if a character set starts between `start` and `end`, including any negation character (`^`). */ + private predicate charSetStart0(int start, int end) { + this.nonEscapedCharAt(start) = "[" and + (if this.getChar(start + 1) = "^" then end = start + 2 else end = start + 1) + } + + /** Holds if the character at `pos` marks the end of a character class. */ + private predicate charSetEnd0(int pos) { + this.nonEscapedCharAt(pos) = "]" and + /* special case: `[]]` and `[^]]` are valid char classes. */ + not this.charSetStart0(_, pos) + } + + /** + * Holds if the character at `pos` starts a character set delimiter. + * Result is 1 for `[` and -1 for `]`. + */ + private int charSetDelimiter(int pos) { + result = 1 and this.charSetStart0(pos, _) + or + result = -1 and this.charSetEnd0(pos) + } + + /** + * Holds if the char at `pos` is the one-based `index`th occourence of a character set delimiter (`[` or `]`). + * Result is 1 for `[` and -1 for `]`. + */ + private int charSetDelimiter(int index, int pos) { + result = this.charSetDelimiter(pos) and + pos = rank[index](int p | exists(this.charSetDelimiter(p))) + } + + /** + * Gets the nesting depth of character classes after position `pos`, + * where `pos` is the position of a character set delimiter. + */ + private int charSetDepth(int index, int pos) { + index = 1 and result = 0.maximum(this.charSetDelimiter(index, pos)) + or + result = 0.maximum(this.charSetDelimiter(index, pos) + this.charSetDepth(index - 1, _)) + } + + /** Hold if a top-level character set starts between `start` and `end`. */ + predicate charSetStart(int start, int end) { + this.charSetStart0(start, end) and + this.charSetDepth(_, start) = 1 + } + + /** Holds if a top-level character set ends at `pos`. */ + predicate charSetEnd(int pos) { + this.charSetEnd0(pos) and + this.charSetDepth(_, pos) = 0 + } + + /** + * Holds if there is a top-level character class beginning at `start` (inclusive) and ending at `end` (exclusive) + * + * For now, nested character classes are approximated by only considering the top-level class for parsing. + * This leads to very similar results for ReDoS queries. + */ + predicate charSet(int start, int end) { + exists(int inner_start, int inner_end | this.charSetStart(start, inner_start) | + end = inner_end + 1 and + inner_end = + min(int end_delimiter | this.charSetEnd(end_delimiter) and end_delimiter > inner_start) + ) + } + + /** Either a char or a - */ + private predicate charSetToken(int charset_start, int start, int end) { + this.charSetStart(charset_start, start) and + ( + this.escapedCharacter(start, end) + or + exists(this.nonEscapedCharAt(start)) and end = start + 1 + or + this.quote(start, end) + ) + or + this.charSetToken(charset_start, _, start) and + ( + this.escapedCharacter(start, end) + or + exists(this.nonEscapedCharAt(start)) and + end = start + 1 and + not this.charSetEnd(start) + or + this.quote(start, end) + ) + } + + /** An indexed version of `charSetToken/3` */ + private predicate charSetToken(int charset_start, int index, int token_start, int token_end) { + token_start = rank[index](int start | this.charSetToken(charset_start, start, _) | start) and + this.charSetToken(charset_start, token_start, token_end) + } + + /** + * Helper predicate for `charRange`. + * We can determine where character ranges end by a left to right sweep. + * + * To avoid negative recursion we return a boolean. See `escaping`, + * the helper for `escapingChar`, for a clean use of this pattern. + */ + private boolean charRangeEnd(int charset_start, int index) { + this.charSetToken(charset_start, index, _, _) and + ( + index in [1, 2] and result = false + or + index > 2 and + exists(int connector_start | + this.charSetToken(charset_start, index - 1, connector_start, _) and + this.nonEscapedCharAt(connector_start) = "-" and + result = + this.charRangeEnd(charset_start, index - 2) + .booleanNot() + .booleanAnd(this.charRangeEnd(charset_start, index - 1).booleanNot()) + ) + or + not exists(int connector_start | + this.charSetToken(charset_start, index - 1, connector_start, _) and + this.nonEscapedCharAt(connector_start) = "-" + ) and + result = false + ) + } + + /** + * Holds if the character set starting at `charset_start` contains a character range + * with lower bound found between `start` and `lower_end` + * and upper bound found between `upper_start` and `end`. + */ + predicate charRange(int charset_start, int start, int lower_end, int upper_start, int end) { + exists(int index | + this.charRangeEnd(charset_start, index) = true and + this.charSetToken(charset_start, index - 2, start, lower_end) and + this.charSetToken(charset_start, index, upper_start, end) + ) + } + + /** + * Holds if the character set starting at `charset_start` contains either + * a character or a range found between `start` and `end`. + */ + predicate charSetChild(int charset_start, int start, int end) { + this.charSetToken(charset_start, start, end) and + not exists(int range_start, int range_end | + this.charRange(charset_start, range_start, _, _, range_end) and + range_start <= start and + range_end >= end + ) + or + this.charRange(charset_start, start, _, _, end) + } + /** Holds if `index` is inside a character set. */ predicate inCharSet(int index) { exists(int x, int y | this.charSet(x, y) and index in [x + 1 .. y - 2]) @@ -871,9 +867,9 @@ abstract class RegexString extends StringLiteral { * Holds if a character is represented between `start` and `end` in the source literal. */ private predicate sourceCharacter(int start, int end) { - sourceEscapedCharacter(start, end) + this.sourceEscapedCharacter(start, end) or - sourceNonEscapedCharacter(start) and + this.sourceNonEscapedCharacter(start) and end = start + 1 } @@ -885,8 +881,8 @@ abstract class RegexString extends StringLiteral { */ predicate sourceCharacter(int pos, int start, int end) { exists(this.getChar(pos)) and - sourceCharacter(start, end) and - start = rank[pos + 2](int s | sourceCharacter(s, _)) + this.sourceCharacter(start, end) and + start = rank[pos + 2](int s | this.sourceCharacter(s, _)) } } diff --git a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtilSpecific.qll b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtilSpecific.qll index daef79ceb1e..541c3ca8f36 100644 --- a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtilSpecific.qll +++ b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtilSpecific.qll @@ -3,7 +3,7 @@ * This is the interface to the shared ReDoS library. */ -import java +private import java import semmle.code.java.regex.RegexTreeView /** From 2d82dfba38465c2c0abeefb39bdca65f8990a454 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 3 May 2022 16:30:27 +0100 Subject: [PATCH 0351/1618] Reorder backreference predicates --- java/ql/lib/semmle/code/java/regex/regex.qll | 90 ++++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index a2cb535bda1..48f0f74580c 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -107,6 +107,51 @@ abstract class RegexString extends StringLiteral { end = start + 3 } + private predicate namedBackreference(int start, int end, string name) { + this.escapingChar(start) and + this.getChar(start + 1) = "k" and + this.getChar(start + 2) = "<" and + end = min(int i | i > start + 2 and this.getChar(i) = ">") + 1 and + name = this.getText().substring(start + 3, end - 2) + } + + private predicate numberedBackreference(int start, int end, int value) { + this.escapingChar(start) and + // starting with 0 makes it an octal escape + not this.getChar(start + 1) = "0" and + exists(string text, string svalue, int len | + end = start + len and + text = this.getText() and + len in [2 .. 3] + | + svalue = text.substring(start + 1, start + len) and + value = svalue.toInt() and + // value is composed of digits + forall(int i | i in [start + 1 .. start + len - 1] | this.getChar(i) = [0 .. 9].toString()) and + // a longer reference is not possible + not ( + len = 2 and + exists(text.substring(start + 1, start + len + 1).toInt()) + ) and + // 3 octal digits makes it an octal escape + not forall(int i | i in [start + 1 .. start + 4] | this.isOctal(i)) + // TODO: Inside a character set, all numeric escapes are treated as characters. + ) + } + + /** Holds if the text in the range start,end is a back reference */ + predicate backreference(int start, int end) { + this.numberedBackreference(start, end, _) + or + this.namedBackreference(start, end, _) + } + + /** Gets the number of the back reference in start,end */ + int getBackrefNumber(int start, int end) { this.numberedBackreference(start, end, result) } + + /** Gets the name, if it has one, of the back reference in start,end */ + string getBackrefName(int start, int end) { this.namedBackreference(start, end, result) } + pragma[inline] private predicate isOctal(int index) { this.getChar(index) = [0 .. 7].toString() } @@ -592,51 +637,6 @@ abstract class RegexString extends StringLiteral { this.positiveLookbehindAssertionGroup(start, end) } - private predicate namedBackreference(int start, int end, string name) { - this.escapingChar(start) and - this.getChar(start + 1) = "k" and - this.getChar(start + 2) = "<" and - end = min(int i | i > start + 2 and this.getChar(i) = ">") + 1 and - name = this.getText().substring(start + 3, end - 2) - } - - private predicate numberedBackreference(int start, int end, int value) { - this.escapingChar(start) and - // starting with 0 makes it an octal escape - not this.getChar(start + 1) = "0" and - exists(string text, string svalue, int len | - end = start + len and - text = this.getText() and - len in [2 .. 3] - | - svalue = text.substring(start + 1, start + len) and - value = svalue.toInt() and - // value is composed of digits - forall(int i | i in [start + 1 .. start + len - 1] | this.getChar(i) = [0 .. 9].toString()) and - // a longer reference is not possible - not ( - len = 2 and - exists(text.substring(start + 1, start + len + 1).toInt()) - ) and - // 3 octal digits makes it an octal escape - not forall(int i | i in [start + 1 .. start + 4] | this.isOctal(i)) - // TODO: Inside a character set, all numeric escapes are treated as characters. - ) - } - - /** Holds if the text in the range start,end is a back reference */ - predicate backreference(int start, int end) { - this.numberedBackreference(start, end, _) - or - this.namedBackreference(start, end, _) - } - - /** Gets the number of the back reference in start,end */ - int getBackrefNumber(int start, int end) { this.numberedBackreference(start, end, result) } - - /** Gets the name, if it has one, of the back reference in start,end */ - string getBackrefName(int start, int end) { this.namedBackreference(start, end, result) } - private predicate baseItem(int start, int end) { this.character(start, end) and not exists(int x, int y | this.charSet(x, y) and x <= start and y >= end) From c7d30087d11ff203b8af00a9cacb8331f1d34fe0 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 4 May 2022 15:39:51 +0100 Subject: [PATCH 0352/1618] Fix issue with named backrefs; add needed import --- java/ql/lib/semmle/code/java/regex/RegexTreeView.qll | 3 +++ java/ql/lib/semmle/code/java/regex/regex.qll | 2 +- .../code/java/security/performance/ReDoSUtilSpecific.qll | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll index 2db3da550e2..c3592634fa0 100644 --- a/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll +++ b/java/ql/lib/semmle/code/java/regex/RegexTreeView.qll @@ -258,6 +258,9 @@ class RegExpQuantifier extends RegExpTerm, TRegExpQuantifier { result.occursInRegex(re, start, part_end) } + /** Holds if this term may match zero times. */ + predicate mayBeEmpty() { maybe_empty = true } + /** Holds if this term may match an unlimited number of times. */ predicate mayRepeatForever() { may_repeat_forever = true } diff --git a/java/ql/lib/semmle/code/java/regex/regex.qll b/java/ql/lib/semmle/code/java/regex/regex.qll index 48f0f74580c..ff20b17b6fa 100644 --- a/java/ql/lib/semmle/code/java/regex/regex.qll +++ b/java/ql/lib/semmle/code/java/regex/regex.qll @@ -112,7 +112,7 @@ abstract class RegexString extends StringLiteral { this.getChar(start + 1) = "k" and this.getChar(start + 2) = "<" and end = min(int i | i > start + 2 and this.getChar(i) = ">") + 1 and - name = this.getText().substring(start + 3, end - 2) + name = this.getText().substring(start + 3, end - 1) } private predicate numberedBackreference(int start, int end, int value) { diff --git a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtilSpecific.qll b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtilSpecific.qll index 541c3ca8f36..d72d6770848 100644 --- a/java/ql/lib/semmle/code/java/security/performance/ReDoSUtilSpecific.qll +++ b/java/ql/lib/semmle/code/java/security/performance/ReDoSUtilSpecific.qll @@ -4,6 +4,7 @@ */ private import java +import semmle.code.FileSystem import semmle.code.java.regex.RegexTreeView /** From 64227c91090bbd58315bfdfc20bb1bbc64eefe05 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 4 May 2022 15:58:30 +0100 Subject: [PATCH 0353/1618] Fix codescanning alerts --- java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql | 1 + java/ql/src/Security/CWE/CWE-730/ReDoS.ql | 1 + java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql index e1907b39414..1a52173183f 100644 --- a/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql +++ b/java/ql/src/Security/CWE/CWE-730/PolynomialReDoS.ql @@ -4,6 +4,7 @@ * to match may be vulnerable to denial-of-service attacks. * @kind path-problem * @problem.severity warning + * @security-severity 7.5 * @precision high * @id java/polynomial-redos * @tags security diff --git a/java/ql/src/Security/CWE/CWE-730/ReDoS.ql b/java/ql/src/Security/CWE/CWE-730/ReDoS.ql index f72bfc3fc13..c5d9661a63b 100644 --- a/java/ql/src/Security/CWE/CWE-730/ReDoS.ql +++ b/java/ql/src/Security/CWE/CWE-730/ReDoS.ql @@ -5,6 +5,7 @@ * attacks. * @kind problem * @problem.severity error + * @security-severity 7.5 * @precision high * @id java/redos * @tags security diff --git a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql index e5fb58d4794..19096cf6f95 100644 --- a/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql +++ b/java/ql/test/query-tests/security/CWE-730/PolynomialReDoS.ql @@ -5,7 +5,7 @@ import semmle.code.java.security.performance.PolynomialReDoSQuery class HasPolyRedos extends InlineExpectationsTest { HasPolyRedos() { this = "HasPolyRedos" } - override string getARelevantTag() { result = ["hasPolyRedos"] } + override string getARelevantTag() { result = "hasPolyRedos" } override predicate hasActualResult(Location location, string element, string tag, string value) { tag = "hasPolyRedos" and From 10c5c8e71f6c61acac4192f25a7d6b66ab51a443 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 3 May 2022 17:33:25 +0200 Subject: [PATCH 0354/1618] Swift: add `trapgen` unit tests Closes: https://github.com/github/codeql-c-team/issues/981 --- swift/codegen/BUILD.bazel | 12 +- swift/codegen/lib/cpp.py | 5 +- swift/codegen/lib/dbscheme.py | 7 +- swift/codegen/requirements.txt | 5 +- swift/codegen/templates/cpp_traps.mustache | 2 +- swift/codegen/test/BUILD.bazel | 1 + swift/codegen/test/test_cpp.py | 60 ++++++++ swift/codegen/test/test_dbscheme.py | 102 +++++++++++++ swift/codegen/test/test_trapgen.py | 163 +++++++++++++++++++++ swift/codegen/test/utils.py | 15 +- swift/codegen/trapgen.py | 52 ++----- 11 files changed, 372 insertions(+), 52 deletions(-) create mode 100644 swift/codegen/test/test_cpp.py create mode 100644 swift/codegen/test/test_trapgen.py diff --git a/swift/codegen/BUILD.bazel b/swift/codegen/BUILD.bazel index 340cc9d678d..3eac41e90ea 100644 --- a/swift/codegen/BUILD.bazel +++ b/swift/codegen/BUILD.bazel @@ -1,6 +1,11 @@ +load("@swift_codegen_deps//:requirements.bzl", "requirement") + py_binary( name = "codegen", - srcs = glob(["*.py"]), + srcs = glob( + ["*.py"], + exclude = ["trapgen.py"], + ), visibility = ["//swift/codegen/test:__pkg__"], deps = ["//swift/codegen/lib"], ) @@ -12,5 +17,8 @@ py_binary( srcs = ["trapgen.py"], data = ["//swift/codegen/templates:cpp"], visibility = ["//swift:__subpackages__"], - deps = ["//swift/codegen/lib"], + deps = [ + "//swift/codegen/lib", + requirement("toposort"), + ], ) diff --git a/swift/codegen/lib/cpp.py b/swift/codegen/lib/cpp.py index 21ce9318ca9..a933d09919c 100644 --- a/swift/codegen/lib/cpp.py +++ b/swift/codegen/lib/cpp.py @@ -21,12 +21,14 @@ class Field: type: str first: bool = False + @property def cpp_name(self): if self.name in cpp_keywords: return self.name + "_" return self.name - def stream(self): + # using @property breaks pystache internals here + def get_streamer(self): if self.type == "std::string": return lambda x: f"trapQuoted({x})" elif self.type == "bool": @@ -65,6 +67,7 @@ class Tag: self.bases = [TagBase(b) for b in self.bases] self.bases[0].first = True + @property def has_bases(self): return bool(self.bases) diff --git a/swift/codegen/lib/dbscheme.py b/swift/codegen/lib/dbscheme.py index bd75b8dc3e0..91ab80c68aa 100644 --- a/swift/codegen/lib/dbscheme.py +++ b/swift/codegen/lib/dbscheme.py @@ -144,13 +144,10 @@ def get_union(match): def iterload(file): - data = Re.comment.sub("", file.read()) + with open(file) as file: + data = Re.comment.sub("", file.read()) for e in Re.entity.finditer(data): if e["table"]: yield get_table(e) elif e["union"]: yield get_union(e) - - -def load(file): - return list(iterload(file)) diff --git a/swift/codegen/requirements.txt b/swift/codegen/requirements.txt index b8959a4b15d..cf356ffe1f3 100644 --- a/swift/codegen/requirements.txt +++ b/swift/codegen/requirements.txt @@ -1,4 +1,5 @@ -pystache -pyyaml inflection +pystache pytest +pyyaml +toposort diff --git a/swift/codegen/templates/cpp_traps.mustache b/swift/codegen/templates/cpp_traps.mustache index 2655335830a..dd1c560b958 100644 --- a/swift/codegen/templates/cpp_traps.mustache +++ b/swift/codegen/templates/cpp_traps.mustache @@ -25,7 +25,7 @@ struct {{name}}Trap { inline std::ostream &operator<<(std::ostream &out, const {{name}}Trap &e) { out << "{{table_name}}("{{#fields}}{{^first}} << ", "{{/first}} - << {{#stream}}e.{{cpp_name}}{{/stream}}{{/fields}} << ")"; + << {{#get_streamer}}e.{{cpp_name}}{{/get_streamer}}{{/fields}} << ")"; return out; } {{/traps}} diff --git a/swift/codegen/test/BUILD.bazel b/swift/codegen/test/BUILD.bazel index 441b2370ca0..76266b2a665 100644 --- a/swift/codegen/test/BUILD.bazel +++ b/swift/codegen/test/BUILD.bazel @@ -18,6 +18,7 @@ py_library( deps = [ ":utils", "//swift/codegen", + "//swift/codegen:trapgen", ], ) for src in glob(["test_*.py"]) diff --git a/swift/codegen/test/test_cpp.py b/swift/codegen/test/test_cpp.py new file mode 100644 index 00000000000..8b4ff5acba7 --- /dev/null +++ b/swift/codegen/test/test_cpp.py @@ -0,0 +1,60 @@ +import sys +from copy import deepcopy + +import pytest + +from swift.codegen.lib import cpp + + +@pytest.mark.parametrize("keyword", cpp.cpp_keywords) +def test_field_keyword_cpp_name(keyword): + f = cpp.Field(keyword, "int") + assert f.cpp_name == keyword + "_" + + +def test_field_cpp_name(): + f = cpp.Field("foo", "int") + assert f.cpp_name == "foo" + + +@pytest.mark.parametrize("type,expected", [ + ("std::string", "trapQuoted(value)"), + ("bool", '(value ? "true" : "false")'), + ("something_else", "value"), +]) +def test_field_get_streamer(type, expected): + f = cpp.Field("name", type) + assert f.get_streamer()("value") == expected + + +def test_trap_has_first_field_marked(): + fields = [ + cpp.Field("a", "x"), + cpp.Field("b", "y"), + cpp.Field("c", "z"), + ] + expected = deepcopy(fields) + expected[0].first = True + t = cpp.Trap("table_name", "name", fields) + assert t.fields == expected + + +def test_tag_has_first_base_marked(): + bases = ["a", "b", "c"] + expected = [cpp.TagBase("a", first=True), cpp.TagBase("b"), cpp.TagBase("c")] + t = cpp.Tag("name", bases, 0, "id") + assert t.bases == expected + + +@pytest.mark.parametrize("bases,expected", [ + ([], False), + (["a"], True), + (["a", "b"], True) +]) +def test_tag_has_bases(bases, expected): + t = cpp.Tag("name", bases, 0, "id") + assert t.has_bases is expected + + +if __name__ == '__main__': + sys.exit(pytest.main()) diff --git a/swift/codegen/test/test_dbscheme.py b/swift/codegen/test/test_dbscheme.py index ca1002aa58e..c67225e4303 100644 --- a/swift/codegen/test/test_dbscheme.py +++ b/swift/codegen/test/test_dbscheme.py @@ -48,5 +48,107 @@ def test_union_has_first_case_marked(): assert [c.type for c in u.rhs] == rhs +# load tests +@pytest.fixture +def load(tmp_path): + file = tmp_path / "test.dbscheme" + + def ret(yml): + write(file, yml) + return list(dbscheme.iterload(file)) + + return ret + + +def test_load_empty(load): + assert load("") == [] + + +def test_load_one_empty_table(load): + assert load(""" +test_foos(); +""") == [ + dbscheme.Table(name="test_foos", columns=[]) + ] + + +def test_load_table_with_keyset(load): + assert load(""" +#keyset[x, y,z] +test_foos(); +""") == [ + dbscheme.Table(name="test_foos", columns=[], keyset=dbscheme.KeySet(["x", "y", "z"])) + ] + + +expected_columns = [ + ("int foo: int ref", dbscheme.Column(schema_name="foo", type="int", binding=False)), + (" int bar : int ref", dbscheme.Column(schema_name="bar", type="int", binding=False)), + ("str baz_: str ref", dbscheme.Column(schema_name="baz", type="str", binding=False)), + ("int x: @foo ref", dbscheme.Column(schema_name="x", type="@foo", binding=False)), + ("int y: @foo", dbscheme.Column(schema_name="y", type="@foo", binding=True)), + ("unique int z: @foo", dbscheme.Column(schema_name="z", type="@foo", binding=True)), +] + + +@pytest.mark.parametrize("column,expected", expected_columns) +def test_load_table_with_column(load, column, expected): + assert load(f""" +foos( + {column} +); +""") == [ + dbscheme.Table(name="foos", columns=[deepcopy(expected)]) + ] + + +def test_load_table_with_multiple_columns(load): + columns = ",\n".join(c for c, _ in expected_columns) + expected = [deepcopy(e) for _, e in expected_columns] + assert load(f""" +foos( +{columns} +); +""") == [ + dbscheme.Table(name="foos", columns=expected) + ] + + +def test_load_multiple_table_with_columns(load): + tables = [f"table{i}({col});" for i, (col, _) in enumerate(expected_columns)] + expected = [dbscheme.Table(name=f"table{i}", columns=[deepcopy(e)]) for i, (_, e) in enumerate(expected_columns)] + assert load("\n".join(tables)) == expected + + +def test_union(load): + assert load("@foo = @bar | @baz | @bla;") == [ + dbscheme.Union(lhs="@foo", rhs=["@bar", "@baz", "@bla"]), + ] + + +def test_table_and_union(load): + assert load(""" +foos(); + +@foo = @bar | @baz | @bla;""") == [ + dbscheme.Table(name="foos", columns=[]), + dbscheme.Union(lhs="@foo", rhs=["@bar", "@baz", "@bla"]), + ] + + +def test_comments_ignored(load): + assert load(""" +// fake_table(); +foos(/* x */unique /*y*/int/* +z +*/ id/* */: /* * */ @bar/*, +int ignored: int ref*/); + +@foo = @bar | @baz | @bla; // | @xxx""") == [ + dbscheme.Table(name="foos", columns=[dbscheme.Column(schema_name="id", type="@bar", binding=True)]), + dbscheme.Union(lhs="@foo", rhs=["@bar", "@baz", "@bla"]), + ] + + if __name__ == '__main__': sys.exit(pytest.main()) diff --git a/swift/codegen/test/test_trapgen.py b/swift/codegen/test/test_trapgen.py new file mode 100644 index 00000000000..089a809210f --- /dev/null +++ b/swift/codegen/test/test_trapgen.py @@ -0,0 +1,163 @@ +import sys + +from swift.codegen import trapgen +from swift.codegen.lib import cpp, dbscheme +from swift.codegen.test.utils import * + +output_dir = pathlib.Path("path", "to", "output") + + +@pytest.fixture +def generate(opts, renderer, dbscheme_input): + opts.trap_output = output_dir + + def ret(entities): + dbscheme_input.entities = entities + generated = run_generation(trapgen.generate, opts, renderer) + assert set(generated) == {output_dir / + "TrapEntries.h", output_dir / "TrapTags.h"} + return generated[output_dir / "TrapEntries.h"], generated[output_dir / "TrapTags.h"] + + return ret + + +@pytest.fixture +def generate_traps(generate): + def ret(entities): + traps, _ = generate(entities) + assert isinstance(traps, cpp.TrapList) + return traps.traps + + return ret + + +@pytest.fixture +def generate_tags(generate): + def ret(entities): + _, tags = generate(entities) + assert isinstance(tags, cpp.TagList) + return tags.tags + + return ret + + +def test_empty(generate): + assert generate([]) == (cpp.TrapList([]), cpp.TagList([])) + + +def test_one_empty_table_rejected(generate_traps): + with pytest.raises(AssertionError): + generate_traps([ + dbscheme.Table(name="foos", columns=[]), + ]) + + +def test_one_table(generate_traps): + assert generate_traps([ + dbscheme.Table(name="foos", columns=[dbscheme.Column("bla", "int")]), + ]) == [ + cpp.Trap("foos", name="Foos", fields=[cpp.Field("bla", "int")]), + ] + + +def test_one_table(generate_traps): + assert generate_traps([ + dbscheme.Table(name="foos", columns=[dbscheme.Column("bla", "int")]), + ]) == [ + cpp.Trap("foos", name="Foos", fields=[cpp.Field("bla", "int")]), + ] + + +def test_one_table_with_id(generate_traps): + assert generate_traps([ + dbscheme.Table(name="foos", columns=[ + dbscheme.Column("bla", "int", binding=True)]), + ]) == [ + cpp.Trap("foos", name="Foos", fields=[cpp.Field( + "bla", "int")], id=cpp.Field("bla", "int")), + ] + + +def test_one_table_with_two_binding_first_is_id(generate_traps): + assert generate_traps([ + dbscheme.Table(name="foos", columns=[ + dbscheme.Column("x", "a", binding=True), + dbscheme.Column("y", "b", binding=True), + ]), + ]) == [ + cpp.Trap("foos", name="Foos", fields=[ + cpp.Field("x", "a"), + cpp.Field("y", "b"), + ], id=cpp.Field("x", "a")), + ] + + +@pytest.mark.parametrize("column,field", [ + (dbscheme.Column("x", "string"), cpp.Field("x", "std::string")), + (dbscheme.Column("y", "boolean"), cpp.Field("y", "bool")), + (dbscheme.Column("z", "@db_type"), cpp.Field("z", "TrapLabel")), +]) +def test_one_table_special_types(generate_traps, column, field): + assert generate_traps([ + dbscheme.Table(name="foos", columns=[column]), + ]) == [ + cpp.Trap("foos", name="Foos", fields=[field]), + ] + + +@pytest.mark.parametrize("table,name,column,field", [ + ("locations", "Locations", dbscheme.Column( + "startWhatever", "bar"), cpp.Field("startWhatever", "unsigned")), + ("locations", "Locations", dbscheme.Column( + "endWhatever", "bar"), cpp.Field("endWhatever", "unsigned")), + ("foos", "Foos", dbscheme.Column("startWhatever", "bar"), + cpp.Field("startWhatever", "bar")), + ("foos", "Foos", dbscheme.Column("endWhatever", "bar"), + cpp.Field("endWhatever", "bar")), + ("foos", "Foos", dbscheme.Column("index", "bar"), cpp.Field("index", "unsigned")), + ("foos", "Foos", dbscheme.Column("num_whatever", "bar"), + cpp.Field("num_whatever", "unsigned")), + ("foos", "Foos", dbscheme.Column("whatever_", "bar"), cpp.Field("whatever", "bar")), +]) +def test_one_table_overridden_fields(generate_traps, table, name, column, field): + assert generate_traps([ + dbscheme.Table(name=table, columns=[column]), + ]) == [ + cpp.Trap(table, name=name, fields=[field]), + ] + + +def test_one_table_no_tags(generate_tags): + assert generate_tags([ + dbscheme.Table(name="foos", columns=[dbscheme.Column("bla", "int")]), + ]) == [] + + +def test_one_union_tags(generate_tags): + assert generate_tags([ + dbscheme.Union(lhs="@left_hand_side", rhs=["@b", "@a", "@c"]), + ]) == [ + cpp.Tag(name="LeftHandSide", bases=[], index=0, id="@left_hand_side"), + cpp.Tag(name="A", bases=["LeftHandSide"], index=1, id="@a"), + cpp.Tag(name="B", bases=["LeftHandSide"], index=2, id="@b"), + cpp.Tag(name="C", bases=["LeftHandSide"], index=3, id="@c"), + ] + + +def test_multiple_union_tags(generate_tags): + assert generate_tags([ + dbscheme.Union(lhs="@d", rhs=["@a"]), + dbscheme.Union(lhs="@a", rhs=["@b", "@c"]), + dbscheme.Union(lhs="@e", rhs=["@c", "@f"]), + ]) == [ + cpp.Tag(name="D", bases=[], index=0, id="@d"), + cpp.Tag(name="E", bases=[], index=1, id="@e"), + cpp.Tag(name="A", bases=["D"], index=2, id="@a"), + cpp.Tag(name="F", bases=["E"], index=3, id="@f"), + cpp.Tag(name="B", bases=["A"], index=4, id="@b"), + cpp.Tag(name="C", bases=["A", "E"], index=5, id="@c"), + ] + + +if __name__ == '__main__': + sys.exit(pytest.main()) diff --git a/swift/codegen/test/utils.py b/swift/codegen/test/utils.py index d4b40a9e155..038caf01571 100644 --- a/swift/codegen/test/utils.py +++ b/swift/codegen/test/utils.py @@ -7,6 +7,7 @@ from swift.codegen.lib import render, schema schema_dir = pathlib.Path("a", "dir") schema_file = schema_dir / "schema.yml" +dbscheme_file = pathlib.Path("another", "dir", "test.dbscheme") def write(out, contents=""): @@ -38,7 +39,19 @@ def input(opts, tmp_path): load_mock.return_value = schema.Schema([]) yield load_mock.return_value assert load_mock.mock_calls == [ - mock.call(opts.schema) + mock.call(opts.schema), + ], load_mock.mock_calls + + +@pytest.fixture +def dbscheme_input(opts, tmp_path): + opts.dbscheme = tmp_path / dbscheme_file + with mock.patch("swift.codegen.lib.dbscheme.iterload") as load_mock: + load_mock.entities = [] + load_mock.side_effect = lambda _: load_mock.entities + yield load_mock + assert load_mock.mock_calls == [ + mock.call(opts.dbscheme), ], load_mock.mock_calls diff --git a/swift/codegen/trapgen.py b/swift/codegen/trapgen.py index fdb4eedd3f7..732354c8f9c 100755 --- a/swift/codegen/trapgen.py +++ b/swift/codegen/trapgen.py @@ -1,16 +1,16 @@ #!/usr/bin/env python3 -import collections import logging import os import re import sys import inflection +from toposort import toposort_flatten sys.path.append(os.path.dirname(__file__)) -from lib import paths, dbscheme, generator, cpp +from swift.codegen.lib import paths, dbscheme, generator, cpp field_overrides = [ (re.compile(r"locations.*::(start|end).*|.*::(index|num_.*)"), {"type": "unsigned"}), @@ -76,54 +76,26 @@ def get_trap(t: dbscheme.Table): ) -def get_guard(path): - path = path.relative_to(paths.swift_dir) - return str(path.with_suffix("")).replace("/", "_").upper() - - -def get_topologically_ordered_tags(tags): - degree_to_nodes = collections.defaultdict(set) - nodes_to_degree = {} - lookup = {} - for name, t in tags.items(): - degree = len(t["bases"]) - degree_to_nodes[degree].add(name) - nodes_to_degree[name] = degree - while degree_to_nodes[0]: - sinks = degree_to_nodes.pop(0) - for sink in sorted(sinks): - yield sink - for d in tags[sink]["derived"]: - degree = nodes_to_degree[d] - degree_to_nodes[degree].remove(d) - degree -= 1 - nodes_to_degree[d] = degree - degree_to_nodes[degree].add(d) - if any(degree_to_nodes.values()): - raise ValueError("not a dag!") - - def generate(opts, renderer): - tag_graph = collections.defaultdict(lambda: {"bases": [], "derived": []}) + tag_graph = {} out = opts.trap_output traps = [] - with open(opts.dbscheme) as input: - for e in dbscheme.iterload(input): - if e.is_table: - traps.append(get_trap(e)) - elif e.is_union: - for d in e.rhs: - tag_graph[e.lhs]["derived"].append(d.type) - tag_graph[d.type]["bases"].append(e.lhs) + for e in dbscheme.iterload(opts.dbscheme): + if e.is_table: + traps.append(get_trap(e)) + elif e.is_union: + tag_graph.setdefault(e.lhs, set()) + for d in e.rhs: + tag_graph.setdefault(d.type, set()).add(e.lhs) renderer.render(cpp.TrapList(traps), out / "TrapEntries.h") tags = [] - for index, tag in enumerate(get_topologically_ordered_tags(tag_graph)): + for index, tag in enumerate(toposort_flatten(tag_graph)): tags.append(cpp.Tag( name=get_tag_name(tag), - bases=[get_tag_name(b) for b in sorted(tag_graph[tag]["bases"])], + bases=[get_tag_name(b) for b in sorted(tag_graph[tag])], index=index, id=tag, )) From d5d1eb717d1eff3d875484b8af8f61d7826c291f Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 4 May 2022 18:13:54 +0200 Subject: [PATCH 0355/1618] Swift: add structured C++ generated classes This adds `cppgen`, creating structured C++ classes mirroring QL classes out of `schema.yml`. An example of generated code at the time of this commit can be found [in this gist][1]. [1]: https://gist.github.com/redsun82/57304ddb487a8aa40eaa0caa695048fa Closes https://github.com/github/codeql-c-team/issues/863 --- swift/codegen/BUILD.bazel | 23 ++++ swift/codegen/cppgen.py | 67 +++++++++ swift/codegen/lib/cpp.py | 68 +++++++++- swift/codegen/lib/options.py | 2 +- swift/codegen/templates/BUILD.bazel | 8 +- swift/codegen/templates/cpp_classes.mustache | 46 +++++++ .../{cpp_tags.mustache => trap_tags.mustache} | 0 ...cpp_traps.mustache => trap_traps.mustache} | 0 swift/codegen/test/test_cpp.py | 57 +++++++- swift/codegen/test/test_cppgen.py | 127 ++++++++++++++++++ swift/codegen/test/test_dbscheme.py | 2 +- swift/codegen/test/test_dbschemegen.py | 2 +- swift/codegen/test/test_ql.py | 2 +- swift/codegen/test/test_qlgen.py | 2 +- swift/codegen/test/test_render.py | 2 +- swift/codegen/test/test_schema.py | 2 +- swift/codegen/test/test_trapgen.py | 32 ++--- swift/codegen/trapgen.py | 27 +--- swift/extractor/SwiftExtractor.cpp | 9 +- swift/extractor/trap/BUILD.bazel | 22 ++- swift/extractor/trap/TrapLabel.h | 5 + 21 files changed, 445 insertions(+), 60 deletions(-) create mode 100644 swift/codegen/cppgen.py create mode 100644 swift/codegen/templates/cpp_classes.mustache rename swift/codegen/templates/{cpp_tags.mustache => trap_tags.mustache} (100%) rename swift/codegen/templates/{cpp_traps.mustache => trap_traps.mustache} (100%) create mode 100644 swift/codegen/test/test_cppgen.py diff --git a/swift/codegen/BUILD.bazel b/swift/codegen/BUILD.bazel index 3eac41e90ea..5b2a86f0e0b 100644 --- a/swift/codegen/BUILD.bazel +++ b/swift/codegen/BUILD.bazel @@ -1,5 +1,17 @@ load("@swift_codegen_deps//:requirements.bzl", "requirement") +filegroup( + name = "schema", + srcs = ["schema.yml"], + visibility = ["//swift:__subpackages__"], +) + +filegroup( + name = "schema_includes", + srcs = glob(["*.dbscheme"]), + visibility = ["//swift:__subpackages__"], +) + py_binary( name = "codegen", srcs = glob( @@ -15,6 +27,17 @@ py_binary( py_binary( name = "trapgen", srcs = ["trapgen.py"], + data = ["//swift/codegen/templates:trap"], + visibility = ["//swift:__subpackages__"], + deps = [ + "//swift/codegen/lib", + requirement("toposort"), + ], +) + +py_binary( + name = "cppgen", + srcs = ["cppgen.py"], data = ["//swift/codegen/templates:cpp"], visibility = ["//swift:__subpackages__"], deps = [ diff --git a/swift/codegen/cppgen.py b/swift/codegen/cppgen.py new file mode 100644 index 00000000000..6eeec931fae --- /dev/null +++ b/swift/codegen/cppgen.py @@ -0,0 +1,67 @@ +import functools +import inflection +from typing import Dict + +from toposort import toposort_flatten + +from swift.codegen.lib import cpp, generator, schema + + +def _get_type(t: str) -> str: + if t == "string": + return "std::string" + if t == "boolean": + return "bool" + if t[0].isupper(): + return f"TrapLabel<{t}Tag>" + return t + + +def _get_field(cls: schema.Class, p: schema.Property) -> cpp.Field: + trap_name = None + if not p.is_single: + trap_name = inflection.pluralize(inflection.camelize(f"{cls.name}_{p.name}")) + "Trap" + args = dict( + name=p.name + ("_" if p.name in cpp.cpp_keywords else ""), + type=_get_type(p.type), + is_optional=p.is_optional, + is_repeated=p.is_repeated, + trap_name=trap_name, + ) + args.update(cpp.get_field_override(p.name)) + return cpp.Field(**args) + + +class Processor: + def __init__(self, data: Dict[str, schema.Class]): + self._classmap = data + + @functools.cache + def _get_class(self, name: str) -> cpp.Class: + cls = self._classmap[name] + trap_name = None + if not cls.derived or any(p.is_single for p in cls.properties): + trap_name = inflection.pluralize(cls.name) + "Trap" + return cpp.Class( + name=name, + bases=[self._get_class(b) for b in cls.bases], + fields=[_get_field(cls, p) for p in cls.properties], + final=not cls.derived, + trap_name=trap_name, + ) + + def get_classes(self): + inheritance_graph = {k: cls.bases for k, cls in self._classmap.items()} + return [self._get_class(cls) for cls in toposort_flatten(inheritance_graph)] + + +def generate(opts, renderer): + processor = Processor({cls.name: cls for cls in schema.load(opts.schema).classes}) + out = opts.cpp_output + renderer.render(cpp.ClassList(processor.get_classes()), out / "TrapClasses.h") + + +tags = ("cpp", "schema") + +if __name__ == "__main__": + generator.run() diff --git a/swift/codegen/lib/cpp.py b/swift/codegen/lib/cpp.py index a933d09919c..89069a58239 100644 --- a/swift/codegen/lib/cpp.py +++ b/swift/codegen/lib/cpp.py @@ -1,3 +1,4 @@ +import re from dataclasses import dataclass, field from typing import List, ClassVar @@ -14,13 +15,35 @@ cpp_keywords = {"alignas", "alignof", "and", "and_eq", "asm", "atomic_cancel", " "typeid", "typename", "union", "unsigned", "using", "virtual", "void", "volatile", "wchar_t", "while", "xor", "xor_eq"} +_field_overrides = [ + (re.compile(r"(start|end)_(line|column)|index|num_.*"), {"type": "unsigned"}), + (re.compile(r"(.*)_"), lambda m: {"name": m[1]}), +] + + +def get_field_override(field: str): + for r, o in _field_overrides: + m = r.fullmatch(field) + if m: + return o(m) if callable(o) else o + return {} + @dataclass class Field: name: str type: str + is_optional: bool = False + is_repeated: bool = False + trap_name: str = None first: bool = False + def __post_init__(self): + if self.is_optional: + self.type = f"std::optional<{self.type}>" + elif self.is_repeated: + self.type = f"std::vector<{self.type}>" + @property def cpp_name(self): if self.name in cpp_keywords: @@ -36,6 +59,12 @@ class Field: else: return lambda x: x + @property + def is_single(self): + return not (self.is_optional or self.is_repeated) + + + @dataclass class Trap: @@ -74,13 +103,48 @@ class Tag: @dataclass class TrapList: - template: ClassVar = 'cpp_traps' + template: ClassVar = 'trap_traps' traps: List[Trap] = field(default_factory=list) @dataclass class TagList: - template: ClassVar = 'cpp_tags' + template: ClassVar = 'trap_tags' tags: List[Tag] = field(default_factory=list) + + +@dataclass +class ClassBase: + ref: 'Class' + first: bool = False + + +@dataclass +class Class: + name: str + bases: List[ClassBase] = field(default_factory=list) + final: bool = False + fields: List[Field] = field(default_factory=list) + trap_name: str = None + + def __post_init__(self): + self.bases = [ClassBase(c) for c in sorted(self.bases, key=lambda cls: cls.name)] + if self.bases: + self.bases[0].first = True + + @property + def has_bases(self): + return bool(self.bases) + + @property + def single_fields(self): + return [f for f in self.fields if f.is_single] + + +@dataclass +class ClassList: + template: ClassVar = "cpp_classes" + + classes: List[Class] diff --git a/swift/codegen/lib/options.py b/swift/codegen/lib/options.py index 6332444b752..9dbc19355e0 100644 --- a/swift/codegen/lib/options.py +++ b/swift/codegen/lib/options.py @@ -15,7 +15,7 @@ def _init_options(): Option("--ql-output", tags=["ql"], type=_abspath, default=paths.swift_dir / "ql/lib/codeql/swift/generated") Option("--ql-stub-output", tags=["ql"], type=_abspath, default=paths.swift_dir / "ql/lib/codeql/swift/elements") Option("--codeql-binary", tags=["ql"], default="codeql") - Option("--trap-output", tags=["trap"], type=_abspath, required=True) + Option("--cpp-output", tags=["cpp"], type=_abspath, required=True) def _abspath(x): diff --git a/swift/codegen/templates/BUILD.bazel b/swift/codegen/templates/BUILD.bazel index 6e29f4d3a6a..7745e7ea2ac 100644 --- a/swift/codegen/templates/BUILD.bazel +++ b/swift/codegen/templates/BUILD.bazel @@ -1,5 +1,11 @@ +package(default_visibility = ["//swift:__subpackages__"]) + +filegroup( + name = "trap", + srcs = glob(["trap_*.mustache"]), +) + filegroup( name = "cpp", srcs = glob(["cpp_*.mustache"]), - visibility = ["//swift:__subpackages__"], ) diff --git a/swift/codegen/templates/cpp_classes.mustache b/swift/codegen/templates/cpp_classes.mustache new file mode 100644 index 00000000000..88329bdcd5b --- /dev/null +++ b/swift/codegen/templates/cpp_classes.mustache @@ -0,0 +1,46 @@ +// generated by {{generator}} +// clang-format off +#pragma once + +#include +#include +#include + +#include "swift/extractor/trap/TrapLabel.h" +#include "swift/extractor/trap/TrapEntries.h" + +namespace codeql { +{{#classes}} + +struct {{name}}{{#final}} : Binding<{{name}}Tag>{{#bases}}, {{ref.name}}{{/bases}}{{/final}}{{^final}}{{#has_bases}}: {{#bases}}{{^first}}, {{/first}}{{ref.name}}{{/bases}}{{/has_bases}}{{/final}} { + {{#fields}} + {{type}} {{name}}{}; + {{/fields}} + {{#final}} + + friend std::ostream& operator<<(std::ostream& out, const {{name}}& x) { + x.emit(out); + return out; + } + {{/final}} + + protected: + void emit({{^final}}TrapLabel<{{name}}Tag> id, {{/final}}std::ostream& out) const { + {{#bases}} + {{ref.name}}::emit(id, out); + {{/bases}} + {{#trap_name}} + out << {{.}}{id{{#single_fields}}, {{name}}{{/single_fields}}} << '\n'; + {{/trap_name}} + {{#fields}} + {{#is_optional}} + if ({{name}}) out << {{trap_name}}{id, *{{name}}} << '\n'; + {{/is_optional}} + {{#is_repeated}} + for (auto i = 0u; i < {{name}}.size(); ++i) out << {{trap_name}}{id, i, {{name}}[i]}; + {{/is_repeated}} + {{/fields}} + } +}; +{{/classes}} +} diff --git a/swift/codegen/templates/cpp_tags.mustache b/swift/codegen/templates/trap_tags.mustache similarity index 100% rename from swift/codegen/templates/cpp_tags.mustache rename to swift/codegen/templates/trap_tags.mustache diff --git a/swift/codegen/templates/cpp_traps.mustache b/swift/codegen/templates/trap_traps.mustache similarity index 100% rename from swift/codegen/templates/cpp_traps.mustache rename to swift/codegen/templates/trap_traps.mustache diff --git a/swift/codegen/test/test_cpp.py b/swift/codegen/test/test_cpp.py index 8b4ff5acba7..0368831d453 100644 --- a/swift/codegen/test/test_cpp.py +++ b/swift/codegen/test/test_cpp.py @@ -27,6 +27,27 @@ def test_field_get_streamer(type, expected): assert f.get_streamer()("value") == expected +@pytest.mark.parametrize("is_optional,is_repeated,expected", [ + (False, False, True), + (True, False, False), + (False, True, False), + (True, True, False), +]) +def test_field_is_single(is_optional, is_repeated, expected): + f = cpp.Field("name", "type", is_optional=is_optional, is_repeated=is_repeated) + assert f.is_single is expected + + +@pytest.mark.parametrize("is_optional,is_repeated,expected", [ + (False, False, "bar"), + (True, False, "std::optional"), + (False, True, "std::vector"), +]) +def test_field_modal_types(is_optional, is_repeated, expected): + f = cpp.Field("name", "bar", is_optional=is_optional, is_repeated=is_repeated) + assert f.type == expected + + def test_trap_has_first_field_marked(): fields = [ cpp.Field("a", "x"), @@ -56,5 +77,39 @@ def test_tag_has_bases(bases, expected): assert t.has_bases is expected +def test_class_has_first_base_marked(): + bases = [ + cpp.Class("a"), + cpp.Class("b"), + cpp.Class("c"), + ] + expected = [cpp.ClassBase(c) for c in bases] + expected[0].first = True + c = cpp.Class("foo", bases=bases) + assert c.bases == expected + + +@pytest.mark.parametrize("bases,expected", [ + ([], False), + (["a"], True), + (["a", "b"], True) +]) +def test_class_has_bases(bases, expected): + t = cpp.Class("name", [cpp.Class(b) for b in bases]) + assert t.has_bases is expected + + +def test_class_single_fields(): + fields = [ + cpp.Field("a", "A"), + cpp.Field("b", "B", is_optional=True), + cpp.Field("c", "C"), + cpp.Field("d", "D", is_repeated=True), + cpp.Field("e", "E"), + ] + c = cpp.Class("foo", fields=fields) + assert c.single_fields == fields[::2] + + if __name__ == '__main__': - sys.exit(pytest.main()) + sys.exit(pytest.main([__file__] + sys.argv[1:])) diff --git a/swift/codegen/test/test_cppgen.py b/swift/codegen/test/test_cppgen.py new file mode 100644 index 00000000000..c5a759bbbf8 --- /dev/null +++ b/swift/codegen/test/test_cppgen.py @@ -0,0 +1,127 @@ +import sys + +from swift.codegen import cppgen +from swift.codegen.lib import cpp +from swift.codegen.test.utils import * + +output_dir = pathlib.Path("path", "to", "output") + + +@pytest.fixture +def generate(opts, renderer, input): + opts.cpp_output = output_dir + + def ret(classes): + input.classes = classes + generated = run_generation(cppgen.generate, opts, renderer) + assert set(generated) == {output_dir / "TrapClasses.h"} + generated = generated[output_dir / "TrapClasses.h"] + assert isinstance(generated, cpp.ClassList) + return generated.classes + + return ret + + +def test_empty(generate): + assert generate([]) == [] + + +def test_empty_class(generate): + assert generate([ + schema.Class(name="MyClass"), + ]) == [ + cpp.Class(name="MyClass", final=True, trap_name="MyClassesTrap") + ] + + +def test_two_class_hierarchy(generate): + base = cpp.Class(name="A") + assert generate([ + schema.Class(name="A", derived={"B"}), + schema.Class(name="B", bases={"A"}), + ]) == [ + base, + cpp.Class(name="B", bases=[base], final=True, trap_name="BsTrap"), + ] + + +def test_complex_hierarchy_topologically_ordered(generate): + a = cpp.Class(name="A") + b = cpp.Class(name="B") + c = cpp.Class(name="C", bases=[a]) + d = cpp.Class(name="D", bases=[a]) + e = cpp.Class(name="E", bases=[b, c, d], final=True, trap_name="EsTrap") + f = cpp.Class(name="F", bases=[c], final=True, trap_name="FsTrap") + assert generate([ + schema.Class(name="F", bases={"C"}), + schema.Class(name="B", derived={"E"}), + schema.Class(name="D", bases={"A"}, derived={"E"}), + schema.Class(name="C", bases={"A"}, derived={"E", "F"}), + schema.Class(name="E", bases={"B", "C", "D"}), + schema.Class(name="A", derived={"C", "D"}), + ]) == [a, b, c, d, e, f] + + +@pytest.mark.parametrize("type,expected", [ + ("a", "a"), + ("string", "std::string"), + ("boolean", "bool"), + ("MyClass", "TrapLabel"), +]) +@pytest.mark.parametrize("property_cls,optional,repeated,trap_name", [ + (schema.SingleProperty, False, False, None), + (schema.OptionalProperty, True, False, "MyClassPropsTrap"), + (schema.RepeatedProperty, False, True, "MyClassPropsTrap"), +]) +def test_class_with_field(generate, type, expected, property_cls, optional, repeated, trap_name): + assert generate([ + schema.Class(name="MyClass", properties=[property_cls("prop", type)]), + ]) == [ + cpp.Class(name="MyClass", + fields=[cpp.Field("prop", expected, is_optional=optional, + is_repeated=repeated, trap_name=trap_name)], + trap_name="MyClassesTrap", + final=True) + ] + + +@pytest.mark.parametrize("name", ["start_line", "start_column", "end_line", "end_column", "index", "num_whatever"]) +def test_class_with_overridden_unsigned_field(generate, name): + assert generate([ + schema.Class(name="MyClass", properties=[ + schema.SingleProperty(name, "bar")]), + ]) == [ + cpp.Class(name="MyClass", + fields=[cpp.Field(name, "unsigned")], + trap_name="MyClassesTrap", + final=True) + ] + + +def test_class_with_overridden_underscore_field(generate): + assert generate([ + schema.Class(name="MyClass", properties=[ + schema.SingleProperty("something_", "bar")]), + ]) == [ + cpp.Class(name="MyClass", + fields=[cpp.Field("something", "bar")], + trap_name="MyClassesTrap", + final=True) + ] + + +@pytest.mark.parametrize("name", cpp.cpp_keywords) +def test_class_with_keyword_field(generate, name): + assert generate([ + schema.Class(name="MyClass", properties=[ + schema.SingleProperty(name, "bar")]), + ]) == [ + cpp.Class(name="MyClass", + fields=[cpp.Field(name + "_", "bar")], + trap_name="MyClassesTrap", + final=True) + ] + + +if __name__ == '__main__': + sys.exit(pytest.main([__file__] + sys.argv[1:])) diff --git a/swift/codegen/test/test_dbscheme.py b/swift/codegen/test/test_dbscheme.py index c67225e4303..9eaca07bd51 100644 --- a/swift/codegen/test/test_dbscheme.py +++ b/swift/codegen/test/test_dbscheme.py @@ -151,4 +151,4 @@ int ignored: int ref*/); if __name__ == '__main__': - sys.exit(pytest.main()) + sys.exit(pytest.main([__file__] + sys.argv[1:])) diff --git a/swift/codegen/test/test_dbschemegen.py b/swift/codegen/test/test_dbschemegen.py index d8f0089d863..97b0090cf74 100644 --- a/swift/codegen/test/test_dbschemegen.py +++ b/swift/codegen/test/test_dbschemegen.py @@ -304,4 +304,4 @@ def test_class_with_derived_and_repeated_property(opts, input, renderer): if __name__ == '__main__': - sys.exit(pytest.main()) + sys.exit(pytest.main([__file__] + sys.argv[1:])) diff --git a/swift/codegen/test/test_ql.py b/swift/codegen/test/test_ql.py index 8127a03073e..44da8b560f9 100644 --- a/swift/codegen/test/test_ql.py +++ b/swift/codegen/test/test_ql.py @@ -97,4 +97,4 @@ def test_non_root_class(): if __name__ == '__main__': - sys.exit(pytest.main()) + sys.exit(pytest.main([__file__] + sys.argv[1:])) diff --git a/swift/codegen/test/test_qlgen.py b/swift/codegen/test/test_qlgen.py index 94cd6641afc..a81c8600c57 100644 --- a/swift/codegen/test/test_qlgen.py +++ b/swift/codegen/test/test_qlgen.py @@ -195,4 +195,4 @@ def test_empty_cleanup(opts, input, renderer, tmp_path): if __name__ == '__main__': - sys.exit(pytest.main()) + sys.exit(pytest.main([__file__] + sys.argv[1:])) diff --git a/swift/codegen/test/test_render.py b/swift/codegen/test/test_render.py index c900cfa99e6..ea007a54563 100644 --- a/swift/codegen/test/test_render.py +++ b/swift/codegen/test/test_render.py @@ -76,4 +76,4 @@ def test_cleanup(sut): if __name__ == '__main__': - sys.exit(pytest.main()) + sys.exit(pytest.main([__file__] + sys.argv[1:])) diff --git a/swift/codegen/test/test_schema.py b/swift/codegen/test/test_schema.py index 9b52bcbbaa1..b7376407c20 100644 --- a/swift/codegen/test/test_schema.py +++ b/swift/codegen/test/test_schema.py @@ -152,4 +152,4 @@ A: if __name__ == '__main__': - sys.exit(pytest.main()) + sys.exit(pytest.main([__file__] + sys.argv[1:])) diff --git a/swift/codegen/test/test_trapgen.py b/swift/codegen/test/test_trapgen.py index 089a809210f..5ac6cd3718c 100644 --- a/swift/codegen/test/test_trapgen.py +++ b/swift/codegen/test/test_trapgen.py @@ -9,7 +9,7 @@ output_dir = pathlib.Path("path", "to", "output") @pytest.fixture def generate(opts, renderer, dbscheme_input): - opts.trap_output = output_dir + opts.cpp_output = output_dir def ret(entities): dbscheme_input.entities = entities @@ -105,28 +105,22 @@ def test_one_table_special_types(generate_traps, column, field): ] -@pytest.mark.parametrize("table,name,column,field", [ - ("locations", "Locations", dbscheme.Column( - "startWhatever", "bar"), cpp.Field("startWhatever", "unsigned")), - ("locations", "Locations", dbscheme.Column( - "endWhatever", "bar"), cpp.Field("endWhatever", "unsigned")), - ("foos", "Foos", dbscheme.Column("startWhatever", "bar"), - cpp.Field("startWhatever", "bar")), - ("foos", "Foos", dbscheme.Column("endWhatever", "bar"), - cpp.Field("endWhatever", "bar")), - ("foos", "Foos", dbscheme.Column("index", "bar"), cpp.Field("index", "unsigned")), - ("foos", "Foos", dbscheme.Column("num_whatever", "bar"), - cpp.Field("num_whatever", "unsigned")), - ("foos", "Foos", dbscheme.Column("whatever_", "bar"), cpp.Field("whatever", "bar")), -]) -def test_one_table_overridden_fields(generate_traps, table, name, column, field): +@pytest.mark.parametrize("name", ["start_line", "start_column", "end_line", "end_column", "index", "num_whatever"]) +def test_one_table_overridden_unsigned_field(generate_traps, name): assert generate_traps([ - dbscheme.Table(name=table, columns=[column]), + dbscheme.Table(name="foos", columns=[dbscheme.Column(name, "bar")]), ]) == [ - cpp.Trap(table, name=name, fields=[field]), + cpp.Trap("foos", name="Foos", fields=[cpp.Field(name, "unsigned")]), ] +def test_one_table_overridden_underscore_named_field(generate_traps): + assert generate_traps([ + dbscheme.Table(name="foos", columns=[dbscheme.Column("whatever_", "bar")]), + ]) == [ + cpp.Trap("foos", name="Foos", fields=[cpp.Field("whatever", "bar")]), + ] + def test_one_table_no_tags(generate_tags): assert generate_tags([ dbscheme.Table(name="foos", columns=[dbscheme.Column("bla", "int")]), @@ -160,4 +154,4 @@ def test_multiple_union_tags(generate_tags): if __name__ == '__main__': - sys.exit(pytest.main()) + sys.exit(pytest.main([__file__] + sys.argv[1:])) diff --git a/swift/codegen/trapgen.py b/swift/codegen/trapgen.py index 732354c8f9c..555b5bf9fdb 100755 --- a/swift/codegen/trapgen.py +++ b/swift/codegen/trapgen.py @@ -1,36 +1,17 @@ #!/usr/bin/env python3 import logging -import os import re -import sys import inflection from toposort import toposort_flatten -sys.path.append(os.path.dirname(__file__)) +from swift.codegen.lib import dbscheme, generator, cpp -from swift.codegen.lib import paths, dbscheme, generator, cpp - -field_overrides = [ - (re.compile(r"locations.*::(start|end).*|.*::(index|num_.*)"), {"type": "unsigned"}), - (re.compile(r".*::(.*)_"), lambda m: {"name": m[1]}), -] log = logging.getLogger(__name__) -def get_field_override(table, field): - spec = f"{table}::{field}" - for r, o in field_overrides: - m = r.fullmatch(spec) - if m and callable(o): - return o(m) - elif m: - return o - return {} - - def get_tag_name(s): assert s.startswith("@") return inflection.camelize(s[1:]) @@ -52,7 +33,7 @@ def get_field(c: dbscheme.Column, table: str): "name": c.schema_name, "type": c.type, } - args.update(get_field_override(table, c.schema_name)) + args.update(cpp.get_field_override(c.schema_name)) args["type"] = get_cpp_type(args["type"]) return cpp.Field(**args) @@ -78,7 +59,7 @@ def get_trap(t: dbscheme.Table): def generate(opts, renderer): tag_graph = {} - out = opts.trap_output + out = opts.cpp_output traps = [] for e in dbscheme.iterload(opts.dbscheme): @@ -102,7 +83,7 @@ def generate(opts, renderer): renderer.render(cpp.TagList(tags), out / "TrapTags.h") -tags = ("trap", "dbscheme") +tags = ("cpp", "dbscheme") if __name__ == "__main__": generator.run() diff --git a/swift/extractor/SwiftExtractor.cpp b/swift/extractor/SwiftExtractor.cpp index 7413763aaba..fd87cee6e54 100644 --- a/swift/extractor/SwiftExtractor.cpp +++ b/swift/extractor/SwiftExtractor.cpp @@ -12,7 +12,7 @@ #include #include -#include "swift/extractor/trap/TrapEntries.h" +#include "swift/extractor/trap/TrapClasses.h" using namespace codeql; @@ -75,9 +75,10 @@ static void extractFile(const SwiftExtractorConfiguration& config, swift::Source } trap << "\n\n"; - TrapLabel label{}; - trap << label << "=*\n"; - trap << FilesTrap{label, srcFilePath.str().str()} << "\n"; + File f; + f.id = TrapLabel{}; + f.name = srcFilePath.str().str(); + trap << f.id << "=*\n" << f; // TODO: Pick a better name to avoid collisions std::string trapName = file.getFilename().str() + ".trap"; diff --git a/swift/extractor/trap/BUILD.bazel b/swift/extractor/trap/BUILD.bazel index eecf5a07e53..7fa90c89e91 100644 --- a/swift/extractor/trap/BUILD.bazel +++ b/swift/extractor/trap/BUILD.bazel @@ -1,16 +1,32 @@ genrule( - name = "gen", + name = "trapgen", srcs = ["//swift:dbscheme"], outs = [ "TrapEntries.h", "TrapTags.h", ], - cmd = "$(location //swift/codegen:trapgen) --dbscheme $< --trap-output $(RULEDIR)", + cmd = "$(location //swift/codegen:trapgen) --dbscheme $< --cpp-output $(RULEDIR)", exec_tools = ["//swift/codegen:trapgen"], ) +genrule( + name = "cppgen", + srcs = [ + "//swift/codegen:schema", + "//swift/codegen:schema_includes", + ], + outs = [ + "TrapClasses.h", + ], + cmd = "$(location //swift/codegen:cppgen) --schema $(location //swift/codegen:schema) --cpp-output $(RULEDIR)", + exec_tools = ["//swift/codegen:cppgen"], +) + cc_library( name = "trap", - hdrs = glob(["*.h"]) + [":gen"], + hdrs = glob(["*.h"]) + [ + ":trapgen", + ":cppgen", + ], visibility = ["//visibility:public"], ) diff --git a/swift/extractor/trap/TrapLabel.h b/swift/extractor/trap/TrapLabel.h index 62a574e4ff9..9928bb9a2b9 100644 --- a/swift/extractor/trap/TrapLabel.h +++ b/swift/extractor/trap/TrapLabel.h @@ -54,6 +54,11 @@ inline auto trapQuoted(const std::string& s) { return std::quoted(s, '"', '"'); } +template +struct Binding { + TrapLabel id; +}; + } // namespace codeql namespace std { From 33e85f8db8048bcd1b9cf928c9d37001de8138d6 Mon Sep 17 00:00:00 2001 From: Daniel Santos Date: Wed, 4 May 2022 11:43:56 -0500 Subject: [PATCH 0356/1618] Update javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll Co-authored-by: Erik Krogh Kristensen --- .../javascript/security/dataflow/XssThroughDomCustomizations.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll index 7d3d7bdfc48..d396733fd74 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll @@ -217,7 +217,6 @@ module XssThroughDom { } } - /** * Gets a reference to a value obtained by calling `window.getSelection()`. * https://developer.mozilla.org/en-US/docs/Web/API/Selection From 937ab417b1bad3ba63e855e3b666453f8e1c4ab4 Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Wed, 4 May 2022 22:46:01 +0000 Subject: [PATCH 0357/1618] Query to detect hardcoded JWT secret keys --- .../Security/CWE/CWE-321/HardcodedJwtKey.java | 26 ++ .../CWE/CWE-321/HardcodedJwtKey.qhelp | 46 ++ .../Security/CWE/CWE-321/HardcodedJwtKey.ql | 19 + .../Security/CWE/CWE-321/HardcodedJwtKey.qll | 156 +++++++ .../security/CWE-321/HardcodedJwtKey.expected | 25 ++ .../security/CWE-321/HardcodedJwtKey.java | 65 +++ .../security/CWE-321/HardcodedJwtKey.qlref | 1 + .../query-tests/security/CWE-321/options | 1 + .../auth0-jwt-2.3/com/auth0/jwt/JWT.java | 57 +++ .../com/auth0/jwt/JWTCreator.java | 300 +++++++++++++ .../com/auth0/jwt/algorithms/Algorithm.java | 397 ++++++++++++++++++ .../jwt/exceptions/JWTCreationException.java | 6 + .../jwt/exceptions/JWTDecodeException.java | 9 + .../exceptions/JWTVerificationException.java | 9 + .../SignatureGenerationException.java | 8 + .../SignatureVerificationException.java | 13 + .../com/auth0/jwt/interfaces/DecodedJWT.java | 37 ++ .../jwt/interfaces/ECDSAKeyProvider.java | 10 + .../com/auth0/jwt/interfaces/JWTVerifier.java | 25 ++ .../com/auth0/jwt/interfaces/KeyProvider.java | 35 ++ .../auth0/jwt/interfaces/RSAKeyProvider.java | 10 + .../auth0/jwt/interfaces/Verification.java | 189 +++++++++ 22 files changed, 1444 insertions(+) create mode 100644 java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.java create mode 100644 java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qhelp create mode 100644 java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.ql create mode 100644 java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qll create mode 100644 java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.expected create mode 100644 java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.java create mode 100644 java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.qlref create mode 100644 java/ql/test/experimental/query-tests/security/CWE-321/options create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/JWT.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/JWTCreator.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/algorithms/Algorithm.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTCreationException.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTDecodeException.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTVerificationException.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/SignatureGenerationException.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/SignatureVerificationException.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/DecodedJWT.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/ECDSAKeyProvider.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/JWTVerifier.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/KeyProvider.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/RSAKeyProvider.java create mode 100644 java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/Verification.java diff --git a/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.java b/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.java new file mode 100644 index 00000000000..69712794689 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.java @@ -0,0 +1,26 @@ +// BAD: Get secret from hardcoded string then sign a JWT token +Algorithm algorithm = Algorithm.HMAC256("hardcoded_secret"); +JWT.create() + .withClaim("username", username) + .sign(algorithm); +} + +// BAD: Get secret from hardcoded string then verify a JWT token +JWTVerifier verifier = JWT.require(Algorithm.HMAC256("hardcoded_secret")) + .withIssuer(ISSUER) + .build(); +verifier.verify(token); + +// GOOD: Get secret from system configuration then sign a token +String tokenSecret = System.getenv("SECRET_KEY"); +Algorithm algorithm = Algorithm.HMAC256(tokenSecret); +JWT.create() + .withClaim("username", username) + .sign(algorithm); + } + +// GOOD: Get secret from environment variable then verify a JWT token +JWTVerifier verifier = JWT.require(Algorithm.HMAC256(System.getenv("SECRET_KEY"))) + .withIssuer(ISSUER) + .build(); +verifier.verify(token); diff --git a/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qhelp b/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qhelp new file mode 100644 index 00000000000..b8e984280be --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qhelp @@ -0,0 +1,46 @@ + + + +

    + JWT (JSON Web Token) is an open standard (RFC 7519) that defines a way to provide information + within a JSON object between two parties. JWT is widely used for sharing security information + between two parties in web applications. Each JWT contains encoded JSON objects, including a + set of claims. JWTs are signed using a cryptographic algorithm to ensure that the claims cannot + be altered after the token is issued. +

    +

    + The most basic mistake is using hardcoded secrets for JWT generation/verification. This allows + an attacker to forge the token if the source code (and JWT secret in it) is publicly exposed or + leaked, which leads to authentication bypass or privilege escalation. +

    +
    + + +

    + Generating a cryptographically secure secret key during application initialization and using this + generated key for JWT signing/verification requests can prevent this vulnerability. Or safely store + the secret key in a key vault that cannot be leaked in source code. +

    +
    + + +

    + The following examples show the bad case and the good case respectively. The bad + methods show a hardcoded secret key is used to sign and verify JWT tokens. In the good + method, the secret key is loaded from a system environment during application initialization. +

    + +
    + + +
  • + Semgrep Blog: + Hardcoded secrets, unverified tokens, and other common JWT mistakes +
  • +
  • + CVE-2022-24860: + Databasir 1.01 has Use of Hard-coded Cryptographic Key vulnerability. +
  • +
    + +
    \ No newline at end of file diff --git a/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.ql b/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.ql new file mode 100644 index 00000000000..63c55793cbf --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.ql @@ -0,0 +1,19 @@ +/** + * @name Use of a hardcoded key for signing JWT + * @description Using a hardcoded key for signing JWT can allow an attacker to compromise security. + * @kind path-problem + * @problem.severity error + * @id java/hardcoded-jwt-key + * @tags security + * external/cwe/cwe-321 + */ + +import java +import HardcodedJwtKey +import semmle.code.java.dataflow.TaintTracking +import DataFlow::PathGraph + +from DataFlow::PathNode source, DataFlow::PathNode sink, HardcodedJwtKeyConfiguration cfg +where cfg.hasFlowPath(source, sink) +select sink.getNode(), source, sink, "$@ is used to sign a JWT token.", source.getNode(), + "Hardcoded String" diff --git a/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qll b/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qll new file mode 100644 index 00000000000..c960b065215 --- /dev/null +++ b/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qll @@ -0,0 +1,156 @@ +/** + * Provides sources and sinks for detecting JWT token signing vulnerabilities. + */ + +import java +private import semmle.code.java.dataflow.FlowSources + +/** The Java class `com.auth0.jwt.JWT`. */ +class Jwt extends RefType { + Jwt() { this.hasQualifiedName("com.auth0.jwt", "JWT") } +} + +/** The Java class `com.auth0.jwt.JWTCreator.Builder`. */ +class JwtBuilder extends RefType { + JwtBuilder() { this.hasQualifiedName("com.auth0.jwt", "JWTCreator$Builder") } +} + +/** The Java class `com.auth0.jwt.algorithms.Algorithm`. */ +class Algorithm extends RefType { + Algorithm() { this.hasQualifiedName("com.auth0.jwt.algorithms", "Algorithm") } +} + +/** + * The Java interface `com.auth0.jwt.interfaces.JWTVerifier` or it implementation class + * `com.auth0.jwt.JWTVerifier`. + */ +class JwtVerifier extends RefType { + JwtVerifier() { + this.hasQualifiedName(["com.auth0.jwt", "com.auth0.jwt.interfaces"], "JWTVerifier") + } +} + +/** The secret generation method declared in `com.auth0.jwt.algorithms.Algorithm`. */ +class GetSecretMethod extends Method { + GetSecretMethod() { + this.getDeclaringType() instanceof Algorithm and + ( + this.getName().substring(0, 4) = "HMAC" or + this.getName().substring(0, 5) = "ECDSA" or + this.getName().substring(0, 3) = "RSA" + ) + } +} + +/** The `require` method of `com.auth0.jwt.JWT`. */ +class RequireMethod extends Method { + RequireMethod() { + this.getDeclaringType() instanceof Jwt and + this.hasName("require") + } +} + +/** The `sign` method of `com.auth0.jwt.JWTCreator.Builder`. */ +class SignTokenMethod extends Method { + SignTokenMethod() { + this.getDeclaringType() instanceof JwtBuilder and + this.hasName("sign") + } +} + +/** The `verify` method of `com.auth0.jwt.interfaces.JWTVerifier`. */ +class VerifyTokenMethod extends Method { + VerifyTokenMethod() { + this.getDeclaringType() instanceof JwtVerifier and + this.hasName("verify") + } +} + +/** + * A data flow source for JWT token signing vulnerabilities. + */ +abstract class JwtKeySource extends DataFlow::Node { } + +/** + * A data flow sink for JWT token signing vulnerabilities. + */ +abstract class JwtTokenSink extends DataFlow::Node { } + +private predicate isTestCode(Expr e) { + e.getFile().getAbsolutePath().toLowerCase().matches("%test%") and + not e.getFile().getAbsolutePath().toLowerCase().matches("%ql/test%") +} + +/** + * A hardcoded string literal as a source for JWT token signing vulnerabilities. + */ +class HardcodedKeyStringSource extends JwtKeySource { + HardcodedKeyStringSource() { + this.asExpr() instanceof CompileTimeConstantExpr and + not isTestCode(this.asExpr()) + } +} + +/** + * An expression used to sign JWT tokens as a sink of JWT token signing vulnerabilities. + */ +private class SignTokenSink extends JwtTokenSink { + SignTokenSink() { + exists(MethodAccess ma | + ma.getMethod() instanceof SignTokenMethod and + this.asExpr() = ma.getArgument(0) + ) + } +} + +/** + * An expression used to verify JWT tokens as a sink of JWT token signing vulnerabilities. + */ +private class VerifyTokenSink extends JwtTokenSink { + VerifyTokenSink() { + exists(MethodAccess ma | + ma.getMethod() instanceof VerifyTokenMethod and + this.asExpr() = ma.getQualifier() + ) + } +} + +/** + * A configuration depicting taint flow for checking JWT token signing vulnerabilities. + */ +class HardcodedJwtKeyConfiguration extends TaintTracking::Configuration { + HardcodedJwtKeyConfiguration() { this = "Hard-coded JWT Signing Key" } + + override predicate isSource(DataFlow::Node source) { source instanceof JwtKeySource } + + override predicate isSink(DataFlow::Node sink) { sink instanceof JwtTokenSink } + + override predicate isAdditionalTaintStep(DataFlow::Node prev, DataFlow::Node succ) { + exists(MethodAccess ma | + ( + ma.getMethod() instanceof GetSecretMethod or + ma.getMethod() instanceof RequireMethod + ) and + prev.asExpr() = ma.getArgument(0) and + succ.asExpr() = ma + ) + } +} + +/** Taint model related to verifying JWT tokens. */ +private class VerificationFlowStep extends SummaryModelCsv { + override predicate row(string row) { + row = + [ + "com.auth0.jwt.interfaces;Verification;true;build;;;Argument[-1];ReturnValue;taint", + "com.auth0.jwt.interfaces;Verification;true;" + + ["acceptLeeway", "acceptExpiresAt", "acceptNotBefore", "acceptIssuedAt", "ignoreIssuedAt"] + + ";;;Argument[-1];ReturnValue;taint", + "com.auth0.jwt.interfaces;Verification;true;with" + + [ + "Issuer", "Subject", "Audience", "AnyOfAudience", "ClaimPresence", "Claim", + "ArrayClaim", "JWTId" + ] + ";;;Argument[-1];ReturnValue;taint" + ] + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.expected b/java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.expected new file mode 100644 index 00000000000..15e882db4cd --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.expected @@ -0,0 +1,25 @@ +edges +| HardcodedJwtKey.java:15:33:15:38 | SECRET : String | HardcodedJwtKey.java:19:49:19:54 | SECRET : String | +| HardcodedJwtKey.java:15:33:15:38 | SECRET : String | HardcodedJwtKey.java:42:62:42:67 | SECRET : String | +| HardcodedJwtKey.java:15:42:15:59 | "hardcoded_secret" : String | HardcodedJwtKey.java:15:33:15:38 | SECRET : String | +| HardcodedJwtKey.java:19:49:19:54 | SECRET : String | HardcodedJwtKey.java:25:23:25:31 | algorithm | +| HardcodedJwtKey.java:42:32:42:69 | require(...) : Verification | HardcodedJwtKey.java:42:32:43:35 | withIssuer(...) : Verification | +| HardcodedJwtKey.java:42:32:43:35 | withIssuer(...) : Verification | HardcodedJwtKey.java:42:32:44:24 | build(...) : JWTVerifier | +| HardcodedJwtKey.java:42:32:44:24 | build(...) : JWTVerifier | HardcodedJwtKey.java:46:13:46:20 | verifier | +| HardcodedJwtKey.java:42:62:42:67 | SECRET : String | HardcodedJwtKey.java:42:32:42:69 | require(...) : Verification | +nodes +| HardcodedJwtKey.java:15:33:15:38 | SECRET : String | semmle.label | SECRET : String | +| HardcodedJwtKey.java:15:42:15:59 | "hardcoded_secret" : String | semmle.label | "hardcoded_secret" : String | +| HardcodedJwtKey.java:19:49:19:54 | SECRET : String | semmle.label | SECRET : String | +| HardcodedJwtKey.java:25:23:25:31 | algorithm | semmle.label | algorithm | +| HardcodedJwtKey.java:42:32:42:69 | require(...) : Verification | semmle.label | require(...) : Verification | +| HardcodedJwtKey.java:42:32:43:35 | withIssuer(...) : Verification | semmle.label | withIssuer(...) : Verification | +| HardcodedJwtKey.java:42:32:44:24 | build(...) : JWTVerifier | semmle.label | build(...) : JWTVerifier | +| HardcodedJwtKey.java:42:62:42:67 | SECRET : String | semmle.label | SECRET : String | +| HardcodedJwtKey.java:46:13:46:20 | verifier | semmle.label | verifier | +subpaths +#select +| HardcodedJwtKey.java:25:23:25:31 | algorithm | HardcodedJwtKey.java:15:42:15:59 | "hardcoded_secret" : String | HardcodedJwtKey.java:25:23:25:31 | algorithm | $@ is used to sign a JWT token. | HardcodedJwtKey.java:15:42:15:59 | "hardcoded_secret" | Hardcoded String | +| HardcodedJwtKey.java:25:23:25:31 | algorithm | HardcodedJwtKey.java:19:49:19:54 | SECRET : String | HardcodedJwtKey.java:25:23:25:31 | algorithm | $@ is used to sign a JWT token. | HardcodedJwtKey.java:19:49:19:54 | SECRET | Hardcoded String | +| HardcodedJwtKey.java:46:13:46:20 | verifier | HardcodedJwtKey.java:15:42:15:59 | "hardcoded_secret" : String | HardcodedJwtKey.java:46:13:46:20 | verifier | $@ is used to sign a JWT token. | HardcodedJwtKey.java:15:42:15:59 | "hardcoded_secret" | Hardcoded String | +| HardcodedJwtKey.java:46:13:46:20 | verifier | HardcodedJwtKey.java:42:62:42:67 | SECRET : String | HardcodedJwtKey.java:46:13:46:20 | verifier | $@ is used to sign a JWT token. | HardcodedJwtKey.java:42:62:42:67 | SECRET | Hardcoded String | diff --git a/java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.java b/java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.java new file mode 100644 index 00000000000..cfcb027755b --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.java @@ -0,0 +1,65 @@ +import java.util.Date; +import java.util.Properties; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTVerificationException; +import com.auth0.jwt.interfaces.JWTVerifier; + +public class HardcodedJwtKey { + // 15 minutes + private static final long ACCESS_EXPIRE_TIME = 1000 * 60 * 15; + + private static final String ISSUER = "example_com"; + + private static final String SECRET = "hardcoded_secret"; + + // BAD: Get secret from hardcoded string then sign a JWT token + public String accessTokenBad(String username) { + Algorithm algorithm = Algorithm.HMAC256(SECRET); + + return JWT.create() + .withExpiresAt(new Date(new Date().getTime() + ACCESS_EXPIRE_TIME)) + .withIssuer(ISSUER) + .withClaim("username", username) + .sign(algorithm); + } + + // GOOD: Get secret from system configuration then sign a token + public String accessTokenGood(String username) { + String tokenSecret = System.getenv("SECRET_KEY"); + Algorithm algorithm = Algorithm.HMAC256(tokenSecret); + + return JWT.create() + .withExpiresAt(new Date(new Date().getTime() + ACCESS_EXPIRE_TIME)) + .withIssuer(ISSUER) + .withClaim("username", username) + .sign(algorithm); + } + + // BAD: Get secret from hardcoded string then verify a JWT token + public boolean verifyTokenBad(String token) { + JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)) + .withIssuer(ISSUER) + .build(); + try { + verifier.verify(token); + return true; + } catch (JWTVerificationException e) { + return false; + } + } + + // GOOD: Get secret from environment variable then verify a JWT token + public boolean verifyTokenGood(String token) { + JWTVerifier verifier = JWT.require(Algorithm.HMAC256(System.getenv("SECRET_KEY"))) + .withIssuer(ISSUER) + .build(); + try { + verifier.verify(token); + return true; + } catch (JWTVerificationException e) { + return false; + } + } +} diff --git a/java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.qlref b/java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.qlref new file mode 100644 index 00000000000..3da970cd380 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-321/HardcodedJwtKey.qlref @@ -0,0 +1 @@ +experimental/Security/CWE/CWE-321/HardcodedJwtKey.ql \ No newline at end of file diff --git a/java/ql/test/experimental/query-tests/security/CWE-321/options b/java/ql/test/experimental/query-tests/security/CWE-321/options new file mode 100644 index 00000000000..ab6ca411a02 --- /dev/null +++ b/java/ql/test/experimental/query-tests/security/CWE-321/options @@ -0,0 +1 @@ +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/auth0-jwt-2.3 diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/JWT.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/JWT.java new file mode 100644 index 00000000000..bd805484106 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/JWT.java @@ -0,0 +1,57 @@ +package com.auth0.jwt; + +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.Verification; + +public class JWT { + public JWT() { + } + + /** + * Decode a given Json Web Token. + *

    + * Note that this method doesn't verify the token's signature! Use it only if you trust the token or you already verified it. + * + * @param token with jwt format as string. + * @return a decoded JWT. + * @throws JWTDecodeException if any part of the token contained an invalid jwt or JSON format of each of the jwt parts. + */ + public DecodedJWT decodeJwt(String token) throws JWTDecodeException { + return null; + } + + /** + * Decode a given Json Web Token. + *

    + * Note that this method doesn't verify the token's signature! Use it only if you trust the token or you already verified it. + * + * @param token with jwt format as string. + * @return a decoded JWT. + * @throws JWTDecodeException if any part of the token contained an invalid jwt or JSON format of each of the jwt parts. + */ + public static DecodedJWT decode(String token) throws JWTDecodeException { + return null; + } + + /** + * Returns a {@link JWTVerifier} builder with the algorithm to be used to validate token signature. + * + * @param algorithm that will be used to verify the token's signature. + * @return {@link JWTVerifier} builder + * @throws IllegalArgumentException if the provided algorithm is null. + */ + public static Verification require(Algorithm algorithm) { + return null; + } + + /** + * Returns a Json Web Token builder used to create and sign tokens + * + * @return a token builder. + */ + public static JWTCreator.Builder create() { + return null; + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/JWTCreator.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/JWTCreator.java new file mode 100644 index 00000000000..863298425bd --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/JWTCreator.java @@ -0,0 +1,300 @@ +package com.auth0.jwt; + +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTCreationException; + +import java.util.*; + +/** + * The JWTCreator class holds the sign method to generate a complete JWT (with Signature) from a given Header and Payload content. + *

    + * This class is thread-safe. + */ +public final class JWTCreator { + /** + * Initialize a JWTCreator instance. + * + * @return a JWTCreator.Builder instance to configure. + */ + static JWTCreator.Builder init() { + return null; + } + + /** + * The Builder class holds the Claims that defines the JWT to be created. + */ + public static class Builder { + Builder() { + } + + /** + * Add specific Claims to set as the Header. + * If provided map is null then nothing is changed + * If provided map contains a claim with null value then that claim will be removed from the header + * + * @param headerClaims the values to use as Claims in the token's Header. + * @return this same Builder instance. + */ + public Builder withHeader(Map headerClaims) { + return null; + } + + /** + * Add a specific Key Id ("kid") claim to the Header. + * If the {@link Algorithm} used to sign this token was instantiated with a KeyProvider, the 'kid' value will be taken from that provider and this one will be ignored. + * + * @param keyId the Key Id value. + * @return this same Builder instance. + */ + public Builder withKeyId(String keyId) { + return null; + } + + /** + * Add a specific Issuer ("iss") claim to the Payload. + * + * @param issuer the Issuer value. + * @return this same Builder instance. + */ + public Builder withIssuer(String issuer) { + return null; + } + + /** + * Add a specific Subject ("sub") claim to the Payload. + * + * @param subject the Subject value. + * @return this same Builder instance. + */ + public Builder withSubject(String subject) { + return null; + } + + /** + * Add a specific Audience ("aud") claim to the Payload. + * + * @param audience the Audience value. + * @return this same Builder instance. + */ + public Builder withAudience(String... audience) { + return null; + } + + /** + * Add a specific Expires At ("exp") claim to the Payload. + * + * @param expiresAt the Expires At value. + * @return this same Builder instance. + */ + public Builder withExpiresAt(Date expiresAt) { + return null; + } + + /** + * Add a specific Not Before ("nbf") claim to the Payload. + * + * @param notBefore the Not Before value. + * @return this same Builder instance. + */ + public Builder withNotBefore(Date notBefore) { + return null; + } + + /** + * Add a specific Issued At ("iat") claim to the Payload. + * + * @param issuedAt the Issued At value. + * @return this same Builder instance. + */ + public Builder withIssuedAt(Date issuedAt) { + return null; + } + + /** + * Add a specific JWT Id ("jti") claim to the Payload. + * + * @param jwtId the Token Id value. + * @return this same Builder instance. + */ + public Builder withJWTId(String jwtId) { + return null; + } + + /** + * Add a custom Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, Boolean value) throws IllegalArgumentException { + return null; + } + + /** + * Add a custom Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, Integer value) throws IllegalArgumentException { + return null; + } + + /** + * Add a custom Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, Long value) throws IllegalArgumentException { + return null; + } + + /** + * Add a custom Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, Double value) throws IllegalArgumentException { + return null; + } + + /** + * Add a custom Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, String value) throws IllegalArgumentException { + return null; + } + + /** + * Add a custom Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withClaim(String name, Date value) throws IllegalArgumentException { + return null; + } + + /** + * Add a custom Array Claim with the given items. + * + * @param name the Claim's name. + * @param items the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withArrayClaim(String name, String[] items) throws IllegalArgumentException { + return null; + } + + /** + * Add a custom Array Claim with the given items. + * + * @param name the Claim's name. + * @param items the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null. + */ + public Builder withArrayClaim(String name, Integer[] items) throws IllegalArgumentException { + return null; + } + + /** + * Add a custom Array Claim with the given items. + * + * @param name the Claim's name. + * @param items the Claim's value. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null + */ + public Builder withArrayClaim(String name, Long[] items) throws IllegalArgumentException { + return null; + } + + /** + * Add a custom Map Claim with the given items. + *

    + * Accepted nested types are {@linkplain Map} and {@linkplain List} with basic types + * {@linkplain Boolean}, {@linkplain Integer}, {@linkplain Long}, {@linkplain Double}, + * {@linkplain String} and {@linkplain Date}. {@linkplain Map}s cannot contain null keys or values. + * {@linkplain List}s can contain null elements. + * + * @param name the Claim's name. + * @param map the Claim's key-values. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null, or if the map contents does not validate. + */ + public Builder withClaim(String name, Map map) throws IllegalArgumentException { + return null; + } + + /** + * Add a custom List Claim with the given items. + *

    + * Accepted nested types are {@linkplain Map} and {@linkplain List} with basic types + * {@linkplain Boolean}, {@linkplain Integer}, {@linkplain Long}, {@linkplain Double}, + * {@linkplain String} and {@linkplain Date}. {@linkplain Map}s cannot contain null keys or values. + * {@linkplain List}s can contain null elements. + * + * @param name the Claim's name. + * @param list the Claim's list of values. + * @return this same Builder instance. + * @throws IllegalArgumentException if the name is null, or if the list contents does not validate. + */ + + public Builder withClaim(String name, List list) throws IllegalArgumentException { + return null; + } + + /** + * Add specific Claims to set as the Payload. If the provided map is null then + * nothing is changed. + *

    + * Accepted types are {@linkplain Map} and {@linkplain List} with basic types + * {@linkplain Boolean}, {@linkplain Integer}, {@linkplain Long}, {@linkplain Double}, + * {@linkplain String} and {@linkplain Date}. {@linkplain Map}s cannot contain null keys or values. + * {@linkplain List}s can contain null elements. + *

    + * + *

    + * If any of the claims are invalid, none will be added. + *

    + * + * @param payloadClaims the values to use as Claims in the token's payload. + * @throws IllegalArgumentException if any of the claim keys or null, or if the values are not of a supported type. + * @return this same Builder instance. + */ + public Builder withPayload(Map payloadClaims) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new JWT and signs is with the given algorithm + * + * @param algorithm used to sign the JWT + * @return a new JWT token + * @throws IllegalArgumentException if the provided algorithm is null. + * @throws JWTCreationException if the claims could not be converted to a valid JSON or there was a problem with the signing key. + */ + public String sign(Algorithm algorithm) throws IllegalArgumentException, JWTCreationException { + return null; + } + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/algorithms/Algorithm.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/algorithms/Algorithm.java new file mode 100644 index 00000000000..662043eaab9 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/algorithms/Algorithm.java @@ -0,0 +1,397 @@ +package com.auth0.jwt.algorithms; + +import com.auth0.jwt.exceptions.SignatureGenerationException; +import com.auth0.jwt.exceptions.SignatureVerificationException; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.auth0.jwt.interfaces.ECDSAKeyProvider; +import com.auth0.jwt.interfaces.RSAKeyProvider; + +import java.security.interfaces.*; + +/** + * The Algorithm class represents an algorithm to be used in the Signing or Verification process of a Token. + *

    + * This class and its subclasses are thread-safe. + */ +public abstract class Algorithm { + + /** + * Creates a new Algorithm instance using SHA256withRSA. Tokens specify this as "RS256". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid RSA256 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm RSA256(RSAKeyProvider keyProvider) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA256withRSA. Tokens specify this as "RS256". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid RSA256 Algorithm. + * @throws IllegalArgumentException if both provided Keys are null. + */ + public static Algorithm RSA256(RSAPublicKey publicKey, RSAPrivateKey privateKey) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA256withRSA. Tokens specify this as "RS256". + * + * @param key the key to use in the verify or signing instance. + * @return a valid RSA256 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + * @deprecated use {@link #RSA256(RSAPublicKey, RSAPrivateKey)} or {@link #RSA256(RSAKeyProvider)} + */ + @Deprecated + public static Algorithm RSA256(RSAKey key) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA384withRSA. Tokens specify this as "RS384". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid RSA384 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + */ + public static Algorithm RSA384(RSAKeyProvider keyProvider) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA384withRSA. Tokens specify this as "RS384". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid RSA384 Algorithm. + * @throws IllegalArgumentException if both provided Keys are null. + */ + public static Algorithm RSA384(RSAPublicKey publicKey, RSAPrivateKey privateKey) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA384withRSA. Tokens specify this as "RS384". + * + * @param key the key to use in the verify or signing instance. + * @return a valid RSA384 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + * @deprecated use {@link #RSA384(RSAPublicKey, RSAPrivateKey)} or {@link #RSA384(RSAKeyProvider)} + */ + @Deprecated + public static Algorithm RSA384(RSAKey key) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA512withRSA. Tokens specify this as "RS512". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid RSA512 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + */ + public static Algorithm RSA512(RSAKeyProvider keyProvider) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA512withRSA. Tokens specify this as "RS512". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid RSA512 Algorithm. + * @throws IllegalArgumentException if both provided Keys are null. + */ + public static Algorithm RSA512(RSAPublicKey publicKey, RSAPrivateKey privateKey) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA512withRSA. Tokens specify this as "RS512". + * + * @param key the key to use in the verify or signing instance. + * @return a valid RSA512 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + * @deprecated use {@link #RSA512(RSAPublicKey, RSAPrivateKey)} or {@link #RSA512(RSAKeyProvider)} + */ + @Deprecated + public static Algorithm RSA512(RSAKey key) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using HmacSHA256. Tokens specify this as "HS256". + * + * @param secret the secret to use in the verify or signing instance. + * @return a valid HMAC256 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC256(String secret) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using HmacSHA384. Tokens specify this as "HS384". + * + * @param secret the secret to use in the verify or signing instance. + * @return a valid HMAC384 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC384(String secret) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using HmacSHA512. Tokens specify this as "HS512". + * + * @param secret the secret to use in the verify or signing instance. + * @return a valid HMAC512 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC512(String secret) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using HmacSHA256. Tokens specify this as "HS256". + * + * @param secret the secret bytes to use in the verify or signing instance. + * @return a valid HMAC256 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC256(byte[] secret) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA256withECDSA. Tokens specify this as "ES256K". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid ECDSA256 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + * @deprecated The SECP-256K1 Curve algorithm has been disabled beginning in Java 15. + * Use of this method in those unsupported Java versions will throw a {@link java.security.SignatureException}. + * This method will be removed in the next major version. See for additional information + */ + @Deprecated + public static Algorithm ECDSA256K(ECDSAKeyProvider keyProvider) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA256withECDSA. Tokens specify this as "ES256K". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid ECDSA256 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + * @deprecated The SECP-256K1 Curve algorithm has been disabled beginning in Java 15. + * Use of this method in those unsupported Java versions will throw a {@link java.security.SignatureException}. + * This method will be removed in the next major version. See for additional information + */ + @Deprecated + public static Algorithm ECDSA256K(ECPublicKey publicKey, ECPrivateKey privateKey) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using HmacSHA384. Tokens specify this as "HS384". + * + * @param secret the secret bytes to use in the verify or signing instance. + * @return a valid HMAC384 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC384(byte[] secret) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using HmacSHA512. Tokens specify this as "HS512". + * + * @param secret the secret bytes to use in the verify or signing instance. + * @return a valid HMAC512 Algorithm. + * @throws IllegalArgumentException if the provided Secret is null. + */ + public static Algorithm HMAC512(byte[] secret) throws IllegalArgumentException { + return null; + } + + + + /** + * Creates a new Algorithm instance using SHA256withECDSA. Tokens specify this as "ES256". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid ECDSA256 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + */ + public static Algorithm ECDSA256(ECDSAKeyProvider keyProvider) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA256withECDSA. Tokens specify this as "ES256". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid ECDSA256 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm ECDSA256(ECPublicKey publicKey, ECPrivateKey privateKey) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA256withECDSA. Tokens specify this as "ES256". + * + * @param key the key to use in the verify or signing instance. + * @return a valid ECDSA256 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + * @deprecated use {@link #ECDSA256(ECPublicKey, ECPrivateKey)} or {@link #ECDSA256(ECDSAKeyProvider)} + */ + @Deprecated + public static Algorithm ECDSA256(ECKey key) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA384withECDSA. Tokens specify this as "ES384". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid ECDSA384 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + */ + public static Algorithm ECDSA384(ECDSAKeyProvider keyProvider) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA384withECDSA. Tokens specify this as "ES384". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid ECDSA384 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm ECDSA384(ECPublicKey publicKey, ECPrivateKey privateKey) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA384withECDSA. Tokens specify this as "ES384". + * + * @param key the key to use in the verify or signing instance. + * @return a valid ECDSA384 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + * @deprecated use {@link #ECDSA384(ECPublicKey, ECPrivateKey)} or {@link #ECDSA384(ECDSAKeyProvider)} + */ + @Deprecated + public static Algorithm ECDSA384(ECKey key) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA512withECDSA. Tokens specify this as "ES512". + * + * @param keyProvider the provider of the Public Key and Private Key for the verify and signing instance. + * @return a valid ECDSA512 Algorithm. + * @throws IllegalArgumentException if the Key Provider is null. + */ + public static Algorithm ECDSA512(ECDSAKeyProvider keyProvider) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA512withECDSA. Tokens specify this as "ES512". + * + * @param publicKey the key to use in the verify instance. + * @param privateKey the key to use in the signing instance. + * @return a valid ECDSA512 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + */ + public static Algorithm ECDSA512(ECPublicKey publicKey, ECPrivateKey privateKey) throws IllegalArgumentException { + return null; + } + + /** + * Creates a new Algorithm instance using SHA512withECDSA. Tokens specify this as "ES512". + * + * @param key the key to use in the verify or signing instance. + * @return a valid ECDSA512 Algorithm. + * @throws IllegalArgumentException if the provided Key is null. + * @deprecated use {@link #ECDSA512(ECPublicKey, ECPrivateKey)} or {@link #ECDSA512(ECDSAKeyProvider)} + */ + @Deprecated + public static Algorithm ECDSA512(ECKey key) throws IllegalArgumentException { + return null; + } + + + public static Algorithm none() { + return null; + } + + /** + * Getter for the Id of the Private Key used to sign the tokens. This is usually specified as the `kid` claim in the Header. + * + * @return the Key Id that identifies the Signing Key or null if it's not specified. + */ + public String getSigningKeyId() { + return null; + } + + /** + * Getter for the name of this Algorithm, as defined in the JWT Standard. i.e. "HS256" + * + * @return the algorithm name. + */ + public String getName() { + return null; + } + + /** + * Getter for the description of this Algorithm, required when instantiating a Mac or Signature object. i.e. "HmacSHA256" + * + * @return the algorithm description. + */ + String getDescription() { + return null; + } + + /** + * Verify the given token using this Algorithm instance. + * + * @param jwt the already decoded JWT that it's going to be verified. + * @throws SignatureVerificationException if the Token's Signature is invalid, meaning that it doesn't match the signatureBytes, or if the Key is invalid. + */ + public abstract void verify(DecodedJWT jwt) throws SignatureVerificationException; + + /** + * Sign the given content using this Algorithm instance. + * + * @param headerBytes an array of bytes representing the base64 encoded header content to be verified against the signature. + * @param payloadBytes an array of bytes representing the base64 encoded payload content to be verified against the signature. + * @return the signature in a base64 encoded array of bytes + * @throws SignatureGenerationException if the Key is invalid. + */ + public byte[] sign(byte[] headerBytes, byte[] payloadBytes) throws SignatureGenerationException { + return null; + } + + /** + * Sign the given content using this Algorithm instance. + * + * @param contentBytes an array of bytes representing the base64 encoded content to be verified against the signature. + * @return the signature in a base64 encoded array of bytes + * @throws SignatureGenerationException if the Key is invalid. + * @deprecated Please use the {@linkplain #sign(byte[], byte[])} method instead. + */ + + @Deprecated + public abstract byte[] sign(byte[] contentBytes) throws SignatureGenerationException; + +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTCreationException.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTCreationException.java new file mode 100644 index 00000000000..84644b95195 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTCreationException.java @@ -0,0 +1,6 @@ +package com.auth0.jwt.exceptions; + +public class JWTCreationException extends RuntimeException { + public JWTCreationException(String message, Throwable cause) { + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTDecodeException.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTDecodeException.java new file mode 100644 index 00000000000..1fe76bb12e5 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTDecodeException.java @@ -0,0 +1,9 @@ +package com.auth0.jwt.exceptions; + +public class JWTDecodeException extends RuntimeException { + public JWTDecodeException(String message) { + } + + public JWTDecodeException(String message, Throwable cause) { + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTVerificationException.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTVerificationException.java new file mode 100644 index 00000000000..6cb0536aa47 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/JWTVerificationException.java @@ -0,0 +1,9 @@ +package com.auth0.jwt.exceptions; + +public class JWTVerificationException extends RuntimeException { + public JWTVerificationException(String message) { + } + + public JWTVerificationException(String message, Throwable cause) { + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/SignatureGenerationException.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/SignatureGenerationException.java new file mode 100644 index 00000000000..415f8fa3189 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/SignatureGenerationException.java @@ -0,0 +1,8 @@ +package com.auth0.jwt.exceptions; + +import com.auth0.jwt.algorithms.Algorithm; + +public class SignatureGenerationException extends RuntimeException { + public SignatureGenerationException(Algorithm algorithm, Throwable cause) { + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/SignatureVerificationException.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/SignatureVerificationException.java new file mode 100644 index 00000000000..b317bd8b3ee --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/exceptions/SignatureVerificationException.java @@ -0,0 +1,13 @@ + + +package com.auth0.jwt.exceptions; + +import com.auth0.jwt.algorithms.Algorithm; + +public class SignatureVerificationException extends RuntimeException { + public SignatureVerificationException(Algorithm algorithm) { + } + + public SignatureVerificationException(Algorithm algorithm, Throwable cause) { + } +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/DecodedJWT.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/DecodedJWT.java new file mode 100644 index 00000000000..ba0fb21963d --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/DecodedJWT.java @@ -0,0 +1,37 @@ +package com.auth0.jwt.interfaces; + +/** + * Class that represents a Json Web Token that was decoded from it's string representation. + */ +public interface DecodedJWT { + /** + * Getter for the String Token used to create this JWT instance. + * + * @return the String Token. + */ + String getToken(); + + /** + * Getter for the Header contained in the JWT as a Base64 encoded String. + * This represents the first part of the token. + * + * @return the Header of the JWT. + */ + String getHeader(); + + /** + * Getter for the Payload contained in the JWT as a Base64 encoded String. + * This represents the second part of the token. + * + * @return the Payload of the JWT. + */ + String getPayload(); + + /** + * Getter for the Signature contained in the JWT as a Base64 encoded String. + * This represents the third part of the token. + * + * @return the Signature of the JWT. + */ + String getSignature(); +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/ECDSAKeyProvider.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/ECDSAKeyProvider.java new file mode 100644 index 00000000000..81f3382b13a --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/ECDSAKeyProvider.java @@ -0,0 +1,10 @@ +package com.auth0.jwt.interfaces; + +import java.security.interfaces.ECPrivateKey; +import java.security.interfaces.ECPublicKey; + +/** + * Elliptic Curve (EC) Public/Private Key provider. + */ +public interface ECDSAKeyProvider extends KeyProvider { +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/JWTVerifier.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/JWTVerifier.java new file mode 100644 index 00000000000..76a889fbe70 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/JWTVerifier.java @@ -0,0 +1,25 @@ +package com.auth0.jwt.interfaces; + +import com.auth0.jwt.exceptions.JWTVerificationException; + + +public interface JWTVerifier { + + /** + * Performs the verification against the given Token + * + * @param token to verify. + * @return a verified and decoded JWT. + * @throws JWTVerificationException if any of the verification steps fail + */ + DecodedJWT verify(String token) throws JWTVerificationException; + + /** + * Performs the verification against the given decoded JWT + * + * @param jwt to verify. + * @return a verified and decoded JWT. + * @throws JWTVerificationException if any of the verification steps fail + */ + DecodedJWT verify(DecodedJWT jwt) throws JWTVerificationException; +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/KeyProvider.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/KeyProvider.java new file mode 100644 index 00000000000..57645efc1e1 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/KeyProvider.java @@ -0,0 +1,35 @@ +package com.auth0.jwt.interfaces; + +import java.security.PrivateKey; +import java.security.PublicKey; + +/** + * Generic Public/Private Key provider. + * + * @param the class that represents the Public Key + * @param the class that represents the Private Key + */ +interface KeyProvider { + + /** + * Getter for the Public Key instance with the given Id. Used to verify the signature on the JWT verification stage. + * + * @param keyId the Key Id specified in the Token's Header or null if none is available. Provides a hint on which Public Key to use to verify the token's signature. + * @return the Public Key instance + */ + U getPublicKeyById(String keyId); + + /** + * Getter for the Private Key instance. Used to sign the content on the JWT signing stage. + * + * @return the Private Key instance + */ + R getPrivateKey(); + + /** + * Getter for the Id of the Private Key used to sign the tokens. This represents the `kid` claim and will be placed in the Header. + * + * @return the Key Id that identifies the Private Key or null if it's not specified. + */ + String getPrivateKeyId(); +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/RSAKeyProvider.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/RSAKeyProvider.java new file mode 100644 index 00000000000..215744c6d68 --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/RSAKeyProvider.java @@ -0,0 +1,10 @@ +package com.auth0.jwt.interfaces; + +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; + +/** + * RSA Public/Private Key provider. + */ +public interface RSAKeyProvider extends KeyProvider { +} \ No newline at end of file diff --git a/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/Verification.java b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/Verification.java new file mode 100644 index 00000000000..8567d24498a --- /dev/null +++ b/java/ql/test/stubs/auth0-jwt-2.3/com/auth0/jwt/interfaces/Verification.java @@ -0,0 +1,189 @@ +package com.auth0.jwt.interfaces; + +import java.util.Date; + +/** + * Holds the Claims and claim-based configurations required for a JWT to be considered valid. + */ +public interface Verification { + /** + * Require a specific Issuer ("iss") claim. + * + * @param issuer the required Issuer value. If multiple values are given, the claim must at least match one of them + * @return this same Verification instance. + */ + Verification withIssuer(String... issuer); + + /** + * Require a specific Subject ("sub") claim. + * + * @param subject the required Subject value + * @return this same Verification instance. + */ + Verification withSubject(String subject); + + /** + * Require a specific Audience ("aud") claim. If multiple audiences are specified, they must all be present + * in the "aud" claim. + * + * If this is used in conjunction with {@link #withAnyOfAudience(String...)}, whichever one is configured last will + * determine the audience validation behavior. + * + * @param audience the required Audience value + * @return this same Verification instance. + */ + Verification withAudience(String... audience); + + /** + * Set a specific leeway window in seconds in which the Expires At ("exp") Claim will still be valid. + * Expiration Date is always verified when the value is present. This method overrides the value set with acceptLeeway + * + * @param leeway the window in seconds in which the Expires At Claim will still be valid. + * @return this same Verification instance. + * @throws IllegalArgumentException if leeway is negative. + */ + Verification acceptExpiresAt(long leeway) throws IllegalArgumentException; + + /** + * Set a specific leeway window in seconds in which the Not Before ("nbf") Claim will still be valid. + * Not Before Date is always verified when the value is present. This method overrides the value set with acceptLeeway + * + * @param leeway the window in seconds in which the Not Before Claim will still be valid. + * @return this same Verification instance. + * @throws IllegalArgumentException if leeway is negative. + */ + Verification acceptNotBefore(long leeway) throws IllegalArgumentException; + + /** + * Set a specific leeway window in seconds in which the Issued At ("iat") Claim will still be valid. + * This method overrides the value set with {@link #acceptLeeway(long)}. + * By default, the Issued At claim is always verified when the value is present, unless disabled with {@link #ignoreIssuedAt()}. + * If Issued At verification has been disabled, no verification of the Issued At claim will be performed, and this method has no effect. + * + * @param leeway the window in seconds in which the Issued At Claim will still be valid. + * @return this same Verification instance. + * @throws IllegalArgumentException if leeway is negative. + */ + Verification acceptIssuedAt(long leeway) throws IllegalArgumentException; + + /** + * Require a specific JWT Id ("jti") claim. + * + * @param jwtId the required Id value + * @return this same Verification instance. + */ + Verification withJWTId(String jwtId); + + /** + * Require a claim to be present, with any value. + * @param name the Claim's name. + * @return this same Verification instance + * @throws IllegalArgumentException if the name is null. + */ + Verification withClaimPresence(String name) throws IllegalArgumentException; + + /** + * Require a specific Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is null. + */ + Verification withClaim(String name, Boolean value) throws IllegalArgumentException; + + /** + * Require a specific Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is null. + */ + Verification withClaim(String name, Integer value) throws IllegalArgumentException; + + /** + * Require a specific Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is null. + */ + Verification withClaim(String name, Long value) throws IllegalArgumentException; + + /** + * Require a specific Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is null. + */ + Verification withClaim(String name, Double value) throws IllegalArgumentException; + + /** + * Require a specific Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is null. + */ + Verification withClaim(String name, String value) throws IllegalArgumentException; + + /** + * Require a specific Claim value. + * + * @param name the Claim's name. + * @param value the Claim's value. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is null. + */ + Verification withClaim(String name, Date value) throws IllegalArgumentException; + + /** + * Require a specific Array Claim to contain at least the given items. + * + * @param name the Claim's name. + * @param items the items the Claim must contain. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is null. + */ + Verification withArrayClaim(String name, String... items) throws IllegalArgumentException; + + /** + * Require a specific Array Claim to contain at least the given items. + * + * @param name the Claim's name. + * @param items the items the Claim must contain. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is null. + */ + Verification withArrayClaim(String name, Integer... items) throws IllegalArgumentException; + + /** + * Require a specific Array Claim to contain at least the given items. + * + * @param name the Claim's name. + * @param items the items the Claim must contain. + * @return this same Verification instance. + * @throws IllegalArgumentException if the name is null. + */ + + Verification withArrayClaim(String name, Long ... items) throws IllegalArgumentException; + + /** + * Skip the Issued At ("iat") date verification. By default, the verification is performed. + * + * @return this same Verification instance. + */ + Verification ignoreIssuedAt(); + + /** + * Creates a new and reusable instance of the JWTVerifier with the configuration already provided. + * + * @return a new JWTVerifier instance. + */ + JWTVerifier build(); +} \ No newline at end of file From bf6663ab12d4f607602c5826bcb1075db9c8156d Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 5 May 2022 09:16:27 +0200 Subject: [PATCH 0358/1618] run the autoformatter --- .../security/dataflow/XssThroughDomCustomizations.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll index d396733fd74..b869b028902 100644 --- a/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll +++ b/javascript/ql/lib/semmle/javascript/security/dataflow/XssThroughDomCustomizations.qll @@ -218,7 +218,7 @@ module XssThroughDom { } /** - * Gets a reference to a value obtained by calling `window.getSelection()`. + * Gets a reference to a value obtained by calling `window.getSelection()`. * https://developer.mozilla.org/en-US/docs/Web/API/Selection */ DataFlow::SourceNode getSelectionCall(DataFlow::TypeTracker t) { @@ -233,7 +233,7 @@ module XssThroughDom { or exists(DataFlow::TypeTracker t2 | result = getSelectionCall(t2).track(t2, t)) } - + /** * A source for text from the DOM from calling `toString()` on a `Selection` object. * The `toString()` method returns the currently selected text in the DOM. From c2d3aac3495b5f352b0949ceff975f22af66b2e9 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 May 2022 09:48:07 +0200 Subject: [PATCH 0359/1618] Swift: fix no functools.cache in python 3.8 --- swift/codegen/cppgen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swift/codegen/cppgen.py b/swift/codegen/cppgen.py index 6eeec931fae..bbd65368e6f 100644 --- a/swift/codegen/cppgen.py +++ b/swift/codegen/cppgen.py @@ -36,7 +36,7 @@ class Processor: def __init__(self, data: Dict[str, schema.Class]): self._classmap = data - @functools.cache + @functools.lru_cache(maxsize=None) def _get_class(self, name: str) -> cpp.Class: cls = self._classmap[name] trap_name = None From 1f00ba812afdf756f26516e8f3cc5a650e6fa598 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 5 May 2022 10:22:52 +0200 Subject: [PATCH 0360/1618] move YAMLMappingLikeNode to the standard library --- .../ql/lib/semmle/javascript/Actions.qll | 72 +------------------ javascript/ql/lib/semmle/javascript/YAML.qll | 71 ++++++++++++++++++ .../Security/CWE-094/UntrustedCheckout.ql | 4 +- 3 files changed, 74 insertions(+), 73 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Actions.qll b/javascript/ql/lib/semmle/javascript/Actions.qll index c74c2576483..297f70ad860 100644 --- a/javascript/ql/lib/semmle/javascript/Actions.qll +++ b/javascript/ql/lib/semmle/javascript/Actions.qll @@ -20,76 +20,6 @@ module Actions { } } - /** - * A YAML node that may contain sub-nodes. - * - * Actions are quite flexible in parsing YAML. - * - * For example: - * ``` - * on: pull_request - * ``` - * and - * ``` - * on: [pull_request] - * ``` - * and - * ``` - * on: - * pull_request: - * ``` - * - * are equivalent. - */ - class MappingOrSequenceOrScalar extends YAMLNode { - MappingOrSequenceOrScalar() { - this instanceof YAMLMapping - or - this instanceof YAMLSequence - or - this instanceof YAMLScalar - } - - /** Gets sub-name identified by `name`. */ - YAMLNode getNode(string name) { - exists(YAMLMapping mapping | - mapping = this and - result = mapping.lookup(name) - ) - or - exists(YAMLSequence sequence, YAMLNode node | - sequence = this and - sequence.getAChildNode() = node and - node.eval().toString() = name and - result = node - ) - or - exists(YAMLScalar scalar | - scalar = this and - scalar.getValue() = name and - result = scalar - ) - } - - /** Gets the number of elements in this mapping or sequence. */ - int getElementCount() { - exists(YAMLMapping mapping | - mapping = this and - result = mapping.getNumChild() / 2 - ) - or - exists(YAMLSequence sequence | - sequence = this and - result = sequence.getNumChild() - ) - or - exists(YAMLScalar scalar | - scalar = this and - result = 1 - ) - } - } - /** * An Actions workflow. This is a mapping at the top level of an Actions YAML workflow file. * See https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions. @@ -112,7 +42,7 @@ module Actions { * An Actions On trigger within a workflow. * See https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#on. */ - class On extends YAMLNode, MappingOrSequenceOrScalar { + class On extends YAMLNode, YAMLMappingLikeNode { Workflow workflow; On() { workflow.lookup("on") = this } diff --git a/javascript/ql/lib/semmle/javascript/YAML.qll b/javascript/ql/lib/semmle/javascript/YAML.qll index ac1ac8380e4..49e0d28ae28 100644 --- a/javascript/ql/lib/semmle/javascript/YAML.qll +++ b/javascript/ql/lib/semmle/javascript/YAML.qll @@ -441,3 +441,74 @@ class YAMLParseError extends @yaml_error, Error { override string toString() { result = this.getMessage() } } + +/** + * A YAML node that may contain sub-nodes that can be identified by a name. + * I.e. a mapping, sequence, or scalar. + * + * Is used in e.g. GithHub Actions, which is quite flexible in parsing YAML. + * + * For example: + * ``` + * on: pull_request + * ``` + * and + * ``` + * on: [pull_request] + * ``` + * and + * ``` + * on: + * pull_request: + * ``` + * + * are equivalent. + */ +class YAMLMappingLikeNode extends YAMLNode { + YAMLMappingLikeNode() { + this instanceof YAMLMapping + or + this instanceof YAMLSequence + or + this instanceof YAMLScalar + } + + /** Gets sub-name identified by `name`. */ + YAMLNode getNode(string name) { + exists(YAMLMapping mapping | + mapping = this and + result = mapping.lookup(name) + ) + or + exists(YAMLSequence sequence, YAMLNode node | + sequence = this and + sequence.getAChildNode() = node and + node.eval().toString() = name and + result = node + ) + or + exists(YAMLScalar scalar | + scalar = this and + scalar.getValue() = name and + result = scalar + ) + } + + /** Gets the number of elements in this mapping or sequence. */ + int getElementCount() { + exists(YAMLMapping mapping | + mapping = this and + result = mapping.getNumChild() / 2 + ) + or + exists(YAMLSequence sequence | + sequence = this and + result = sequence.getNumChild() + ) + or + exists(YAMLScalar scalar | + scalar = this and + result = 1 + ) + } +} diff --git a/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql b/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql index cf19d07015d..0b91c83b502 100644 --- a/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql +++ b/javascript/ql/src/experimental/Security/CWE-094/UntrustedCheckout.ql @@ -78,7 +78,7 @@ class ProbableJob extends Actions::Job { /** * An action step that doesn't contain `actor` or `label` check in `if:` or */ -class ProbablePullRequestTarget extends Actions::On, Actions::MappingOrSequenceOrScalar { +class ProbablePullRequestTarget extends Actions::On, YAMLMappingLikeNode { ProbablePullRequestTarget() { exists(YAMLNode prtNode | // The `on:` is triggered on `pull_request_target` @@ -88,7 +88,7 @@ class ProbablePullRequestTarget extends Actions::On, Actions::MappingOrSequenceO not exists(prtNode.getAChild()) or // or has the filter, that is something else than just [labeled] - exists(Actions::MappingOrSequenceOrScalar prt, Actions::MappingOrSequenceOrScalar types | + exists(YAMLMappingLikeNode prt, YAMLMappingLikeNode types | types = prt.getNode("types") and prtNode = prt and ( From 9ea0f71581a3ebcc610018bc85fb8547d4bfb4c1 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 5 May 2022 10:28:00 +0200 Subject: [PATCH 0361/1618] convert TODO to a note in Actions::Uses --- javascript/ql/lib/semmle/javascript/Actions.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/Actions.qll b/javascript/ql/lib/semmle/javascript/Actions.qll index 297f70ad860..cb50d410ac3 100644 --- a/javascript/ql/lib/semmle/javascript/Actions.qll +++ b/javascript/ql/lib/semmle/javascript/Actions.qll @@ -152,7 +152,8 @@ module Actions { * ``` * uses: actions/checkout@v2 * ``` - * TODO: Does not currently handle local repository references, e.g. `.github/actions/action-name`. + * + * Does not handle local repository references, e.g. `.github/actions/action-name`. */ class Uses extends YAMLNode, YAMLScalar { Step step; From dc1dc2a33ad209aeb359eecb4d930db2ac83ce8e Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 5 May 2022 10:40:08 +0200 Subject: [PATCH 0362/1618] parse the uses field in the getters instead of the charpred --- .../ql/lib/semmle/javascript/Actions.qll | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Actions.qll b/javascript/ql/lib/semmle/javascript/Actions.qll index cb50d410ac3..9d5ac0c7e58 100644 --- a/javascript/ql/lib/semmle/javascript/Actions.qll +++ b/javascript/ql/lib/semmle/javascript/Actions.qll @@ -144,6 +144,15 @@ module Actions { Step getStep() { result = step } } + /** + * Gets a regular expression that parses an `owner/repo@version` reference within a `uses` field in an Actions job step. + * The capture groups are: + * 1: The owner of the repository where the Action comes from, e.g. `actions` in `actions/checkout@v2` + * 2: The name of the repository where the Action comes from, e.g. `checkout` in `actions/checkout@v2`. + * 3: The version reference used when checking out the Action, e.g. `v2` in `actions/checkout@v2`. + */ + private string usesParser() { result = "([^/]+)/([^/@]+)@(.+)" } + /** * A `uses` field within an Actions job step, which references an action as a reusable unit of code. * See https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsuses. @@ -157,31 +166,21 @@ module Actions { */ class Uses extends YAMLNode, YAMLScalar { Step step; - /** The owner of the repository where the Action comes from, e.g. `actions` in `actions/checkout@v2`. */ - string repositoryOwner; - /** The name of the repository where the Action comes from, e.g. `checkout` in `actions/checkout@v2`. */ - string repositoryName; - /** The version reference used when checking out the Action, e.g. `v2` in `actions/checkout@v2`. */ - string version; - Uses() { - step.lookup("uses") = this and - // Simple regular expression to split up an Action reference `owner/repo@version` into its components. - exists(string regexp | regexp = "([^/]+)/([^/@]+)@(.+)" | - repositoryOwner = this.getValue().regexpCapture(regexp, 1) and - repositoryName = this.getValue().regexpCapture(regexp, 2) and - version = this.getValue().regexpCapture(regexp, 3) - ) - } + Uses() { step.lookup("uses") = this } /** Gets the step this field belongs to. */ Step getStep() { result = step } /** Gets the owner and name of the repository where the Action comes from, e.g. `actions/checkout` in `actions/checkout@v2`. */ - string getGitHubRepository() { result = repositoryOwner + "/" + repositoryName } + string getGitHubRepository() { + result = + this.getValue().regexpCapture(usesParser(), 1) + "/" + + this.getValue().regexpCapture(usesParser(), 2) + } /** Gets the version reference used when checking out the Action, e.g. `v2` in `actions/checkout@v2`. */ - string getVersion() { result = version } + string getVersion() { result = this.getValue().regexpCapture(usesParser(), 3) } } /** From 13f142f1434707b6573b61f10f9df476785e1ce7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 5 May 2022 10:43:23 +0200 Subject: [PATCH 0363/1618] C#: Convert xml injection query to a path problem. --- csharp/ql/src/Security Features/CWE-091/XMLInjection.ql | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql b/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql index 1ad4fad9e41..02aa158a120 100644 --- a/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql +++ b/csharp/ql/src/Security Features/CWE-091/XMLInjection.ql @@ -2,7 +2,7 @@ * @name XML injection * @description Building an XML document from user-controlled sources is vulnerable to insertion of * malicious code by the user. - * @kind problem + * @kind path-problem * @id cs/xml-injection * @problem.severity error * @security-severity 8.8 @@ -12,6 +12,7 @@ */ import csharp +import DataFlow::PathGraph import semmle.code.csharp.security.dataflow.flowsources.Remote import semmle.code.csharp.frameworks.system.Xml @@ -45,6 +46,6 @@ class TaintTrackingConfiguration extends TaintTracking::Configuration { } } -from TaintTrackingConfiguration c, DataFlow::Node source, DataFlow::Node sink -where c.hasFlow(source, sink) -select sink, "$@ flows to here and is inserted as XML.", source, "User-provided value" +from TaintTrackingConfiguration c, DataFlow::PathNode source, DataFlow::PathNode sink +where c.hasFlowPath(source, sink) +select sink, source, sink, "$@ flows to here and is inserted as XML.", source, "User-provided value" From c0152a46bc91e43e2cb20c64cf7527678f39a075 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 5 May 2022 11:02:47 +0200 Subject: [PATCH 0364/1618] rename getAReferencedExpression to getASimpleReferenceExpression and add examples of what it can parse --- javascript/ql/lib/semmle/javascript/Actions.qll | 6 +++--- javascript/ql/src/Security/CWE-094/ExpressionInjection.ql | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/Actions.qll b/javascript/ql/lib/semmle/javascript/Actions.qll index 9d5ac0c7e58..f5b2c39b064 100644 --- a/javascript/ql/lib/semmle/javascript/Actions.qll +++ b/javascript/ql/lib/semmle/javascript/Actions.qll @@ -237,12 +237,12 @@ module Actions { /** * Holds if `${{ e }}` is a GitHub Actions expression evaluated within this `run` command. * See https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions. + * Only finds simple expressions like `${{ github.event.comment.body }}`, where the expression contains only alphanumeric characters, underscores, dots, or dashes. + * Does not identify more complicated expressions like `${{ fromJSON(env.time) }}`, or ${{ format('{{Hello {0}!}}', github.event.head_commit.author.name) }} */ - string getAReferencedExpression() { + string getASimpleReferenceExpression() { // We use `regexpFind` to obtain *all* matches of `${{...}}`, // not just the last (greedy match) or first (reluctant match). - // TODO: This only handles expression strings that refer to contexts. - // It does not handle operators within the expression. result = this.getValue() .regexpFind("\\$\\{\\{\\s*[A-Za-z0-9_\\.\\-]+\\s*\\}\\}", _, _) diff --git a/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql b/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql index 80af8dae82a..399c9e4c9bd 100644 --- a/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql +++ b/javascript/ql/src/Security/CWE-094/ExpressionInjection.ql @@ -80,7 +80,7 @@ private predicate isExternalUserControlledDiscussion(string context) { from Actions::Run run, string context, Actions::On on where - run.getAReferencedExpression() = context and + run.getASimpleReferenceExpression() = context and run.getStep().getJob().getWorkflow().getOn() = on and ( exists(on.getNode("issues")) and From 9798d8ba26eede8a4b4de2f0a6331aa66a6b6e5b Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 May 2022 11:50:12 +0200 Subject: [PATCH 0365/1618] Swift: add `?*` modifier to schema specification This indicates a list of optional entries. This is different than simply repeatind entries because of the indexing. --- swift/codegen/dbschemegen.py | 20 ++++++++-------- swift/codegen/lib/cpp.py | 2 +- swift/codegen/lib/ql.py | 5 ++++ swift/codegen/lib/schema.py | 11 ++++++++- swift/codegen/qlgen.py | 16 +++++++------ swift/codegen/schema.yml | 2 +- swift/codegen/templates/cpp_classes.mustache | 11 ++++++++- swift/codegen/templates/ql_class.mustache | 24 +++++++++---------- swift/codegen/test/test_cpp.py | 1 + swift/codegen/test/test_cppgen.py | 1 + swift/codegen/test/test_dbschemegen.py | 19 +++++++++++---- swift/codegen/test/test_ql.py | 10 ++++++++ swift/codegen/test/test_qlgen.py | 17 ++++++++++++- swift/codegen/test/test_schema.py | 2 ++ .../generated/decl/PatternBindingDecl.qll | 2 -- 15 files changed, 103 insertions(+), 40 deletions(-) diff --git a/swift/codegen/dbschemegen.py b/swift/codegen/dbschemegen.py index 1b68262ad22..c99cec1ea29 100755 --- a/swift/codegen/dbschemegen.py +++ b/swift/codegen/dbschemegen.py @@ -38,16 +38,7 @@ def cls_to_dbscheme(cls: schema.Class): ) # use property-specific tables for 1-to-many and 1-to-at-most-1 properties for f in cls.properties: - if f.is_optional: - yield Table( - keyset=KeySet(["id"]), - name=inflection.tableize(f"{cls.name}_{f.name}"), - columns=[ - Column("id", type=dbtype(cls.name)), - Column(f.name, dbtype(f.type)), - ], - ) - elif f.is_repeated: + if f.is_repeated: yield Table( keyset=KeySet(["id", "index"]), name=inflection.tableize(f"{cls.name}_{f.name}"), @@ -57,6 +48,15 @@ def cls_to_dbscheme(cls: schema.Class): Column(inflection.singularize(f.name), dbtype(f.type)), ] ) + elif f.is_optional: + yield Table( + keyset=KeySet(["id"]), + name=inflection.tableize(f"{cls.name}_{f.name}"), + columns=[ + Column("id", type=dbtype(cls.name)), + Column(f.name, dbtype(f.type)), + ], + ) def get_declarations(data: schema.Schema): diff --git a/swift/codegen/lib/cpp.py b/swift/codegen/lib/cpp.py index 89069a58239..9395121ff5a 100644 --- a/swift/codegen/lib/cpp.py +++ b/swift/codegen/lib/cpp.py @@ -41,7 +41,7 @@ class Field: def __post_init__(self): if self.is_optional: self.type = f"std::optional<{self.type}>" - elif self.is_repeated: + if self.is_repeated: self.type = f"std::vector<{self.type}>" @property diff --git a/swift/codegen/lib/ql.py b/swift/codegen/lib/ql.py index 9fa4e02a42e..0b80757c96f 100644 --- a/swift/codegen/lib/ql.py +++ b/swift/codegen/lib/ql.py @@ -22,6 +22,7 @@ class Property: params: List[Param] = field(default_factory=list) first: bool = False local_var: str = "x" + is_optional: bool = False def __post_init__(self): if self.params: @@ -43,6 +44,10 @@ class Property: def type_is_class(self): return self.type[0].isupper() + @property + def is_repeated(self): + return bool(self.plural) + @dataclass class Class: diff --git a/swift/codegen/lib/schema.py b/swift/codegen/lib/schema.py index 5871c90ed3b..06ceb4b63bb 100644 --- a/swift/codegen/lib/schema.py +++ b/swift/codegen/lib/schema.py @@ -35,6 +35,12 @@ class RepeatedProperty(Property): is_repeated: ClassVar = True +@dataclass +class RepeatedOptionalProperty(Property): + is_optional: ClassVar = True + is_repeated: ClassVar = True + + @dataclass class Class: name: str @@ -51,7 +57,10 @@ class Schema: def _parse_property(name, type): - if type.endswith("*"): + if type.endswith("?*"): + cls = RepeatedOptionalProperty + type = type[:-2] + elif type.endswith("*"): cls = RepeatedProperty type = type[:-1] elif type.endswith("?"): diff --git a/swift/codegen/qlgen.py b/swift/codegen/qlgen.py index b16bd38a208..77e037ee5fe 100755 --- a/swift/codegen/qlgen.py +++ b/swift/codegen/qlgen.py @@ -18,13 +18,6 @@ def get_ql_property(cls: schema.Class, prop: schema.Property): tablename=inflection.tableize(cls.name), tableparams=["this"] + ["result" if p is prop else "_" for p in cls.properties if p.is_single], ) - elif prop.is_optional: - return ql.Property( - singular=inflection.camelize(prop.name), - type=prop.type, - tablename=inflection.tableize(f"{cls.name}_{prop.name}"), - tableparams=["this", "result"], - ) elif prop.is_repeated: return ql.Property( singular=inflection.singularize(inflection.camelize(prop.name)), @@ -33,6 +26,15 @@ def get_ql_property(cls: schema.Class, prop: schema.Property): tablename=inflection.tableize(f"{cls.name}_{prop.name}"), tableparams=["this", "index", "result"], params=[ql.Param("index", type="int")], + is_optional=prop.is_optional, + ) + elif prop.is_optional: + return ql.Property( + singular=inflection.camelize(prop.name), + type=prop.type, + tablename=inflection.tableize(f"{cls.name}_{prop.name}"), + tableparams=["this", "result"], + is_optional=True, ) diff --git a/swift/codegen/schema.yml b/swift/codegen/schema.yml index 6e07edbe2e5..4ea4a8190a6 100644 --- a/swift/codegen/schema.yml +++ b/swift/codegen/schema.yml @@ -256,7 +256,7 @@ OperatorDecl: PatternBindingDecl: _extends: Decl - inits: Expr* + inits: Expr?* patterns: Pattern* PoundDiagnosticDecl: diff --git a/swift/codegen/templates/cpp_classes.mustache b/swift/codegen/templates/cpp_classes.mustache index 88329bdcd5b..504ca92934b 100644 --- a/swift/codegen/templates/cpp_classes.mustache +++ b/swift/codegen/templates/cpp_classes.mustache @@ -34,10 +34,19 @@ struct {{name}}{{#final}} : Binding<{{name}}Tag>{{#bases}}, {{ref.name}}{{/bases {{/trap_name}} {{#fields}} {{#is_optional}} + {{^is_repeated}} if ({{name}}) out << {{trap_name}}{id, *{{name}}} << '\n'; + {{/is_repeated}} {{/is_optional}} {{#is_repeated}} - for (auto i = 0u; i < {{name}}.size(); ++i) out << {{trap_name}}{id, i, {{name}}[i]}; + for (auto i = 0u; i < {{name}}.size(); ++i) { + {{^is_optional}} + out << {{trap_name}}{id, i, {{name}}[i]}; + {{/is_optional}} + {{#is_optional}} + if ({{name}}[i]) out << {{trap_name}}{id, i, *{{name}}[i]}; + {{/is_optional}} + } {{/is_repeated}} {{/fields}} } diff --git a/swift/codegen/templates/ql_class.mustache b/swift/codegen/templates/ql_class.mustache index f04914bd39d..e2f2a6a449f 100644 --- a/swift/codegen/templates/ql_class.mustache +++ b/swift/codegen/templates/ql_class.mustache @@ -20,28 +20,28 @@ class {{name}}Base extends {{db_id}}{{#bases}}, {{.}}{{/bases}} { {{/final}} {{#properties}} - {{#type_is_class}} - {{type}} get{{singular}}({{#params}}{{^first}}, {{/first}}{{type}} {{param}}{{/params}}) { + {{type}} get{{singular}}({{#is_repeated}}int index{{/is_repeated}}) { + {{#type_is_class}} exists({{type}} {{local_var}} | {{tablename}}({{#tableparams}}{{^first}}, {{/first}}{{param}}{{/tableparams}}) and result = {{local_var}}.resolve()) - } - {{/type_is_class}} - {{^type_is_class}} - {{type}} get{{singular}}({{#params}}{{^first}}, {{/first}}{{type}} {{param}}{{/params}}) { + {{/type_is_class}} + {{^type_is_class}} {{tablename}}({{#tableparams}}{{^first}}, {{/first}}{{param}}{{/tableparams}}) + {{/type_is_class}} } - {{/type_is_class}} - {{#indefinite_article}} + {{#is_repeated}} - {{type}} get{{.}}{{singular}}() { - result = get{{singular}}({{#params}}{{^first}}, {{/first}}_{{/params}}) + {{type}} get{{indefinite_article}}{{singular}}() { + result = get{{singular}}(_) } + {{^is_optional}} int getNumberOf{{plural}}() { - result = count(get{{.}}{{singular}}()) + result = count(get{{indefinite_article}}{{singular}}()) } - {{/indefinite_article}} + {{/is_optional}} + {{/is_repeated}} {{/properties}} } diff --git a/swift/codegen/test/test_cpp.py b/swift/codegen/test/test_cpp.py index 0368831d453..74dbc2d2182 100644 --- a/swift/codegen/test/test_cpp.py +++ b/swift/codegen/test/test_cpp.py @@ -42,6 +42,7 @@ def test_field_is_single(is_optional, is_repeated, expected): (False, False, "bar"), (True, False, "std::optional"), (False, True, "std::vector"), + (True, True, "std::vector>"), ]) def test_field_modal_types(is_optional, is_repeated, expected): f = cpp.Field("name", "bar", is_optional=is_optional, is_repeated=is_repeated) diff --git a/swift/codegen/test/test_cppgen.py b/swift/codegen/test/test_cppgen.py index c5a759bbbf8..1dbb6b61bfe 100644 --- a/swift/codegen/test/test_cppgen.py +++ b/swift/codegen/test/test_cppgen.py @@ -72,6 +72,7 @@ def test_complex_hierarchy_topologically_ordered(generate): (schema.SingleProperty, False, False, None), (schema.OptionalProperty, True, False, "MyClassPropsTrap"), (schema.RepeatedProperty, False, True, "MyClassPropsTrap"), + (schema.RepeatedOptionalProperty, True, True, "MyClassPropsTrap"), ]) def test_class_with_field(generate, type, expected, property_cls, optional, repeated, trap_name): assert generate([ diff --git a/swift/codegen/test/test_dbschemegen.py b/swift/codegen/test/test_dbschemegen.py index 97b0090cf74..82521fb9892 100644 --- a/swift/codegen/test/test_dbschemegen.py +++ b/swift/codegen/test/test_dbschemegen.py @@ -126,10 +126,11 @@ def test_final_class_with_optional_field(opts, input, renderer): ) -def test_final_class_with_repeated_field(opts, input, renderer): +@pytest.mark.parametrize("property_cls", [schema.RepeatedProperty, schema.RepeatedOptionalProperty]) +def test_final_class_with_repeated_field(opts, input, renderer, property_cls): input.classes = [ schema.Class("Object", properties=[ - schema.RepeatedProperty("foo", "bar"), + property_cls("foo", "bar"), ]), ] assert generate(opts, renderer) == dbscheme.Scheme( @@ -161,7 +162,8 @@ def test_final_class_with_more_fields(opts, input, renderer): schema.SingleProperty("one", "x"), schema.SingleProperty("two", "y"), schema.OptionalProperty("three", "z"), - schema.RepeatedProperty("four", "w"), + schema.RepeatedProperty("four", "u"), + schema.RepeatedOptionalProperty("five", "v"), ]), ] assert generate(opts, renderer) == dbscheme.Scheme( @@ -190,7 +192,16 @@ def test_final_class_with_more_fields(opts, input, renderer): columns=[ dbscheme.Column('id', '@object'), dbscheme.Column('index', 'int'), - dbscheme.Column('four', 'w'), + dbscheme.Column('four', 'u'), + ] + ), + dbscheme.Table( + name="object_fives", + keyset=dbscheme.KeySet(["id", "index"]), + columns=[ + dbscheme.Column('id', '@object'), + dbscheme.Column('index', 'int'), + dbscheme.Column('five', 'v'), ] ), ], diff --git a/swift/codegen/test/test_ql.py b/swift/codegen/test/test_ql.py index 44da8b560f9..79e88c70049 100644 --- a/swift/codegen/test/test_ql.py +++ b/swift/codegen/test/test_ql.py @@ -59,6 +59,16 @@ def test_property_indefinite_article(name, expected_article): assert prop.indefinite_article == expected_article +@pytest.mark.parametrize("plural,expected", [ + (None, False), + ("", False), + ("X", True), +]) +def test_property_is_plural(plural, expected): + prop = ql.Property("foo", "Foo", "props", ["x"], plural=plural) + assert prop.is_repeated is expected + + def test_property_no_plural_no_indefinite_article(): prop = ql.Property("Prop", "Foo", "props", ["x"]) assert prop.indefinite_article is None diff --git a/swift/codegen/test/test_qlgen.py b/swift/codegen/test/test_qlgen.py index a81c8600c57..1db7dada723 100644 --- a/swift/codegen/test/test_qlgen.py +++ b/swift/codegen/test/test_qlgen.py @@ -107,7 +107,8 @@ def test_optional_property(opts, input, renderer): import_file(): ql.ImportList([stub_import_prefix + "MyObject"]), stub_path() / "MyObject.qll": ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"), ql_output_path() / "MyObject.qll": ql.Class(name="MyObject", final=True, properties=[ - ql.Property(singular="Foo", type="bar", tablename="my_object_foos", tableparams=["this", "result"]), + ql.Property(singular="Foo", type="bar", tablename="my_object_foos", tableparams=["this", "result"], + is_optional=True), ]) } @@ -126,6 +127,20 @@ def test_repeated_property(opts, input, renderer): } +def test_repeated_optional_property(opts, input, renderer): + input.classes = [ + schema.Class("MyObject", properties=[schema.RepeatedOptionalProperty("foo", "bar")]), + ] + assert generate(opts, renderer) == { + import_file(): ql.ImportList([stub_import_prefix + "MyObject"]), + stub_path() / "MyObject.qll": ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"), + ql_output_path() / "MyObject.qll": ql.Class(name="MyObject", final=True, properties=[ + ql.Property(singular="Foo", plural="Foos", type="bar", tablename="my_object_foos", params=[index_param], + tableparams=["this", "index", "result"], is_optional=True), + ]) + } + + def test_single_class_property(opts, input, renderer): input.classes = [ schema.Class("MyObject", properties=[schema.SingleProperty("foo", "Bar")]), diff --git a/swift/codegen/test/test_schema.py b/swift/codegen/test/test_schema.py index b7376407c20..36367a76b1f 100644 --- a/swift/codegen/test/test_schema.py +++ b/swift/codegen/test/test_schema.py @@ -140,6 +140,7 @@ A: one: string two: int? three: bool* + four: x?* """) assert ret.classes == [ schema.Class(root_name, derived={'A'}), @@ -147,6 +148,7 @@ A: schema.SingleProperty('one', 'string'), schema.OptionalProperty('two', 'int'), schema.RepeatedProperty('three', 'bool'), + schema.RepeatedOptionalProperty('four', 'x'), ]), ] diff --git a/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll index fd83d330670..9d693c9f9c7 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll @@ -15,8 +15,6 @@ class PatternBindingDeclBase extends @pattern_binding_decl, Decl { Expr getAnInit() { result = getInit(_) } - int getNumberOfInits() { result = count(getAnInit()) } - Pattern getPattern(int index) { exists(Pattern x | pattern_binding_decl_patterns(this, index, x) and From e416a0629a0912eda47c04c59710dba7c985fdf2 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 5 May 2022 11:54:04 +0200 Subject: [PATCH 0366/1618] C#: Add isAutoGenerated predicate to SummarizedCallable. --- .../code/csharp/dataflow/internal/FlowSummaryImpl.qll | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index b975a31c394..10e54a0db39 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -219,6 +219,11 @@ module Public { */ pragma[nomagic] predicate clearsContent(ParameterPosition pos, ContentSet content) { none() } + + /** + * Gets whether the summary is auto generated or not. + */ + boolean isAutoGenerated() { result = false } } } @@ -898,6 +903,8 @@ module Private { kind = "taint" and preservesValue = false ) } + + override boolean isAutoGenerated() { summaryElement(this, _, _, _, result) } } /** Holds if component `c` of specification `spec` cannot be parsed. */ From c87fb4df535dbc18f375e907daeac5aac293a989 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 May 2022 12:01:13 +0200 Subject: [PATCH 0367/1618] Swift: remove now unused `ql.Property.params` --- swift/codegen/lib/ql.py | 6 ------ swift/codegen/qlgen.py | 3 --- swift/codegen/test/test_ql.py | 20 -------------------- swift/codegen/test/test_qlgen.py | 5 ++--- 4 files changed, 2 insertions(+), 32 deletions(-) diff --git a/swift/codegen/lib/ql.py b/swift/codegen/lib/ql.py index 0b80757c96f..ee9103fd990 100644 --- a/swift/codegen/lib/ql.py +++ b/swift/codegen/lib/ql.py @@ -8,7 +8,6 @@ import inflection @dataclass class Param: param: str - type: str = None first: bool = False @@ -19,16 +18,11 @@ class Property: tablename: str tableparams: List[Param] plural: str = None - params: List[Param] = field(default_factory=list) first: bool = False local_var: str = "x" is_optional: bool = False def __post_init__(self): - if self.params: - self.params[0].first = True - while self.local_var in (p.param for p in self.params): - self.local_var += "_" assert self.tableparams if self.type_is_class: self.tableparams = [x if x != "result" else self.local_var for x in self.tableparams] diff --git a/swift/codegen/qlgen.py b/swift/codegen/qlgen.py index 77e037ee5fe..26a5e2edcae 100755 --- a/swift/codegen/qlgen.py +++ b/swift/codegen/qlgen.py @@ -25,7 +25,6 @@ def get_ql_property(cls: schema.Class, prop: schema.Property): type=prop.type, tablename=inflection.tableize(f"{cls.name}_{prop.name}"), tableparams=["this", "index", "result"], - params=[ql.Param("index", type="int")], is_optional=prop.is_optional, ) elif prop.is_optional: @@ -58,8 +57,6 @@ def get_types_used_by(cls: ql.Class): yield b for p in cls.properties: yield p.type - for param in p.params: - yield param.type def get_classes_used_by(cls: ql.Class): diff --git a/swift/codegen/test/test_ql.py b/swift/codegen/test/test_ql.py index 79e88c70049..e87383695c6 100644 --- a/swift/codegen/test/test_ql.py +++ b/swift/codegen/test/test_ql.py @@ -5,31 +5,11 @@ from swift.codegen.lib import ql from swift.codegen.test.utils import * -def test_property_has_first_param_marked(): - params = [ql.Param("a", "x"), ql.Param("b", "y"), ql.Param("c", "z")] - expected = deepcopy(params) - expected[0].first = True - prop = ql.Property("Prop", "foo", "props", ["this"], params=params) - assert prop.params == expected - - def test_property_has_first_table_param_marked(): tableparams = ["a", "b", "c"] prop = ql.Property("Prop", "foo", "props", tableparams) assert prop.tableparams[0].first assert [p.param for p in prop.tableparams] == tableparams - assert all(p.type is None for p in prop.tableparams) - - -@pytest.mark.parametrize("params,expected_local_var", [ - (["a", "b", "c"], "x"), - (["a", "x", "c"], "x_"), - (["a", "x", "x_", "c"], "x__"), - (["a", "x", "x_", "x__"], "x___"), -]) -def test_property_local_var_avoids_params_collision(params, expected_local_var): - prop = ql.Property("Prop", "foo", "props", ["this"], params=[ql.Param(p) for p in params]) - assert prop.local_var == expected_local_var def test_property_not_a_class(): diff --git a/swift/codegen/test/test_qlgen.py b/swift/codegen/test/test_qlgen.py index 1db7dada723..8affd50fb7f 100644 --- a/swift/codegen/test/test_qlgen.py +++ b/swift/codegen/test/test_qlgen.py @@ -18,7 +18,6 @@ ql_output_path = lambda: paths.swift_dir / "ql/lib/other/path" import_file = lambda: stub_path().with_suffix(".qll") stub_import_prefix = "stub.path." gen_import_prefix = "other.path." -index_param = ql.Param("index", "int") def generate(opts, renderer, written=None): @@ -121,7 +120,7 @@ def test_repeated_property(opts, input, renderer): import_file(): ql.ImportList([stub_import_prefix + "MyObject"]), stub_path() / "MyObject.qll": ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"), ql_output_path() / "MyObject.qll": ql.Class(name="MyObject", final=True, properties=[ - ql.Property(singular="Foo", plural="Foos", type="bar", tablename="my_object_foos", params=[index_param], + ql.Property(singular="Foo", plural="Foos", type="bar", tablename="my_object_foos", tableparams=["this", "index", "result"]), ]) } @@ -135,7 +134,7 @@ def test_repeated_optional_property(opts, input, renderer): import_file(): ql.ImportList([stub_import_prefix + "MyObject"]), stub_path() / "MyObject.qll": ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"), ql_output_path() / "MyObject.qll": ql.Class(name="MyObject", final=True, properties=[ - ql.Property(singular="Foo", plural="Foos", type="bar", tablename="my_object_foos", params=[index_param], + ql.Property(singular="Foo", plural="Foos", type="bar", tablename="my_object_foos", tableparams=["this", "index", "result"], is_optional=True), ]) } From 0c0e280637d2affc7f65fada41ec99e3585b64a0 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 5 May 2022 12:12:29 +0200 Subject: [PATCH 0368/1618] update the qhelp to mention that the GITHUB_TOKEN only sometimes has write-access --- .../CWE-094/ExpressionInjection.qhelp | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp b/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp index b9a3248408f..8068697d878 100644 --- a/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp +++ b/javascript/ql/src/Security/CWE-094/ExpressionInjection.qhelp @@ -2,59 +2,47 @@ "-//Semmle//qhelp//EN" "qhelp.dtd"> - -

    - Using user-controlled input in GitHub Actions may lead to code injection in contexts like run: or script:. -

    -

    Code injection in GitHub actions may allow an attacker to exfiltrate the temporary GitHub repository authorization token. - The token has write access to the repository, and thus an attacker - can use it to modify the repository. + The token might have write access to the repository, and thus an attacker + might be able to use it to modify the repository.

    - -

    The best practice to avoid code injection vulnerabilities in GitHub workflows is to set the untrusted input value of the expression to an intermediate environment variable.

    - +

    + It is also recommended to limit the permissions of any tokens used + by a workflow such as the the GITHUB_TOKEN. +

    -

    - The following example lets a user inject an arbitrary shell command: -

    -

    - The following example uses shell syntax to read the environment variable and will prevent the attack: -

    - -
  • GitHub Security Lab Research: Keeping your GitHub Actions and workflows secure: Untrusted input.
  • GitHub Docs: Security hardening for GitHub Actions.
  • +
  • GitHub Docs: Permissions for the GITHUB_TOKEN.
  • - From 75244effc567b7825e86eca47884b7c2144cd9dd Mon Sep 17 00:00:00 2001 From: ihsinme Date: Thu, 5 May 2022 13:27:17 +0300 Subject: [PATCH 0369/1618] Update DangerousUseOfExceptionBlocks.ql --- .../CWE-476/DangerousUseOfExceptionBlocks.ql | 55 ++++++++++++++++--- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql index f2a27877988..08dad379444 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql @@ -61,7 +61,7 @@ predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { ( // `e0` is a `new` expression (or equivalent function call) assigned to `vro` exists(AssignExpr ase | - ase = vro.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and + ase = vro.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr() and ( e0 = ase.getRValue().(NewOrNewArrayExpr) or e0 = ase.getRValue().(NewOrNewArrayExpr).getEnclosingFunction().getACallToThisFunction() @@ -71,7 +71,7 @@ predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { or // `e0` is a `new` expression (or equivalent function call) assigned to the array element `vro` exists(AssignExpr ase | - ase = vro.getAnAccess().(Qualifier).getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and + ase = vro.getAnAccess().(Qualifier).getEnclosingStmt().(ExprStmt).getExpr() and ( e0 = ase.getRValue().(NewOrNewArrayExpr) or e0 = ase.getRValue().(NewOrNewArrayExpr).getEnclosingFunction().getACallToThisFunction() @@ -82,7 +82,7 @@ predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { ) and // `e1` is a `new` expression (or equivalent function call) assigned to `vr` exists(AssignExpr ase | - ase = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and + ase = vr.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr() and ( e1 = ase.getRValue().(NewOrNewArrayExpr) or e1 = ase.getRValue().(NewOrNewArrayExpr).getEnclosingFunction().getACallToThisFunction() @@ -112,6 +112,33 @@ predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { ) } +/** Holds if `vro` may be released in the `catch`. */ +pragma[inline] +predicate newThrowDelete(CatchAnyBlock cb, Variable vro) { + exists(Expr e0, AssignExpr ase, NewOrNewArrayExpr nae | + ase = vro.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and + nae = ase.getRValue().(NewOrNewArrayExpr) and + not nae.getAChild*().toString() = "nothrow" and + ( + e0 = nae or + e0 = nae.getEnclosingFunction().getACallToThisFunction() + ) and + vro = ase.getLValue().(VariableAccess).getTarget() and + e0.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + not exists(AssignExpr ase1 | + vro = ase1.getLValue().(VariableAccess).getTarget() and + ase1.getRValue().getValue() = "0" and + ase1.getASuccessor*() = e0 + ) + ) and + not exists(Initializer it | + vro.getInitializer() = it and + it.getExpr().getValue() = "0" + ) and + not exists(ConstructorFieldInit ci | + vro = ci.getTarget() + ) +} from CatchAnyBlock cb, string msg where exists(Variable vr, Variable vro, Expr exp | @@ -119,14 +146,14 @@ where exists(VariableAccess va | ( ( - va = exp.(DeleteArrayExpr).getExpr().getAPredecessor+().(Qualifier).(VariableAccess) or - va = exp.(DeleteArrayExpr).getExpr().getAPredecessor+().(VariableAccess) + va = exp.(DeleteArrayExpr).getExpr().getAPredecessor+().(Qualifier) or + va = exp.(DeleteArrayExpr).getExpr().getAPredecessor+() ) and vr = exp.(DeleteArrayExpr).getExpr().(VariableAccess).getTarget() or ( - va = exp.(DeleteExpr).getExpr().getAPredecessor+().(Qualifier).(VariableAccess) or - va = exp.(DeleteExpr).getExpr().getAPredecessor+().(VariableAccess) + va = exp.(DeleteExpr).getExpr().getAPredecessor+().(Qualifier) or + va = exp.(DeleteExpr).getExpr().getAPredecessor+() ) and vr = exp.(DeleteExpr).getExpr().(VariableAccess).getTarget() ) and @@ -154,4 +181,18 @@ where "This allocation may have been released in the try block or a previous catch block." + vr.getName() ) + or + exists(Variable vro, Expr exp | + exp.getEnclosingStmt().getParentStmt*() = cb and + exists(VariableAccess va | + ( + va = exp.(DeleteArrayExpr).getExpr().(VariableAccess) or + va = exp.(DeleteExpr).getExpr().(VariableAccess) + ) and + va.getEnclosingStmt() = exp.getEnclosingStmt() and + vro = va.getTarget() + ) and + newThrowDelete(cb,vro) and + msg = "If the allocation in the try block fails, then an unallocated pointer "+vro.getName()+" will be freed in the catch block." + ) select cb, msg From c4d597d60f96cf4b1a173646794746cc17360589 Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 5 May 2022 12:58:44 +0200 Subject: [PATCH 0370/1618] JS: Enumerate type-tracking steps through global access paths --- .../dataflow/internal/StepSummary.qll | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll index 065bb1b75a8..460aa4f9ccc 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/StepSummary.qll @@ -56,6 +56,18 @@ private module Cached { exists(DataFlow::Node mid | pred.flowsTo(mid) | StepSummary::smallstep(mid, succ, summary)) } + pragma[nomagic] + private DataFlow::Node getAGlobalStepPredecessor(string global) { + result = AccessPath::getAnAssignmentTo(global) and + AccessPath::isAssignedInUniqueFile(global) + } + + pragma[nomagic] + private DataFlow::Node getAGlobalStepSuccessor(string global) { + result = AccessPath::getAReferenceTo(global) and + AccessPath::isAssignedInUniqueFile(global) + } + /** * INTERNAL: Use `TypeBackTracker.smallstep()` instead. */ @@ -106,20 +118,10 @@ private module Cached { SharedTypeTrackingStep::step(pred, succ) and summary = LevelStep() or - // Store to global access path - exists(string name | - pred = AccessPath::getAnAssignmentTo(name) and - AccessPath::isAssignedInUniqueFile(name) and - succ = DataFlow::globalAccessPathRootPseudoNode() and - summary = StoreStep(name) - ) - or - // Load from global access path - exists(string name | - succ = AccessPath::getAReferenceTo(name) and - AccessPath::isAssignedInUniqueFile(name) and - pred = DataFlow::globalAccessPathRootPseudoNode() and - summary = LoadStep(name) + summary = LevelStep() and + exists(string global | + pred = getAGlobalStepPredecessor(global) and + succ = getAGlobalStepSuccessor(global) ) or // Store to non-global access path From 2d7c7ff372a2d25896ce7a241f68f5849dc45b6b Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 5 May 2022 13:03:35 +0200 Subject: [PATCH 0371/1618] apply suggestions from doc review Co-authored-by: mc <42146119+mchammer01@users.noreply.github.com> --- .../ql/src/Security/CWE-020/MissingOriginCheck.qhelp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp index ab551927ed1..e79bbbe7d75 100644 --- a/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp +++ b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp @@ -7,7 +7,7 @@

    The "message" event is used to send messages between windows. -An untrusted window can send a message to a trusted window, and it is up to the receiver to verify the legitimacy of the message. One way of doing that verification is to check the origin of the message ensure that it origins from a trusted window. +An untrusted window can send a message to a trusted window, and it is up to the receiver to verify the legitimacy of the message. One way of performing that verification is to check the origin of the message ensure that it originates from a trusted window.

    @@ -27,7 +27,7 @@ to execute arbitrary code.

    The example is fixed below, where the origin is checked to be trusted. -It is therefore not possible for an attacker to attack using an untrusted origin. +It is therefore not possible for a malicious user to attack using an untrusted origin.

    @@ -35,10 +35,9 @@ It is therefore not possible for an attacker to attack using an untrusted origin -
  • CWE-020: Improper Input Validation
  • -
  • Window.postMessage()
  • -
  • Web-message manipulation
  • -
  • The pitfalls of postMessage
  • +
  • Window.postMessage().
  • +
  • Web message manipulation.
  • +
  • The pitfalls of postMessage.
  • From a8556f4d50efa64be11dddc540df336eab6f92ca Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 5 May 2022 13:04:08 +0200 Subject: [PATCH 0372/1618] C#: Make sure that test output prints whether the summary is generated or not. --- .../code/csharp/dataflow/internal/FlowSummaryImpl.qll | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index 10e54a0db39..8736333d247 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -1059,9 +1059,15 @@ module Private { preservesValue = false and result = "taint" } + private string renderGenerated(boolean generated) { + generated = true and result = "generated:" + or + generated = false and result = "" + } + /** * A query predicate for outputting flow summaries in semi-colon separated format in QL tests. - * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;outputspec;kind", + * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;outputspec;(generated:)?kind", * ext is hardcoded to empty. */ query predicate summary(string csv) { @@ -1072,7 +1078,7 @@ module Private { c.relevantSummary(input, output, preservesValue) and csv = c.getCallableCsv() + getComponentStackCsv(input) + ";" + getComponentStackCsv(output) + - ";" + renderKind(preservesValue) + ";" + renderGenerated(c.isAutoGenerated()) + renderKind(preservesValue) ) } } From 2dc35c123a38c7b7cf1c010564ecacd0d9a92f7f Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 5 May 2022 13:08:55 +0200 Subject: [PATCH 0373/1618] Java/Ruby: Sync files. --- .../java/dataflow/internal/FlowSummaryImpl.qll | 17 +++++++++++++++-- .../ruby/dataflow/internal/FlowSummaryImpl.qll | 17 +++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index b975a31c394..8736333d247 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -219,6 +219,11 @@ module Public { */ pragma[nomagic] predicate clearsContent(ParameterPosition pos, ContentSet content) { none() } + + /** + * Gets whether the summary is auto generated or not. + */ + boolean isAutoGenerated() { result = false } } } @@ -898,6 +903,8 @@ module Private { kind = "taint" and preservesValue = false ) } + + override boolean isAutoGenerated() { summaryElement(this, _, _, _, result) } } /** Holds if component `c` of specification `spec` cannot be parsed. */ @@ -1052,9 +1059,15 @@ module Private { preservesValue = false and result = "taint" } + private string renderGenerated(boolean generated) { + generated = true and result = "generated:" + or + generated = false and result = "" + } + /** * A query predicate for outputting flow summaries in semi-colon separated format in QL tests. - * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;outputspec;kind", + * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;outputspec;(generated:)?kind", * ext is hardcoded to empty. */ query predicate summary(string csv) { @@ -1065,7 +1078,7 @@ module Private { c.relevantSummary(input, output, preservesValue) and csv = c.getCallableCsv() + getComponentStackCsv(input) + ";" + getComponentStackCsv(output) + - ";" + renderKind(preservesValue) + ";" + renderGenerated(c.isAutoGenerated()) + renderKind(preservesValue) ) } } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll index b975a31c394..8736333d247 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll @@ -219,6 +219,11 @@ module Public { */ pragma[nomagic] predicate clearsContent(ParameterPosition pos, ContentSet content) { none() } + + /** + * Gets whether the summary is auto generated or not. + */ + boolean isAutoGenerated() { result = false } } } @@ -898,6 +903,8 @@ module Private { kind = "taint" and preservesValue = false ) } + + override boolean isAutoGenerated() { summaryElement(this, _, _, _, result) } } /** Holds if component `c` of specification `spec` cannot be parsed. */ @@ -1052,9 +1059,15 @@ module Private { preservesValue = false and result = "taint" } + private string renderGenerated(boolean generated) { + generated = true and result = "generated:" + or + generated = false and result = "" + } + /** * A query predicate for outputting flow summaries in semi-colon separated format in QL tests. - * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;outputspec;kind", + * The syntax is: "namespace;type;overrides;name;signature;ext;inputspec;outputspec;(generated:)?kind", * ext is hardcoded to empty. */ query predicate summary(string csv) { @@ -1065,7 +1078,7 @@ module Private { c.relevantSummary(input, output, preservesValue) and csv = c.getCallableCsv() + getComponentStackCsv(input) + ";" + getComponentStackCsv(output) + - ";" + renderKind(preservesValue) + ";" + renderGenerated(c.isAutoGenerated()) + renderKind(preservesValue) ) } } From 3c347cab98877a5a396162b4f3cf46249d124425 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 5 May 2022 13:13:25 +0200 Subject: [PATCH 0374/1618] C#: Update test output to reflect that the query is now a path-problem query. --- .../CWE-091/XMLInjection/XMLInjection.expected | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected b/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected index c892fe902e7..37c4fb6a2d7 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-091/XMLInjection/XMLInjection.expected @@ -1 +1,8 @@ -| Test.cs:15:25:15:80 | ... + ... | $@ flows to here and is inserted as XML. | Test.cs:8:27:8:49 | access to property QueryString | User-provided value | +edges +| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:15:25:15:80 | ... + ... | +nodes +| Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | semmle.label | access to property QueryString : NameValueCollection | +| Test.cs:15:25:15:80 | ... + ... | semmle.label | ... + ... | +subpaths +#select +| Test.cs:15:25:15:80 | ... + ... | Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | Test.cs:15:25:15:80 | ... + ... | $@ flows to here and is inserted as XML. | Test.cs:8:27:8:49 | access to property QueryString : NameValueCollection | User-provided value | From de6e2c95e796e6ebe96ab117ba29e6438fcf8147 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 5 May 2022 13:36:08 +0200 Subject: [PATCH 0375/1618] Data flow: Speedup `subpaths` predicate (take 2) --- .../csharp/dataflow/internal/DataFlowImpl.qll | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index 91390dcadf0..89a35b00fa6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } From d9d5372f289fe7344f313d05434ac4e877bc0f7c Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 5 May 2022 13:36:26 +0200 Subject: [PATCH 0376/1618] Data flow: Sync files --- .../cpp/dataflow/internal/DataFlowImpl.qll | 18 +++++++++++------- .../cpp/dataflow/internal/DataFlowImpl2.qll | 18 +++++++++++------- .../cpp/dataflow/internal/DataFlowImpl3.qll | 18 +++++++++++------- .../cpp/dataflow/internal/DataFlowImpl4.qll | 18 +++++++++++------- .../dataflow/internal/DataFlowImplLocal.qll | 18 +++++++++++------- .../cpp/ir/dataflow/internal/DataFlowImpl.qll | 18 +++++++++++------- .../cpp/ir/dataflow/internal/DataFlowImpl2.qll | 18 +++++++++++------- .../cpp/ir/dataflow/internal/DataFlowImpl3.qll | 18 +++++++++++------- .../cpp/ir/dataflow/internal/DataFlowImpl4.qll | 18 +++++++++++------- .../csharp/dataflow/internal/DataFlowImpl2.qll | 18 +++++++++++------- .../csharp/dataflow/internal/DataFlowImpl3.qll | 18 +++++++++++------- .../csharp/dataflow/internal/DataFlowImpl4.qll | 18 +++++++++++------- .../csharp/dataflow/internal/DataFlowImpl5.qll | 18 +++++++++++------- .../java/dataflow/internal/DataFlowImpl.qll | 18 +++++++++++------- .../java/dataflow/internal/DataFlowImpl2.qll | 18 +++++++++++------- .../java/dataflow/internal/DataFlowImpl3.qll | 18 +++++++++++------- .../java/dataflow/internal/DataFlowImpl4.qll | 18 +++++++++++------- .../java/dataflow/internal/DataFlowImpl5.qll | 18 +++++++++++------- .../java/dataflow/internal/DataFlowImpl6.qll | 18 +++++++++++------- .../DataFlowImplForOnActivityResult.qll | 18 +++++++++++------- .../DataFlowImplForSerializability.qll | 18 +++++++++++------- .../dataflow/new/internal/DataFlowImpl.qll | 18 +++++++++++------- .../dataflow/new/internal/DataFlowImpl2.qll | 18 +++++++++++------- .../dataflow/new/internal/DataFlowImpl3.qll | 18 +++++++++++------- .../dataflow/new/internal/DataFlowImpl4.qll | 18 +++++++++++------- .../ruby/dataflow/internal/DataFlowImpl.qll | 18 +++++++++++------- .../ruby/dataflow/internal/DataFlowImpl2.qll | 18 +++++++++++------- .../internal/DataFlowImplForLibraries.qll | 18 +++++++++++------- 28 files changed, 308 insertions(+), 196 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index 91390dcadf0..89a35b00fa6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index 91390dcadf0..89a35b00fa6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index 91390dcadf0..89a35b00fa6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index 91390dcadf0..89a35b00fa6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index 91390dcadf0..89a35b00fa6 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index 91390dcadf0..89a35b00fa6 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index 91390dcadf0..89a35b00fa6 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index 91390dcadf0..89a35b00fa6 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index 91390dcadf0..89a35b00fa6 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index 91390dcadf0..89a35b00fa6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index 91390dcadf0..89a35b00fa6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index 91390dcadf0..89a35b00fa6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index 91390dcadf0..89a35b00fa6 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index 91390dcadf0..89a35b00fa6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index 91390dcadf0..89a35b00fa6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index 91390dcadf0..89a35b00fa6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index 91390dcadf0..89a35b00fa6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index 91390dcadf0..89a35b00fa6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index 91390dcadf0..89a35b00fa6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll index 91390dcadf0..89a35b00fa6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index 91390dcadf0..89a35b00fa6 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index 91390dcadf0..89a35b00fa6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index 91390dcadf0..89a35b00fa6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index 91390dcadf0..89a35b00fa6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index 91390dcadf0..89a35b00fa6 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll index 91390dcadf0..89a35b00fa6 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll index 91390dcadf0..89a35b00fa6 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll index 91390dcadf0..89a35b00fa6 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll @@ -4300,6 +4300,12 @@ private module Subpaths { ) } + pragma[nomagic] + private predicate hasSuccessor(PathNode pred, PathNodeMid succ, NodeEx succNode) { + succ = pred.getASuccessor() and + succNode = succ.getNodeEx() + } + /** * Holds if `(arg, par, ret, out)` forms a subpath-tuple, that is, flow through * a subpath between `par` and `ret` with the connecting edges `arg -> par` and @@ -4307,15 +4313,13 @@ private module Subpaths { */ predicate subpaths(PathNode arg, PathNodeImpl par, PathNodeImpl ret, PathNode out) { exists(ParamNodeEx p, NodeEx o, FlowState sout, AccessPath apout, PathNodeMid out0 | - pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](par) and - pragma[only_bind_into](arg).getASuccessor() = out0 and + pragma[only_bind_into](arg).getASuccessor() = pragma[only_bind_into](out0) and subpaths03(pragma[only_bind_into](arg), p, localStepToHidden*(ret), o, sout, apout) and + hasSuccessor(pragma[only_bind_into](arg), par, p) and not ret.isHidden() and - par.getNodeEx() = p and - out0.getNodeEx() = o and - out0.getState() = sout and - out0.getAp() = apout and - (out = out0 or out = out0.projectToSink()) + pathNode(out0, o, sout, _, _, apout, _, _) + | + out = out0 or out = out0.projectToSink() ) } From 58db9226dc153384bc4be8051a8c5c0effb5a3a1 Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Thu, 5 May 2022 14:24:45 +0200 Subject: [PATCH 0377/1618] add missing word in qhelp --- javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp index e79bbbe7d75..cb048b0c771 100644 --- a/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp +++ b/javascript/ql/src/Security/CWE-020/MissingOriginCheck.qhelp @@ -27,7 +27,7 @@ to execute arbitrary code.

    The example is fixed below, where the origin is checked to be trusted. -It is therefore not possible for a malicious user to attack using an untrusted origin. +It is therefore not possible for a malicious user to perform an attack using an untrusted origin.

    From 2e780154e26dd791fdb4e05176ad838072df126a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 27 Apr 2022 13:51:45 +0200 Subject: [PATCH 0378/1618] Ruby: Introduce 'with/without content' summary components --- .../dataflow/internal/DataFlowPrivate.qll | 6 +- .../dataflow/internal/FlowSummaryImpl.qll | 149 +++++++++++------- 2 files changed, 95 insertions(+), 60 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index 228b04caae5..4e01f30970a 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -252,7 +252,7 @@ private module Cached { nodeTo.(SynthReturnNode).getAnInput() = nodeFrom or LocalFlow::localSsaFlowStepUseUse(_, nodeFrom, nodeTo) and - not FlowSummaryImpl::Private::Steps::summaryClearsContentArg(nodeFrom, _) + not FlowSummaryImpl::Private::Steps::prohibitsUseUseFlow(nodeFrom) or FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom, nodeTo, true) } @@ -804,7 +804,9 @@ predicate clearsContent(Node n, ContentSet c) { * Holds if the value that is being tracked is expected to be stored inside content `c` * at node `n`. */ -predicate expectsContent(Node n, ContentSet c) { none() } +predicate expectsContent(Node n, ContentSet c) { + FlowSummaryImpl::Private::Steps::summaryExpectsContent(n, c) +} private newtype TDataFlowType = TTodoDataFlowType() or diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll index b975a31c394..0b688e97847 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll @@ -26,6 +26,10 @@ module Public { string toString() { exists(ContentSet c | this = TContentSummaryComponent(c) and result = c.toString()) or + exists(ContentSet c | this = TWithoutContentSummaryComponent(c) and result = "without " + c) + or + exists(ContentSet c | this = TWithContentSummaryComponent(c) and result = "with " + c) + or exists(ArgumentPosition pos | this = TParameterSummaryComponent(pos) and result = "parameter " + pos ) @@ -43,6 +47,12 @@ module Public { /** Gets a summary component for content `c`. */ SummaryComponent content(ContentSet c) { result = TContentSummaryComponent(c) } + /** Gets a summary component where data is not allowed to be stored in `c`. */ + SummaryComponent withoutContent(ContentSet c) { result = TWithoutContentSummaryComponent(c) } + + /** Gets a summary component where data must be stored in `c`. */ + SummaryComponent withContent(ContentSet c) { result = TWithContentSummaryComponent(c) } + /** Gets a summary component for a parameter at position `pos`. */ SummaryComponent parameter(ArgumentPosition pos) { result = TParameterSummaryComponent(pos) } @@ -216,6 +226,8 @@ module Public { /** * Holds if values stored inside `content` are cleared on objects passed as * arguments at position `pos` to this callable. + * + * TODO: Remove once all languages support `WithoutContent` tokens. */ pragma[nomagic] predicate clearsContent(ParameterPosition pos, ContentSet content) { none() } @@ -234,7 +246,9 @@ module Private { TContentSummaryComponent(ContentSet c) or TParameterSummaryComponent(ArgumentPosition pos) or TArgumentSummaryComponent(ParameterPosition pos) or - TReturnSummaryComponent(ReturnKind rk) + TReturnSummaryComponent(ReturnKind rk) or + TWithoutContentSummaryComponent(ContentSet c) or + TWithContentSummaryComponent(ContentSet c) private TParameterSummaryComponent thisParam() { result = TParameterSummaryComponent(instanceParameterPosition()) @@ -296,6 +310,23 @@ module Private { SummaryComponentStack::singleton(TArgumentSummaryComponent(_))) and preservesValue = preservesValue1.booleanAnd(preservesValue2) ) + or + exists(ParameterPosition ppos, ContentSet cs | + c.clearsContent(ppos, cs) and + input = SummaryComponentStack::push(SummaryComponent::withoutContent(cs), output) and + output = SummaryComponentStack::argument(ppos) and + preservesValue = true + ) + } + + private class MkClearStack extends RequiredSummaryComponentStack { + override predicate required(SummaryComponent head, SummaryComponentStack tail) { + exists(SummarizedCallable sc, ParameterPosition ppos, ContentSet cs | + sc.clearsContent(ppos, cs) and + head = SummaryComponent::withoutContent(cs) and + tail = SummaryComponentStack::argument(ppos) + ) + } } /** @@ -378,10 +409,7 @@ module Private { private newtype TSummaryNodeState = TSummaryNodeInputState(SummaryComponentStack s) { inputState(_, s) } or - TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } or - TSummaryNodeClearsContentState(ParameterPosition pos, boolean post) { - any(SummarizedCallable sc).clearsContent(pos, _) and post in [false, true] - } + TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } /** * A state used to break up (complex) flow summaries into atomic flow steps. @@ -428,12 +456,6 @@ module Private { this = TSummaryNodeOutputState(s) and result = "to write: " + s ) - or - exists(ParameterPosition pos, boolean post, string postStr | - this = TSummaryNodeClearsContentState(pos, post) and - (if post = true then postStr = " (post)" else postStr = "") and - result = "clear: " + pos + postStr - ) } } @@ -457,11 +479,6 @@ module Private { not parameterReadState(c, state, _) or state.isOutputState(c, _) - or - exists(ParameterPosition pos | - c.clearsContent(pos, _) and - state = TSummaryNodeClearsContentState(pos, _) - ) } pragma[noinline] @@ -497,8 +514,6 @@ module Private { parameterReadState(c, _, pos) or isParameterPostUpdate(_, c, pos) - or - c.clearsContent(pos, _) } private predicate callbackOutput( @@ -506,7 +521,7 @@ module Private { ) { any(SummaryNodeState state).isInputState(c, s) and s.head() = TReturnSummaryComponent(rk) and - receiver = summaryNodeInputState(c, s.drop(1)) + receiver = summaryNodeInputState(c, s.tail()) } private predicate callbackInput( @@ -514,7 +529,7 @@ module Private { ) { any(SummaryNodeState state).isOutputState(c, s) and s.head() = TParameterSummaryComponent(pos) and - receiver = summaryNodeInputState(c, s.drop(1)) + receiver = summaryNodeInputState(c, s.tail()) } /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ @@ -540,15 +555,21 @@ module Private { exists(SummarizedCallable c, SummaryComponentStack s, SummaryComponent head | head = s.head() | n = summaryNodeInputState(c, s) and ( + exists(ContentSet cont | result = getContentType(cont) | + head = TContentSummaryComponent(cont) or + head = TWithContentSummaryComponent(cont) + ) + or exists(ContentSet cont | - head = TContentSummaryComponent(cont) and result = getContentType(cont) + head = TWithoutContentSummaryComponent(cont) and + result = getNodeType(summaryNodeInputState(c, s.tail())) ) or exists(ReturnKind rk | head = TReturnSummaryComponent(rk) and result = getCallbackReturnType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), - s.drop(1))), rk) + s.tail())), rk) ) ) or @@ -567,16 +588,10 @@ module Private { exists(ArgumentPosition pos | head = TParameterSummaryComponent(pos) | result = getCallbackParameterType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), - s.drop(1))), pos) + s.tail())), pos) ) ) ) - or - exists(SummarizedCallable c, ParameterPosition pos, ParamNode p | - n = summaryNode(c, TSummaryNodeClearsContentState(pos, false)) and - p.isParameterOf(c, pos) and - result = getNodeType(p) - ) } /** Holds if summary node `out` contains output of kind `rk` from call `c`. */ @@ -602,9 +617,6 @@ module Private { exists(SummarizedCallable c, ParameterPosition pos | isParameterPostUpdate(post, c, pos) and pre.(ParamNode).isParameterOf(c, pos) - or - pre = summaryNode(c, TSummaryNodeClearsContentState(pos, false)) and - post = summaryNode(c, TSummaryNodeClearsContentState(pos, true)) ) or exists(SummarizedCallable callable, SummaryComponentStack s | @@ -628,8 +640,6 @@ module Private { */ predicate summaryAllowParameterReturnInSelf(ParamNode p) { exists(SummarizedCallable c, ParameterPosition ppos | p.isParameterOf(c, ppos) | - c.clearsContent(ppos, _) - or exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | summary(c, inputContents, outputContents, _) and inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and @@ -658,9 +668,10 @@ module Private { preservesValue = false and not summary(c, inputContents, outputContents, true) ) or - exists(SummarizedCallable c, ParameterPosition pos | - pred.(ParamNode).isParameterOf(c, pos) and - succ = summaryNode(c, TSummaryNodeClearsContentState(pos, _)) and + exists(SummarizedCallable c, SummaryComponentStack s | + pred = summaryNodeInputState(c, s.tail()) and + succ = summaryNodeInputState(c, s) and + s.head() = [SummaryComponent::withContent(_), SummaryComponent::withoutContent(_)] and preservesValue = true ) } @@ -671,7 +682,7 @@ module Private { */ predicate summaryReadStep(Node pred, ContentSet c, Node succ) { exists(SummarizedCallable sc, SummaryComponentStack s | - pred = summaryNodeInputState(sc, s.drop(1)) and + pred = summaryNodeInputState(sc, s.tail()) and succ = summaryNodeInputState(sc, s) and SummaryComponent::content(c) = s.head() ) @@ -684,7 +695,7 @@ module Private { predicate summaryStoreStep(Node pred, ContentSet c, Node succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeOutputState(sc, s) and - succ = summaryNodeOutputState(sc, s.drop(1)) and + succ = summaryNodeOutputState(sc, s.tail()) and SummaryComponent::content(c) = s.head() ) } @@ -709,9 +720,22 @@ module Private { * node where field `b` is cleared). */ predicate summaryClearsContent(Node n, ContentSet c) { - exists(SummarizedCallable sc, ParameterPosition pos | - n = summaryNode(sc, TSummaryNodeClearsContentState(pos, true)) and - sc.clearsContent(pos, c) + exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | + n = summaryNode(sc, state) and + state.isInputState(sc, stack) and + stack.head() = SummaryComponent::withoutContent(c) + ) + } + + /** + * Holds if the value that is being tracked is expected to be stored inside + * content `c` at `n`. + */ + predicate summaryExpectsContent(Node n, ContentSet c) { + exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | + n = summaryNode(sc, state) and + state.isInputState(sc, stack) and + stack.head() = SummaryComponent::withContent(c) ) } @@ -723,22 +747,6 @@ module Private { sc = viableCallable(call) } - /** - * Holds if values stored inside content `c` are cleared inside a - * callable to which `arg` is an argument. - * - * In such cases, it is important to prevent use-use flow out of - * `arg` (see comment for `summaryClearsContent`). - */ - pragma[nomagic] - predicate summaryClearsContentArg(ArgNode arg, ContentSet c) { - exists(DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos | - argumentPositionMatch(call, arg, ppos) and - viableParam(call, sc, ppos, _) and - sc.clearsContent(ppos, c) - ) - } - pragma[nomagic] private ParamNode summaryArgParam0(DataFlowCall call, ArgNode arg) { exists(ParameterPosition ppos, SummarizedCallable sc | @@ -747,6 +755,27 @@ module Private { ) } + /** + * Holds if use-use flow starting from `arg` should be prohibited. + * + * This is the case when `arg` is the argument of a call that targets a + * flow summary where the corresponding parameter either clears contents + * or expects contents. + */ + pragma[nomagic] + predicate prohibitsUseUseFlow(ArgNode arg) { + exists(ParamNode p, Node mid, ParameterPosition ppos, Node ret | + p = summaryArgParam0(_, arg) and + p.isParameterOf(_, ppos) and + summaryLocalStep(p, mid, true) and + summaryLocalStep(mid, ret, true) and + isParameterPostUpdate(ret, _, ppos) + | + summaryClearsContent(mid, _) or + summaryExpectsContent(mid, _) + ) + } + pragma[nomagic] private ParamNode summaryArgParam(ArgNode arg, ReturnKindExt rk, OutNodeExt out) { exists(DataFlowCall call | @@ -1141,6 +1170,10 @@ module Private { Private::Steps::summaryClearsContent(a.asNode(), c) and b = a and value = "clear (" + c + ")" + or + Private::Steps::summaryExpectsContent(a.asNode(), c) and + b = a and + value = "expect (" + c + ")" ) or summaryPostUpdateNode(b.asNode(), a.asNode()) and From 2972af2602605617863ccc18e178fdf234105b9b Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 27 Apr 2022 14:23:46 +0200 Subject: [PATCH 0379/1618] C#: Introduce 'with/without content' summary components --- .../dataflow/internal/DataFlowPrivate.qll | 6 +- .../dataflow/internal/FlowSummaryImpl.qll | 149 +++++++++++------- .../csharp/frameworks/system/Collections.qll | 2 +- .../dataflow/external-models/steps.expected | 2 - 4 files changed, 96 insertions(+), 63 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index b958415bbee..9a562803473 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -421,7 +421,7 @@ predicate simpleLocalFlowStep(Node nodeFrom, Node nodeTo) { or exists(Ssa::Definition def | LocalFlow::localSsaFlowStepUseUse(def, nodeFrom, nodeTo) and - not FlowSummaryImpl::Private::Steps::summaryClearsContentArg(nodeFrom, _) and + not FlowSummaryImpl::Private::Steps::prohibitsUseUseFlow(nodeFrom) and not LocalFlow::usesInstanceField(def) ) or @@ -1718,7 +1718,9 @@ predicate clearsContent(Node n, Content c) { * Holds if the value that is being tracked is expected to be stored inside content `c` * at node `n`. */ -predicate expectsContent(Node n, ContentSet c) { none() } +predicate expectsContent(Node n, ContentSet c) { + FlowSummaryImpl::Private::Steps::summaryExpectsContent(n, c) +} /** * Holds if the node `n` is unreachable when the call context is `call`. diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index b975a31c394..0b688e97847 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -26,6 +26,10 @@ module Public { string toString() { exists(ContentSet c | this = TContentSummaryComponent(c) and result = c.toString()) or + exists(ContentSet c | this = TWithoutContentSummaryComponent(c) and result = "without " + c) + or + exists(ContentSet c | this = TWithContentSummaryComponent(c) and result = "with " + c) + or exists(ArgumentPosition pos | this = TParameterSummaryComponent(pos) and result = "parameter " + pos ) @@ -43,6 +47,12 @@ module Public { /** Gets a summary component for content `c`. */ SummaryComponent content(ContentSet c) { result = TContentSummaryComponent(c) } + /** Gets a summary component where data is not allowed to be stored in `c`. */ + SummaryComponent withoutContent(ContentSet c) { result = TWithoutContentSummaryComponent(c) } + + /** Gets a summary component where data must be stored in `c`. */ + SummaryComponent withContent(ContentSet c) { result = TWithContentSummaryComponent(c) } + /** Gets a summary component for a parameter at position `pos`. */ SummaryComponent parameter(ArgumentPosition pos) { result = TParameterSummaryComponent(pos) } @@ -216,6 +226,8 @@ module Public { /** * Holds if values stored inside `content` are cleared on objects passed as * arguments at position `pos` to this callable. + * + * TODO: Remove once all languages support `WithoutContent` tokens. */ pragma[nomagic] predicate clearsContent(ParameterPosition pos, ContentSet content) { none() } @@ -234,7 +246,9 @@ module Private { TContentSummaryComponent(ContentSet c) or TParameterSummaryComponent(ArgumentPosition pos) or TArgumentSummaryComponent(ParameterPosition pos) or - TReturnSummaryComponent(ReturnKind rk) + TReturnSummaryComponent(ReturnKind rk) or + TWithoutContentSummaryComponent(ContentSet c) or + TWithContentSummaryComponent(ContentSet c) private TParameterSummaryComponent thisParam() { result = TParameterSummaryComponent(instanceParameterPosition()) @@ -296,6 +310,23 @@ module Private { SummaryComponentStack::singleton(TArgumentSummaryComponent(_))) and preservesValue = preservesValue1.booleanAnd(preservesValue2) ) + or + exists(ParameterPosition ppos, ContentSet cs | + c.clearsContent(ppos, cs) and + input = SummaryComponentStack::push(SummaryComponent::withoutContent(cs), output) and + output = SummaryComponentStack::argument(ppos) and + preservesValue = true + ) + } + + private class MkClearStack extends RequiredSummaryComponentStack { + override predicate required(SummaryComponent head, SummaryComponentStack tail) { + exists(SummarizedCallable sc, ParameterPosition ppos, ContentSet cs | + sc.clearsContent(ppos, cs) and + head = SummaryComponent::withoutContent(cs) and + tail = SummaryComponentStack::argument(ppos) + ) + } } /** @@ -378,10 +409,7 @@ module Private { private newtype TSummaryNodeState = TSummaryNodeInputState(SummaryComponentStack s) { inputState(_, s) } or - TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } or - TSummaryNodeClearsContentState(ParameterPosition pos, boolean post) { - any(SummarizedCallable sc).clearsContent(pos, _) and post in [false, true] - } + TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } /** * A state used to break up (complex) flow summaries into atomic flow steps. @@ -428,12 +456,6 @@ module Private { this = TSummaryNodeOutputState(s) and result = "to write: " + s ) - or - exists(ParameterPosition pos, boolean post, string postStr | - this = TSummaryNodeClearsContentState(pos, post) and - (if post = true then postStr = " (post)" else postStr = "") and - result = "clear: " + pos + postStr - ) } } @@ -457,11 +479,6 @@ module Private { not parameterReadState(c, state, _) or state.isOutputState(c, _) - or - exists(ParameterPosition pos | - c.clearsContent(pos, _) and - state = TSummaryNodeClearsContentState(pos, _) - ) } pragma[noinline] @@ -497,8 +514,6 @@ module Private { parameterReadState(c, _, pos) or isParameterPostUpdate(_, c, pos) - or - c.clearsContent(pos, _) } private predicate callbackOutput( @@ -506,7 +521,7 @@ module Private { ) { any(SummaryNodeState state).isInputState(c, s) and s.head() = TReturnSummaryComponent(rk) and - receiver = summaryNodeInputState(c, s.drop(1)) + receiver = summaryNodeInputState(c, s.tail()) } private predicate callbackInput( @@ -514,7 +529,7 @@ module Private { ) { any(SummaryNodeState state).isOutputState(c, s) and s.head() = TParameterSummaryComponent(pos) and - receiver = summaryNodeInputState(c, s.drop(1)) + receiver = summaryNodeInputState(c, s.tail()) } /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ @@ -540,15 +555,21 @@ module Private { exists(SummarizedCallable c, SummaryComponentStack s, SummaryComponent head | head = s.head() | n = summaryNodeInputState(c, s) and ( + exists(ContentSet cont | result = getContentType(cont) | + head = TContentSummaryComponent(cont) or + head = TWithContentSummaryComponent(cont) + ) + or exists(ContentSet cont | - head = TContentSummaryComponent(cont) and result = getContentType(cont) + head = TWithoutContentSummaryComponent(cont) and + result = getNodeType(summaryNodeInputState(c, s.tail())) ) or exists(ReturnKind rk | head = TReturnSummaryComponent(rk) and result = getCallbackReturnType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), - s.drop(1))), rk) + s.tail())), rk) ) ) or @@ -567,16 +588,10 @@ module Private { exists(ArgumentPosition pos | head = TParameterSummaryComponent(pos) | result = getCallbackParameterType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), - s.drop(1))), pos) + s.tail())), pos) ) ) ) - or - exists(SummarizedCallable c, ParameterPosition pos, ParamNode p | - n = summaryNode(c, TSummaryNodeClearsContentState(pos, false)) and - p.isParameterOf(c, pos) and - result = getNodeType(p) - ) } /** Holds if summary node `out` contains output of kind `rk` from call `c`. */ @@ -602,9 +617,6 @@ module Private { exists(SummarizedCallable c, ParameterPosition pos | isParameterPostUpdate(post, c, pos) and pre.(ParamNode).isParameterOf(c, pos) - or - pre = summaryNode(c, TSummaryNodeClearsContentState(pos, false)) and - post = summaryNode(c, TSummaryNodeClearsContentState(pos, true)) ) or exists(SummarizedCallable callable, SummaryComponentStack s | @@ -628,8 +640,6 @@ module Private { */ predicate summaryAllowParameterReturnInSelf(ParamNode p) { exists(SummarizedCallable c, ParameterPosition ppos | p.isParameterOf(c, ppos) | - c.clearsContent(ppos, _) - or exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | summary(c, inputContents, outputContents, _) and inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and @@ -658,9 +668,10 @@ module Private { preservesValue = false and not summary(c, inputContents, outputContents, true) ) or - exists(SummarizedCallable c, ParameterPosition pos | - pred.(ParamNode).isParameterOf(c, pos) and - succ = summaryNode(c, TSummaryNodeClearsContentState(pos, _)) and + exists(SummarizedCallable c, SummaryComponentStack s | + pred = summaryNodeInputState(c, s.tail()) and + succ = summaryNodeInputState(c, s) and + s.head() = [SummaryComponent::withContent(_), SummaryComponent::withoutContent(_)] and preservesValue = true ) } @@ -671,7 +682,7 @@ module Private { */ predicate summaryReadStep(Node pred, ContentSet c, Node succ) { exists(SummarizedCallable sc, SummaryComponentStack s | - pred = summaryNodeInputState(sc, s.drop(1)) and + pred = summaryNodeInputState(sc, s.tail()) and succ = summaryNodeInputState(sc, s) and SummaryComponent::content(c) = s.head() ) @@ -684,7 +695,7 @@ module Private { predicate summaryStoreStep(Node pred, ContentSet c, Node succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeOutputState(sc, s) and - succ = summaryNodeOutputState(sc, s.drop(1)) and + succ = summaryNodeOutputState(sc, s.tail()) and SummaryComponent::content(c) = s.head() ) } @@ -709,9 +720,22 @@ module Private { * node where field `b` is cleared). */ predicate summaryClearsContent(Node n, ContentSet c) { - exists(SummarizedCallable sc, ParameterPosition pos | - n = summaryNode(sc, TSummaryNodeClearsContentState(pos, true)) and - sc.clearsContent(pos, c) + exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | + n = summaryNode(sc, state) and + state.isInputState(sc, stack) and + stack.head() = SummaryComponent::withoutContent(c) + ) + } + + /** + * Holds if the value that is being tracked is expected to be stored inside + * content `c` at `n`. + */ + predicate summaryExpectsContent(Node n, ContentSet c) { + exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | + n = summaryNode(sc, state) and + state.isInputState(sc, stack) and + stack.head() = SummaryComponent::withContent(c) ) } @@ -723,22 +747,6 @@ module Private { sc = viableCallable(call) } - /** - * Holds if values stored inside content `c` are cleared inside a - * callable to which `arg` is an argument. - * - * In such cases, it is important to prevent use-use flow out of - * `arg` (see comment for `summaryClearsContent`). - */ - pragma[nomagic] - predicate summaryClearsContentArg(ArgNode arg, ContentSet c) { - exists(DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos | - argumentPositionMatch(call, arg, ppos) and - viableParam(call, sc, ppos, _) and - sc.clearsContent(ppos, c) - ) - } - pragma[nomagic] private ParamNode summaryArgParam0(DataFlowCall call, ArgNode arg) { exists(ParameterPosition ppos, SummarizedCallable sc | @@ -747,6 +755,27 @@ module Private { ) } + /** + * Holds if use-use flow starting from `arg` should be prohibited. + * + * This is the case when `arg` is the argument of a call that targets a + * flow summary where the corresponding parameter either clears contents + * or expects contents. + */ + pragma[nomagic] + predicate prohibitsUseUseFlow(ArgNode arg) { + exists(ParamNode p, Node mid, ParameterPosition ppos, Node ret | + p = summaryArgParam0(_, arg) and + p.isParameterOf(_, ppos) and + summaryLocalStep(p, mid, true) and + summaryLocalStep(mid, ret, true) and + isParameterPostUpdate(ret, _, ppos) + | + summaryClearsContent(mid, _) or + summaryExpectsContent(mid, _) + ) + } + pragma[nomagic] private ParamNode summaryArgParam(ArgNode arg, ReturnKindExt rk, OutNodeExt out) { exists(DataFlowCall call | @@ -1141,6 +1170,10 @@ module Private { Private::Steps::summaryClearsContent(a.asNode(), c) and b = a and value = "clear (" + c + ")" + or + Private::Steps::summaryExpectsContent(a.asNode(), c) and + b = a and + value = "expect (" + c + ")" ) or summaryPostUpdateNode(b.asNode(), a.asNode()) and diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/system/Collections.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/system/Collections.qll index 17b41398d4f..3f92a46c254 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/system/Collections.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/system/Collections.qll @@ -55,7 +55,7 @@ private class SystemCollectionsIEnumerableClearFlow extends SummarizedCallable { } override predicate clearsContent(ParameterPosition pos, DataFlow::ContentSet content) { - pos.isThisParameter() and + (if this.(Modifiable).isStatic() then pos.getPosition() = 0 else pos.isThisParameter()) and content instanceof DataFlow::ElementContent } } diff --git a/csharp/ql/test/library-tests/dataflow/external-models/steps.expected b/csharp/ql/test/library-tests/dataflow/external-models/steps.expected index 6d8ed631741..fb2e2c9b110 100644 --- a/csharp/ql/test/library-tests/dataflow/external-models/steps.expected +++ b/csharp/ql/test/library-tests/dataflow/external-models/steps.expected @@ -8,8 +8,6 @@ summaryThroughStep | Steps.cs:22:13:22:16 | this access | Steps.cs:22:13:22:30 | call to method StepQualRes | false | | Steps.cs:23:13:23:25 | this access | Steps.cs:23:13:23:25 | call to method StepQualRes | false | | Steps.cs:26:13:26:31 | this access | Steps.cs:26:25:26:30 | [post] access to local variable argOut | false | -| Steps.cs:30:13:30:16 | this access | Steps.cs:30:13:30:16 | [post] this access | true | -| Steps.cs:34:13:34:16 | this access | Steps.cs:34:13:34:16 | [post] this access | true | | Steps.cs:41:29:41:29 | 0 | Steps.cs:41:13:41:30 | call to method StepGeneric | true | | Steps.cs:42:30:42:34 | false | Steps.cs:42:13:42:35 | call to method StepGeneric2 | true | | Steps.cs:44:36:44:43 | "string" | Steps.cs:44:13:44:44 | call to method StepOverride | true | From 04cc73823dda1dc12b0e30643cca1b94eee89999 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 27 Apr 2022 14:24:24 +0200 Subject: [PATCH 0380/1618] Java: Introduce 'with/without content' summary components --- .../dataflow/internal/DataFlowPrivate.qll | 4 +- .../java/dataflow/internal/DataFlowUtil.qll | 2 +- .../dataflow/internal/FlowSummaryImpl.qll | 149 +++++++++++------- 3 files changed, 95 insertions(+), 60 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll index 3111abc2ad7..f6f230bf35d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowPrivate.qll @@ -164,7 +164,9 @@ predicate clearsContent(Node n, Content c) { * Holds if the value that is being tracked is expected to be stored inside content `c` * at node `n`. */ -predicate expectsContent(Node n, ContentSet c) { none() } +predicate expectsContent(Node n, ContentSet c) { + FlowSummaryImpl::Private::Steps::summaryExpectsContent(n, c) +} /** * Gets a representative (boxed) type for `t` for the purpose of pruning diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll index 02f4dae5038..88b0e8d13a9 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll @@ -136,7 +136,7 @@ predicate simpleLocalFlowStep(Node node1, Node node2) { not exists(FieldRead fr | hasNonlocalValue(fr) and fr.getField().isStatic() and fr = node1.asExpr() ) and - not FlowSummaryImpl::Private::Steps::summaryClearsContentArg(node1, _) + not FlowSummaryImpl::Private::Steps::prohibitsUseUseFlow(node1) or ThisFlow::adjacentThisRefs(node1, node2) or diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index b975a31c394..0b688e97847 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -26,6 +26,10 @@ module Public { string toString() { exists(ContentSet c | this = TContentSummaryComponent(c) and result = c.toString()) or + exists(ContentSet c | this = TWithoutContentSummaryComponent(c) and result = "without " + c) + or + exists(ContentSet c | this = TWithContentSummaryComponent(c) and result = "with " + c) + or exists(ArgumentPosition pos | this = TParameterSummaryComponent(pos) and result = "parameter " + pos ) @@ -43,6 +47,12 @@ module Public { /** Gets a summary component for content `c`. */ SummaryComponent content(ContentSet c) { result = TContentSummaryComponent(c) } + /** Gets a summary component where data is not allowed to be stored in `c`. */ + SummaryComponent withoutContent(ContentSet c) { result = TWithoutContentSummaryComponent(c) } + + /** Gets a summary component where data must be stored in `c`. */ + SummaryComponent withContent(ContentSet c) { result = TWithContentSummaryComponent(c) } + /** Gets a summary component for a parameter at position `pos`. */ SummaryComponent parameter(ArgumentPosition pos) { result = TParameterSummaryComponent(pos) } @@ -216,6 +226,8 @@ module Public { /** * Holds if values stored inside `content` are cleared on objects passed as * arguments at position `pos` to this callable. + * + * TODO: Remove once all languages support `WithoutContent` tokens. */ pragma[nomagic] predicate clearsContent(ParameterPosition pos, ContentSet content) { none() } @@ -234,7 +246,9 @@ module Private { TContentSummaryComponent(ContentSet c) or TParameterSummaryComponent(ArgumentPosition pos) or TArgumentSummaryComponent(ParameterPosition pos) or - TReturnSummaryComponent(ReturnKind rk) + TReturnSummaryComponent(ReturnKind rk) or + TWithoutContentSummaryComponent(ContentSet c) or + TWithContentSummaryComponent(ContentSet c) private TParameterSummaryComponent thisParam() { result = TParameterSummaryComponent(instanceParameterPosition()) @@ -296,6 +310,23 @@ module Private { SummaryComponentStack::singleton(TArgumentSummaryComponent(_))) and preservesValue = preservesValue1.booleanAnd(preservesValue2) ) + or + exists(ParameterPosition ppos, ContentSet cs | + c.clearsContent(ppos, cs) and + input = SummaryComponentStack::push(SummaryComponent::withoutContent(cs), output) and + output = SummaryComponentStack::argument(ppos) and + preservesValue = true + ) + } + + private class MkClearStack extends RequiredSummaryComponentStack { + override predicate required(SummaryComponent head, SummaryComponentStack tail) { + exists(SummarizedCallable sc, ParameterPosition ppos, ContentSet cs | + sc.clearsContent(ppos, cs) and + head = SummaryComponent::withoutContent(cs) and + tail = SummaryComponentStack::argument(ppos) + ) + } } /** @@ -378,10 +409,7 @@ module Private { private newtype TSummaryNodeState = TSummaryNodeInputState(SummaryComponentStack s) { inputState(_, s) } or - TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } or - TSummaryNodeClearsContentState(ParameterPosition pos, boolean post) { - any(SummarizedCallable sc).clearsContent(pos, _) and post in [false, true] - } + TSummaryNodeOutputState(SummaryComponentStack s) { outputState(_, s) } /** * A state used to break up (complex) flow summaries into atomic flow steps. @@ -428,12 +456,6 @@ module Private { this = TSummaryNodeOutputState(s) and result = "to write: " + s ) - or - exists(ParameterPosition pos, boolean post, string postStr | - this = TSummaryNodeClearsContentState(pos, post) and - (if post = true then postStr = " (post)" else postStr = "") and - result = "clear: " + pos + postStr - ) } } @@ -457,11 +479,6 @@ module Private { not parameterReadState(c, state, _) or state.isOutputState(c, _) - or - exists(ParameterPosition pos | - c.clearsContent(pos, _) and - state = TSummaryNodeClearsContentState(pos, _) - ) } pragma[noinline] @@ -497,8 +514,6 @@ module Private { parameterReadState(c, _, pos) or isParameterPostUpdate(_, c, pos) - or - c.clearsContent(pos, _) } private predicate callbackOutput( @@ -506,7 +521,7 @@ module Private { ) { any(SummaryNodeState state).isInputState(c, s) and s.head() = TReturnSummaryComponent(rk) and - receiver = summaryNodeInputState(c, s.drop(1)) + receiver = summaryNodeInputState(c, s.tail()) } private predicate callbackInput( @@ -514,7 +529,7 @@ module Private { ) { any(SummaryNodeState state).isOutputState(c, s) and s.head() = TParameterSummaryComponent(pos) and - receiver = summaryNodeInputState(c, s.drop(1)) + receiver = summaryNodeInputState(c, s.tail()) } /** Holds if a call targeting `receiver` should be synthesized inside `c`. */ @@ -540,15 +555,21 @@ module Private { exists(SummarizedCallable c, SummaryComponentStack s, SummaryComponent head | head = s.head() | n = summaryNodeInputState(c, s) and ( + exists(ContentSet cont | result = getContentType(cont) | + head = TContentSummaryComponent(cont) or + head = TWithContentSummaryComponent(cont) + ) + or exists(ContentSet cont | - head = TContentSummaryComponent(cont) and result = getContentType(cont) + head = TWithoutContentSummaryComponent(cont) and + result = getNodeType(summaryNodeInputState(c, s.tail())) ) or exists(ReturnKind rk | head = TReturnSummaryComponent(rk) and result = getCallbackReturnType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), - s.drop(1))), rk) + s.tail())), rk) ) ) or @@ -567,16 +588,10 @@ module Private { exists(ArgumentPosition pos | head = TParameterSummaryComponent(pos) | result = getCallbackParameterType(getNodeType(summaryNodeInputState(pragma[only_bind_out](c), - s.drop(1))), pos) + s.tail())), pos) ) ) ) - or - exists(SummarizedCallable c, ParameterPosition pos, ParamNode p | - n = summaryNode(c, TSummaryNodeClearsContentState(pos, false)) and - p.isParameterOf(c, pos) and - result = getNodeType(p) - ) } /** Holds if summary node `out` contains output of kind `rk` from call `c`. */ @@ -602,9 +617,6 @@ module Private { exists(SummarizedCallable c, ParameterPosition pos | isParameterPostUpdate(post, c, pos) and pre.(ParamNode).isParameterOf(c, pos) - or - pre = summaryNode(c, TSummaryNodeClearsContentState(pos, false)) and - post = summaryNode(c, TSummaryNodeClearsContentState(pos, true)) ) or exists(SummarizedCallable callable, SummaryComponentStack s | @@ -628,8 +640,6 @@ module Private { */ predicate summaryAllowParameterReturnInSelf(ParamNode p) { exists(SummarizedCallable c, ParameterPosition ppos | p.isParameterOf(c, ppos) | - c.clearsContent(ppos, _) - or exists(SummaryComponentStack inputContents, SummaryComponentStack outputContents | summary(c, inputContents, outputContents, _) and inputContents.bottom() = pragma[only_bind_into](TArgumentSummaryComponent(ppos)) and @@ -658,9 +668,10 @@ module Private { preservesValue = false and not summary(c, inputContents, outputContents, true) ) or - exists(SummarizedCallable c, ParameterPosition pos | - pred.(ParamNode).isParameterOf(c, pos) and - succ = summaryNode(c, TSummaryNodeClearsContentState(pos, _)) and + exists(SummarizedCallable c, SummaryComponentStack s | + pred = summaryNodeInputState(c, s.tail()) and + succ = summaryNodeInputState(c, s) and + s.head() = [SummaryComponent::withContent(_), SummaryComponent::withoutContent(_)] and preservesValue = true ) } @@ -671,7 +682,7 @@ module Private { */ predicate summaryReadStep(Node pred, ContentSet c, Node succ) { exists(SummarizedCallable sc, SummaryComponentStack s | - pred = summaryNodeInputState(sc, s.drop(1)) and + pred = summaryNodeInputState(sc, s.tail()) and succ = summaryNodeInputState(sc, s) and SummaryComponent::content(c) = s.head() ) @@ -684,7 +695,7 @@ module Private { predicate summaryStoreStep(Node pred, ContentSet c, Node succ) { exists(SummarizedCallable sc, SummaryComponentStack s | pred = summaryNodeOutputState(sc, s) and - succ = summaryNodeOutputState(sc, s.drop(1)) and + succ = summaryNodeOutputState(sc, s.tail()) and SummaryComponent::content(c) = s.head() ) } @@ -709,9 +720,22 @@ module Private { * node where field `b` is cleared). */ predicate summaryClearsContent(Node n, ContentSet c) { - exists(SummarizedCallable sc, ParameterPosition pos | - n = summaryNode(sc, TSummaryNodeClearsContentState(pos, true)) and - sc.clearsContent(pos, c) + exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | + n = summaryNode(sc, state) and + state.isInputState(sc, stack) and + stack.head() = SummaryComponent::withoutContent(c) + ) + } + + /** + * Holds if the value that is being tracked is expected to be stored inside + * content `c` at `n`. + */ + predicate summaryExpectsContent(Node n, ContentSet c) { + exists(SummarizedCallable sc, SummaryNodeState state, SummaryComponentStack stack | + n = summaryNode(sc, state) and + state.isInputState(sc, stack) and + stack.head() = SummaryComponent::withContent(c) ) } @@ -723,22 +747,6 @@ module Private { sc = viableCallable(call) } - /** - * Holds if values stored inside content `c` are cleared inside a - * callable to which `arg` is an argument. - * - * In such cases, it is important to prevent use-use flow out of - * `arg` (see comment for `summaryClearsContent`). - */ - pragma[nomagic] - predicate summaryClearsContentArg(ArgNode arg, ContentSet c) { - exists(DataFlowCall call, SummarizedCallable sc, ParameterPosition ppos | - argumentPositionMatch(call, arg, ppos) and - viableParam(call, sc, ppos, _) and - sc.clearsContent(ppos, c) - ) - } - pragma[nomagic] private ParamNode summaryArgParam0(DataFlowCall call, ArgNode arg) { exists(ParameterPosition ppos, SummarizedCallable sc | @@ -747,6 +755,27 @@ module Private { ) } + /** + * Holds if use-use flow starting from `arg` should be prohibited. + * + * This is the case when `arg` is the argument of a call that targets a + * flow summary where the corresponding parameter either clears contents + * or expects contents. + */ + pragma[nomagic] + predicate prohibitsUseUseFlow(ArgNode arg) { + exists(ParamNode p, Node mid, ParameterPosition ppos, Node ret | + p = summaryArgParam0(_, arg) and + p.isParameterOf(_, ppos) and + summaryLocalStep(p, mid, true) and + summaryLocalStep(mid, ret, true) and + isParameterPostUpdate(ret, _, ppos) + | + summaryClearsContent(mid, _) or + summaryExpectsContent(mid, _) + ) + } + pragma[nomagic] private ParamNode summaryArgParam(ArgNode arg, ReturnKindExt rk, OutNodeExt out) { exists(DataFlowCall call | @@ -1141,6 +1170,10 @@ module Private { Private::Steps::summaryClearsContent(a.asNode(), c) and b = a and value = "clear (" + c + ")" + or + Private::Steps::summaryExpectsContent(a.asNode(), c) and + b = a and + value = "expect (" + c + ")" ) or summaryPostUpdateNode(b.asNode(), a.asNode()) and From 7bcc5db4a6f52f9e2472e97415bb7b7c2e49ab56 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 May 2022 16:01:54 +0200 Subject: [PATCH 0381/1618] Swift: parametrize namespace and other things in codegen This is so that we can use this in the PoC branch. --- swift/codegen/cppgen.py | 9 ++++--- swift/codegen/lib/cpp.py | 11 ++++++-- swift/codegen/lib/options.py | 3 +++ swift/codegen/templates/cpp_classes.mustache | 14 +++++----- swift/codegen/templates/trap_tags.mustache | 2 +- swift/codegen/templates/trap_traps.mustache | 8 +++--- swift/codegen/test/test_cppgen.py | 28 ++++++++++++-------- swift/codegen/test/test_trapgen.py | 19 ++++++++++--- swift/codegen/trapgen.py | 7 +++-- swift/extractor/trap/BUILD.bazel | 14 ++++++++-- 10 files changed, 76 insertions(+), 39 deletions(-) diff --git a/swift/codegen/cppgen.py b/swift/codegen/cppgen.py index bbd65368e6f..6b2d616a348 100644 --- a/swift/codegen/cppgen.py +++ b/swift/codegen/cppgen.py @@ -1,7 +1,7 @@ import functools -import inflection from typing import Dict +import inflection from toposort import toposort_flatten from swift.codegen.lib import cpp, generator, schema @@ -20,7 +20,7 @@ def _get_type(t: str) -> str: def _get_field(cls: schema.Class, p: schema.Property) -> cpp.Field: trap_name = None if not p.is_single: - trap_name = inflection.pluralize(inflection.camelize(f"{cls.name}_{p.name}")) + "Trap" + trap_name = inflection.pluralize(inflection.camelize(f"{cls.name}_{p.name}")) args = dict( name=p.name + ("_" if p.name in cpp.cpp_keywords else ""), type=_get_type(p.type), @@ -41,7 +41,7 @@ class Processor: cls = self._classmap[name] trap_name = None if not cls.derived or any(p.is_single for p in cls.properties): - trap_name = inflection.pluralize(cls.name) + "Trap" + trap_name = inflection.pluralize(cls.name) return cpp.Class( name=name, bases=[self._get_class(b) for b in cls.bases], @@ -58,7 +58,8 @@ class Processor: def generate(opts, renderer): processor = Processor({cls.name: cls for cls in schema.load(opts.schema).classes}) out = opts.cpp_output - renderer.render(cpp.ClassList(processor.get_classes()), out / "TrapClasses.h") + renderer.render(cpp.ClassList(processor.get_classes(), opts.cpp_namespace, opts.trap_suffix, + opts.cpp_include_dir), out / "TrapClasses.h") tags = ("cpp", "schema") diff --git a/swift/codegen/lib/cpp.py b/swift/codegen/lib/cpp.py index 9395121ff5a..c3e9e25c561 100644 --- a/swift/codegen/lib/cpp.py +++ b/swift/codegen/lib/cpp.py @@ -105,14 +105,18 @@ class Tag: class TrapList: template: ClassVar = 'trap_traps' - traps: List[Trap] = field(default_factory=list) + traps: List[Trap] + namespace: str + trap_suffix: str + include_dir: str @dataclass class TagList: template: ClassVar = 'trap_tags' - tags: List[Tag] = field(default_factory=list) + tags: List[Tag] + namespace: str @dataclass @@ -148,3 +152,6 @@ class ClassList: template: ClassVar = "cpp_classes" classes: List[Class] + namespace: str + trap_suffix: str + include_dir: str diff --git a/swift/codegen/lib/options.py b/swift/codegen/lib/options.py index 9dbc19355e0..2b586a8d90b 100644 --- a/swift/codegen/lib/options.py +++ b/swift/codegen/lib/options.py @@ -16,6 +16,9 @@ def _init_options(): Option("--ql-stub-output", tags=["ql"], type=_abspath, default=paths.swift_dir / "ql/lib/codeql/swift/elements") Option("--codeql-binary", tags=["ql"], default="codeql") Option("--cpp-output", tags=["cpp"], type=_abspath, required=True) + Option("--cpp-namespace", tags=["cpp"], default="codeql") + Option("--trap-suffix", tags=["cpp"], default="Trap") + Option("--cpp-include-dir", tags=["cpp"], required=True) def _abspath(x): diff --git a/swift/codegen/templates/cpp_classes.mustache b/swift/codegen/templates/cpp_classes.mustache index 504ca92934b..33757828951 100644 --- a/swift/codegen/templates/cpp_classes.mustache +++ b/swift/codegen/templates/cpp_classes.mustache @@ -6,10 +6,10 @@ #include #include -#include "swift/extractor/trap/TrapLabel.h" -#include "swift/extractor/trap/TrapEntries.h" +#include "{{include_dir}}/TrapLabel.h" +#include "{{include_dir}}/TrapEntries.h" -namespace codeql { +namespace {{namespace}} { {{#classes}} struct {{name}}{{#final}} : Binding<{{name}}Tag>{{#bases}}, {{ref.name}}{{/bases}}{{/final}}{{^final}}{{#has_bases}}: {{#bases}}{{^first}}, {{/first}}{{ref.name}}{{/bases}}{{/has_bases}}{{/final}} { @@ -30,21 +30,21 @@ struct {{name}}{{#final}} : Binding<{{name}}Tag>{{#bases}}, {{ref.name}}{{/bases {{ref.name}}::emit(id, out); {{/bases}} {{#trap_name}} - out << {{.}}{id{{#single_fields}}, {{name}}{{/single_fields}}} << '\n'; + out << {{.}}{{trap_suffix}}{id{{#single_fields}}, {{name}}{{/single_fields}}} << '\n'; {{/trap_name}} {{#fields}} {{#is_optional}} {{^is_repeated}} - if ({{name}}) out << {{trap_name}}{id, *{{name}}} << '\n'; + if ({{name}}) out << {{trap_name}}{{trap_suffix}}{id, *{{name}}} << '\n'; {{/is_repeated}} {{/is_optional}} {{#is_repeated}} for (auto i = 0u; i < {{name}}.size(); ++i) { {{^is_optional}} - out << {{trap_name}}{id, i, {{name}}[i]}; + out << {{trap_name}}{{trap_suffix}}{id, i, {{name}}[i]}; {{/is_optional}} {{#is_optional}} - if ({{name}}[i]) out << {{trap_name}}{id, i, *{{name}}[i]}; + if ({{name}}[i]) out << {{trap_name}}{{trap_suffix}}{id, i, *{{name}}[i]}; {{/is_optional}} } {{/is_repeated}} diff --git a/swift/codegen/templates/trap_tags.mustache b/swift/codegen/templates/trap_tags.mustache index 6098bf81808..2c1631d1765 100644 --- a/swift/codegen/templates/trap_tags.mustache +++ b/swift/codegen/templates/trap_tags.mustache @@ -2,7 +2,7 @@ // clang-format off #pragma once -namespace codeql { +namespace {{namespace}} { {{#tags}} // {{id}} diff --git a/swift/codegen/templates/trap_traps.mustache b/swift/codegen/templates/trap_traps.mustache index dd1c560b958..1235c444e98 100644 --- a/swift/codegen/templates/trap_traps.mustache +++ b/swift/codegen/templates/trap_traps.mustache @@ -5,14 +5,14 @@ #include #include -#include "swift/extractor/trap/TrapLabel.h" -#include "swift/extractor/trap/TrapTags.h" +#include "{{include_dir}}/TrapLabel.h" +#include "{{include_dir}}/TrapTags.h" -namespace codeql { +namespace {{namespace}} { {{#traps}} // {{table_name}} -struct {{name}}Trap { +struct {{name}}{{trap_suffix}} { static constexpr bool is_binding = {{#id}}true{{/id}}{{^id}}false{{/id}}; {{#id}} {{type}} getBoundLabel() const { return {{cpp_name}}; } diff --git a/swift/codegen/test/test_cppgen.py b/swift/codegen/test/test_cppgen.py index 1dbb6b61bfe..c8df2b5da81 100644 --- a/swift/codegen/test/test_cppgen.py +++ b/swift/codegen/test/test_cppgen.py @@ -10,6 +10,9 @@ output_dir = pathlib.Path("path", "to", "output") @pytest.fixture def generate(opts, renderer, input): opts.cpp_output = output_dir + opts.cpp_namespace = "test_namespace" + opts.trap_suffix = "TestTrapSuffix" + opts.cpp_include_dir = "my/include/dir" def ret(classes): input.classes = classes @@ -17,6 +20,9 @@ def generate(opts, renderer, input): assert set(generated) == {output_dir / "TrapClasses.h"} generated = generated[output_dir / "TrapClasses.h"] assert isinstance(generated, cpp.ClassList) + assert generated.namespace == opts.cpp_namespace + assert generated.trap_suffix == opts.trap_suffix + assert generated.include_dir == opts.cpp_include_dir return generated.classes return ret @@ -30,7 +36,7 @@ def test_empty_class(generate): assert generate([ schema.Class(name="MyClass"), ]) == [ - cpp.Class(name="MyClass", final=True, trap_name="MyClassesTrap") + cpp.Class(name="MyClass", final=True, trap_name="MyClasses") ] @@ -41,7 +47,7 @@ def test_two_class_hierarchy(generate): schema.Class(name="B", bases={"A"}), ]) == [ base, - cpp.Class(name="B", bases=[base], final=True, trap_name="BsTrap"), + cpp.Class(name="B", bases=[base], final=True, trap_name="Bs"), ] @@ -50,8 +56,8 @@ def test_complex_hierarchy_topologically_ordered(generate): b = cpp.Class(name="B") c = cpp.Class(name="C", bases=[a]) d = cpp.Class(name="D", bases=[a]) - e = cpp.Class(name="E", bases=[b, c, d], final=True, trap_name="EsTrap") - f = cpp.Class(name="F", bases=[c], final=True, trap_name="FsTrap") + e = cpp.Class(name="E", bases=[b, c, d], final=True, trap_name="Es") + f = cpp.Class(name="F", bases=[c], final=True, trap_name="Fs") assert generate([ schema.Class(name="F", bases={"C"}), schema.Class(name="B", derived={"E"}), @@ -70,9 +76,9 @@ def test_complex_hierarchy_topologically_ordered(generate): ]) @pytest.mark.parametrize("property_cls,optional,repeated,trap_name", [ (schema.SingleProperty, False, False, None), - (schema.OptionalProperty, True, False, "MyClassPropsTrap"), - (schema.RepeatedProperty, False, True, "MyClassPropsTrap"), - (schema.RepeatedOptionalProperty, True, True, "MyClassPropsTrap"), + (schema.OptionalProperty, True, False, "MyClassProps"), + (schema.RepeatedProperty, False, True, "MyClassProps"), + (schema.RepeatedOptionalProperty, True, True, "MyClassProps"), ]) def test_class_with_field(generate, type, expected, property_cls, optional, repeated, trap_name): assert generate([ @@ -81,7 +87,7 @@ def test_class_with_field(generate, type, expected, property_cls, optional, repe cpp.Class(name="MyClass", fields=[cpp.Field("prop", expected, is_optional=optional, is_repeated=repeated, trap_name=trap_name)], - trap_name="MyClassesTrap", + trap_name="MyClasses", final=True) ] @@ -94,7 +100,7 @@ def test_class_with_overridden_unsigned_field(generate, name): ]) == [ cpp.Class(name="MyClass", fields=[cpp.Field(name, "unsigned")], - trap_name="MyClassesTrap", + trap_name="MyClasses", final=True) ] @@ -106,7 +112,7 @@ def test_class_with_overridden_underscore_field(generate): ]) == [ cpp.Class(name="MyClass", fields=[cpp.Field("something", "bar")], - trap_name="MyClassesTrap", + trap_name="MyClasses", final=True) ] @@ -119,7 +125,7 @@ def test_class_with_keyword_field(generate, name): ]) == [ cpp.Class(name="MyClass", fields=[cpp.Field(name + "_", "bar")], - trap_name="MyClassesTrap", + trap_name="MyClasses", final=True) ] diff --git a/swift/codegen/test/test_trapgen.py b/swift/codegen/test/test_trapgen.py index 5ac6cd3718c..37fb5b062e1 100644 --- a/swift/codegen/test/test_trapgen.py +++ b/swift/codegen/test/test_trapgen.py @@ -10,6 +10,9 @@ output_dir = pathlib.Path("path", "to", "output") @pytest.fixture def generate(opts, renderer, dbscheme_input): opts.cpp_output = output_dir + opts.cpp_namespace = "test_namespace" + opts.trap_suffix = "TrapSuffix" + opts.cpp_include_dir = "my/include/dir" def ret(entities): dbscheme_input.entities = entities @@ -22,27 +25,35 @@ def generate(opts, renderer, dbscheme_input): @pytest.fixture -def generate_traps(generate): +def generate_traps(opts, generate): def ret(entities): traps, _ = generate(entities) assert isinstance(traps, cpp.TrapList) + assert traps.namespace == opts.cpp_namespace + assert traps.trap_suffix == opts.trap_suffix + assert traps.include_dir == opts.cpp_include_dir return traps.traps return ret @pytest.fixture -def generate_tags(generate): +def generate_tags(opts, generate): def ret(entities): _, tags = generate(entities) assert isinstance(tags, cpp.TagList) + assert tags.namespace == opts.cpp_namespace return tags.tags return ret -def test_empty(generate): - assert generate([]) == (cpp.TrapList([]), cpp.TagList([])) +def test_empty_traps(generate_traps): + assert generate_traps([]) == [] + + +def test_empty_tags(generate_tags): + assert generate_tags([]) == [] def test_one_empty_table_rejected(generate_traps): diff --git a/swift/codegen/trapgen.py b/swift/codegen/trapgen.py index 555b5bf9fdb..797ce5ed215 100755 --- a/swift/codegen/trapgen.py +++ b/swift/codegen/trapgen.py @@ -1,14 +1,12 @@ #!/usr/bin/env python3 import logging -import re import inflection from toposort import toposort_flatten from swift.codegen.lib import dbscheme, generator, cpp - log = logging.getLogger(__name__) @@ -70,7 +68,8 @@ def generate(opts, renderer): for d in e.rhs: tag_graph.setdefault(d.type, set()).add(e.lhs) - renderer.render(cpp.TrapList(traps), out / "TrapEntries.h") + renderer.render(cpp.TrapList(traps, opts.cpp_namespace, opts.trap_suffix, opts.cpp_include_dir), + out / "TrapEntries.h") tags = [] for index, tag in enumerate(toposort_flatten(tag_graph)): @@ -80,7 +79,7 @@ def generate(opts, renderer): index=index, id=tag, )) - renderer.render(cpp.TagList(tags), out / "TrapTags.h") + renderer.render(cpp.TagList(tags, opts.cpp_namespace), out / "TrapTags.h") tags = ("cpp", "dbscheme") diff --git a/swift/extractor/trap/BUILD.bazel b/swift/extractor/trap/BUILD.bazel index 7fa90c89e91..be611f3ddc6 100644 --- a/swift/extractor/trap/BUILD.bazel +++ b/swift/extractor/trap/BUILD.bazel @@ -5,7 +5,12 @@ genrule( "TrapEntries.h", "TrapTags.h", ], - cmd = "$(location //swift/codegen:trapgen) --dbscheme $< --cpp-output $(RULEDIR)", + cmd = " ".join([ + "$(location //swift/codegen:trapgen)", + "--dbscheme $<", + "--cpp-include-dir " + package_name(), + "--cpp-output $(RULEDIR)", + ]), exec_tools = ["//swift/codegen:trapgen"], ) @@ -18,7 +23,12 @@ genrule( outs = [ "TrapClasses.h", ], - cmd = "$(location //swift/codegen:cppgen) --schema $(location //swift/codegen:schema) --cpp-output $(RULEDIR)", + cmd = " ".join([ + "$(location //swift/codegen:cppgen)", + "--schema $(location //swift/codegen:schema)", + "--cpp-include-dir " + package_name(), + "--cpp-output $(RULEDIR)", + ]), exec_tools = ["//swift/codegen:cppgen"], ) From ac3cceab19c843ba30a9133c65bc4e7e63fa894d Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 May 2022 16:15:16 +0200 Subject: [PATCH 0382/1618] Swift: turn some generated paths to relative --- swift/codegen/templates/cpp_classes.mustache | 2 +- swift/codegen/templates/trap_traps.mustache | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/swift/codegen/templates/cpp_classes.mustache b/swift/codegen/templates/cpp_classes.mustache index 33757828951..7fedf77884a 100644 --- a/swift/codegen/templates/cpp_classes.mustache +++ b/swift/codegen/templates/cpp_classes.mustache @@ -7,7 +7,7 @@ #include #include "{{include_dir}}/TrapLabel.h" -#include "{{include_dir}}/TrapEntries.h" +#include "./TrapEntries.h" namespace {{namespace}} { {{#classes}} diff --git a/swift/codegen/templates/trap_traps.mustache b/swift/codegen/templates/trap_traps.mustache index 1235c444e98..6cc0f6299a7 100644 --- a/swift/codegen/templates/trap_traps.mustache +++ b/swift/codegen/templates/trap_traps.mustache @@ -6,7 +6,7 @@ #include #include "{{include_dir}}/TrapLabel.h" -#include "{{include_dir}}/TrapTags.h" +#include "./TrapTags.h" namespace {{namespace}} { {{#traps}} From c4bc7050a9ae60e2c10917ec625de4a18e6c4380 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 5 May 2022 16:26:09 +0100 Subject: [PATCH 0383/1618] C++: Additional test cases. --- .../query-tests/Security/CWE/CWE-611/tests.h | 1 + .../Security/CWE/CWE-611/tests3.cpp | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h index 65baa12ed9e..7d745382174 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests.h @@ -21,5 +21,6 @@ class XMLUni { public: static const XMLCh fgXercesDisableDefaultEntityResolution[]; + static const XMLCh fgXercesHarmlessOption[]; }; diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp index 96f8dbaef06..622ed016200 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp @@ -55,3 +55,28 @@ void test3_5(InputSource &data) { test3_5_init(); p_3_5->parse(data); // GOOD } + +void test3_6(InputSource &data) { + SAX2XMLReader *p = XMLReaderFactory::createXMLReader(); + + p->setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, false); + p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] +} + +void test3_7(InputSource &data) { + SAX2XMLReader *p = XMLReaderFactory::createXMLReader(); + + p->setFeature(XMLUni::fgXercesHarmlessOption, true); + p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] +} + +void test3_8(InputSource &data) { + SAX2XMLReader *p = XMLReaderFactory::createXMLReader(); + const XMLCh *feature = XMLUni::fgXercesDisableDefaultEntityResolution; + + p->setFeature(feature, true); + p->parse(data); // GOOD +} + + + From b2b5fd281ff183321f5e126e28f67deb6f13a905 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 May 2022 17:34:00 +0200 Subject: [PATCH 0384/1618] Swift: add more parametrization This enables codegen to run on the swift PoC branch. --- swift/codegen/cppgen.py | 19 +++++++++-------- swift/codegen/dbschemegen.py | 8 +++---- swift/codegen/lib/cpp.py | 4 ++-- swift/codegen/lib/options.py | 3 ++- swift/codegen/qlgen.py | 9 ++++---- swift/codegen/templates/cpp_classes.mustache | 12 +++++------ swift/codegen/templates/trap_traps.mustache | 8 +++---- swift/codegen/test/test_cppgen.py | 10 ++++----- swift/codegen/test/test_trapgen.py | 10 ++++----- swift/codegen/test/utils.py | 6 ++++-- swift/codegen/trapgen.py | 22 ++++++++++---------- 11 files changed, 58 insertions(+), 53 deletions(-) diff --git a/swift/codegen/cppgen.py b/swift/codegen/cppgen.py index 6b2d616a348..f45512512aa 100644 --- a/swift/codegen/cppgen.py +++ b/swift/codegen/cppgen.py @@ -7,23 +7,23 @@ from toposort import toposort_flatten from swift.codegen.lib import cpp, generator, schema -def _get_type(t: str) -> str: +def _get_type(t: str, trap_affix: str) -> str: if t == "string": return "std::string" if t == "boolean": return "bool" if t[0].isupper(): - return f"TrapLabel<{t}Tag>" + return f"{trap_affix}Label<{t}Tag>" return t -def _get_field(cls: schema.Class, p: schema.Property) -> cpp.Field: +def _get_field(cls: schema.Class, p: schema.Property, trap_affix: str) -> cpp.Field: trap_name = None if not p.is_single: trap_name = inflection.pluralize(inflection.camelize(f"{cls.name}_{p.name}")) args = dict( name=p.name + ("_" if p.name in cpp.cpp_keywords else ""), - type=_get_type(p.type), + type=_get_type(p.type, trap_affix), is_optional=p.is_optional, is_repeated=p.is_repeated, trap_name=trap_name, @@ -33,8 +33,9 @@ def _get_field(cls: schema.Class, p: schema.Property) -> cpp.Field: class Processor: - def __init__(self, data: Dict[str, schema.Class]): + def __init__(self, data: Dict[str, schema.Class], trap_affix: str): self._classmap = data + self._trap_affix = trap_affix @functools.lru_cache(maxsize=None) def _get_class(self, name: str) -> cpp.Class: @@ -45,7 +46,7 @@ class Processor: return cpp.Class( name=name, bases=[self._get_class(b) for b in cls.bases], - fields=[_get_field(cls, p) for p in cls.properties], + fields=[_get_field(cls, p, self._trap_affix) for p in cls.properties], final=not cls.derived, trap_name=trap_name, ) @@ -56,10 +57,10 @@ class Processor: def generate(opts, renderer): - processor = Processor({cls.name: cls for cls in schema.load(opts.schema).classes}) + processor = Processor({cls.name: cls for cls in schema.load(opts.schema).classes}, opts.trap_affix) out = opts.cpp_output - renderer.render(cpp.ClassList(processor.get_classes(), opts.cpp_namespace, opts.trap_suffix, - opts.cpp_include_dir), out / "TrapClasses.h") + renderer.render(cpp.ClassList(processor.get_classes(), opts.cpp_namespace, opts.trap_affix, + opts.cpp_include_dir), out / f"{opts.trap_affix}Classes.h") tags = ("cpp", "schema") diff --git a/swift/codegen/dbschemegen.py b/swift/codegen/dbschemegen.py index c99cec1ea29..efe45c0b997 100755 --- a/swift/codegen/dbschemegen.py +++ b/swift/codegen/dbschemegen.py @@ -63,12 +63,12 @@ def get_declarations(data: schema.Schema): return [d for cls in data.classes for d in cls_to_dbscheme(cls)] -def get_includes(data: schema.Schema, include_dir: pathlib.Path): +def get_includes(data: schema.Schema, include_dir: pathlib.Path, swift_dir: pathlib.Path): includes = [] for inc in data.includes: inc = include_dir / inc with open(inc) as inclusion: - includes.append(SchemeInclude(src=inc.relative_to(paths.swift_dir), data=inclusion.read())) + includes.append(SchemeInclude(src=inc.relative_to(swift_dir), data=inclusion.read())) return includes @@ -78,8 +78,8 @@ def generate(opts, renderer): data = schema.load(input) - dbscheme = Scheme(src=input.relative_to(paths.swift_dir), - includes=get_includes(data, include_dir=input.parent), + dbscheme = Scheme(src=input.relative_to(opts.swift_dir), + includes=get_includes(data, include_dir=input.parent, swift_dir=opts.swift_dir), declarations=get_declarations(data)) renderer.render(dbscheme, out) diff --git a/swift/codegen/lib/cpp.py b/swift/codegen/lib/cpp.py index c3e9e25c561..7e360fcddf6 100644 --- a/swift/codegen/lib/cpp.py +++ b/swift/codegen/lib/cpp.py @@ -107,7 +107,7 @@ class TrapList: traps: List[Trap] namespace: str - trap_suffix: str + trap_affix: str include_dir: str @@ -153,5 +153,5 @@ class ClassList: classes: List[Class] namespace: str - trap_suffix: str + trap_affix: str include_dir: str diff --git a/swift/codegen/lib/options.py b/swift/codegen/lib/options.py index 2b586a8d90b..52de34d864e 100644 --- a/swift/codegen/lib/options.py +++ b/swift/codegen/lib/options.py @@ -10,6 +10,7 @@ from . import paths def _init_options(): Option("--verbose", "-v", action="store_true") + Option("--swift-dir", type=_abspath, default=paths.swift_dir) Option("--schema", tags=["schema"], type=_abspath, default=paths.swift_dir / "codegen/schema.yml") Option("--dbscheme", tags=["dbscheme"], type=_abspath, default=paths.swift_dir / "ql/lib/swift.dbscheme") Option("--ql-output", tags=["ql"], type=_abspath, default=paths.swift_dir / "ql/lib/codeql/swift/generated") @@ -17,7 +18,7 @@ def _init_options(): Option("--codeql-binary", tags=["ql"], default="codeql") Option("--cpp-output", tags=["cpp"], type=_abspath, required=True) Option("--cpp-namespace", tags=["cpp"], default="codeql") - Option("--trap-suffix", tags=["cpp"], default="Trap") + Option("--trap-affix", tags=["cpp"], default="Trap") Option("--cpp-include-dir", tags=["cpp"], required=True) diff --git a/swift/codegen/qlgen.py b/swift/codegen/qlgen.py index 26a5e2edcae..ad44a234c77 100755 --- a/swift/codegen/qlgen.py +++ b/swift/codegen/qlgen.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import logging +import pathlib import subprocess import inflection @@ -47,8 +48,8 @@ def get_ql_class(cls: schema.Class): ) -def get_import(file): - stem = file.relative_to(paths.swift_dir / "ql/lib").with_suffix("") +def get_import(file: pathlib.Path, swift_dir: pathlib.Path): + stem = file.relative_to(swift_dir / "ql/lib").with_suffix("") return str(stem).replace("/", ".") @@ -89,7 +90,7 @@ def generate(opts, renderer): imports = {} for c in classes: - imports[c.name] = get_import(stub_out / c.path) + imports[c.name] = get_import(stub_out / c.path, opts.swift_dir) for c in classes: qll = (out / c.path).with_suffix(".qll") @@ -97,7 +98,7 @@ def generate(opts, renderer): renderer.render(c, qll) stub_file = (stub_out / c.path).with_suffix(".qll") if not stub_file.is_file() or is_generated(stub_file): - stub = ql.Stub(name=c.name, base_import=get_import(qll)) + stub = ql.Stub(name=c.name, base_import=get_import(qll, opts.swift_dir)) renderer.render(stub, stub_file) # for example path/to/syntax/generated -> path/to/syntax.qll diff --git a/swift/codegen/templates/cpp_classes.mustache b/swift/codegen/templates/cpp_classes.mustache index 7fedf77884a..4dddf4dab06 100644 --- a/swift/codegen/templates/cpp_classes.mustache +++ b/swift/codegen/templates/cpp_classes.mustache @@ -6,8 +6,8 @@ #include #include -#include "{{include_dir}}/TrapLabel.h" -#include "./TrapEntries.h" +#include "{{include_dir}}/{{trap_affix}}Label.h" +#include "./{{trap_affix}}Entries.h" namespace {{namespace}} { {{#classes}} @@ -30,21 +30,21 @@ struct {{name}}{{#final}} : Binding<{{name}}Tag>{{#bases}}, {{ref.name}}{{/bases {{ref.name}}::emit(id, out); {{/bases}} {{#trap_name}} - out << {{.}}{{trap_suffix}}{id{{#single_fields}}, {{name}}{{/single_fields}}} << '\n'; + out << {{.}}{{trap_affix}}{id{{#single_fields}}, {{name}}{{/single_fields}}} << '\n'; {{/trap_name}} {{#fields}} {{#is_optional}} {{^is_repeated}} - if ({{name}}) out << {{trap_name}}{{trap_suffix}}{id, *{{name}}} << '\n'; + if ({{name}}) out << {{trap_name}}{{trap_affix}}{id, *{{name}}} << '\n'; {{/is_repeated}} {{/is_optional}} {{#is_repeated}} for (auto i = 0u; i < {{name}}.size(); ++i) { {{^is_optional}} - out << {{trap_name}}{{trap_suffix}}{id, i, {{name}}[i]}; + out << {{trap_name}}{{trap_affix}}{id, i, {{name}}[i]}; {{/is_optional}} {{#is_optional}} - if ({{name}}[i]) out << {{trap_name}}{{trap_suffix}}{id, i, *{{name}}[i]}; + if ({{name}}[i]) out << {{trap_name}}{{trap_affix}}{id, i, *{{name}}[i]}; {{/is_optional}} } {{/is_repeated}} diff --git a/swift/codegen/templates/trap_traps.mustache b/swift/codegen/templates/trap_traps.mustache index 6cc0f6299a7..1848d3fbc87 100644 --- a/swift/codegen/templates/trap_traps.mustache +++ b/swift/codegen/templates/trap_traps.mustache @@ -5,14 +5,14 @@ #include #include -#include "{{include_dir}}/TrapLabel.h" -#include "./TrapTags.h" +#include "{{include_dir}}/{{trap_affix}}Label.h" +#include "./{{trap_affix}}Tags.h" namespace {{namespace}} { {{#traps}} // {{table_name}} -struct {{name}}{{trap_suffix}} { +struct {{name}}{{trap_affix}} { static constexpr bool is_binding = {{#id}}true{{/id}}{{^id}}false{{/id}}; {{#id}} {{type}} getBoundLabel() const { return {{cpp_name}}; } @@ -23,7 +23,7 @@ struct {{name}}{{trap_suffix}} { {{/fields}} }; -inline std::ostream &operator<<(std::ostream &out, const {{name}}Trap &e) { +inline std::ostream &operator<<(std::ostream &out, const {{name}}{{trap_affix}} &e) { out << "{{table_name}}("{{#fields}}{{^first}} << ", "{{/first}} << {{#get_streamer}}e.{{cpp_name}}{{/get_streamer}}{{/fields}} << ")"; return out; diff --git a/swift/codegen/test/test_cppgen.py b/swift/codegen/test/test_cppgen.py index c8df2b5da81..b47a1159df1 100644 --- a/swift/codegen/test/test_cppgen.py +++ b/swift/codegen/test/test_cppgen.py @@ -11,17 +11,17 @@ output_dir = pathlib.Path("path", "to", "output") def generate(opts, renderer, input): opts.cpp_output = output_dir opts.cpp_namespace = "test_namespace" - opts.trap_suffix = "TestTrapSuffix" + opts.trap_affix = "TestTrapAffix" opts.cpp_include_dir = "my/include/dir" def ret(classes): input.classes = classes generated = run_generation(cppgen.generate, opts, renderer) - assert set(generated) == {output_dir / "TrapClasses.h"} - generated = generated[output_dir / "TrapClasses.h"] + assert set(generated) == {output_dir / "TestTrapAffixClasses.h"} + generated = generated[output_dir / "TestTrapAffixClasses.h"] assert isinstance(generated, cpp.ClassList) assert generated.namespace == opts.cpp_namespace - assert generated.trap_suffix == opts.trap_suffix + assert generated.trap_affix == opts.trap_affix assert generated.include_dir == opts.cpp_include_dir return generated.classes @@ -72,7 +72,7 @@ def test_complex_hierarchy_topologically_ordered(generate): ("a", "a"), ("string", "std::string"), ("boolean", "bool"), - ("MyClass", "TrapLabel"), + ("MyClass", "TestTrapAffixLabel"), ]) @pytest.mark.parametrize("property_cls,optional,repeated,trap_name", [ (schema.SingleProperty, False, False, None), diff --git a/swift/codegen/test/test_trapgen.py b/swift/codegen/test/test_trapgen.py index 37fb5b062e1..2aad0da1203 100644 --- a/swift/codegen/test/test_trapgen.py +++ b/swift/codegen/test/test_trapgen.py @@ -11,15 +11,15 @@ output_dir = pathlib.Path("path", "to", "output") def generate(opts, renderer, dbscheme_input): opts.cpp_output = output_dir opts.cpp_namespace = "test_namespace" - opts.trap_suffix = "TrapSuffix" + opts.trap_affix = "TrapAffix" opts.cpp_include_dir = "my/include/dir" def ret(entities): dbscheme_input.entities = entities generated = run_generation(trapgen.generate, opts, renderer) assert set(generated) == {output_dir / - "TrapEntries.h", output_dir / "TrapTags.h"} - return generated[output_dir / "TrapEntries.h"], generated[output_dir / "TrapTags.h"] + "TrapAffixEntries.h", output_dir / "TrapAffixTags.h"} + return generated[output_dir / "TrapAffixEntries.h"], generated[output_dir / "TrapAffixTags.h"] return ret @@ -30,7 +30,7 @@ def generate_traps(opts, generate): traps, _ = generate(entities) assert isinstance(traps, cpp.TrapList) assert traps.namespace == opts.cpp_namespace - assert traps.trap_suffix == opts.trap_suffix + assert traps.trap_affix == opts.trap_affix assert traps.include_dir == opts.cpp_include_dir return traps.traps @@ -106,7 +106,7 @@ def test_one_table_with_two_binding_first_is_id(generate_traps): @pytest.mark.parametrize("column,field", [ (dbscheme.Column("x", "string"), cpp.Field("x", "std::string")), (dbscheme.Column("y", "boolean"), cpp.Field("y", "bool")), - (dbscheme.Column("z", "@db_type"), cpp.Field("z", "TrapLabel")), + (dbscheme.Column("z", "@db_type"), cpp.Field("z", "TrapAffixLabel")), ]) def test_one_table_special_types(generate_traps, column, field): assert generate_traps([ diff --git a/swift/codegen/test/utils.py b/swift/codegen/test/utils.py index 038caf01571..bf646297af5 100644 --- a/swift/codegen/test/utils.py +++ b/swift/codegen/test/utils.py @@ -3,7 +3,7 @@ from unittest import mock import pytest -from swift.codegen.lib import render, schema +from swift.codegen.lib import render, schema, paths schema_dir = pathlib.Path("a", "dir") schema_file = schema_dir / "schema.yml" @@ -23,7 +23,9 @@ def renderer(): @pytest.fixture def opts(): - return mock.MagicMock() + ret = mock.MagicMock() + ret.swift_dir = paths.swift_dir + return ret @pytest.fixture(autouse=True) diff --git a/swift/codegen/trapgen.py b/swift/codegen/trapgen.py index 797ce5ed215..495a51a8388 100755 --- a/swift/codegen/trapgen.py +++ b/swift/codegen/trapgen.py @@ -15,10 +15,10 @@ def get_tag_name(s): return inflection.camelize(s[1:]) -def get_cpp_type(schema_type): +def get_cpp_type(schema_type: str, trap_affix: str): if schema_type.startswith("@"): tag = get_tag_name(schema_type) - return f"TrapLabel<{tag}Tag>" + return f"{trap_affix}Label<{tag}Tag>" if schema_type == "string": return "std::string" if schema_type == "boolean": @@ -26,13 +26,13 @@ def get_cpp_type(schema_type): return schema_type -def get_field(c: dbscheme.Column, table: str): +def get_field(c: dbscheme.Column, trap_affix: str): args = { "name": c.schema_name, "type": c.type, } args.update(cpp.get_field_override(c.schema_name)) - args["type"] = get_cpp_type(args["type"]) + args["type"] = get_cpp_type(args["type"], trap_affix) return cpp.Field(**args) @@ -43,14 +43,14 @@ def get_binding_column(t: dbscheme.Table): return None -def get_trap(t: dbscheme.Table): +def get_trap(t: dbscheme.Table, trap_affix: str): id = get_binding_column(t) if id: - id = get_field(id, t.name) + id = get_field(id, trap_affix) return cpp.Trap( table_name=t.name, name=inflection.camelize(t.name), - fields=[get_field(c, t.name) for c in t.columns], + fields=[get_field(c, trap_affix) for c in t.columns], id=id, ) @@ -62,14 +62,14 @@ def generate(opts, renderer): traps = [] for e in dbscheme.iterload(opts.dbscheme): if e.is_table: - traps.append(get_trap(e)) + traps.append(get_trap(e, opts.trap_affix)) elif e.is_union: tag_graph.setdefault(e.lhs, set()) for d in e.rhs: tag_graph.setdefault(d.type, set()).add(e.lhs) - renderer.render(cpp.TrapList(traps, opts.cpp_namespace, opts.trap_suffix, opts.cpp_include_dir), - out / "TrapEntries.h") + renderer.render(cpp.TrapList(traps, opts.cpp_namespace, opts.trap_affix, opts.cpp_include_dir), + out / f"{opts.trap_affix}Entries.h") tags = [] for index, tag in enumerate(toposort_flatten(tag_graph)): @@ -79,7 +79,7 @@ def generate(opts, renderer): index=index, id=tag, )) - renderer.render(cpp.TagList(tags, opts.cpp_namespace), out / "TrapTags.h") + renderer.render(cpp.TagList(tags, opts.cpp_namespace), out / f"{opts.trap_affix}Tags.h") tags = ("cpp", "dbscheme") From 6b5a1921dd32e6fe0c5f0119532d238676ca28e1 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 3 May 2022 17:56:27 +0100 Subject: [PATCH 0385/1618] C++: Support the SAX2XMLReader interface. --- cpp/ql/src/Security/CWE/CWE-611/XXE.ql | 74 ++++++++++++++++++- .../Security/CWE/CWE-611/XXE.expected | 12 +++ .../Security/CWE/CWE-611/tests3.cpp | 4 +- 3 files changed, 86 insertions(+), 4 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql index 43b4d0c0c01..349e576862f 100644 --- a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql @@ -64,6 +64,13 @@ class SAXParserClass extends Class { SAXParserClass() { this.hasName("SAXParser") } } +/** + * The `SAX2XMLReader` class. + */ +class SAX2XMLReader extends Class { + SAX2XMLReader() { this.hasName("SAX2XMLReader") } +} + /** * Gets a valid flow state for `AbstractDOMParser` or `SAXParser` flow. * @@ -168,12 +175,57 @@ class CreateEntityReferenceNodesTranformer extends XXEFlowStateTranformer { } /** - * The `AbstractDOMParser.parse` or `SAXParser.parse` method. + * The `XMLUni.fgXercesDisableDefaultEntityResolution` constant. + */ +class FeatureDisableDefaultEntityResolution extends Variable { + FeatureDisableDefaultEntityResolution() { + this.getName() = "fgXercesDisableDefaultEntityResolution" and + this.getDeclaringType().getName() = "XMLUni" + } +} + +/** + * A flow state transformer for a call to `SAX2XMLReader.setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, *)`. Transforms the flow + * state through the qualifier according to this setting. + */ +class SetFeatureTranformer extends XXEFlowStateTranformer { + Expr newValue; + + SetFeatureTranformer() { + exists(Call call, Function f | + call.getTarget() = f and + f.getDeclaringType() instanceof SAX2XMLReader and + f.hasName("setFeature") and + this = call.getQualifier() and + globalValueNumber(call.getArgument(0)).getAnExpr().(VariableAccess).getTarget() instanceof + FeatureDisableDefaultEntityResolution and + newValue = call.getArgument(1) + ) + } + + final override XXEFlowState transform(XXEFlowState flowstate) { + exists(int createEntityReferenceNodes | + encodeXercesFlowState(flowstate, _, createEntityReferenceNodes) and + ( + globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // true + encodeXercesFlowState(result, 1, createEntityReferenceNodes) + or + not globalValueNumber(newValue).getAnExpr().getValue().toInt() = 1 and // false or unknown + encodeXercesFlowState(result, 0, createEntityReferenceNodes) + ) + ) + } +} + +/** + * The `AbstractDOMParser.parse`, `SAXParser.parse` or `SAX2XMLReader.parse` + * method. */ class ParseFunction extends Function { ParseFunction() { this.getClassAndName("parse") instanceof AbstractDOMParserClass or - this.getClassAndName("parse") instanceof SAXParserClass + this.getClassAndName("parse") instanceof SAXParserClass or + this.getClassAndName("parse") instanceof SAX2XMLReader } } @@ -188,6 +240,17 @@ class CreateLSParser extends Function { } } +/** + * The `createXMLReader` function that returns a newly created `SAX2XMLReader` + * object. + */ +class CreateXMLReader extends Function { + CreateXMLReader() { + this.hasName("createXMLReader") and + this.getUnspecifiedType().(PointerType).getBaseType() instanceof SAX2XMLReader // returns a `SAX2XMLReader *`. + } +} + /** * A call to a `libxml2` function that parses XML. */ @@ -256,6 +319,13 @@ class XXEConfiguration extends DataFlow::Configuration { encodeXercesFlowState(flowstate, 0, 1) // default configuration ) or + // source is the result of a call to `createXMLReader`. + exists(Call call | + call.getTarget() instanceof CreateXMLReader and + call = node.asExpr() and + encodeXercesFlowState(flowstate, 0, 1) // default configuration + ) + or // source is an `options` argument on a `libxml2` parse call that specifies // at least one unsafe option. // diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected index 9e005341b9a..24371939674 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected @@ -1,6 +1,9 @@ edges | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | +| tests3.cpp:23:21:23:53 | call to createXMLReader | tests3.cpp:25:2:25:2 | p | +| tests3.cpp:60:21:60:53 | call to createXMLReader | tests3.cpp:63:2:63:2 | p | +| tests3.cpp:67:21:67:53 | call to createXMLReader | tests3.cpp:70:2:70:2 | p | | tests.cpp:15:23:15:43 | XercesDOMParser output argument | tests.cpp:17:2:17:2 | p | | tests.cpp:28:23:28:43 | XercesDOMParser output argument | tests.cpp:31:2:31:2 | p | | tests.cpp:35:19:35:19 | VariableAddress [post update] | tests.cpp:37:2:37:2 | p | @@ -32,6 +35,12 @@ nodes | tests2.cpp:22:2:22:2 | p | semmle.label | p | | tests2.cpp:33:17:33:31 | SAXParser output argument | semmle.label | SAXParser output argument | | tests2.cpp:37:2:37:2 | p | semmle.label | p | +| tests3.cpp:23:21:23:53 | call to createXMLReader | semmle.label | call to createXMLReader | +| tests3.cpp:25:2:25:2 | p | semmle.label | p | +| tests3.cpp:60:21:60:53 | call to createXMLReader | semmle.label | call to createXMLReader | +| tests3.cpp:63:2:63:2 | p | semmle.label | p | +| tests3.cpp:67:21:67:53 | call to createXMLReader | semmle.label | call to createXMLReader | +| tests3.cpp:70:2:70:2 | p | semmle.label | p | | tests4.cpp:26:34:26:48 | (int)... | semmle.label | (int)... | | tests4.cpp:36:34:36:50 | (int)... | semmle.label | (int)... | | tests4.cpp:46:34:46:68 | ... \| ... | semmle.label | ... \| ... | @@ -76,6 +85,9 @@ subpaths #select | tests2.cpp:22:2:22:2 | p | tests2.cpp:20:17:20:31 | SAXParser output argument | tests2.cpp:22:2:22:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:20:17:20:31 | SAXParser output argument | XML parser | | tests2.cpp:37:2:37:2 | p | tests2.cpp:33:17:33:31 | SAXParser output argument | tests2.cpp:37:2:37:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests2.cpp:33:17:33:31 | SAXParser output argument | XML parser | +| tests3.cpp:25:2:25:2 | p | tests3.cpp:23:21:23:53 | call to createXMLReader | tests3.cpp:25:2:25:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests3.cpp:23:21:23:53 | call to createXMLReader | XML parser | +| tests3.cpp:63:2:63:2 | p | tests3.cpp:60:21:60:53 | call to createXMLReader | tests3.cpp:63:2:63:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests3.cpp:60:21:60:53 | call to createXMLReader | XML parser | +| tests3.cpp:70:2:70:2 | p | tests3.cpp:67:21:67:53 | call to createXMLReader | tests3.cpp:70:2:70:2 | p | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests3.cpp:67:21:67:53 | call to createXMLReader | XML parser | | tests4.cpp:26:34:26:48 | (int)... | tests4.cpp:26:34:26:48 | (int)... | tests4.cpp:26:34:26:48 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:26:34:26:48 | (int)... | XML parser | | tests4.cpp:36:34:36:50 | (int)... | tests4.cpp:36:34:36:50 | (int)... | tests4.cpp:36:34:36:50 | (int)... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:36:34:36:50 | (int)... | XML parser | | tests4.cpp:46:34:46:68 | ... \| ... | tests4.cpp:46:34:46:68 | ... \| ... | tests4.cpp:46:34:46:68 | ... \| ... | This $@ is not configured to prevent an XML external entity (XXE) attack. | tests4.cpp:46:34:46:68 | ... \| ... | XML parser | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp index 622ed016200..15e518daf13 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/tests3.cpp @@ -60,14 +60,14 @@ void test3_6(InputSource &data) { SAX2XMLReader *p = XMLReaderFactory::createXMLReader(); p->setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, false); - p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] + p->parse(data); // BAD (parser not correctly configured) } void test3_7(InputSource &data) { SAX2XMLReader *p = XMLReaderFactory::createXMLReader(); p->setFeature(XMLUni::fgXercesHarmlessOption, true); - p->parse(data); // BAD (parser not correctly configured) [NOT DETECTED] + p->parse(data); // BAD (parser not correctly configured) } void test3_8(InputSource &data) { From 2d4d7aa094af067b908b2d134fcf7c2797b1885a Mon Sep 17 00:00:00 2001 From: ihsinme Date: Thu, 5 May 2022 18:40:29 +0300 Subject: [PATCH 0386/1618] Update DangerousUseOfExceptionBlocks.ql --- .../CWE-476/DangerousUseOfExceptionBlocks.ql | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql index 08dad379444..261e0a33df1 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql @@ -115,30 +115,29 @@ predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { /** Holds if `vro` may be released in the `catch`. */ pragma[inline] predicate newThrowDelete(CatchAnyBlock cb, Variable vro) { - exists(Expr e0, AssignExpr ase, NewOrNewArrayExpr nae | + exists(Expr e0, AssignExpr ase, NewOrNewArrayExpr nae | ase = vro.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and nae = ase.getRValue().(NewOrNewArrayExpr) and not nae.getAChild*().toString() = "nothrow" and - ( - e0 = nae or - e0 = nae.getEnclosingFunction().getACallToThisFunction() - ) and - vro = ase.getLValue().(VariableAccess).getTarget() and - e0.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and + ( + e0 = nae or + e0 = nae.getEnclosingFunction().getACallToThisFunction() + ) and + vro = ase.getLValue().(VariableAccess).getTarget() and + e0.getEnclosingStmt().getParentStmt*() = cb.getTryStmt().getStmt() and not exists(AssignExpr ase1 | vro = ase1.getLValue().(VariableAccess).getTarget() and ase1.getRValue().getValue() = "0" and ase1.getASuccessor*() = e0 ) ) and - not exists(Initializer it | + not exists(Initializer it | vro.getInitializer() = it and - it.getExpr().getValue() = "0" + it.getExpr().getValue() = "0" ) and - not exists(ConstructorFieldInit ci | - vro = ci.getTarget() - ) + not exists(ConstructorFieldInit ci | vro = ci.getTarget()) } + from CatchAnyBlock cb, string msg where exists(Variable vr, Variable vro, Expr exp | @@ -185,14 +184,16 @@ where exists(Variable vro, Expr exp | exp.getEnclosingStmt().getParentStmt*() = cb and exists(VariableAccess va | - ( - va = exp.(DeleteArrayExpr).getExpr().(VariableAccess) or - va = exp.(DeleteExpr).getExpr().(VariableAccess) - ) and - va.getEnclosingStmt() = exp.getEnclosingStmt() and - vro = va.getTarget() + ( + va = exp.(DeleteArrayExpr).getExpr().(VariableAccess) or + va = exp.(DeleteExpr).getExpr().(VariableAccess) + ) and + va.getEnclosingStmt() = exp.getEnclosingStmt() and + vro = va.getTarget() ) and - newThrowDelete(cb,vro) and - msg = "If the allocation in the try block fails, then an unallocated pointer "+vro.getName()+" will be freed in the catch block." + newThrowDelete(cb, vro) and + msg = + "If the allocation in the try block fails, then an unallocated pointer " + vro.getName() + + " will be freed in the catch block." ) select cb, msg From 453dadea1a58e89249e9384c412e05d022806ea3 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 5 May 2022 16:42:09 +0100 Subject: [PATCH 0387/1618] C++: Fix QLDoc. --- cpp/ql/src/Security/CWE/CWE-611/XXE.ql | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql index 349e576862f..413bcfa04f1 100644 --- a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql @@ -185,8 +185,9 @@ class FeatureDisableDefaultEntityResolution extends Variable { } /** - * A flow state transformer for a call to `SAX2XMLReader.setFeature(XMLUni::fgXercesDisableDefaultEntityResolution, *)`. Transforms the flow - * state through the qualifier according to this setting. + * A flow state transformer for a call to `SAX2XMLReader.setFeature` + * specifying the feature `XMLUni::fgXercesDisableDefaultEntityResolution`. + * Transforms the flow state through the qualifier according to this setting. */ class SetFeatureTranformer extends XXEFlowStateTranformer { Expr newValue; From 185a60f0342dac405ca8fd127cb1282822731c88 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Thu, 5 May 2022 19:16:54 +0300 Subject: [PATCH 0388/1618] Update test.cpp --- .../query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp index 9bf5767e19d..de0be1efff2 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/test.cpp @@ -92,7 +92,7 @@ void funcWork1() { for (size_t i = 0; i < 10; i++) { if (bufMyData[i]) - delete[] bufMyData[i]->buffer; // GOOD + delete[] bufMyData[i]->buffer; // BAD delete bufMyData[i]; } delete [] bufMyData; @@ -120,7 +120,7 @@ void funcWork2() { { for (size_t i = 0; i < 10; i++) { - delete[] bufMyData[i]->buffer; // GOOD + delete[] bufMyData[i]->buffer; // BAD delete bufMyData[i]; } delete [] bufMyData; @@ -143,7 +143,7 @@ void funcWork3() { { for (size_t i = 0; i < 10; i++) { - delete[] bufMyData[i]->buffer; // GOOD + delete[] bufMyData[i]->buffer; // BAD delete bufMyData[i]; } delete [] bufMyData; From 6dec1182bf2ed555c57a9fc3055024e7f26643e0 Mon Sep 17 00:00:00 2001 From: ihsinme Date: Thu, 5 May 2022 19:17:31 +0300 Subject: [PATCH 0389/1618] Update DangerousUseOfExceptionBlocks.expected --- .../semmle/tests/DangerousUseOfExceptionBlocks.expected | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected index 30d41b69eaa..728a9e8b3d5 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-476/semmle/tests/DangerousUseOfExceptionBlocks.expected @@ -1,3 +1,8 @@ +| test.cpp:63:3:71:3 | { ... } | If the allocation in the try block fails, then an unallocated pointer bufMyData will be freed in the catch block. | +| test.cpp:63:3:71:3 | { ... } | If the allocation in the try block fails, then an unallocated pointer buffer will be freed in the catch block. | | test.cpp:63:3:71:3 | { ... } | it is possible to dereference a pointer when accessing a buffer, since it is possible to throw an exception before the memory for the bufMyData is allocated | +| test.cpp:91:3:100:3 | { ... } | If the allocation in the try block fails, then an unallocated pointer buffer will be freed in the catch block. | +| test.cpp:120:3:128:3 | { ... } | If the allocation in the try block fails, then an unallocated pointer buffer will be freed in the catch block. | +| test.cpp:143:3:151:3 | { ... } | If the allocation in the try block fails, then an unallocated pointer buffer will be freed in the catch block. | | test.cpp:181:3:183:3 | { ... } | This allocation may have been released in the try block or a previous catch block.valData | | test.cpp:219:3:221:3 | { ... } | This allocation may have been released in the try block or a previous catch block.valData | From a7129c1f4c420e8575e128b1e41b6ddc2a9ba699 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 5 May 2022 18:33:05 +0200 Subject: [PATCH 0390/1618] Swift: add `--ql-format`/`--no-ql-format` to `codegen` --- swift/codegen/lib/options.py | 2 ++ swift/codegen/qlgen.py | 3 ++- swift/codegen/test/test_qlgen.py | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/swift/codegen/lib/options.py b/swift/codegen/lib/options.py index 52de34d864e..13f173d8dbd 100644 --- a/swift/codegen/lib/options.py +++ b/swift/codegen/lib/options.py @@ -15,6 +15,8 @@ def _init_options(): Option("--dbscheme", tags=["dbscheme"], type=_abspath, default=paths.swift_dir / "ql/lib/swift.dbscheme") Option("--ql-output", tags=["ql"], type=_abspath, default=paths.swift_dir / "ql/lib/codeql/swift/generated") Option("--ql-stub-output", tags=["ql"], type=_abspath, default=paths.swift_dir / "ql/lib/codeql/swift/elements") + Option("--ql-format", tags=["ql"], action="store_true", default=True) + Option("--no-ql-format", tags=["ql"], action="store_false", dest="ql_format") Option("--codeql-binary", tags=["ql"], default="codeql") Option("--cpp-output", tags=["cpp"], type=_abspath, required=True) Option("--cpp-namespace", tags=["cpp"], default="codeql") diff --git a/swift/codegen/qlgen.py b/swift/codegen/qlgen.py index ad44a234c77..5d08f5a0410 100755 --- a/swift/codegen/qlgen.py +++ b/swift/codegen/qlgen.py @@ -107,7 +107,8 @@ def generate(opts, renderer): renderer.render(all_imports, include_file) renderer.cleanup(existing) - format(opts.codeql_binary, renderer.written) + if opts.ql_format: + format(opts.codeql_binary, renderer.written) tags = ("schema", "ql") diff --git a/swift/codegen/test/test_qlgen.py b/swift/codegen/test/test_qlgen.py index 8affd50fb7f..d273539e375 100644 --- a/swift/codegen/test/test_qlgen.py +++ b/swift/codegen/test/test_qlgen.py @@ -23,6 +23,7 @@ gen_import_prefix = "other.path." def generate(opts, renderer, written=None): opts.ql_stub_output = stub_path() opts.ql_output = ql_output_path() + opts.ql_format = True renderer.written = written or [] return run_generation(qlgen.generate, opts, renderer) From b98ddc72f5b43f9bf2baf17eba1955b09b24b04b Mon Sep 17 00:00:00 2001 From: ihsinme Date: Thu, 5 May 2022 21:05:22 +0300 Subject: [PATCH 0391/1618] Update DangerousUseOfExceptionBlocks.ql --- .../Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql index 261e0a33df1..2feca267902 100644 --- a/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql +++ b/cpp/ql/src/experimental/Security/CWE/CWE-476/DangerousUseOfExceptionBlocks.ql @@ -116,8 +116,8 @@ predicate pointerDereference(CatchAnyBlock cb, Variable vr, Variable vro) { pragma[inline] predicate newThrowDelete(CatchAnyBlock cb, Variable vro) { exists(Expr e0, AssignExpr ase, NewOrNewArrayExpr nae | - ase = vro.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr().(AssignExpr) and - nae = ase.getRValue().(NewOrNewArrayExpr) and + ase = vro.getAnAccess().getEnclosingStmt().(ExprStmt).getExpr() and + nae = ase.getRValue() and not nae.getAChild*().toString() = "nothrow" and ( e0 = nae or @@ -185,8 +185,8 @@ where exp.getEnclosingStmt().getParentStmt*() = cb and exists(VariableAccess va | ( - va = exp.(DeleteArrayExpr).getExpr().(VariableAccess) or - va = exp.(DeleteExpr).getExpr().(VariableAccess) + va = exp.(DeleteArrayExpr).getExpr() or + va = exp.(DeleteExpr).getExpr() ) and va.getEnclosingStmt() = exp.getEnclosingStmt() and vro = va.getTarget() From 1a254571789d1e8d59091704fb7d32ebd665c683 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 5 May 2022 19:05:50 +0000 Subject: [PATCH 0392/1618] Post-release preparation for codeql-cli-2.9.1 --- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 00ac7dc6755..29c32aa15ac 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 0.2.0 +version: 0.2.1-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index adc05e6f5cd..d4df6bb5e07 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 0.1.1 +version: 0.1.2-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index e697a9d4344..6007262cb29 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.1.1 +version: 1.1.2-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index e75764d366f..fd0349bb9f9 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.1.1 +version: 1.1.2-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index df26aba8e06..f0f70451e5f 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 0.2.0 +version: 0.2.1-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index d1e09f59e10..979ad1cd37b 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 0.1.1 +version: 0.1.2-dev groups: - csharp - queries diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index be1391ac60b..1a0a0929a12 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 0.2.0 +version: 0.2.1-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index e7c4cc1e30d..ab897e87726 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 0.1.1 +version: 0.1.2-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index bb491a62c51..9723715b1a8 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 0.1.1 +version: 0.1.2-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 8ce1a539b74..ee8d91927f3 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 0.1.1 +version: 0.1.2-dev groups: - javascript - queries diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index b4ca380ac44..ca2423b1b94 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 0.2.0 +version: 0.2.1-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 0a865bb7e0b..265e6acebd3 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 0.1.1 +version: 0.1.2-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 37f05e1d20d..cd407edd0a8 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 0.2.0 +version: 0.2.1-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 6e81cdab8a5..c4fbe058d06 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 0.1.1 +version: 0.1.2-dev groups: - ruby - queries From 36f56b5a189c8095d2821fe806525c2ce5ca4c83 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sun, 8 May 2022 17:02:12 +0200 Subject: [PATCH 0393/1618] Java: Rename `StmtExpr` to `ValueDiscardingExpr` As mentioned by aschackmull during review, StatementExpression as defined by the JLS only lists possible types of expressions, it does _not_ specify that their value is discarded. Therefore, for example any method call could be considered a StatementExpression. The name ValueDiscardingExpr was chosen as replacement because the JLS uses the phrase "if the expression has a value, the value is discarded" multiple times. --- .../2022-03-27-statement-expression.md | 4 - .../2022-05-09-value-discarding-expression.md | 4 + java/ql/lib/semmle/code/java/Collections.qll | 2 +- java/ql/lib/semmle/code/java/Expr.qll | 69 ++++++------ java/ql/lib/semmle/code/java/Maps.qll | 2 +- .../Statements/ReturnValueIgnored.ql | 2 +- .../IgnoreExceptionalReturn.ql | 2 +- .../CWE-297/IgnoredHostnameVerification.ql | 2 +- .../library-tests/StmtExpr/StmtExpr.expected | 14 --- .../test/library-tests/StmtExpr/StmtExpr.java | 68 ------------ .../test/library-tests/StmtExpr/StmtExpr.ql | 4 - .../ValueDiscardingExpr.expected | 16 +++ .../ValueDiscardingExpr.java | 100 ++++++++++++++++++ .../ValueDiscardingExpr.ql | 4 + .../{StmtExpr => ValueDiscardingExpr}/options | 0 15 files changed, 167 insertions(+), 126 deletions(-) delete mode 100644 java/ql/lib/change-notes/2022-03-27-statement-expression.md create mode 100644 java/ql/lib/change-notes/2022-05-09-value-discarding-expression.md delete mode 100644 java/ql/test/library-tests/StmtExpr/StmtExpr.expected delete mode 100644 java/ql/test/library-tests/StmtExpr/StmtExpr.java delete mode 100644 java/ql/test/library-tests/StmtExpr/StmtExpr.ql create mode 100644 java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.expected create mode 100644 java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.java create mode 100644 java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.ql rename java/ql/test/library-tests/{StmtExpr => ValueDiscardingExpr}/options (100%) diff --git a/java/ql/lib/change-notes/2022-03-27-statement-expression.md b/java/ql/lib/change-notes/2022-03-27-statement-expression.md deleted file mode 100644 index bb261f66878..00000000000 --- a/java/ql/lib/change-notes/2022-03-27-statement-expression.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: feature ---- -* The QL class `StmtExpr` has been added to model statement expressions, that is, expressions whose result is discarded. diff --git a/java/ql/lib/change-notes/2022-05-09-value-discarding-expression.md b/java/ql/lib/change-notes/2022-05-09-value-discarding-expression.md new file mode 100644 index 00000000000..36adb0169d4 --- /dev/null +++ b/java/ql/lib/change-notes/2022-05-09-value-discarding-expression.md @@ -0,0 +1,4 @@ +--- +category: feature +--- +* The QL class `ValueDiscardingExpr` has been added, representing expressions for which the value of the expression as a whole is discarded. diff --git a/java/ql/lib/semmle/code/java/Collections.qll b/java/ql/lib/semmle/code/java/Collections.qll index e6da65faa04..1f4c25ed532 100644 --- a/java/ql/lib/semmle/code/java/Collections.qll +++ b/java/ql/lib/semmle/code/java/Collections.qll @@ -84,7 +84,7 @@ class CollectionMutation extends MethodAccess { CollectionMutation() { this.getMethod() instanceof CollectionMutator } /** Holds if the result of this call is not immediately discarded. */ - predicate resultIsChecked() { not this instanceof StmtExpr } + predicate resultIsChecked() { not this instanceof ValueDiscardingExpr } } /** A method that queries the contents of a collection without mutating it. */ diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 1e6b14fc9e7..e9332fd68af 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2135,38 +2135,45 @@ class Argument extends Expr { } /** - * A statement expression, as specified by JLS 17 section 14.8. - * The result of a statement expression, if any, is discarded. + * An expression for which the value of the expression as a whole is discarded. Only cases + * of discarded values at the language level (as described by the JLS) are considered; + * data flow, for example to determine if an assigned variable value is ever read, is not + * considered. Such expressions can for example appear as part of an `ExprStmt` or as + * initializer of a `for` loop. * - * Not to be confused with `ExprStmt`; while the child of an `ExprStmt` is always - * a `StmtExpr`, the opposite is not true. A `StmtExpr` occurs for example also - * as 'init' of a `for` statement. + * For example, for the statement `i++;` the value of the increment expression, that is the + * old value of variable `i`, is discarded. Whereas for the statement `println(i++);` the + * value of the increment expression is not discarded but used as argument for the method call. */ -class StmtExpr extends Expr { - StmtExpr() { - this = any(ExprStmt s).getExpr() - or - this = any(ForStmt s).getAnInit() and not this instanceof LocalVariableDeclExpr - or - this = any(ForStmt s).getAnUpdate() - or - // Only applies to SwitchStmt, but not to SwitchExpr, see JLS 17 section 14.11.2 - this = any(SwitchStmt s).getACase().getRuleExpression() - or - // TODO: Workarounds for https://github.com/github/codeql/issues/3605 - exists(LambdaExpr lambda | - this = lambda.getExprBody() and - lambda.asMethod().getReturnType() instanceof VoidType - ) - or - exists(MemberRefExpr memberRef, Method implicitMethod, Method overridden | - implicitMethod = memberRef.asMethod() - | - this.getParent().(ReturnStmt).getEnclosingCallable() = implicitMethod and - // asMethod() has bogus method with wrong return type as result, e.g. `run(): String` (overriding `Runnable.run(): void`) - // Therefore need to check the overridden method - implicitMethod.getSourceDeclaration().overridesOrInstantiates*(overridden) and - overridden.getReturnType() instanceof VoidType - ) +class ValueDiscardingExpr extends Expr { + ValueDiscardingExpr() { + ( + this = any(ExprStmt s).getExpr() + or + this = any(ForStmt s).getAnInit() and not this instanceof LocalVariableDeclExpr + or + this = any(ForStmt s).getAnUpdate() + or + // Only applies to SwitchStmt, but not to SwitchExpr, see JLS 17 section 14.11.2 + this = any(SwitchStmt s).getACase().getRuleExpression() + or + // TODO: Workarounds for https://github.com/github/codeql/issues/3605 + exists(LambdaExpr lambda | + this = lambda.getExprBody() and + lambda.asMethod().getReturnType() instanceof VoidType + ) + or + exists(MemberRefExpr memberRef, Method implicitMethod, Method overridden | + implicitMethod = memberRef.asMethod() + | + this.getParent().(ReturnStmt).getEnclosingCallable() = implicitMethod and + // asMethod() has bogus method with wrong return type as result, e.g. `run(): String` (overriding `Runnable.run(): void`) + // Therefore need to check the overridden method + implicitMethod.getSourceDeclaration().overridesOrInstantiates*(overridden) and + overridden.getReturnType() instanceof VoidType + ) + ) and + // Ignore if this expression is a method call with `void` as return type + not getType() instanceof VoidType } } diff --git a/java/ql/lib/semmle/code/java/Maps.qll b/java/ql/lib/semmle/code/java/Maps.qll index f768ee3642b..6ff61616f4b 100644 --- a/java/ql/lib/semmle/code/java/Maps.qll +++ b/java/ql/lib/semmle/code/java/Maps.qll @@ -53,7 +53,7 @@ class MapMutation extends MethodAccess { MapMutation() { this.getMethod() instanceof MapMutator } /** Holds if the result of this call is not immediately discarded. */ - predicate resultIsChecked() { not this instanceof StmtExpr } + predicate resultIsChecked() { not this instanceof ValueDiscardingExpr } } /** A method that queries the contents of the map it belongs to without mutating it. */ diff --git a/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql b/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql index 1c2905c1d61..3355fd22190 100644 --- a/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql +++ b/java/ql/src/Likely Bugs/Statements/ReturnValueIgnored.ql @@ -18,7 +18,7 @@ import Chaining predicate checkedMethodCall(MethodAccess ma) { relevantMethodCall(ma, _) and - not ma instanceof StmtExpr + not ma instanceof ValueDiscardingExpr } /** diff --git a/java/ql/src/Violations of Best Practice/Exception Handling/IgnoreExceptionalReturn.ql b/java/ql/src/Violations of Best Practice/Exception Handling/IgnoreExceptionalReturn.ql index ed712eb2504..5a03dafa673 100644 --- a/java/ql/src/Violations of Best Practice/Exception Handling/IgnoreExceptionalReturn.ql +++ b/java/ql/src/Violations of Best Practice/Exception Handling/IgnoreExceptionalReturn.ql @@ -45,7 +45,7 @@ predicate unboundedQueue(RefType t) { from MethodAccess ma, SpecialMethod m where - ma instanceof StmtExpr and + ma instanceof ValueDiscardingExpr and m = ma.getMethod() and ( m.isMethod("java.util", "Queue", "offer", 1) and not unboundedQueue(m.getDeclaringType()) diff --git a/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql b/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql index 38e2cb79998..c4bb1192f2b 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql +++ b/java/ql/src/experimental/Security/CWE/CWE-297/IgnoredHostnameVerification.ql @@ -21,7 +21,7 @@ private class HostnameVerificationCall extends MethodAccess { } /** Holds if the result of the call is not used. */ - predicate isIgnored() { this instanceof StmtExpr } + predicate isIgnored() { this instanceof ValueDiscardingExpr } } from HostnameVerificationCall verification diff --git a/java/ql/test/library-tests/StmtExpr/StmtExpr.expected b/java/ql/test/library-tests/StmtExpr/StmtExpr.expected deleted file mode 100644 index ecb5e338238..00000000000 --- a/java/ql/test/library-tests/StmtExpr/StmtExpr.expected +++ /dev/null @@ -1,14 +0,0 @@ -| StmtExpr.java:7:9:7:18 | toString(...) | -| StmtExpr.java:13:9:13:13 | ...=... | -| StmtExpr.java:14:9:14:11 | ...++ | -| StmtExpr.java:15:9:15:11 | ++... | -| StmtExpr.java:16:9:16:11 | ...-- | -| StmtExpr.java:17:9:17:11 | --... | -| StmtExpr.java:19:9:19:20 | new Object(...) | -| StmtExpr.java:22:9:22:28 | clone(...) | -| StmtExpr.java:25:14:25:39 | println(...) | -| StmtExpr.java:30:17:30:44 | println(...) | -| StmtExpr.java:45:24:45:33 | toString(...) | -| StmtExpr.java:58:28:58:37 | toString(...) | -| StmtExpr.java:60:13:60:22 | toString(...) | -| StmtExpr.java:66:23:66:36 | toString(...) | diff --git a/java/ql/test/library-tests/StmtExpr/StmtExpr.java b/java/ql/test/library-tests/StmtExpr/StmtExpr.java deleted file mode 100644 index c35e24ea122..00000000000 --- a/java/ql/test/library-tests/StmtExpr/StmtExpr.java +++ /dev/null @@ -1,68 +0,0 @@ -package StmtExpr; - -import java.util.function.Supplier; - -class StmtExpr { - void test() { - toString(); - - // LocalVariableDeclarationStatement with init is not a StatementExpression - String s = toString(); - - int i; - i = 0; - i++; - ++i; - i--; - --i; - - new Object(); - // ArrayCreationExpression cannot be a StatementExpression, but a method access - // on it can be - new int[] {}.clone(); - - // for statement init can be StatementExpression - for (System.out.println("init");;) { - break; - } - - // for statement update is StatementExpression - for (;; System.out.println("update")) { - break; - } - - // variable declaration and condition are not StatementExpressions - for (int i1 = 0; i1 < 10;) { } - for (int i1, i2 = 0; i2 < 10;) { } - for (;;) { - break; - } - - // Not a StatementExpression - for (int i2 : new int[] {1}) { } - - switch(1) { - default -> toString(); // StatementExpression - } - // SwitchExpression has no StatementExpression - String s2 = switch(1) { - default -> toString(); - }; - - // Lambda with non-void return type has no StatementExpression - Supplier supplier1 = () -> toString(); - Supplier supplier2 = () -> { - return toString(); - }; - // Lambda with void return type has StatementExpression - Runnable r = () -> toString(); - Runnable r2 = () -> { - toString(); - }; - - // Method reference with non-void return type has no StatementExpression - Supplier supplier3 = StmtExpr::new; - // Method reference with void return type has StatementExpression in implicit method body - Runnable r3 = this::toString; - } -} diff --git a/java/ql/test/library-tests/StmtExpr/StmtExpr.ql b/java/ql/test/library-tests/StmtExpr/StmtExpr.ql deleted file mode 100644 index c624e738d71..00000000000 --- a/java/ql/test/library-tests/StmtExpr/StmtExpr.ql +++ /dev/null @@ -1,4 +0,0 @@ -import java - -from StmtExpr e -select e diff --git a/java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.expected b/java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.expected new file mode 100644 index 00000000000..6a512fcdf32 --- /dev/null +++ b/java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.expected @@ -0,0 +1,16 @@ +| ValueDiscardingExpr.java:9:9:9:18 | toString(...) | +| ValueDiscardingExpr.java:18:9:18:13 | ...=... | +| ValueDiscardingExpr.java:19:9:19:11 | ...++ | +| ValueDiscardingExpr.java:20:9:20:11 | ++... | +| ValueDiscardingExpr.java:21:9:21:11 | ...-- | +| ValueDiscardingExpr.java:22:9:22:11 | --... | +| ValueDiscardingExpr.java:24:9:24:20 | new Object(...) | +| ValueDiscardingExpr.java:27:9:27:28 | clone(...) | +| ValueDiscardingExpr.java:30:14:30:38 | append(...) | +| ValueDiscardingExpr.java:35:17:35:43 | append(...) | +| ValueDiscardingExpr.java:55:24:55:33 | toString(...) | +| ValueDiscardingExpr.java:74:29:74:38 | toString(...) | +| ValueDiscardingExpr.java:76:13:76:22 | toString(...) | +| ValueDiscardingExpr.java:90:23:90:35 | new StmtExpr(...) | +| ValueDiscardingExpr.java:91:23:91:36 | toString(...) | +| ValueDiscardingExpr.java:95:25:95:37 | new String[] | diff --git a/java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.java b/java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.java new file mode 100644 index 00000000000..3dc9fbce8fa --- /dev/null +++ b/java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.java @@ -0,0 +1,100 @@ +package StmtExpr; + +import java.util.function.IntConsumer; +import java.util.function.IntFunction; +import java.util.function.Supplier; + +class StmtExpr { + void test() { + toString(); + + // Method call with `void` return type is not a ValueDiscardingExpr + System.out.println("test"); + + // LocalVariableDeclarationStatement with init is not a ValueDiscardingExpr + String s = toString(); + + int i; + i = 0; + i++; + ++i; + i--; + --i; + + new Object(); + // Language specification does not permit ArrayCreationExpression at locations where its + // value would be discard, but the value of a method access on it can be discarded + new int[] {}.clone(); + + // for statement init can discard value + for (System.out.append("init");;) { + break; + } + + // for statement update discards value + for (;; System.out.append("update")) { + break; + } + + // Method call with `void` return type is not a ValueDiscardingExpr + for (;; System.out.println("update")) { + break; + } + + // variable declaration and condition are not ValueDiscardingExpr + for (int i1 = 0; i1 < 10;) { } + for (int i1, i2 = 0; i2 < 10;) { } + for (;;) { + break; + } + + // Not a ValueDiscardingExpr + for (int i2 : new int[] {1}) { } + + switch(1) { + default -> toString(); // ValueDiscardingExpr + } + + switch(1) { + // Method call with `void` return type is not a ValueDiscardingExpr + default -> System.out.println(); + } + + String s2 = switch(1) { + // Expression in SwitchExpression case rule is not a ValueDiscardingExpr + default -> toString(); + }; + + // Expression in lambda with non-void return type is not a ValueDiscardingExpr + Supplier supplier1 = () -> toString(); + Supplier supplier2 = () -> { + return toString(); + }; + // Expression in lambda with void return type is ValueDiscardingExpr + Runnable r1 = () -> toString(); + Runnable r2 = () -> { + toString(); + }; + // Lambda with method call with `void` return type is not a ValueDiscardingExpr + Runnable r3 = () -> System.out.println(); + Runnable r4 = () -> { + System.out.println(); + }; + + // Method reference with non-void return type has no ValueDiscardingExpr + Supplier supplier3 = StmtExpr::new; + IntFunction f = String[]::new; + Supplier supplier4 = this::toString; + + // Method reference with void return type has ValueDiscardingExpr in implicit method body + Runnable r5 = StmtExpr::new; + Runnable r6 = this::toString; + // Interestingly a method reference expression with function type (int)->void allows usage of + // array creation expressions, even though a regular StatementExpression would not allow it, + // for example the ExpressionStatement `new String[1];` is not allowed by the JLS + IntConsumer c = String[]::new; + + // Method reference referring to method with `void` return type is not a ValueDiscardingExpr + Runnable r7 = System.out::println; + } +} diff --git a/java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.ql b/java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.ql new file mode 100644 index 00000000000..59b32c09a7f --- /dev/null +++ b/java/ql/test/library-tests/ValueDiscardingExpr/ValueDiscardingExpr.ql @@ -0,0 +1,4 @@ +import java + +from ValueDiscardingExpr e +select e diff --git a/java/ql/test/library-tests/StmtExpr/options b/java/ql/test/library-tests/ValueDiscardingExpr/options similarity index 100% rename from java/ql/test/library-tests/StmtExpr/options rename to java/ql/test/library-tests/ValueDiscardingExpr/options From 76fd424795c2124d0ae893e258b8f69b8b5b2fc2 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 9 May 2022 07:30:06 +0200 Subject: [PATCH 0394/1618] C#: Turn isAutogenerated predicate into a predicate without result. --- .../csharp/dataflow/internal/FlowSummaryImpl.qll | 14 ++++++-------- .../java/dataflow/internal/FlowSummaryImpl.qll | 14 ++++++-------- .../ruby/dataflow/internal/FlowSummaryImpl.qll | 14 ++++++-------- 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index 8736333d247..6b1aab6af5d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -221,9 +221,9 @@ module Public { predicate clearsContent(ParameterPosition pos, ContentSet content) { none() } /** - * Gets whether the summary is auto generated or not. + * Holds if the summary is auto generated. */ - boolean isAutoGenerated() { result = false } + predicate isAutoGenerated() { none() } } } @@ -904,7 +904,7 @@ module Private { ) } - override boolean isAutoGenerated() { summaryElement(this, _, _, _, result) } + override predicate isAutoGenerated() { summaryElement(this, _, _, _, true) } } /** Holds if component `c` of specification `spec` cannot be parsed. */ @@ -1059,10 +1059,8 @@ module Private { preservesValue = false and result = "taint" } - private string renderGenerated(boolean generated) { - generated = true and result = "generated:" - or - generated = false and result = "" + private string renderGenerated(RelevantSummarizedCallable c) { + if c.isAutoGenerated() then result = "generated:" else result = "" } /** @@ -1078,7 +1076,7 @@ module Private { c.relevantSummary(input, output, preservesValue) and csv = c.getCallableCsv() + getComponentStackCsv(input) + ";" + getComponentStackCsv(output) + - ";" + renderGenerated(c.isAutoGenerated()) + renderKind(preservesValue) + ";" + renderGenerated(c) + renderKind(preservesValue) ) } } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll index 8736333d247..6b1aab6af5d 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/FlowSummaryImpl.qll @@ -221,9 +221,9 @@ module Public { predicate clearsContent(ParameterPosition pos, ContentSet content) { none() } /** - * Gets whether the summary is auto generated or not. + * Holds if the summary is auto generated. */ - boolean isAutoGenerated() { result = false } + predicate isAutoGenerated() { none() } } } @@ -904,7 +904,7 @@ module Private { ) } - override boolean isAutoGenerated() { summaryElement(this, _, _, _, result) } + override predicate isAutoGenerated() { summaryElement(this, _, _, _, true) } } /** Holds if component `c` of specification `spec` cannot be parsed. */ @@ -1059,10 +1059,8 @@ module Private { preservesValue = false and result = "taint" } - private string renderGenerated(boolean generated) { - generated = true and result = "generated:" - or - generated = false and result = "" + private string renderGenerated(RelevantSummarizedCallable c) { + if c.isAutoGenerated() then result = "generated:" else result = "" } /** @@ -1078,7 +1076,7 @@ module Private { c.relevantSummary(input, output, preservesValue) and csv = c.getCallableCsv() + getComponentStackCsv(input) + ";" + getComponentStackCsv(output) + - ";" + renderGenerated(c.isAutoGenerated()) + renderKind(preservesValue) + ";" + renderGenerated(c) + renderKind(preservesValue) ) } } diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll index 8736333d247..6b1aab6af5d 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/FlowSummaryImpl.qll @@ -221,9 +221,9 @@ module Public { predicate clearsContent(ParameterPosition pos, ContentSet content) { none() } /** - * Gets whether the summary is auto generated or not. + * Holds if the summary is auto generated. */ - boolean isAutoGenerated() { result = false } + predicate isAutoGenerated() { none() } } } @@ -904,7 +904,7 @@ module Private { ) } - override boolean isAutoGenerated() { summaryElement(this, _, _, _, result) } + override predicate isAutoGenerated() { summaryElement(this, _, _, _, true) } } /** Holds if component `c` of specification `spec` cannot be parsed. */ @@ -1059,10 +1059,8 @@ module Private { preservesValue = false and result = "taint" } - private string renderGenerated(boolean generated) { - generated = true and result = "generated:" - or - generated = false and result = "" + private string renderGenerated(RelevantSummarizedCallable c) { + if c.isAutoGenerated() then result = "generated:" else result = "" } /** @@ -1078,7 +1076,7 @@ module Private { c.relevantSummary(input, output, preservesValue) and csv = c.getCallableCsv() + getComponentStackCsv(input) + ";" + getComponentStackCsv(output) + - ";" + renderGenerated(c.isAutoGenerated()) + renderKind(preservesValue) + ";" + renderGenerated(c) + renderKind(preservesValue) ) } } From 83aa65ff5397ff6d24f9c06c343c4a1d33b8dd87 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 9 May 2022 07:36:41 +0200 Subject: [PATCH 0395/1618] C#/Java: Remove redudandant QL comment in CaptureModel. --- .../utils/model-generator/internal/CaptureModels.qll | 10 ---------- .../utils/model-generator/internal/CaptureModels.qll | 10 ---------- 2 files changed, 20 deletions(-) diff --git a/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll b/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll index 58f8d824883..84af7b57938 100644 --- a/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll +++ b/csharp/ql/src/utils/model-generator/internal/CaptureModels.qll @@ -125,16 +125,6 @@ private class TaintStore extends DataFlow::FlowState { * The sources are the parameters of an API and the sinks are the return values (excluding `this`) and parameters. * * This can be used to generate Flow summaries for APIs from parameter to return. - * - * * We track at most two reads and at most two stores, meaning flow paths of the form - * - * ``` - * parameter --value -->* node --read -->? - * node --taint -->* node --read -->? - * node --taint -->* node --store -->? - * node --taint -->* node --store -->? - * node --taint-->* return - * ``` */ private class ThroughFlowConfig extends TaintTracking::Configuration { ThroughFlowConfig() { this = "ThroughFlowConfig" } diff --git a/java/ql/src/utils/model-generator/internal/CaptureModels.qll b/java/ql/src/utils/model-generator/internal/CaptureModels.qll index 58f8d824883..84af7b57938 100644 --- a/java/ql/src/utils/model-generator/internal/CaptureModels.qll +++ b/java/ql/src/utils/model-generator/internal/CaptureModels.qll @@ -125,16 +125,6 @@ private class TaintStore extends DataFlow::FlowState { * The sources are the parameters of an API and the sinks are the return values (excluding `this`) and parameters. * * This can be used to generate Flow summaries for APIs from parameter to return. - * - * * We track at most two reads and at most two stores, meaning flow paths of the form - * - * ``` - * parameter --value -->* node --read -->? - * node --taint -->* node --read -->? - * node --taint -->* node --store -->? - * node --taint -->* node --store -->? - * node --taint-->* return - * ``` */ private class ThroughFlowConfig extends TaintTracking::Configuration { ThroughFlowConfig() { this = "ThroughFlowConfig" } From 6cbfb5a10c2a0158c6d166ad6d82088b383eaac9 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 9 May 2022 09:02:20 +0200 Subject: [PATCH 0396/1618] Swift cppgen: emit final trap before bases --- swift/codegen/templates/cpp_classes.mustache | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/swift/codegen/templates/cpp_classes.mustache b/swift/codegen/templates/cpp_classes.mustache index 4dddf4dab06..06c7b8d062a 100644 --- a/swift/codegen/templates/cpp_classes.mustache +++ b/swift/codegen/templates/cpp_classes.mustache @@ -26,12 +26,12 @@ struct {{name}}{{#final}} : Binding<{{name}}Tag>{{#bases}}, {{ref.name}}{{/bases protected: void emit({{^final}}TrapLabel<{{name}}Tag> id, {{/final}}std::ostream& out) const { - {{#bases}} - {{ref.name}}::emit(id, out); - {{/bases}} {{#trap_name}} out << {{.}}{{trap_affix}}{id{{#single_fields}}, {{name}}{{/single_fields}}} << '\n'; {{/trap_name}} + {{#bases}} + {{ref.name}}::emit(id, out); + {{/bases}} {{#fields}} {{#is_optional}} {{^is_repeated}} From 918ba1b1fc68ca292634646caf3727a5945e5fa9 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 9 May 2022 09:34:49 +0200 Subject: [PATCH 0397/1618] Swift: make generator.run accept options --- swift/codegen/lib/generator.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/swift/codegen/lib/generator.py b/swift/codegen/lib/generator.py index 9c0a071cefa..bcb05182aef 100644 --- a/swift/codegen/lib/generator.py +++ b/swift/codegen/lib/generator.py @@ -3,26 +3,29 @@ import argparse import logging import sys +from typing import Set from . import options, render -def _parse(tags): +def _parse(tags: Set[str]) -> argparse.Namespace: parser = argparse.ArgumentParser() for opt in options.get(tags): opt.add_to(parser) - ret = parser.parse_args() - log_level = logging.DEBUG if ret.verbose else logging.INFO - logging.basicConfig(format="{levelname} {message}", style='{', level=log_level) - return ret + return parser.parse_args() -def run(*modules): +def run(*modules, **kwargs): """ run generation functions in specified in `modules`, or in current module by default """ if modules: - opts = _parse({t for m in modules for t in m.tags}) + if kwargs: + opts = argparse.Namespace(**kwargs) + else: + opts = _parse({t for m in modules for t in m.tags}) + log_level = logging.DEBUG if opts.verbose else logging.INFO + logging.basicConfig(format="{levelname} {message}", style='{', level=log_level) for m in modules: m.generate(opts, render.Renderer()) else: - run(sys.modules["__main__"]) + run(sys.modules["__main__"], **kwargs) From 9c5b2d7e9dd1fcca9c1b15b9749c9fe7dcc088d4 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 9 May 2022 09:46:47 +0200 Subject: [PATCH 0398/1618] Swift: tweaks for use in the PoC branch --- swift/codegen/lib/generator.py | 5 +++-- swift/codegen/lib/paths.py | 5 +---- swift/codegen/lib/render.py | 5 +++-- swift/codegen/templates/ql_class.mustache | 1 + swift/codegen/templates/ql_stub.mustache | 3 ++- swift/codegen/test/test_render.py | 7 +++++-- swift/codegen/test/utils.py | 2 +- 7 files changed, 16 insertions(+), 12 deletions(-) diff --git a/swift/codegen/lib/generator.py b/swift/codegen/lib/generator.py index bcb05182aef..c78d8e3b523 100644 --- a/swift/codegen/lib/generator.py +++ b/swift/codegen/lib/generator.py @@ -5,7 +5,7 @@ import logging import sys from typing import Set -from . import options, render +from . import options, render, paths def _parse(tags: Set[str]) -> argparse.Namespace: @@ -25,7 +25,8 @@ def run(*modules, **kwargs): opts = _parse({t for m in modules for t in m.tags}) log_level = logging.DEBUG if opts.verbose else logging.INFO logging.basicConfig(format="{levelname} {message}", style='{', level=log_level) + exe_path = paths.exe_file.relative_to(opts.swift_dir) for m in modules: - m.generate(opts, render.Renderer()) + m.generate(opts, render.Renderer(exe_path)) else: run(sys.modules["__main__"], **kwargs) diff --git a/swift/codegen/lib/paths.py b/swift/codegen/lib/paths.py index 8fe63cefe8e..2ad1284b17b 100644 --- a/swift/codegen/lib/paths.py +++ b/swift/codegen/lib/paths.py @@ -15,7 +15,4 @@ except KeyError: lib_dir = swift_dir / 'codegen' / 'lib' templates_dir = swift_dir / 'codegen' / 'templates' -try: - exe_file = pathlib.Path(sys.argv[0]).resolve().relative_to(swift_dir) -except ValueError: - exe_file = pathlib.Path(sys.argv[0]).name +exe_file = pathlib.Path(sys.argv[0]).resolve() diff --git a/swift/codegen/lib/render.py b/swift/codegen/lib/render.py index 3d20fe1a199..b8fae984c67 100644 --- a/swift/codegen/lib/render.py +++ b/swift/codegen/lib/render.py @@ -18,9 +18,10 @@ log = logging.getLogger(__name__) class Renderer: """ Template renderer using mustache templates in the `templates` directory """ - def __init__(self): + def __init__(self, generator): self._r = pystache.Renderer(search_dirs=str(paths.templates_dir), escape=lambda u: u) self.written = set() + self._generator = generator def render(self, data, output: pathlib.Path): """ Render `data` to `output`. @@ -34,7 +35,7 @@ class Renderer: """ mnemonic = type(data).__name__ output.parent.mkdir(parents=True, exist_ok=True) - data = self._r.render_name(data.template, data, generator=paths.exe_file) + data = self._r.render_name(data.template, data, generator=self._generator) with open(output, "w") as out: out.write(data) log.debug(f"generated {mnemonic} {output.name}") diff --git a/swift/codegen/templates/ql_class.mustache b/swift/codegen/templates/ql_class.mustache index e2f2a6a449f..12ca76c9975 100644 --- a/swift/codegen/templates/ql_class.mustache +++ b/swift/codegen/templates/ql_class.mustache @@ -1,4 +1,5 @@ // generated by {{generator}} + {{#imports}} import {{.}} {{/imports}} diff --git a/swift/codegen/templates/ql_stub.mustache b/swift/codegen/templates/ql_stub.mustache index adc16b362c9..198e0f4dd51 100644 --- a/swift/codegen/templates/ql_stub.mustache +++ b/swift/codegen/templates/ql_stub.mustache @@ -1,4 +1,5 @@ // generated by {{generator}}, remove this comment if you wish to edit this file + private import {{base_import}} -class {{name}} extends {{name}}Base { } +class {{name}} extends {{name}}Base {} diff --git a/swift/codegen/test/test_render.py b/swift/codegen/test/test_render.py index ea007a54563..adb823a2bab 100644 --- a/swift/codegen/test/test_render.py +++ b/swift/codegen/test/test_render.py @@ -7,6 +7,9 @@ from swift.codegen.lib import paths from swift.codegen.lib import render +generator = "test/foogen" + + @pytest.fixture def pystache_renderer_cls(): with mock.patch("pystache.Renderer") as ret: @@ -22,7 +25,7 @@ def pystache_renderer(pystache_renderer_cls): @pytest.fixture def sut(pystache_renderer): - return render.Renderer() + return render.Renderer(generator) def test_constructor(pystache_renderer_cls, sut): @@ -40,7 +43,7 @@ def test_render(pystache_renderer, sut): with mock.patch("builtins.open", mock.mock_open()) as output_stream: sut.render(data, output) assert pystache_renderer.mock_calls == [ - mock.call.render_name(data.template, data, generator=paths.exe_file), + mock.call.render_name(data.template, data, generator=generator), ] assert output_stream.mock_calls == [ mock.call(output, 'w'), diff --git a/swift/codegen/test/utils.py b/swift/codegen/test/utils.py index bf646297af5..231489e04e4 100644 --- a/swift/codegen/test/utils.py +++ b/swift/codegen/test/utils.py @@ -18,7 +18,7 @@ def write(out, contents=""): @pytest.fixture def renderer(): - return mock.Mock(spec=render.Renderer()) + return mock.Mock(spec=render.Renderer("")) @pytest.fixture From f5854f33da4a51c39e4a6bccb778393d92e29efe Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Mon, 9 May 2022 10:53:25 +0200 Subject: [PATCH 0399/1618] Python: Apply suggestions from code review Co-authored-by: yoff --- python/ql/src/Security/CWE-776/XmlBomb.qhelp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Security/CWE-776/XmlBomb.qhelp b/python/ql/src/Security/CWE-776/XmlBomb.qhelp index f20dd526fdd..8841f98ab27 100644 --- a/python/ql/src/Security/CWE-776/XmlBomb.qhelp +++ b/python/ql/src/Security/CWE-776/XmlBomb.qhelp @@ -39,7 +39,7 @@ PyPI package, which has been created to prevent XML attacks (both XXE and XML bo

    The following example uses the xml.etree XML parser provided by the Python standard library to -parse a string xml_src. That string is from an untrusted source, so this code is be +parse a string xml_src. That string is from an untrusted source, so this code is vulnerable to a DoS attack, since the xml.etree XML parser expands internal entities by default:

    From f22bd039f3014cb00e2f6211b686f5b2fc9198fd Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Mon, 9 May 2022 10:56:39 +0200 Subject: [PATCH 0400/1618] Python: Slight refactor of `LxmlParsing` --- python/ql/lib/semmle/python/frameworks/Lxml.qll | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Lxml.qll b/python/ql/lib/semmle/python/frameworks/Lxml.qll index cfb83fd5732..70e46a6d3b0 100644 --- a/python/ql/lib/semmle/python/frameworks/Lxml.qll +++ b/python/ql/lib/semmle/python/frameworks/Lxml.qll @@ -235,12 +235,11 @@ private module Lxml { * - https://lxml.de/apidoc/lxml.etree.html?highlight=parseids#lxml.etree.parseid */ private class LxmlParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { + string functionName; + LxmlParsing() { - this = - API::moduleImport("lxml") - .getMember("etree") - .getMember(["fromstring", "fromstringlist", "XML", "XMLID", "parse", "parseid"]) - .getACall() + functionName in ["fromstring", "fromstringlist", "XML", "XMLID", "parse", "parseid"] and + this = API::moduleImport("lxml").getMember("etree").getMember(functionName).getACall() } override DataFlow::Node getAnInput() { @@ -287,7 +286,7 @@ private module Lxml { */ private class FileAccessFromLxmlParsing extends LxmlParsing, FileSystemAccess::Range { FileAccessFromLxmlParsing() { - this = API::moduleImport("lxml").getMember("etree").getMember(["parse", "parseid"]).getACall() + functionName in ["parse", "parseid"] // I considered whether we should try to reduce FPs from people passing file-like // objects, which will not be a file system access (and couldn't cause a // path-injection). From 36349222a9561c6996fbd6f2e30ab8580313e5ac Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Mon, 9 May 2022 11:00:25 +0200 Subject: [PATCH 0401/1618] Python: Fix casing of `XMLDomParsing` --- python/ql/lib/semmle/python/frameworks/Stdlib.qll | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index bf2b01930d2..e67e90cc794 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3591,8 +3591,8 @@ private module StdlibPrivate { * - https://docs.python.org/3/library/xml.dom.minidom.html#xml.dom.minidom.parse * - https://docs.python.org/3/library/xml.dom.pulldom.html#xml.dom.pulldom.parse */ - private class XMLDomParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { - XMLDomParsing() { + private class XmlDomParsing extends DataFlow::CallCfgNode, XML::XmlParsing::Range { + XmlDomParsing() { this = API::moduleImport("xml") .getMember("dom") @@ -3636,8 +3636,8 @@ private module StdlibPrivate { * - https://docs.python.org/3/library/xml.dom.minidom.html#xml.dom.minidom.parse * - https://docs.python.org/3/library/xml.dom.pulldom.html#xml.dom.pulldom.parse */ - private class FileAccessFromXMLDomParsing extends XMLDomParsing, FileSystemAccess::Range { - FileAccessFromXMLDomParsing() { + private class FileAccessFromXmlDomParsing extends XmlDomParsing, FileSystemAccess::Range { + FileAccessFromXmlDomParsing() { this = API::moduleImport("xml") .getMember("dom") From de05b108faaa469952bf8d83cfa0f2b5d6e086b4 Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Mon, 9 May 2022 11:01:13 +0200 Subject: [PATCH 0402/1618] Python: Fix singleton set --- python/ql/test/experimental/meta/ConceptsTest.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/test/experimental/meta/ConceptsTest.qll b/python/ql/test/experimental/meta/ConceptsTest.qll index 73bcf8b4aa9..7b8649b7abb 100644 --- a/python/ql/test/experimental/meta/ConceptsTest.qll +++ b/python/ql/test/experimental/meta/ConceptsTest.qll @@ -543,7 +543,7 @@ class HttpClientRequestTest extends InlineExpectationsTest { class XmlParsingTest extends InlineExpectationsTest { XmlParsingTest() { this = "XmlParsingTest" } - override string getARelevantTag() { result in ["xmlVuln"] } + override string getARelevantTag() { result = "xmlVuln" } override predicate hasActualResult(Location location, string element, string tag, string value) { exists(location.getFile().getRelativePath()) and From 88b5bbe02454ec43f80dd1198472bb61cb6ee7d1 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 9 May 2022 11:55:07 +0200 Subject: [PATCH 0403/1618] JS: Update test expectation --- .../ql/test/library-tests/TypeTracking/PredicateStyle.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/javascript/ql/test/library-tests/TypeTracking/PredicateStyle.expected b/javascript/ql/test/library-tests/TypeTracking/PredicateStyle.expected index 5aef5c84540..17ccc170403 100644 --- a/javascript/ql/test/library-tests/TypeTracking/PredicateStyle.expected +++ b/javascript/ql/test/library-tests/TypeTracking/PredicateStyle.expected @@ -44,7 +44,6 @@ connection | type tracker without call steps | tst.js:120:21:120:24 | conn | | type tracker without call steps | tst.js:126:22:126:25 | conn | | type tracker without call steps | tst_conflict.js:6:38:6:77 | api.cha ... ction() | -| type tracker without call steps with property MyApplication.namespace.connection | file://:0:0:0:0 | global access path | | type tracker without call steps with property conflict | tst.js:63:3:63:25 | MyAppli ... mespace | | type tracker without call steps with property conflict | tst_conflict.js:6:3:6:25 | MyAppli ... mespace | | type tracker without call steps with property connection | tst.js:62:3:62:25 | MyAppli ... mespace | From 20317a280b8403b0169678a44f56714386846a88 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 9 May 2022 10:04:18 +0200 Subject: [PATCH 0404/1618] Swift: make `width` fields `unsigned` --- swift/codegen/lib/cpp.py | 2 +- swift/codegen/test/test_cppgen.py | 59 ++++++++++++++++--------------- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/swift/codegen/lib/cpp.py b/swift/codegen/lib/cpp.py index 7e360fcddf6..886ef8069e6 100644 --- a/swift/codegen/lib/cpp.py +++ b/swift/codegen/lib/cpp.py @@ -16,7 +16,7 @@ cpp_keywords = {"alignas", "alignof", "and", "and_eq", "asm", "atomic_cancel", " "xor", "xor_eq"} _field_overrides = [ - (re.compile(r"(start|end)_(line|column)|index|num_.*"), {"type": "unsigned"}), + (re.compile(r"(start|end)_(line|column)|index|width|num_.*"), {"type": "unsigned"}), (re.compile(r"(.*)_"), lambda m: {"name": m[1]}), ] diff --git a/swift/codegen/test/test_cppgen.py b/swift/codegen/test/test_cppgen.py index b47a1159df1..ac37b7300c5 100644 --- a/swift/codegen/test/test_cppgen.py +++ b/swift/codegen/test/test_cppgen.py @@ -36,8 +36,8 @@ def test_empty_class(generate): assert generate([ schema.Class(name="MyClass"), ]) == [ - cpp.Class(name="MyClass", final=True, trap_name="MyClasses") - ] + cpp.Class(name="MyClass", final=True, trap_name="MyClasses") + ] def test_two_class_hierarchy(generate): @@ -46,9 +46,9 @@ def test_two_class_hierarchy(generate): schema.Class(name="A", derived={"B"}), schema.Class(name="B", bases={"A"}), ]) == [ - base, - cpp.Class(name="B", bases=[base], final=True, trap_name="Bs"), - ] + base, + cpp.Class(name="B", bases=[base], final=True, trap_name="Bs"), + ] def test_complex_hierarchy_topologically_ordered(generate): @@ -84,37 +84,38 @@ def test_class_with_field(generate, type, expected, property_cls, optional, repe assert generate([ schema.Class(name="MyClass", properties=[property_cls("prop", type)]), ]) == [ - cpp.Class(name="MyClass", - fields=[cpp.Field("prop", expected, is_optional=optional, - is_repeated=repeated, trap_name=trap_name)], - trap_name="MyClasses", - final=True) - ] + cpp.Class(name="MyClass", + fields=[cpp.Field("prop", expected, is_optional=optional, + is_repeated=repeated, trap_name=trap_name)], + trap_name="MyClasses", + final=True) + ] -@pytest.mark.parametrize("name", ["start_line", "start_column", "end_line", "end_column", "index", "num_whatever"]) +@pytest.mark.parametrize("name", + ["start_line", "start_column", "end_line", "end_column", "index", "num_whatever", "width"]) def test_class_with_overridden_unsigned_field(generate, name): assert generate([ schema.Class(name="MyClass", properties=[ - schema.SingleProperty(name, "bar")]), + schema.SingleProperty(name, "bar")]), ]) == [ - cpp.Class(name="MyClass", - fields=[cpp.Field(name, "unsigned")], - trap_name="MyClasses", - final=True) - ] + cpp.Class(name="MyClass", + fields=[cpp.Field(name, "unsigned")], + trap_name="MyClasses", + final=True) + ] def test_class_with_overridden_underscore_field(generate): assert generate([ schema.Class(name="MyClass", properties=[ - schema.SingleProperty("something_", "bar")]), + schema.SingleProperty("something_", "bar")]), ]) == [ - cpp.Class(name="MyClass", - fields=[cpp.Field("something", "bar")], - trap_name="MyClasses", - final=True) - ] + cpp.Class(name="MyClass", + fields=[cpp.Field("something", "bar")], + trap_name="MyClasses", + final=True) + ] @pytest.mark.parametrize("name", cpp.cpp_keywords) @@ -123,11 +124,11 @@ def test_class_with_keyword_field(generate, name): schema.Class(name="MyClass", properties=[ schema.SingleProperty(name, "bar")]), ]) == [ - cpp.Class(name="MyClass", - fields=[cpp.Field(name + "_", "bar")], - trap_name="MyClasses", - final=True) - ] + cpp.Class(name="MyClass", + fields=[cpp.Field(name + "_", "bar")], + trap_name="MyClasses", + final=True) + ] if __name__ == '__main__': From 93f8b6b29d4752924afabd7424147459ebdb44d1 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 9 May 2022 12:19:02 +0200 Subject: [PATCH 0405/1618] Swift: add missing `trap_affix` --- swift/codegen/templates/cpp_classes.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/swift/codegen/templates/cpp_classes.mustache b/swift/codegen/templates/cpp_classes.mustache index 06c7b8d062a..3e9d12084c9 100644 --- a/swift/codegen/templates/cpp_classes.mustache +++ b/swift/codegen/templates/cpp_classes.mustache @@ -25,7 +25,7 @@ struct {{name}}{{#final}} : Binding<{{name}}Tag>{{#bases}}, {{ref.name}}{{/bases {{/final}} protected: - void emit({{^final}}TrapLabel<{{name}}Tag> id, {{/final}}std::ostream& out) const { + void emit({{^final}}{{trap_affix}}Label<{{name}}Tag> id, {{/final}}std::ostream& out) const { {{#trap_name}} out << {{.}}{{trap_affix}}{id{{#single_fields}}, {{name}}{{/single_fields}}} << '\n'; {{/trap_name}} From 804ca3e1a73c772b11455fb2bf54a8cecee3441d Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Mon, 9 May 2022 11:29:53 +0100 Subject: [PATCH 0406/1618] Actions: Fetch CodeQL CLI using `gh` rather than third-party Action --- .github/workflows/query-list.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/query-list.yml b/.github/workflows/query-list.yml index c6ff0aa1153..6bd1d3a5bf3 100644 --- a/.github/workflows/query-list.yml +++ b/.github/workflows/query-list.yml @@ -30,20 +30,14 @@ jobs: with: python-version: 3.8 - name: Download CodeQL CLI - uses: dsaltares/fetch-gh-release-asset@aa37ae5c44d3c9820bc12fe675e8670ecd93bd1c - with: - repo: "github/codeql-cli-binaries" - version: "latest" - file: "codeql-linux64.zip" - token: ${{ secrets.GITHUB_TOKEN }} + uses: ./codeql/.github/actions/fetch-codeql - name: Unzip CodeQL CLI run: unzip -d codeql-cli codeql-linux64.zip - name: Build code scanning query list run: | - PATH="$PATH:codeql-cli/codeql" python codeql/misc/scripts/generate-code-scanning-query-list.py > code-scanning-query-list.csv + python codeql/misc/scripts/generate-code-scanning-query-list.py > code-scanning-query-list.csv - name: Upload code scanning query list uses: actions/upload-artifact@v3 with: name: code-scanning-query-list path: code-scanning-query-list.csv - From 9709c2fa94644f3e0c992c07fa3f8875cecf9da6 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 9 May 2022 11:58:17 +0100 Subject: [PATCH 0407/1618] C++: Use compliant PascalCase / make the checks happy. --- cpp/ql/src/Security/CWE/CWE-611/XXE.ql | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql index 413bcfa04f1..7daea2f1d63 100644 --- a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql @@ -60,15 +60,15 @@ class XercesDOMParserClass extends Class { /** * The `SAXParser` class. */ -class SAXParserClass extends Class { - SAXParserClass() { this.hasName("SAXParser") } +class SaxParserClass extends Class { + SaxParserClass() { this.hasName("SAXParser") } } /** * The `SAX2XMLReader` class. */ -class SAX2XMLReader extends Class { - SAX2XMLReader() { this.hasName("SAX2XMLReader") } +class Sax2XmlReader extends Class { + Sax2XmlReader() { this.hasName("SAX2XMLReader") } } /** @@ -120,7 +120,7 @@ class DisableDefaultEntityResolutionTranformer extends XXEFlowStateTranformer { call.getTarget() = f and ( f.getDeclaringType() instanceof AbstractDOMParserClass or - f.getDeclaringType() instanceof SAXParserClass + f.getDeclaringType() instanceof SaxParserClass ) and f.hasName("setDisableDefaultEntityResolution") and this = call.getQualifier() and @@ -195,7 +195,7 @@ class SetFeatureTranformer extends XXEFlowStateTranformer { SetFeatureTranformer() { exists(Call call, Function f | call.getTarget() = f and - f.getDeclaringType() instanceof SAX2XMLReader and + f.getDeclaringType() instanceof Sax2XmlReader and f.hasName("setFeature") and this = call.getQualifier() and globalValueNumber(call.getArgument(0)).getAnExpr().(VariableAccess).getTarget() instanceof @@ -225,8 +225,8 @@ class SetFeatureTranformer extends XXEFlowStateTranformer { class ParseFunction extends Function { ParseFunction() { this.getClassAndName("parse") instanceof AbstractDOMParserClass or - this.getClassAndName("parse") instanceof SAXParserClass or - this.getClassAndName("parse") instanceof SAX2XMLReader + this.getClassAndName("parse") instanceof SaxParserClass or + this.getClassAndName("parse") instanceof Sax2XmlReader } } @@ -245,10 +245,10 @@ class CreateLSParser extends Function { * The `createXMLReader` function that returns a newly created `SAX2XMLReader` * object. */ -class CreateXMLReader extends Function { - CreateXMLReader() { +class CreateXmlReader extends Function { + CreateXmlReader() { this.hasName("createXMLReader") and - this.getUnspecifiedType().(PointerType).getBaseType() instanceof SAX2XMLReader // returns a `SAX2XMLReader *`. + this.getUnspecifiedType().(PointerType).getBaseType() instanceof Sax2XmlReader // returns a `SAX2XMLReader *`. } } @@ -314,7 +314,7 @@ class XXEConfiguration extends DataFlow::Configuration { // source is the write on `this` of a call to the `SAXParser` // constructor. exists(CallInstruction call | - call.getStaticCallTarget() = any(SAXParserClass c).getAConstructor() and + call.getStaticCallTarget() = any(SaxParserClass c).getAConstructor() and node.asInstruction().(WriteSideEffectInstruction).getDestinationAddress() = call.getThisArgument() and encodeXercesFlowState(flowstate, 0, 1) // default configuration @@ -322,7 +322,7 @@ class XXEConfiguration extends DataFlow::Configuration { or // source is the result of a call to `createXMLReader`. exists(Call call | - call.getTarget() instanceof CreateXMLReader and + call.getTarget() instanceof CreateXmlReader and call = node.asExpr() and encodeXercesFlowState(flowstate, 0, 1) // default configuration ) From 85cc9b890160392a3b4b9a19dad87675fb6fc9e3 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 9 May 2022 13:00:29 +0100 Subject: [PATCH 0408/1618] C++: Use getClassAndName. --- cpp/ql/src/Security/CWE/CWE-611/XXE.ql | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql index 7daea2f1d63..c8b638ddecd 100644 --- a/cpp/ql/src/Security/CWE/CWE-611/XXE.ql +++ b/cpp/ql/src/Security/CWE/CWE-611/XXE.ql @@ -153,8 +153,7 @@ class CreateEntityReferenceNodesTranformer extends XXEFlowStateTranformer { CreateEntityReferenceNodesTranformer() { exists(Call call, Function f | call.getTarget() = f and - f.getDeclaringType() instanceof AbstractDOMParserClass and - f.hasName("setCreateEntityReferenceNodes") and + f.getClassAndName("setCreateEntityReferenceNodes") instanceof AbstractDOMParserClass and this = call.getQualifier() and newValue = call.getArgument(0) ) @@ -195,8 +194,7 @@ class SetFeatureTranformer extends XXEFlowStateTranformer { SetFeatureTranformer() { exists(Call call, Function f | call.getTarget() = f and - f.getDeclaringType() instanceof Sax2XmlReader and - f.hasName("setFeature") and + f.getClassAndName("setFeature") instanceof Sax2XmlReader and this = call.getQualifier() and globalValueNumber(call.getArgument(0)).getAnExpr().(VariableAccess).getTarget() instanceof FeatureDisableDefaultEntityResolution and From ab1252d1967b3a85d0b692241b53990bb12ce55f Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Mon, 9 May 2022 14:19:40 +0200 Subject: [PATCH 0409/1618] Python: Add @precision high for `py/pam-auth-bypass` --- python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql b/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql index 595d1af13a4..7561dec7f67 100644 --- a/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql +++ b/python/ql/src/experimental/Security/CWE-285/PamAuthorization.ql @@ -3,6 +3,7 @@ * @description Using only the `pam_authenticate` call to check the validity of a login can lead to a authorization bypass. * @kind problem * @problem.severity warning + * @precision high * @id py/pam-auth-bypass * @tags security * external/cwe/cwe-285 From 198c96982cab425773660c7f01370431f9cca6b8 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Mon, 9 May 2022 14:30:41 +0100 Subject: [PATCH 0410/1618] Add a comment to explain the unusual Action path --- .github/workflows/query-list.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/query-list.yml b/.github/workflows/query-list.yml index 6bd1d3a5bf3..952e5783e1c 100644 --- a/.github/workflows/query-list.yml +++ b/.github/workflows/query-list.yml @@ -30,6 +30,7 @@ jobs: with: python-version: 3.8 - name: Download CodeQL CLI + # Look under the `codeql` directory , as this is where we checked out the `github/codeql` repo uses: ./codeql/.github/actions/fetch-codeql - name: Unzip CodeQL CLI run: unzip -d codeql-cli codeql-linux64.zip From 71d1069a0a4a0b41fe5e39e65df2b72126da98df Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Mon, 9 May 2022 14:31:05 +0100 Subject: [PATCH 0411/1618] Fix typo --- .github/workflows/query-list.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/query-list.yml b/.github/workflows/query-list.yml index 952e5783e1c..f8f2d451adb 100644 --- a/.github/workflows/query-list.yml +++ b/.github/workflows/query-list.yml @@ -30,7 +30,7 @@ jobs: with: python-version: 3.8 - name: Download CodeQL CLI - # Look under the `codeql` directory , as this is where we checked out the `github/codeql` repo + # Look under the `codeql` directory, as this is where we checked out the `github/codeql` repo uses: ./codeql/.github/actions/fetch-codeql - name: Unzip CodeQL CLI run: unzip -d codeql-cli codeql-linux64.zip From 1b0e9d5cd726b6d5c7122cfae6938dd7bb8d33b7 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 9 May 2022 15:59:18 +0200 Subject: [PATCH 0412/1618] Dataflow: Fix join order in nodeMayUseSummary. --- .../java/dataflow/internal/DataFlowImpl.qll | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index 89a35b00fa6..de59189855b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -3394,17 +3394,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { From 135d7f6e325ac236de6eb7c156a68e6c6c9676fe Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 9 May 2022 16:00:15 +0200 Subject: [PATCH 0413/1618] Dataflow: Prune more cons-candidates. --- .../java/dataflow/internal/DataFlowImpl.qll | 48 +++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index de59189855b..caa3841bc33 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config From 4a6789182d4d4d18526e05d05cf3028c3a59b92c Mon Sep 17 00:00:00 2001 From: Rasmus Wriedt Larsen Date: Mon, 9 May 2022 16:37:12 +0200 Subject: [PATCH 0414/1618] Python: Apply suggestions from code review Co-authored-by: yoff --- python/ql/lib/semmle/python/frameworks/Stdlib.qll | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/python/ql/lib/semmle/python/frameworks/Stdlib.qll b/python/ql/lib/semmle/python/frameworks/Stdlib.qll index e67e90cc794..ef60841acd6 100644 --- a/python/ql/lib/semmle/python/frameworks/Stdlib.qll +++ b/python/ql/lib/semmle/python/frameworks/Stdlib.qll @@ -3265,14 +3265,7 @@ private module StdlibPrivate { API::moduleImport("xml") .getMember("etree") .getMember("ElementTree") - .getMember("XMLParser") - .getACall() - or - this = - API::moduleImport("xml") - .getMember("etree") - .getMember("ElementTree") - .getMember("XMLPullParser") + .getMember(["XMLParser", "XMLPullParser"]) .getACall() } } From bf0e32ae829372c377ec6f5083e210ead1e77bf3 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Mon, 9 May 2022 14:12:32 +0000 Subject: [PATCH 0415/1618] C#: Port the existing compiler-tracing.spec files to Lua. --- csharp/tools/tracing-config.lua | 55 +++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 csharp/tools/tracing-config.lua diff --git a/csharp/tools/tracing-config.lua b/csharp/tools/tracing-config.lua new file mode 100644 index 00000000000..e7d1ce65dfd --- /dev/null +++ b/csharp/tools/tracing-config.lua @@ -0,0 +1,55 @@ +function RegisterExtractorPack() + local extractor = GetPlatformToolsDirectory() .. + 'Semmle.Extraction.CSharp.Driver' + if OperatingSystem == 'windows' then + extractor = GetPlatformToolsDirectory() .. + 'Semmle.Extraction.CSharp.Driver.exe' + end + local windowsMatchers = { + CreatePatternMatcher({'^dotnet%.exe$'}, MatchCompilerName, extractor, + {prepend = {'--dotnetexec', '--cil'}}), + CreatePatternMatcher({'^csc.*%.exe$'}, MatchCompilerName, extractor, { + prepend = {'--compiler', '"${compiler}"', '--cil'} + }), + CreatePatternMatcher({'^fakes.*%.exe$', 'moles.*%.exe'}, + MatchCompilerName, nil, {trace = false}) + } + local posixMatchers = { + CreatePatternMatcher({'^mcs%.exe$', '^csc%.exe$'}, MatchCompilerName, + extractor, { + prepend = {'--compiler', '"${compiler}"', '--cil'} + }), + CreatePatternMatcher({'^mono', '^dotnet$'}, MatchCompilerName, + extractor, {prepend = {'--dotnetexec', '--cil'}}), + function(compilerName, compilerPath, compilerArguments, _languageId) + if MatchCompilerName('^msbuild$', compilerName, compilerPath, + compilerArguments) or + MatchCompilerName('^xbuild$', compilerName, compilerPath, + compilerArguments) then + return { + replace = true, + invocations = { + { + path = compilerPath, + transformedArguments = { + nativeArgumentPointer = compilerArguments['nativeArgumentPointer'], + append = {'/p:UseSharedCompilation=false'}, + prepend = {} + } + } + } + } + end + end + } + if OperatingSystem == 'windows' then + return windowsMatchers + else + return posixMatchers + end + +end + +-- Return a list of minimum supported versions of the configuration file format +-- return one entry per supported major version. +function GetCompatibleVersions() return {'1.0.0'} end From 2a5908ff49fef44410fb9a2c74a2eec3ddc6ea0d Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 9 May 2022 17:08:49 +0200 Subject: [PATCH 0416/1618] python: require all settings be vulnerable at least all thos not in tests --- .../CWE-352/CSRFProtectionDisabled.ql | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql index 24917411fb4..f85cf319572 100644 --- a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql @@ -14,12 +14,24 @@ import python import semmle.python.Concepts -from HTTP::Server::CsrfProtectionSetting s -where - s.getVerificationSetting() = false and - not exists(HTTP::Server::CsrfLocalProtectionSetting p | p.csrfEnabled()) and +predicate relevantSetting(HTTP::Server::CsrfProtectionSetting s) { // rule out test code as this is a common place to turn off CSRF protection. // We don't use normal `TestScope` to find test files, since we also want to match // a settings file such as `.../integration-tests/settings.py` not s.getLocation().getFile().getAbsolutePath().matches("%test%") -select s, "Potential CSRF vulnerability due to forgery protection being disabled or weakened." +} + +predicate vulnerableSetting(HTTP::Server::CsrfProtectionSetting s) { + s.getVerificationSetting() = false and + not exists(HTTP::Server::CsrfLocalProtectionSetting p | p.csrfEnabled()) and + relevantSetting(s) +} + +from HTTP::Server::CsrfProtectionSetting setting +where + vulnerableSetting(setting) and + // We have seen examples of dummy projects with vulnerable settings alongside a main + // project with a protecting settings file. We want to rule out this scenario, so we + // require all non-test settings to be vulnerable. + forall( HTTP::Server::CsrfProtectionSetting s| relevantSetting(s) | vulnerableSetting(s) ) +select setting, "Potential CSRF vulnerability due to forgery protection being disabled or weakened." From c08e6fdc1ed904c8cabf809c1d581f2e490df4c4 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 9 May 2022 17:50:49 +0200 Subject: [PATCH 0417/1618] Swift codegen: add predicate properties Properties marked with `predicate` in the schema are now accepted. * in the dbscheme, they will translate to a table with a single `id` column (and the table name will not be pluralized) * in C++ classes, they will translate to `bool` fields * in QL classes, they will translate to predicates Closes https://github.com/github/codeql-c-team/issues/1016 --- swift/codegen/cppgen.py | 8 ++- swift/codegen/dbschemegen.py | 9 +++ swift/codegen/lib/cpp.py | 3 +- swift/codegen/lib/ql.py | 28 +++++---- swift/codegen/lib/schema.py | 22 ++++--- swift/codegen/qlgen.py | 8 +++ swift/codegen/schema.yml | 1 + swift/codegen/templates/cpp_classes.mustache | 3 + swift/codegen/templates/ql_class.mustache | 8 +-- swift/codegen/test/test_cpp.py | 15 ++--- swift/codegen/test/test_cppgen.py | 11 ++++ swift/codegen/test/test_dbschemegen.py | 35 +++++++++++ swift/codegen/test/test_ql.py | 63 +++++++++++-------- swift/codegen/test/test_qlgen.py | 16 ++++- swift/codegen/test/test_schema.py | 2 + .../swift/generated/type/AnyFunctionType.qll | 2 + swift/ql/lib/swift.dbscheme | 5 ++ 17 files changed, 179 insertions(+), 60 deletions(-) diff --git a/swift/codegen/cppgen.py b/swift/codegen/cppgen.py index f45512512aa..eee66a812f0 100644 --- a/swift/codegen/cppgen.py +++ b/swift/codegen/cppgen.py @@ -8,6 +8,9 @@ from swift.codegen.lib import cpp, generator, schema def _get_type(t: str, trap_affix: str) -> str: + if t is None: + # this is a predicate + return "bool" if t == "string": return "std::string" if t == "boolean": @@ -20,12 +23,15 @@ def _get_type(t: str, trap_affix: str) -> str: def _get_field(cls: schema.Class, p: schema.Property, trap_affix: str) -> cpp.Field: trap_name = None if not p.is_single: - trap_name = inflection.pluralize(inflection.camelize(f"{cls.name}_{p.name}")) + trap_name = inflection.camelize(f"{cls.name}_{p.name}") + if not p.is_predicate: + trap_name = inflection.pluralize(trap_name) args = dict( name=p.name + ("_" if p.name in cpp.cpp_keywords else ""), type=_get_type(p.type, trap_affix), is_optional=p.is_optional, is_repeated=p.is_repeated, + is_predicate=p.is_predicate, trap_name=trap_name, ) args.update(cpp.get_field_override(p.name)) diff --git a/swift/codegen/dbschemegen.py b/swift/codegen/dbschemegen.py index efe45c0b997..c95316e5499 100755 --- a/swift/codegen/dbschemegen.py +++ b/swift/codegen/dbschemegen.py @@ -57,6 +57,15 @@ def cls_to_dbscheme(cls: schema.Class): Column(f.name, dbtype(f.type)), ], ) + elif f.is_predicate: + yield Table( + keyset=KeySet(["id"]), + name=inflection.underscore(f"{cls.name}_{f.name}"), + columns=[ + Column("id", type=dbtype(cls.name)), + ], + ) + def get_declarations(data: schema.Schema): diff --git a/swift/codegen/lib/cpp.py b/swift/codegen/lib/cpp.py index 886ef8069e6..82dfbb44bcb 100644 --- a/swift/codegen/lib/cpp.py +++ b/swift/codegen/lib/cpp.py @@ -35,6 +35,7 @@ class Field: type: str is_optional: bool = False is_repeated: bool = False + is_predicate: bool = False trap_name: str = None first: bool = False @@ -61,7 +62,7 @@ class Field: @property def is_single(self): - return not (self.is_optional or self.is_repeated) + return not (self.is_optional or self.is_repeated or self.is_predicate) diff --git a/swift/codegen/lib/ql.py b/swift/codegen/lib/ql.py index ee9103fd990..5d4a7076414 100644 --- a/swift/codegen/lib/ql.py +++ b/swift/codegen/lib/ql.py @@ -14,29 +14,35 @@ class Param: @dataclass class Property: singular: str - type: str - tablename: str - tableparams: List[Param] + type: str = None + tablename: str = None + tableparams: List[Param] = field(default_factory=list) plural: str = None first: bool = False local_var: str = "x" is_optional: bool = False + is_predicate: bool = False def __post_init__(self): - assert self.tableparams - if self.type_is_class: - self.tableparams = [x if x != "result" else self.local_var for x in self.tableparams] - self.tableparams = [Param(x) for x in self.tableparams] - self.tableparams[0].first = True + if self.tableparams: + if self.type_is_class: + self.tableparams = [x if x != "result" else self.local_var for x in self.tableparams] + self.tableparams = [Param(x) for x in self.tableparams] + self.tableparams[0].first = True @property - def indefinite_article(self): + def getter(self): + return f"get{self.singular}" if not self.is_predicate else self.singular + + @property + def indefinite_getter(self): if self.plural: - return "An" if self.singular[0] in "AEIO" else "A" + article = "An" if self.singular[0] in "AEIO" else "A" + return f"get{article}{self.singular}" @property def type_is_class(self): - return self.type[0].isupper() + return bool(self.type) and self.type[0].isupper() @property def is_repeated(self): diff --git a/swift/codegen/lib/schema.py b/swift/codegen/lib/schema.py index 06ceb4b63bb..a65aaf24dca 100644 --- a/swift/codegen/lib/schema.py +++ b/swift/codegen/lib/schema.py @@ -15,9 +15,10 @@ class Property: is_single: ClassVar = False is_optional: ClassVar = False is_repeated: ClassVar = False + is_predicate: ClassVar = False name: str - type: str + type: str = None @dataclass @@ -41,6 +42,11 @@ class RepeatedOptionalProperty(Property): is_repeated: ClassVar = True +@dataclass +class PredicateProperty(Property): + is_predicate: ClassVar = True + + @dataclass class Class: name: str @@ -58,17 +64,15 @@ class Schema: def _parse_property(name, type): if type.endswith("?*"): - cls = RepeatedOptionalProperty - type = type[:-2] + return RepeatedOptionalProperty(name, type[:-2]) elif type.endswith("*"): - cls = RepeatedProperty - type = type[:-1] + return RepeatedProperty(name, type[:-1]) elif type.endswith("?"): - cls = OptionalProperty - type = type[:-1] + return OptionalProperty(name, type[:-1]) + elif type == "predicate": + return PredicateProperty(name) else: - cls = SingleProperty - return cls(name, type) + return SingleProperty(name, type) class _DirSelector: diff --git a/swift/codegen/qlgen.py b/swift/codegen/qlgen.py index 5d08f5a0410..4eea533904a 100755 --- a/swift/codegen/qlgen.py +++ b/swift/codegen/qlgen.py @@ -36,6 +36,14 @@ def get_ql_property(cls: schema.Class, prop: schema.Property): tableparams=["this", "result"], is_optional=True, ) + elif prop.is_predicate: + return ql.Property( + singular=inflection.camelize(prop.name, uppercase_first_letter=False), + type="predicate", + tablename=inflection.underscore(f"{cls.name}_{prop.name}"), + tableparams=["this"], + is_predicate=True, + ) def get_ql_class(cls: schema.Class): diff --git a/swift/codegen/schema.yml b/swift/codegen/schema.yml index 4ea4a8190a6..46e0b508ae5 100644 --- a/swift/codegen/schema.yml +++ b/swift/codegen/schema.yml @@ -59,6 +59,7 @@ AnyFunctionType: result: Type param_types: Type* param_labels: string* + is_throwing: predicate AnyGenericType: _extends: Type diff --git a/swift/codegen/templates/cpp_classes.mustache b/swift/codegen/templates/cpp_classes.mustache index 3e9d12084c9..15e33a378dc 100644 --- a/swift/codegen/templates/cpp_classes.mustache +++ b/swift/codegen/templates/cpp_classes.mustache @@ -33,6 +33,9 @@ struct {{name}}{{#final}} : Binding<{{name}}Tag>{{#bases}}, {{ref.name}}{{/bases {{ref.name}}::emit(id, out); {{/bases}} {{#fields}} + {{#is_predicate}} + if ({{name}}) out << {{trap_name}}{{trap_affix}}{id} << '\n'; + {{/is_predicate}} {{#is_optional}} {{^is_repeated}} if ({{name}}) out << {{trap_name}}{{trap_affix}}{id, *{{name}}} << '\n'; diff --git a/swift/codegen/templates/ql_class.mustache b/swift/codegen/templates/ql_class.mustache index 12ca76c9975..89da396be90 100644 --- a/swift/codegen/templates/ql_class.mustache +++ b/swift/codegen/templates/ql_class.mustache @@ -21,7 +21,7 @@ class {{name}}Base extends {{db_id}}{{#bases}}, {{.}}{{/bases}} { {{/final}} {{#properties}} - {{type}} get{{singular}}({{#is_repeated}}int index{{/is_repeated}}) { + {{type}} {{getter}}({{#is_repeated}}int index{{/is_repeated}}) { {{#type_is_class}} exists({{type}} {{local_var}} | {{tablename}}({{#tableparams}}{{^first}}, {{/first}}{{param}}{{/tableparams}}) @@ -34,13 +34,13 @@ class {{name}}Base extends {{db_id}}{{#bases}}, {{.}}{{/bases}} { } {{#is_repeated}} - {{type}} get{{indefinite_article}}{{singular}}() { - result = get{{singular}}(_) + {{type}} {{indefinite_getter}}() { + result = {{getter}}(_) } {{^is_optional}} int getNumberOf{{plural}}() { - result = count(get{{indefinite_article}}{{singular}}()) + result = count({{indefinite_getter}}()) } {{/is_optional}} {{/is_repeated}} diff --git a/swift/codegen/test/test_cpp.py b/swift/codegen/test/test_cpp.py index 74dbc2d2182..06ff50f8a51 100644 --- a/swift/codegen/test/test_cpp.py +++ b/swift/codegen/test/test_cpp.py @@ -27,14 +27,15 @@ def test_field_get_streamer(type, expected): assert f.get_streamer()("value") == expected -@pytest.mark.parametrize("is_optional,is_repeated,expected", [ - (False, False, True), - (True, False, False), - (False, True, False), - (True, True, False), +@pytest.mark.parametrize("is_optional,is_repeated,is_predicate,expected", [ + (False, False, False, True), + (True, False, False, False), + (False, True, False, False), + (True, True, False, False), + (False, False, True, False), ]) -def test_field_is_single(is_optional, is_repeated, expected): - f = cpp.Field("name", "type", is_optional=is_optional, is_repeated=is_repeated) +def test_field_is_single(is_optional, is_repeated, is_predicate, expected): + f = cpp.Field("name", "type", is_optional=is_optional, is_repeated=is_repeated, is_predicate=is_predicate) assert f.is_single is expected diff --git a/swift/codegen/test/test_cppgen.py b/swift/codegen/test/test_cppgen.py index ac37b7300c5..b4e766af9dc 100644 --- a/swift/codegen/test/test_cppgen.py +++ b/swift/codegen/test/test_cppgen.py @@ -92,6 +92,17 @@ def test_class_with_field(generate, type, expected, property_cls, optional, repe ] +def test_class_with_predicate(generate): + assert generate([ + schema.Class(name="MyClass", properties=[schema.PredicateProperty("prop")]), + ]) == [ + cpp.Class(name="MyClass", + fields=[cpp.Field("prop", "bool", trap_name="MyClassProp", is_predicate=True)], + trap_name="MyClasses", + final=True) + ] + + @pytest.mark.parametrize("name", ["start_line", "start_column", "end_line", "end_column", "index", "num_whatever", "width"]) def test_class_with_overridden_unsigned_field(generate, name): diff --git a/swift/codegen/test/test_dbschemegen.py b/swift/codegen/test/test_dbschemegen.py index 82521fb9892..54f1e1796f7 100644 --- a/swift/codegen/test/test_dbschemegen.py +++ b/swift/codegen/test/test_dbschemegen.py @@ -156,6 +156,33 @@ def test_final_class_with_repeated_field(opts, input, renderer, property_cls): ) +def test_final_class_with_predicate_field(opts, input, renderer): + input.classes = [ + schema.Class("Object", properties=[ + schema.PredicateProperty("foo"), + ]), + ] + assert generate(opts, renderer) == dbscheme.Scheme( + src=schema_file, + includes=[], + declarations=[ + dbscheme.Table( + name="objects", + columns=[ + dbscheme.Column('id', '@object', binding=True), + ] + ), + dbscheme.Table( + name="object_foo", + keyset=dbscheme.KeySet(["id"]), + columns=[ + dbscheme.Column('id', '@object'), + ] + ), + ], + ) + + def test_final_class_with_more_fields(opts, input, renderer): input.classes = [ schema.Class("Object", properties=[ @@ -164,6 +191,7 @@ def test_final_class_with_more_fields(opts, input, renderer): schema.OptionalProperty("three", "z"), schema.RepeatedProperty("four", "u"), schema.RepeatedOptionalProperty("five", "v"), + schema.PredicateProperty("six"), ]), ] assert generate(opts, renderer) == dbscheme.Scheme( @@ -204,6 +232,13 @@ def test_final_class_with_more_fields(opts, input, renderer): dbscheme.Column('five', 'v'), ] ), + dbscheme.Table( + name="object_six", + keyset=dbscheme.KeySet(["id"]), + columns=[ + dbscheme.Column('id', '@object'), + ] + ), ], ) diff --git a/swift/codegen/test/test_ql.py b/swift/codegen/test/test_ql.py index e87383695c6..caa513c1b15 100644 --- a/swift/codegen/test/test_ql.py +++ b/swift/codegen/test/test_ql.py @@ -12,31 +12,32 @@ def test_property_has_first_table_param_marked(): assert [p.param for p in prop.tableparams] == tableparams -def test_property_not_a_class(): - tableparams = ["x", "result", "y"] - prop = ql.Property("Prop", "foo", "props", tableparams) - assert not prop.type_is_class - assert [p.param for p in prop.tableparams] == tableparams - - -def test_property_is_a_class(): - tableparams = ["x", "result", "y"] - prop = ql.Property("Prop", "Foo", "props", tableparams) - assert prop.type_is_class - assert [p.param for p in prop.tableparams] == ["x", prop.local_var, "y"] - - -@pytest.mark.parametrize("name,expected_article", [ - ("Argument", "An"), - ("Element", "An"), - ("Integer", "An"), - ("Operator", "An"), - ("Unit", "A"), - ("Whatever", "A"), +@pytest.mark.parametrize("type,expected", [ + ("Foo", True), + ("Bar", True), + ("foo", False), + ("bar", False), + (None, False), ]) -def test_property_indefinite_article(name, expected_article): - prop = ql.Property(name, "Foo", "props", ["x"], plural="X") - assert prop.indefinite_article == expected_article +def test_property_is_a_class(type, expected): + tableparams = ["a", "result", "b"] + expected_tableparams = ["a", "x" if expected else "result", "b"] + prop = ql.Property("Prop", type, tableparams=tableparams) + assert prop.type_is_class is expected + assert [p.param for p in prop.tableparams] == expected_tableparams + + +@pytest.mark.parametrize("name,expected_getter", [ + ("Argument", "getAnArgument"), + ("Element", "getAnElement"), + ("Integer", "getAnInteger"), + ("Operator", "getAnOperator"), + ("Unit", "getAUnit"), + ("Whatever", "getAWhatever"), +]) +def test_property_indefinite_article(name, expected_getter): + prop = ql.Property(name, plural="X") + assert prop.indefinite_getter == expected_getter @pytest.mark.parametrize("plural,expected", [ @@ -49,9 +50,19 @@ def test_property_is_plural(plural, expected): assert prop.is_repeated is expected -def test_property_no_plural_no_indefinite_article(): +def test_property_no_plural_no_indefinite_getter(): prop = ql.Property("Prop", "Foo", "props", ["x"]) - assert prop.indefinite_article is None + assert prop.indefinite_getter is None + + +def test_property_getter(): + prop = ql.Property("Prop", "Foo") + assert prop.getter == "getProp" + + +def test_property_predicate_getter(): + prop = ql.Property("prop", is_predicate=True) + assert prop.getter == "prop" def test_class_sorts_bases(): diff --git a/swift/codegen/test/test_qlgen.py b/swift/codegen/test/test_qlgen.py index d273539e375..e5405406747 100644 --- a/swift/codegen/test/test_qlgen.py +++ b/swift/codegen/test/test_qlgen.py @@ -2,7 +2,7 @@ import subprocess import sys from swift.codegen import qlgen -from swift.codegen.lib import ql, paths +from swift.codegen.lib import ql from swift.codegen.test.utils import * @@ -141,6 +141,20 @@ def test_repeated_optional_property(opts, input, renderer): } +def test_predicate_property(opts, input, renderer): + input.classes = [ + schema.Class("MyObject", properties=[schema.PredicateProperty("is_foo")]), + ] + assert generate(opts, renderer) == { + import_file(): ql.ImportList([stub_import_prefix + "MyObject"]), + stub_path() / "MyObject.qll": ql.Stub(name="MyObject", base_import=gen_import_prefix + "MyObject"), + ql_output_path() / "MyObject.qll": ql.Class(name="MyObject", final=True, properties=[ + ql.Property(singular="isFoo", type="predicate", tablename="my_object_is_foo", tableparams=["this"], + is_predicate=True), + ]) + } + + def test_single_class_property(opts, input, renderer): input.classes = [ schema.Class("MyObject", properties=[schema.SingleProperty("foo", "Bar")]), diff --git a/swift/codegen/test/test_schema.py b/swift/codegen/test/test_schema.py index 36367a76b1f..c1b64648894 100644 --- a/swift/codegen/test/test_schema.py +++ b/swift/codegen/test/test_schema.py @@ -141,6 +141,7 @@ A: two: int? three: bool* four: x?* + five: predicate """) assert ret.classes == [ schema.Class(root_name, derived={'A'}), @@ -149,6 +150,7 @@ A: schema.OptionalProperty('two', 'int'), schema.RepeatedProperty('three', 'bool'), schema.RepeatedOptionalProperty('four', 'x'), + schema.PredicateProperty('five'), ]), ] diff --git a/swift/ql/lib/codeql/swift/generated/type/AnyFunctionType.qll b/swift/ql/lib/codeql/swift/generated/type/AnyFunctionType.qll index 847017e44f2..6add8032bc1 100644 --- a/swift/ql/lib/codeql/swift/generated/type/AnyFunctionType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/AnyFunctionType.qll @@ -25,4 +25,6 @@ class AnyFunctionTypeBase extends @any_function_type, Type { string getAParamLabel() { result = getParamLabel(_) } int getNumberOfParamLabels() { result = count(getAParamLabel()) } + + predicate isThrowing() { any_function_type_is_throwing(this) } } diff --git a/swift/ql/lib/swift.dbscheme b/swift/ql/lib/swift.dbscheme index fbff22210bf..8d3ab41cf22 100644 --- a/swift/ql/lib/swift.dbscheme +++ b/swift/ql/lib/swift.dbscheme @@ -167,6 +167,11 @@ any_function_type_param_labels( string param_label: string ref ); +#keyset[id] +any_function_type_is_throwing( + int id: @any_function_type ref +); + @any_generic_type = @nominal_or_bound_generic_nominal_type | @unbound_generic_type From 75e7148912e3e70f322cced85d49319adc6f4a60 Mon Sep 17 00:00:00 2001 From: luchua-bc Date: Mon, 9 May 2022 16:10:11 +0000 Subject: [PATCH 0418/1618] Standardize the query and update qldoc --- .../Security/CWE/CWE-321/HardcodedJwtKey.qll | 43 +++++++------------ 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qll b/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qll index c960b065215..137f5dd566e 100644 --- a/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qll +++ b/java/ql/src/experimental/Security/CWE/CWE-321/HardcodedJwtKey.qll @@ -3,25 +3,26 @@ */ import java +private import semmle.code.java.dataflow.ExternalFlow private import semmle.code.java.dataflow.FlowSources -/** The Java class `com.auth0.jwt.JWT`. */ +/** The class `com.auth0.jwt.JWT`. */ class Jwt extends RefType { Jwt() { this.hasQualifiedName("com.auth0.jwt", "JWT") } } -/** The Java class `com.auth0.jwt.JWTCreator.Builder`. */ +/** The class `com.auth0.jwt.JWTCreator.Builder`. */ class JwtBuilder extends RefType { JwtBuilder() { this.hasQualifiedName("com.auth0.jwt", "JWTCreator$Builder") } } -/** The Java class `com.auth0.jwt.algorithms.Algorithm`. */ -class Algorithm extends RefType { - Algorithm() { this.hasQualifiedName("com.auth0.jwt.algorithms", "Algorithm") } +/** The class `com.auth0.jwt.algorithms.Algorithm`. */ +class JwtAlgorithm extends RefType { + JwtAlgorithm() { this.hasQualifiedName("com.auth0.jwt.algorithms", "Algorithm") } } /** - * The Java interface `com.auth0.jwt.interfaces.JWTVerifier` or it implementation class + * The interface `com.auth0.jwt.interfaces.JWTVerifier` or its implementation * `com.auth0.jwt.JWTVerifier`. */ class JwtVerifier extends RefType { @@ -30,15 +31,11 @@ class JwtVerifier extends RefType { } } -/** The secret generation method declared in `com.auth0.jwt.algorithms.Algorithm`. */ -class GetSecretMethod extends Method { - GetSecretMethod() { - this.getDeclaringType() instanceof Algorithm and - ( - this.getName().substring(0, 4) = "HMAC" or - this.getName().substring(0, 5) = "ECDSA" or - this.getName().substring(0, 3) = "RSA" - ) +/** A method that creates an instance of `com.auth0.jwt.algorithms.Algorithm`. */ +class GetAlgorithmMethod extends Method { + GetAlgorithmMethod() { + this.getDeclaringType() instanceof JwtAlgorithm and + this.getName().matches(["HMAC%", "ECDSA%", "RSA%"]) } } @@ -76,19 +73,11 @@ abstract class JwtKeySource extends DataFlow::Node { } */ abstract class JwtTokenSink extends DataFlow::Node { } -private predicate isTestCode(Expr e) { - e.getFile().getAbsolutePath().toLowerCase().matches("%test%") and - not e.getFile().getAbsolutePath().toLowerCase().matches("%ql/test%") -} - /** * A hardcoded string literal as a source for JWT token signing vulnerabilities. */ class HardcodedKeyStringSource extends JwtKeySource { - HardcodedKeyStringSource() { - this.asExpr() instanceof CompileTimeConstantExpr and - not isTestCode(this.asExpr()) - } + HardcodedKeyStringSource() { this.asExpr() instanceof CompileTimeConstantExpr } } /** @@ -128,7 +117,7 @@ class HardcodedJwtKeyConfiguration extends TaintTracking::Configuration { override predicate isAdditionalTaintStep(DataFlow::Node prev, DataFlow::Node succ) { exists(MethodAccess ma | ( - ma.getMethod() instanceof GetSecretMethod or + ma.getMethod() instanceof GetAlgorithmMethod or ma.getMethod() instanceof RequireMethod ) and prev.asExpr() = ma.getArgument(0) and @@ -145,12 +134,12 @@ private class VerificationFlowStep extends SummaryModelCsv { "com.auth0.jwt.interfaces;Verification;true;build;;;Argument[-1];ReturnValue;taint", "com.auth0.jwt.interfaces;Verification;true;" + ["acceptLeeway", "acceptExpiresAt", "acceptNotBefore", "acceptIssuedAt", "ignoreIssuedAt"] - + ";;;Argument[-1];ReturnValue;taint", + + ";;;Argument[-1];ReturnValue;value", "com.auth0.jwt.interfaces;Verification;true;with" + [ "Issuer", "Subject", "Audience", "AnyOfAudience", "ClaimPresence", "Claim", "ArrayClaim", "JWTId" - ] + ";;;Argument[-1];ReturnValue;taint" + ] + ";;;Argument[-1];ReturnValue;value" ] } } From e80ee46fe41078bd82694efaffd23dd0c19413ba Mon Sep 17 00:00:00 2001 From: Erik Krogh Kristensen Date: Mon, 9 May 2022 14:03:45 +0200 Subject: [PATCH 0419/1618] add model for the cash library --- javascript/ql/lib/change-notes/2022-05-09-cash.md | 5 +++++ .../lib/semmle/javascript/frameworks/jQuery.qll | 8 ++++---- .../CWE-079/XssThroughDom/XssThroughDom.expected | 15 +++++++++++++++ .../CWE-079/XssThroughDom/xss-through-dom.js | 8 ++++++++ 4 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 javascript/ql/lib/change-notes/2022-05-09-cash.md diff --git a/javascript/ql/lib/change-notes/2022-05-09-cash.md b/javascript/ql/lib/change-notes/2022-05-09-cash.md new file mode 100644 index 00000000000..e5e0056e86c --- /dev/null +++ b/javascript/ql/lib/change-notes/2022-05-09-cash.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- +* The [cash](https://github.com/fabiospampinato/cash) library is now modelled as an alias for JQuery. + Sinks and sources from cash should now be handled by all XSS queries. \ No newline at end of file diff --git a/javascript/ql/lib/semmle/javascript/frameworks/jQuery.qll b/javascript/ql/lib/semmle/javascript/frameworks/jQuery.qll index 28a01dba7ab..31d1d5b99d2 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/jQuery.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/jQuery.qll @@ -406,11 +406,11 @@ module JQuery { private class DefaultRange extends Range { DefaultRange() { - // either a reference to a global variable `$` or `jQuery` - this = DataFlow::globalVarRef(any(string jq | jq = "$" or jq = "jQuery")) + // either a reference to a global variable `$`, `jQuery`, or `cash` + this = DataFlow::globalVarRef(["$", "jQuery", "cash"]) or - // or imported from a module named `jquery` or `zepto` - this = DataFlow::moduleImport(["jquery", "zepto"]) + // or imported from a module named `jquery`, `zepto`, or `cash-dom` + this = DataFlow::moduleImport(["jquery", "zepto", "cash-dom"]) or this.hasUnderlyingType("JQueryStatic") } diff --git a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected index cc1988e5adf..57c6899d078 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/XssThroughDom.expected @@ -150,6 +150,13 @@ nodes | xss-through-dom.js:131:19:131:26 | linkText | | xss-through-dom.js:132:16:132:23 | linkText | | xss-through-dom.js:132:16:132:23 | linkText | +| xss-through-dom.js:139:11:139:52 | src | +| xss-through-dom.js:139:17:139:52 | documen ... k").src | +| xss-through-dom.js:139:17:139:52 | documen ... k").src | +| xss-through-dom.js:140:19:140:21 | src | +| xss-through-dom.js:140:19:140:21 | src | +| xss-through-dom.js:141:25:141:27 | src | +| xss-through-dom.js:141:25:141:27 | src | edges | forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values | | forms.js:8:23:8:28 | values | forms.js:9:31:9:36 | values | @@ -246,6 +253,12 @@ edges | xss-through-dom.js:130:17:130:68 | wSelect ... ) \|\| '' | xss-through-dom.js:130:6:130:68 | linkText | | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | xss-through-dom.js:130:17:130:62 | wSelect ... tring() | | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | xss-through-dom.js:130:17:130:62 | wSelect ... tring() | +| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:140:19:140:21 | src | +| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:140:19:140:21 | src | +| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:141:25:141:27 | src | +| xss-through-dom.js:139:11:139:52 | src | xss-through-dom.js:141:25:141:27 | src | +| xss-through-dom.js:139:17:139:52 | documen ... k").src | xss-through-dom.js:139:11:139:52 | src | +| xss-through-dom.js:139:17:139:52 | documen ... k").src | xss-through-dom.js:139:11:139:52 | src | #select | forms.js:9:31:9:40 | values.foo | forms.js:8:23:8:28 | values | forms.js:9:31:9:40 | values.foo | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:8:23:8:28 | values | DOM text | | forms.js:12:31:12:40 | values.bar | forms.js:11:24:11:29 | values | forms.js:12:31:12:40 | values.bar | $@ is reinterpreted as HTML without escaping meta-characters. | forms.js:11:24:11:29 | values | DOM text | @@ -287,3 +300,5 @@ edges | xss-through-dom.js:131:19:131:26 | linkText | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | xss-through-dom.js:131:19:131:26 | linkText | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | DOM text | | xss-through-dom.js:132:16:132:23 | linkText | xss-through-dom.js:130:17:130:37 | wSelect ... tring() | xss-through-dom.js:132:16:132:23 | linkText | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:130:17:130:37 | wSelect ... tring() | DOM text | | xss-through-dom.js:132:16:132:23 | linkText | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | xss-through-dom.js:132:16:132:23 | linkText | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:130:42:130:62 | dSelect ... tring() | DOM text | +| xss-through-dom.js:140:19:140:21 | src | xss-through-dom.js:139:17:139:52 | documen ... k").src | xss-through-dom.js:140:19:140:21 | src | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:139:17:139:52 | documen ... k").src | DOM text | +| xss-through-dom.js:141:25:141:27 | src | xss-through-dom.js:139:17:139:52 | documen ... k").src | xss-through-dom.js:141:25:141:27 | src | $@ is reinterpreted as HTML without escaping meta-characters. | xss-through-dom.js:139:17:139:52 | documen ... k").src | DOM text | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js index 8e89affa0a9..7728722bd16 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js +++ b/javascript/ql/test/query-tests/Security/CWE-079/XssThroughDom/xss-through-dom.js @@ -131,4 +131,12 @@ class Sub extends Super { elem.innerHTML = linkText; // NOT OK $("#id").html(linkText); // NOT OK elem.innerText = linkText; // OK +})(); + +const cashDom = require("cash-dom"); + +(function () { + const src = document.getElementById("#link").src; + cash("#id").html(src); // NOT OK. + cashDom("#id").html(src); // NOT OK })(); \ No newline at end of file From 1c7e53314433fb2bde163587cff9106c50691d9a Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Mon, 9 May 2022 21:22:27 +0200 Subject: [PATCH 0420/1618] python: format --- python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql index f85cf319572..36a4e315ffc 100644 --- a/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql +++ b/python/ql/src/Security/CWE-352/CSRFProtectionDisabled.ql @@ -33,5 +33,5 @@ where // We have seen examples of dummy projects with vulnerable settings alongside a main // project with a protecting settings file. We want to rule out this scenario, so we // require all non-test settings to be vulnerable. - forall( HTTP::Server::CsrfProtectionSetting s| relevantSetting(s) | vulnerableSetting(s) ) + forall(HTTP::Server::CsrfProtectionSetting s | relevantSetting(s) | vulnerableSetting(s)) select setting, "Potential CSRF vulnerability due to forgery protection being disabled or weakened." From 2d12ad62383429f95a13014804cdbacde86e5cd8 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Fri, 1 Apr 2022 18:42:25 +1300 Subject: [PATCH 0421/1618] Ruby: Model IO.popen This method is very similar to `Kernel.system`: it executes its arguments as a system command in various ways. --- ruby/ql/lib/codeql/ruby/frameworks/Core.qll | 1 + .../ql/lib/codeql/ruby/frameworks/core/IO.qll | 71 +++++++++++++++++++ .../library-tests/frameworks/core/IO.expected | 50 +++++++++++++ .../test/library-tests/frameworks/core/IO.ql | 9 +++ .../test/library-tests/frameworks/core/IO.rb | 37 ++++++++++ 5 files changed, 168 insertions(+) create mode 100644 ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll create mode 100644 ruby/ql/test/library-tests/frameworks/core/IO.expected create mode 100644 ruby/ql/test/library-tests/frameworks/core/IO.ql create mode 100644 ruby/ql/test/library-tests/frameworks/core/IO.rb diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Core.qll b/ruby/ql/lib/codeql/ruby/frameworks/Core.qll index a3e42f2233f..55f6ec7ae49 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Core.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Core.qll @@ -12,6 +12,7 @@ import core.Module import core.Array import core.String import core.Regexp +import core.IO /** * A system command executed via subshell literal syntax. diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll new file mode 100644 index 00000000000..544142a42c6 --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll @@ -0,0 +1,71 @@ +/** + * Provides modeling for the `IO` module. + */ + +private import codeql.ruby.ApiGraphs +private import codeql.ruby.Concepts +private import codeql.ruby.DataFlow +private import codeql.ruby.controlflow.CfgNodes + +/** Provides modeling for the `IO` class. */ +module IO { + /** + * A system command executed via the `IO.popen` method. + * Signature: + * ``` + * popen([env,] cmd, mode="r" [, opt]) -> io + * popen([env,] cmd, mode="r" [, opt]) {|io| block } -> obj + * ``` + * `IO.popen` does different things based on the the value of `cmd`: + * ``` + * "-" : fork + * commandline : command line string which is passed to a shell + * [env, cmdname, arg1, ..., opts] : command name and zero or more arguments (no shell) + * [env, [cmdname, argv0], arg1, ..., opts] : command name, argv[0] and zero or more arguments (no shell) + * (env and opts are optional.) + * ``` + * ```ruby + * IO.popen("cat foo.txt | tail") + * IO.popen({some_env_var: "123"}, "cat foo.txt | tail") + * IO.popen(["cat", "foo.txt"]) + * IO.popen([{some_env_var: "123"}, "cat", "foo.txt"]) + * IO.popen([["cat", "argv0"], "foo.txt"]) + * IO.popen([{some_env_var: "123"}, ["cat", "argv0"], "foo.txt"]) + * ``` + * Ruby documentation: https://docs.ruby-lang.org/en/3.1.0/IO.html#method-c-popen + */ + class POpenCall extends SystemCommandExecution::Range, DataFlow::CallNode { + POpenCall() { this = API::getTopLevelMember("IO").getAMethodCall("popen") } + + override DataFlow::Node getAnArgument() { this.argument(result, _) } + + override predicate isShellInterpreted(DataFlow::Node arg) { this.argument(arg, true) } + + /** + * A helper predicate that holds if `arg` is an argument to this call. `shell` is true if the argument is passed to a subshell. + */ + private predicate argument(DataFlow::Node arg, boolean shell) { + exists(ExprCfgNode n | n = arg.asExpr() | + // Exclude any hash literal arguments, which are likely to be environment variables or options. + not n instanceof ExprNodes::HashLiteralCfgNode and + not n instanceof ExprNodes::ArrayLiteralCfgNode and + ( + // IO.popen({var: "a"}, "cmd", {some: :opt}) + arg = this.getArgument([0, 1]) and + // We over-approximate by assuming a subshell if the argument isn't an array or "-". + // This increases the sensitivity of the CommandInjection query at the risk of some FPs. + if n.getConstantValue().getString() = "-" then shell = false else shell = true + or + // IO.popen({var: "a"}, [{var: "b"}, "cmd", "arg1", "arg2", {some: :opt}]) + shell = false and + exists(ExprNodes::ArrayLiteralCfgNode arr | this.getArgument([0, 1]).asExpr() = arr | + n = arr.getAnArgument() + or + // IO.popen({var: "a"}, [{var: "b"}, ["cmd", "argv0"], "arg1", "arg2", {some: :opt}]) + n = arr.getArgument(0).(ExprNodes::ArrayLiteralCfgNode).getArgument(0) + ) + ) + ) + } + } +} diff --git a/ruby/ql/test/library-tests/frameworks/core/IO.expected b/ruby/ql/test/library-tests/frameworks/core/IO.expected new file mode 100644 index 00000000000..e6080a60255 --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/core/IO.expected @@ -0,0 +1,50 @@ +ioPOpenCalls +| IO.rb:1:1:1:30 | call to popen | +| IO.rb:2:1:2:53 | call to popen | +| IO.rb:3:1:3:67 | call to popen | +| IO.rb:5:1:5:28 | call to popen | +| IO.rb:6:1:6:51 | call to popen | +| IO.rb:7:1:7:65 | call to popen | +| IO.rb:9:1:9:39 | call to popen | +| IO.rb:10:1:10:62 | call to popen | +| IO.rb:11:1:11:76 | call to popen | +| IO.rb:13:1:13:13 | call to popen | +| IO.rb:14:1:14:36 | call to popen | +| IO.rb:15:1:15:50 | call to popen | +| IO.rb:18:1:18:13 | call to popen | +| IO.rb:19:1:19:36 | call to popen | +| IO.rb:20:1:20:50 | call to popen | +| IO.rb:23:1:23:13 | call to popen | +| IO.rb:24:1:24:36 | call to popen | +| IO.rb:25:1:25:50 | call to popen | +| IO.rb:28:1:28:13 | call to popen | +| IO.rb:29:1:29:36 | call to popen | +| IO.rb:30:1:30:50 | call to popen | +| IO.rb:33:3:33:15 | call to popen | +ioPOpenCallArguments +| IO.rb:1:1:1:30 | call to popen | true | IO.rb:1:10:1:29 | "cat foo.txt \| tail" | +| IO.rb:2:1:2:53 | call to popen | true | IO.rb:2:33:2:52 | "cat foo.txt \| tail" | +| IO.rb:3:1:3:67 | call to popen | true | IO.rb:3:33:3:52 | "cat foo.txt \| tail" | +| IO.rb:5:1:5:28 | call to popen | false | IO.rb:5:11:5:15 | "cat" | +| IO.rb:5:1:5:28 | call to popen | false | IO.rb:5:18:5:26 | "foo.txt" | +| IO.rb:6:1:6:51 | call to popen | false | IO.rb:6:34:6:38 | "cat" | +| IO.rb:6:1:6:51 | call to popen | false | IO.rb:6:41:6:49 | "foo.txt" | +| IO.rb:7:1:7:65 | call to popen | false | IO.rb:7:34:7:38 | "cat" | +| IO.rb:7:1:7:65 | call to popen | false | IO.rb:7:41:7:49 | "foo.txt" | +| IO.rb:9:1:9:39 | call to popen | false | IO.rb:9:12:9:16 | "cat" | +| IO.rb:9:1:9:39 | call to popen | false | IO.rb:9:29:9:37 | "foo.txt" | +| IO.rb:10:1:10:62 | call to popen | false | IO.rb:10:52:10:60 | "foo.txt" | +| IO.rb:11:1:11:76 | call to popen | false | IO.rb:11:52:11:60 | "foo.txt" | +| IO.rb:13:1:13:13 | call to popen | false | IO.rb:13:10:13:12 | "-" | +| IO.rb:14:1:14:36 | call to popen | false | IO.rb:14:33:14:35 | "-" | +| IO.rb:15:1:15:50 | call to popen | false | IO.rb:15:33:15:35 | "-" | +| IO.rb:18:1:18:13 | call to popen | true | IO.rb:18:10:18:12 | cmd | +| IO.rb:19:1:19:36 | call to popen | true | IO.rb:19:33:19:35 | cmd | +| IO.rb:20:1:20:50 | call to popen | true | IO.rb:20:33:20:35 | cmd | +| IO.rb:23:1:23:13 | call to popen | true | IO.rb:23:10:23:12 | cmd | +| IO.rb:24:1:24:36 | call to popen | true | IO.rb:24:33:24:35 | cmd | +| IO.rb:25:1:25:50 | call to popen | true | IO.rb:25:33:25:35 | cmd | +| IO.rb:28:1:28:13 | call to popen | true | IO.rb:28:10:28:12 | cmd | +| IO.rb:29:1:29:36 | call to popen | true | IO.rb:29:33:29:35 | cmd | +| IO.rb:30:1:30:50 | call to popen | true | IO.rb:30:33:30:35 | cmd | +| IO.rb:33:3:33:15 | call to popen | true | IO.rb:33:12:33:14 | cmd | diff --git a/ruby/ql/test/library-tests/frameworks/core/IO.ql b/ruby/ql/test/library-tests/frameworks/core/IO.ql new file mode 100644 index 00000000000..3482ea03ea5 --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/core/IO.ql @@ -0,0 +1,9 @@ +import codeql.ruby.frameworks.core.IO::IO +import codeql.ruby.DataFlow + +query predicate ioPOpenCalls(POpenCall c) { any() } + +query DataFlow::Node ioPOpenCallArguments(POpenCall c, boolean shellInterpreted) { + result = c.getAnArgument() and + if c.isShellInterpreted(result) then shellInterpreted = true else shellInterpreted = false +} diff --git a/ruby/ql/test/library-tests/frameworks/core/IO.rb b/ruby/ql/test/library-tests/frameworks/core/IO.rb new file mode 100644 index 00000000000..3ee5f8dd66b --- /dev/null +++ b/ruby/ql/test/library-tests/frameworks/core/IO.rb @@ -0,0 +1,37 @@ +IO.popen("cat foo.txt | tail") +IO.popen({some_env_var: "123"}, "cat foo.txt | tail") +IO.popen({some_env_var: "123"}, "cat foo.txt | tail", {some: :opt}) + +IO.popen(["cat", "foo.txt"]) +IO.popen([{some_env_var: "123"}, "cat", "foo.txt"]) +IO.popen([{some_env_var: "123"}, "cat", "foo.txt"], {some: :opt}) + +IO.popen([["cat", "argv0"], "foo.txt"]) +IO.popen([{some_env_var: "123"}, ["cat", "argv0"], "foo.txt"]) +IO.popen([{some_env_var: "123"}, ["cat", "argv0"], "foo.txt"], {some: :opt}) + +IO.popen("-") +IO.popen({some_env_var: "123"}, "-") +IO.popen({some_env_var: "123"}, "-", {some: :opt}) + +cmd = "cat foo.txt | tail" +IO.popen(cmd) +IO.popen({some_env_var: "123"}, cmd) +IO.popen({some_env_var: "123"}, cmd, {some: :opt}) + +cmd = ["cat", "foo.txt"] +IO.popen(cmd) +IO.popen({some_env_var: "123"}, cmd) +IO.popen({some_env_var: "123"}, cmd, {some: :opt}) + +cmd = [["cat", "argv0"], "foo.txt"] +IO.popen(cmd) +IO.popen({some_env_var: "123"}, cmd) +IO.popen({some_env_var: "123"}, cmd, {some: :opt}) + +def popen(cmd) + IO.popen(cmd) +end + +popen("cat foo.txt | tail") +popen(["cat", "foo.txt"]) \ No newline at end of file From 79c6dc1af038b33695f961fa7eb362f1910f9bc5 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Fri, 1 Apr 2022 18:49:32 +1300 Subject: [PATCH 0422/1618] Refactor IO/File modelling The main goal here is to get rid of the duplicate definitions of module `IO`, which currently exist in both `frameworks/core/IO.qll` and `frameworks/Files.qll`. We do this by moving the classes inside `Files::IO` to `core/IO.qll`, but moving most of the actual definitions of those classes to an internal module `core.internal.FileOrIO`. This means both `Files.qll` and `IO.qll` can depend on them without leaking them to end users. --- ruby/ql/lib/codeql/ruby/frameworks/Files.qll | 265 +----------------- .../ql/lib/codeql/ruby/frameworks/core/IO.qll | 82 +++++- .../frameworks/core/internal/IOOrFile.qll | 250 +++++++++++++++++ .../security/TaintedFormatStringSpecific.qll | 7 +- .../library-tests/frameworks/files/Files.ql | 1 + 5 files changed, 341 insertions(+), 264 deletions(-) create mode 100644 ruby/ql/lib/codeql/ruby/frameworks/core/internal/IOOrFile.qll diff --git a/ruby/ql/lib/codeql/ruby/frameworks/Files.qll b/ruby/ql/lib/codeql/ruby/frameworks/Files.qll index e479828c4c4..c409a4a7884 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/Files.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/Files.qll @@ -6,267 +6,10 @@ private import ruby private import codeql.ruby.Concepts private import codeql.ruby.ApiGraphs private import codeql.ruby.DataFlow -private import codeql.ruby.frameworks.Core private import codeql.ruby.dataflow.FlowSummary - -private DataFlow::Node ioInstanceInstantiation() { - result = API::getTopLevelMember("IO").getAnInstantiation() or - result = API::getTopLevelMember("IO").getAMethodCall(["for_fd", "open", "try_convert"]) -} - -private DataFlow::Node ioInstance() { - result = ioInstanceInstantiation() - or - exists(DataFlow::Node inst | - inst = ioInstance() and - inst.(DataFlow::LocalSourceNode).flowsTo(result) - ) -} - -// Match some simple cases where a path argument specifies a shell command to -// be executed. For example, the `"|date"` argument in `IO.read("|date")`, which -// will execute a shell command and read its output rather than reading from the -// filesystem. -private predicate pathArgSpawnsSubprocess(Expr arg) { - arg.getConstantValue().getStringlikeValue().charAt(0) = "|" -} - -private DataFlow::Node fileInstanceInstantiation() { - result = API::getTopLevelMember("File").getAnInstantiation() - or - result = API::getTopLevelMember("File").getAMethodCall(["open", "try_convert"]) - or - // Calls to `Kernel.open` can yield `File` instances - result.(KernelMethodCall).getMethodName() = "open" and - // Assume that calls that don't invoke shell commands will instead open - // a file. - not pathArgSpawnsSubprocess(result.(KernelMethodCall).getArgument(0).asExpr().getExpr()) -} - -private DataFlow::Node fileInstance() { - result = fileInstanceInstantiation() - or - exists(DataFlow::Node inst | - inst = fileInstance() and - inst.(DataFlow::LocalSourceNode).flowsTo(result) - ) -} - -abstract private class IOOrFileMethodCall extends DataFlow::CallNode { - // TODO: Currently this only handles class method calls. - // Can we infer a path argument for instance method calls? - // e.g. by tracing back to the instantiation of that instance - DataFlow::Node getAPathArgumentImpl() { - result = this.getArgument(0) and this.getReceiverKind() = "class" - } - - /** - * Holds if this call appears to read/write from/to a spawned subprocess, - * rather than to/from a file. - */ - predicate spawnsSubprocess() { - pathArgSpawnsSubprocess(this.getAPathArgumentImpl().asExpr().getExpr()) - } - - /** Gets the API used to perform this call, either "IO" or "File" */ - abstract string getApi(); - - /** DEPRECATED: Alias for getApi */ - deprecated string getAPI() { result = this.getApi() } - - /** Gets a node representing the data read or written by this call */ - abstract DataFlow::Node getADataNodeImpl(); - - /** Gets a string representation of the receiver kind, either "class" or "instance". */ - abstract string getReceiverKind(); -} - -/** - * A method call that performs a read using either the `IO` or `File` classes. - */ -private class IOOrFileReadMethodCall extends IOOrFileMethodCall { - private string api; - private string receiverKind; - - IOOrFileReadMethodCall() { - exists(string methodName | methodName = this.getMethodName() | - // e.g. `{IO,File}.readlines("foo.txt")` - receiverKind = "class" and - methodName = ["binread", "foreach", "read", "readlines"] and - api = ["IO", "File"] and - this = API::getTopLevelMember(api).getAMethodCall(methodName) - or - // e.g. `{IO,File}.new("foo.txt", "r").getc` - receiverKind = "interface" and - ( - methodName = - [ - "getbyte", "getc", "gets", "pread", "read", "read_nonblock", "readbyte", "readchar", - "readline", "readlines", "readpartial", "sysread" - ] and - ( - this.getReceiver() = ioInstance() and api = "IO" - or - this.getReceiver() = fileInstance() and api = "File" - ) - ) - ) - } - - override string getApi() { result = api } - - /** DEPRECATED: Alias for getApi */ - deprecated override string getAPI() { result = this.getApi() } - - override DataFlow::Node getADataNodeImpl() { result = this } - - override string getReceiverKind() { result = receiverKind } -} - -/** - * A method call that performs a write using either the `IO` or `File` classes. - */ -private class IOOrFileWriteMethodCall extends IOOrFileMethodCall { - private string api; - private string receiverKind; - private DataFlow::Node dataNode; - - IOOrFileWriteMethodCall() { - exists(string methodName | methodName = this.getMethodName() | - // e.g. `{IO,File}.write("foo.txt", "hello\n")` - receiverKind = "class" and - api = ["IO", "File"] and - this = API::getTopLevelMember(api).getAMethodCall(methodName) and - methodName = ["binwrite", "write"] and - dataNode = this.getArgument(1) - or - // e.g. `{IO,File}.new("foo.txt", "a+).puts("hello")` - receiverKind = "interface" and - ( - this.getReceiver() = ioInstance() and api = "IO" - or - this.getReceiver() = fileInstance() and api = "File" - ) and - ( - methodName = ["<<", "print", "putc", "puts", "syswrite", "pwrite", "write_nonblock"] and - dataNode = this.getArgument(0) - or - // Any argument to these methods may be written as data - methodName = ["printf", "write"] and dataNode = this.getArgument(_) - ) - ) - } - - override string getApi() { result = api } - - /** DEPRECATED: Alias for getApi */ - deprecated override string getAPI() { result = this.getApi() } - - override DataFlow::Node getADataNodeImpl() { result = dataNode } - - override string getReceiverKind() { result = receiverKind } -} - -/** - * Classes and predicates for modeling the core `IO` module. - */ -module IO { - /** - * An instance of the `IO` class, for example in - * - * ```rb - * rand = IO.new(IO.sysopen("/dev/random", "r"), "r") - * rand_data = rand.read(32) - * ``` - * - * there are 3 `IOInstance`s - the call to `IO.new`, the assignment - * `rand = ...`, and the read access to `rand` on the second line. - */ - class IOInstance extends DataFlow::Node { - IOInstance() { - this = ioInstance() or - this = fileInstance() - } - } - - /** - * A `DataFlow::CallNode` that reads data using the `IO` class. For example, - * the `read` and `readline` calls in: - * - * ```rb - * # invokes the `date` shell command as a subprocess, returning its output as a string - * IO.read("|date") - * - * # reads from the file `foo.txt`, returning its first line as a string - * IO.new(IO.sysopen("foo.txt")).readline - * ``` - * - * This class includes only reads that use the `IO` class directly, not those - * that use a subclass of `IO` such as `File`. - */ - class IOReader extends IOOrFileReadMethodCall { - IOReader() { this.getApi() = "IO" } - } - - /** - * A `DataFlow::CallNode` that writes data using the `IO` class. For example, - * the `write` and `puts` calls in: - * - * ```rb - * # writes the string `hello world` to the file `foo.txt` - * IO.write("foo.txt", "hello world") - * - * # appends the string `hello again\n` to the file `foo.txt` - * IO.new(IO.sysopen("foo.txt", "a")).puts("hello again") - * ``` - * - * This class includes only writes that use the `IO` class directly, not those - * that use a subclass of `IO` such as `File`. - */ - class IOWriter extends IOOrFileWriteMethodCall { - IOWriter() { this.getApi() = "IO" } - } - - /** - * A `DataFlow::CallNode` that reads data to the filesystem using the `IO` - * or `File` classes. For example, the `IO.read` and `File#readline` calls in: - * - * ```rb - * # reads the file `foo.txt` and returns its contents as a string. - * IO.read("foo.txt") - * - * # reads from the file `foo.txt`, returning its first line as a string - * File.new("foo.txt").readline - * ``` - */ - class FileReader extends IOOrFileReadMethodCall, FileSystemReadAccess::Range { - FileReader() { not this.spawnsSubprocess() } - - override DataFlow::Node getADataNode() { result = this.getADataNodeImpl() } - - override DataFlow::Node getAPathArgument() { result = this.getAPathArgumentImpl() } - } - - /** - * A `DataFlow::CallNode` that reads data from the filesystem using the `IO` - * or `File` classes. For example, the `write` and `puts` calls in: - * - * ```rb - * # writes the string `hello world` to the file `foo.txt` - * IO.write("foo.txt", "hello world") - * - * # appends the string `hello again\n` to the file `foo.txt` - * File.new("foo.txt", "a").puts("hello again") - * ``` - */ - class FileWriter extends IOOrFileWriteMethodCall, FileSystemWriteAccess::Range { - FileWriter() { not this.spawnsSubprocess() } - - override DataFlow::Node getADataNode() { result = this.getADataNodeImpl() } - - override DataFlow::Node getAPathArgument() { result = this.getAPathArgumentImpl() } - } -} +private import core.IO +private import core.Kernel::Kernel +private import core.internal.IOOrFile /** * Classes and predicates for modeling the core `File` module. @@ -330,7 +73,7 @@ module File { ]) or // Instance methods - exists(FileInstance fi | + exists(File::FileInstance fi | this.getReceiver() = fi and this.getMethodName() = ["path", "to_path"] ) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll index 544142a42c6..7c1f68bc619 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll @@ -6,9 +6,88 @@ private import codeql.ruby.ApiGraphs private import codeql.ruby.Concepts private import codeql.ruby.DataFlow private import codeql.ruby.controlflow.CfgNodes +private import codeql.ruby.frameworks.Files as Files +private import internal.IOOrFile /** Provides modeling for the `IO` class. */ module IO { + /** + * An instance of the `IO` class, for example in + * + * ```rb + * rand = IO.new(IO.sysopen("/dev/random", "r"), "r") + * rand_data = rand.read(32) + * ``` + * + * there are 3 `IOInstance`s - the call to `IO.new`, the assignment + * `rand = ...`, and the read access to `rand` on the second line. + */ + class IOInstance extends DataFlow::Node { + IOInstance() { this = [ioInstance(), fileInstance()] } + } + + /** + * A `DataFlow::CallNode` that reads data using the `IO` class. For example, + * the `read` and `readline` calls in: + * + * ```rb + * # invokes the `date` shell command as a subprocess, returning its output as a string + * IO.read("|date") + * + * # reads from the file `foo.txt`, returning its first line as a string + * IO.new(IO.sysopen("foo.txt")).readline + * ``` + * + * This class includes only reads that use the `IO` class directly, not those + * that use a subclass of `IO` such as `File`. + */ + class IOReader = Readers::IOReader; + + /** + * A `DataFlow::CallNode` that writes data using the `IO` class. For example, + * the `write` and `puts` calls in: + * + * ```rb + * # writes the string `hello world` to the file `foo.txt` + * IO.write("foo.txt", "hello world") + * + * # appends the string `hello again\n` to the file `foo.txt` + * IO.new(IO.sysopen("foo.txt", "a")).puts("hello again") + * ``` + * + * This class includes only writes that use the `IO` class directly, not those + * that use a subclass of `IO` such as `File`. + */ + class IOWriter = Writers::IOWriter; + + /** + * A `DataFlow::CallNode` that reads data to the filesystem using the `IO` + * or `File` classes. For example, the `IO.read` and `File#readline` calls in: + * + * ```rb + * # reads the file `foo.txt` and returns its contents as a string. + * IO.read("foo.txt") + * + * # reads from the file `foo.txt`, returning its first line as a string + * File.new("foo.txt").readline + * ``` + */ + class FileReader = Readers::FileReader; + + /** + * A `DataFlow::CallNode` that reads data from the filesystem using the `IO` + * or `File` classes. For example, the `write` and `puts` calls in: + * + * ```rb + * # writes the string `hello world` to the file `foo.txt` + * IO.write("foo.txt", "hello world") + * + * # appends the string `hello again\n` to the file `foo.txt` + * File.new("foo.txt", "a").puts("hello again") + * ``` + */ + class FileWriter = Writers::FileWriter; + /** * A system command executed via the `IO.popen` method. * Signature: @@ -24,6 +103,7 @@ module IO { * [env, [cmdname, argv0], arg1, ..., opts] : command name, argv[0] and zero or more arguments (no shell) * (env and opts are optional.) * ``` + * Examples: * ```ruby * IO.popen("cat foo.txt | tail") * IO.popen({some_env_var: "123"}, "cat foo.txt | tail") @@ -32,7 +112,7 @@ module IO { * IO.popen([["cat", "argv0"], "foo.txt"]) * IO.popen([{some_env_var: "123"}, ["cat", "argv0"], "foo.txt"]) * ``` - * Ruby documentation: https://docs.ruby-lang.org/en/3.1.0/IO.html#method-c-popen + * Ruby documentation: https://docs.ruby-lang.org/en/3.1/IO.html#method-c-popen */ class POpenCall extends SystemCommandExecution::Range, DataFlow::CallNode { POpenCall() { this = API::getTopLevelMember("IO").getAMethodCall("popen") } diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/internal/IOOrFile.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/internal/IOOrFile.qll new file mode 100644 index 00000000000..9e25592de1c --- /dev/null +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/internal/IOOrFile.qll @@ -0,0 +1,250 @@ +/** + * Provides modeling for concepts shared across `File` and `IO`. + */ + +private import ruby +private import codeql.ruby.DataFlow +private import codeql.ruby.ApiGraphs +private import codeql.ruby.frameworks.Files +private import codeql.ruby.frameworks.core.Kernel::Kernel +private import codeql.ruby.Concepts + +DataFlow::Node ioInstanceInstantiation() { + result = API::getTopLevelMember("IO").getAnInstantiation() or + result = API::getTopLevelMember("IO").getAMethodCall(["for_fd", "open", "try_convert"]) +} + +DataFlow::Node ioInstance() { + result = ioInstanceInstantiation() + or + exists(DataFlow::Node inst | + inst = ioInstance() and + inst.(DataFlow::LocalSourceNode).flowsTo(result) + ) +} + +DataFlow::Node fileInstanceInstantiation() { + result = API::getTopLevelMember("File").getAnInstantiation() + or + result = API::getTopLevelMember("File").getAMethodCall(["open", "try_convert"]) + or + // Calls to `Kernel.open` can yield `File` instances + result.(KernelMethodCall).getMethodName() = "open" and + // Assume that calls that don't invoke shell commands will instead open + // a file. + not pathArgSpawnsSubprocess(result.(KernelMethodCall).getArgument(0).asExpr().getExpr()) +} + +DataFlow::Node fileInstance() { + result = fileInstanceInstantiation() + or + exists(DataFlow::Node inst | + inst = fileInstance() and + inst.(DataFlow::LocalSourceNode).flowsTo(result) + ) +} + +abstract class IOOrFileMethodCall extends DataFlow::CallNode { + // TODO: Currently this only handles class method calls. + // Can we infer a path argument for instance method calls? + // e.g. by tracing back to the instantiation of that instance + DataFlow::Node getAPathArgumentImpl() { + result = this.getArgument(0) and this.getReceiverKind() = "class" + } + + /** + * Holds if this call appears to read/write from/to a spawned subprocess, + * rather than to/from a file. + */ + predicate spawnsSubprocess() { + pathArgSpawnsSubprocess(this.getAPathArgumentImpl().asExpr().getExpr()) + } + + /** Gets the API used to perform this call, either "IO" or "File" */ + abstract string getApi(); + + /** DEPRECATED: Alias for getApi */ + deprecated string getAPI() { result = this.getApi() } + + /** Gets a node representing the data read or written by this call */ + abstract DataFlow::Node getADataNodeImpl(); + + /** Gets a string representation of the receiver kind, either "class" or "instance". */ + abstract string getReceiverKind(); +} + +// Match some simple cases where a path argument specifies a shell command to +// be executed. For example, the `"|date"` argument in `IO.read("|date")`, which +// will execute a shell command and read its output rather than reading from the +// filesystem. +predicate pathArgSpawnsSubprocess(Expr arg) { + arg.getConstantValue().getStringlikeValue().charAt(0) = "|" +} + +/** + * A method call that performs a read using either the `IO` or `File` classes. + */ +class IOOrFileReadMethodCall extends IOOrFileMethodCall { + private string api; + private string receiverKind; + + IOOrFileReadMethodCall() { + exists(string methodName | methodName = this.getMethodName() | + // e.g. `{IO,File}.readlines("foo.txt")` + receiverKind = "class" and + methodName = ["binread", "foreach", "read", "readlines"] and + api = ["IO", "File"] and + this = API::getTopLevelMember(api).getAMethodCall(methodName) + or + // e.g. `{IO,File}.new("foo.txt", "r").getc` + receiverKind = "interface" and + ( + methodName = + [ + "getbyte", "getc", "gets", "pread", "read", "read_nonblock", "readbyte", "readchar", + "readline", "readlines", "readpartial", "sysread" + ] and + ( + this.getReceiver() = fileInstance() and api = "File" + or + this.getReceiver() = ioInstance() and api = "IO" + ) + ) + ) + } + + override string getApi() { result = api } + + /** DEPRECATED: Alias for getApi */ + deprecated override string getAPI() { result = this.getApi() } + + override DataFlow::Node getADataNodeImpl() { result = this } + + override string getReceiverKind() { result = receiverKind } +} + +/** + * A method call that performs a write using either the `IO` or `File` classes. + */ +class IOOrFileWriteMethodCall extends IOOrFileMethodCall { + private string api; + private string receiverKind; + private DataFlow::Node dataNode; + + IOOrFileWriteMethodCall() { + exists(string methodName | methodName = this.getMethodName() | + // e.g. `{IO,File}.write("foo.txt", "hello\n")` + receiverKind = "class" and + api = ["IO", "File"] and + this = API::getTopLevelMember(api).getAMethodCall(methodName) and + methodName = ["binwrite", "write"] and + dataNode = this.getArgument(1) + or + // e.g. `{IO,File}.new("foo.txt", "a+).puts("hello")` + receiverKind = "interface" and + ( + this.getReceiver() = fileInstance() and api = "File" + or + this.getReceiver() = ioInstance() and api = "IO" + ) and + ( + methodName = ["<<", "print", "putc", "puts", "syswrite", "pwrite", "write_nonblock"] and + dataNode = this.getArgument(0) + or + // Any argument to these methods may be written as data + methodName = ["printf", "write"] and dataNode = this.getArgument(_) + ) + ) + } + + override string getApi() { result = api } + + /** DEPRECATED: Alias for getApi */ + deprecated override string getAPI() { result = this.getApi() } + + override DataFlow::Node getADataNodeImpl() { result = dataNode } + + override string getReceiverKind() { result = receiverKind } +} + +module Readers { + /** + * A `DataFlow::CallNode` that reads data using the `IO` class. For example, + * the `read` and `readline` calls in: + * + * ```rb + * # invokes the `date` shell command as a subprocess, returning its output as a string + * IO.read("|date") + * + * # reads from the file `foo.txt`, returning its first line as a string + * IO.new(IO.sysopen("foo.txt")).readline + * ``` + * + * This class includes only reads that use the `IO` class directly, not those + * that use a subclass of `IO` such as `File`. + */ + class IOReader extends IOOrFileReadMethodCall { + IOReader() { this.getApi() = "IO" } + } + + /** + * A `DataFlow::CallNode` that reads data to the filesystem using the `IO` + * or `File` classes. For example, the `IO.read` and `File#readline` calls in: + * + * ```rb + * # reads the file `foo.txt` and returns its contents as a string. + * IO.read("foo.txt") + * + * # reads from the file `foo.txt`, returning its first line as a string + * File.new("foo.txt").readline + * ``` + */ + class FileReader extends IOOrFileReadMethodCall, FileSystemReadAccess::Range { + FileReader() { not this.spawnsSubprocess() } + + override DataFlow::Node getADataNode() { result = this.getADataNodeImpl() } + + override DataFlow::Node getAPathArgument() { result = this.getAPathArgumentImpl() } + } +} + +module Writers { + /** + * A `DataFlow::CallNode` that writes data using the `IO` class. For example, + * the `write` and `puts` calls in: + * + * ```rb + * # writes the string `hello world` to the file `foo.txt` + * IO.write("foo.txt", "hello world") + * + * # appends the string `hello again\n` to the file `foo.txt` + * IO.new(IO.sysopen("foo.txt", "a")).puts("hello again") + * ``` + * + * This class includes only writes that use the `IO` class directly, not those + * that use a subclass of `IO` such as `File`. + */ + class IOWriter extends IOOrFileWriteMethodCall { + IOWriter() { this.getApi() = "IO" } + } + + /** + * A `DataFlow::CallNode` that reads data from the filesystem using the `IO` + * or `File` classes. For example, the `write` and `puts` calls in: + * + * ```rb + * # writes the string `hello world` to the file `foo.txt` + * IO.write("foo.txt", "hello world") + * + * # appends the string `hello again\n` to the file `foo.txt` + * File.new("foo.txt", "a").puts("hello again") + * ``` + */ + class FileWriter extends IOOrFileWriteMethodCall, FileSystemWriteAccess::Range { + FileWriter() { not this.spawnsSubprocess() } + + override DataFlow::Node getADataNode() { result = this.getADataNodeImpl() } + + override DataFlow::Node getAPathArgument() { result = this.getAPathArgumentImpl() } + } +} diff --git a/ruby/ql/lib/codeql/ruby/security/TaintedFormatStringSpecific.qll b/ruby/ql/lib/codeql/ruby/security/TaintedFormatStringSpecific.qll index e79812bbda8..b30caa7b12e 100644 --- a/ruby/ql/lib/codeql/ruby/security/TaintedFormatStringSpecific.qll +++ b/ruby/ql/lib/codeql/ruby/security/TaintedFormatStringSpecific.qll @@ -7,7 +7,8 @@ import codeql.ruby.DataFlow import codeql.ruby.dataflow.RemoteFlowSources import codeql.ruby.ApiGraphs import codeql.ruby.TaintTracking -private import codeql.ruby.frameworks.Files::IO +private import codeql.ruby.frameworks.Files +private import codeql.ruby.frameworks.core.IO private import codeql.ruby.controlflow.CfgNodes /** @@ -67,5 +68,7 @@ class KernelSprintfCall extends PrintfStyleCall { * A call to `IO#printf`. */ class IOPrintfCall extends PrintfStyleCall { - IOPrintfCall() { this.getReceiver() instanceof IOInstance and this.getMethodName() = "printf" } + IOPrintfCall() { + this.getReceiver() instanceof IO::IOInstance and this.getMethodName() = "printf" + } } diff --git a/ruby/ql/test/library-tests/frameworks/files/Files.ql b/ruby/ql/test/library-tests/frameworks/files/Files.ql index 9c4d3c90855..7c43e54a9bb 100644 --- a/ruby/ql/test/library-tests/frameworks/files/Files.ql +++ b/ruby/ql/test/library-tests/frameworks/files/Files.ql @@ -1,5 +1,6 @@ private import ruby private import codeql.ruby.frameworks.Files +private import codeql.ruby.frameworks.core.IO private import codeql.ruby.Concepts query predicate fileInstances(File::FileInstance i) { any() } From 7b63493fa961a123b65be0aa6aa2dd3aa37e1815 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Thu, 28 Apr 2022 11:39:59 +1200 Subject: [PATCH 0423/1618] Ruby: Fix identification IO.open args --- .../ql/lib/codeql/ruby/frameworks/core/IO.qll | 10 ++-- .../library-tests/frameworks/core/IO.expected | 57 ++++++++++--------- .../test/library-tests/frameworks/core/IO.rb | 1 + 3 files changed, 38 insertions(+), 30 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll b/ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll index 7c1f68bc619..9eff02a4a57 100644 --- a/ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll +++ b/ruby/ql/lib/codeql/ruby/frameworks/core/IO.qll @@ -122,7 +122,7 @@ module IO { override predicate isShellInterpreted(DataFlow::Node arg) { this.argument(arg, true) } /** - * A helper predicate that holds if `arg` is an argument to this call. `shell` is true if the argument is passed to a subshell. + * Holds if `arg` is an argument to this call. `shell` is true if the argument is passed to a subshell. */ private predicate argument(DataFlow::Node arg, boolean shell) { exists(ExprCfgNode n | n = arg.asExpr() | @@ -136,13 +136,15 @@ module IO { // This increases the sensitivity of the CommandInjection query at the risk of some FPs. if n.getConstantValue().getString() = "-" then shell = false else shell = true or - // IO.popen({var: "a"}, [{var: "b"}, "cmd", "arg1", "arg2", {some: :opt}]) + // IO.popen([{var: "b"}, "cmd", "arg1", "arg2", {some: :opt}]) + // IO.popen({var: "a"}, ["cmd", "arg1", "arg2", {some: :opt}]) shell = false and exists(ExprNodes::ArrayLiteralCfgNode arr | this.getArgument([0, 1]).asExpr() = arr | n = arr.getAnArgument() or - // IO.popen({var: "a"}, [{var: "b"}, ["cmd", "argv0"], "arg1", "arg2", {some: :opt}]) - n = arr.getArgument(0).(ExprNodes::ArrayLiteralCfgNode).getArgument(0) + // IO.popen([{var: "b"}, ["cmd", "argv0"], "arg1", "arg2", {some: :opt}]) + // IO.popen([["cmd", "argv0"], "arg1", "arg2", {some: :opt}]) + n = arr.getArgument([0, 1]).(ExprNodes::ArrayLiteralCfgNode).getArgument(0) ) ) ) diff --git a/ruby/ql/test/library-tests/frameworks/core/IO.expected b/ruby/ql/test/library-tests/frameworks/core/IO.expected index e6080a60255..dd2c2bb520c 100644 --- a/ruby/ql/test/library-tests/frameworks/core/IO.expected +++ b/ruby/ql/test/library-tests/frameworks/core/IO.expected @@ -8,19 +8,20 @@ ioPOpenCalls | IO.rb:9:1:9:39 | call to popen | | IO.rb:10:1:10:62 | call to popen | | IO.rb:11:1:11:76 | call to popen | -| IO.rb:13:1:13:13 | call to popen | -| IO.rb:14:1:14:36 | call to popen | -| IO.rb:15:1:15:50 | call to popen | -| IO.rb:18:1:18:13 | call to popen | -| IO.rb:19:1:19:36 | call to popen | -| IO.rb:20:1:20:50 | call to popen | -| IO.rb:23:1:23:13 | call to popen | -| IO.rb:24:1:24:36 | call to popen | -| IO.rb:25:1:25:50 | call to popen | -| IO.rb:28:1:28:13 | call to popen | -| IO.rb:29:1:29:36 | call to popen | -| IO.rb:30:1:30:50 | call to popen | -| IO.rb:33:3:33:15 | call to popen | +| IO.rb:12:1:12:76 | call to popen | +| IO.rb:14:1:14:13 | call to popen | +| IO.rb:15:1:15:36 | call to popen | +| IO.rb:16:1:16:50 | call to popen | +| IO.rb:19:1:19:13 | call to popen | +| IO.rb:20:1:20:36 | call to popen | +| IO.rb:21:1:21:50 | call to popen | +| IO.rb:24:1:24:13 | call to popen | +| IO.rb:25:1:25:36 | call to popen | +| IO.rb:26:1:26:50 | call to popen | +| IO.rb:29:1:29:13 | call to popen | +| IO.rb:30:1:30:36 | call to popen | +| IO.rb:31:1:31:50 | call to popen | +| IO.rb:34:3:34:15 | call to popen | ioPOpenCallArguments | IO.rb:1:1:1:30 | call to popen | true | IO.rb:1:10:1:29 | "cat foo.txt \| tail" | | IO.rb:2:1:2:53 | call to popen | true | IO.rb:2:33:2:52 | "cat foo.txt \| tail" | @@ -33,18 +34,22 @@ ioPOpenCallArguments | IO.rb:7:1:7:65 | call to popen | false | IO.rb:7:41:7:49 | "foo.txt" | | IO.rb:9:1:9:39 | call to popen | false | IO.rb:9:12:9:16 | "cat" | | IO.rb:9:1:9:39 | call to popen | false | IO.rb:9:29:9:37 | "foo.txt" | +| IO.rb:10:1:10:62 | call to popen | false | IO.rb:10:35:10:39 | "cat" | | IO.rb:10:1:10:62 | call to popen | false | IO.rb:10:52:10:60 | "foo.txt" | +| IO.rb:11:1:11:76 | call to popen | false | IO.rb:11:35:11:39 | "cat" | | IO.rb:11:1:11:76 | call to popen | false | IO.rb:11:52:11:60 | "foo.txt" | -| IO.rb:13:1:13:13 | call to popen | false | IO.rb:13:10:13:12 | "-" | -| IO.rb:14:1:14:36 | call to popen | false | IO.rb:14:33:14:35 | "-" | -| IO.rb:15:1:15:50 | call to popen | false | IO.rb:15:33:15:35 | "-" | -| IO.rb:18:1:18:13 | call to popen | true | IO.rb:18:10:18:12 | cmd | -| IO.rb:19:1:19:36 | call to popen | true | IO.rb:19:33:19:35 | cmd | -| IO.rb:20:1:20:50 | call to popen | true | IO.rb:20:33:20:35 | cmd | -| IO.rb:23:1:23:13 | call to popen | true | IO.rb:23:10:23:12 | cmd | -| IO.rb:24:1:24:36 | call to popen | true | IO.rb:24:33:24:35 | cmd | -| IO.rb:25:1:25:50 | call to popen | true | IO.rb:25:33:25:35 | cmd | -| IO.rb:28:1:28:13 | call to popen | true | IO.rb:28:10:28:12 | cmd | -| IO.rb:29:1:29:36 | call to popen | true | IO.rb:29:33:29:35 | cmd | -| IO.rb:30:1:30:50 | call to popen | true | IO.rb:30:33:30:35 | cmd | -| IO.rb:33:3:33:15 | call to popen | true | IO.rb:33:12:33:14 | cmd | +| IO.rb:12:1:12:76 | call to popen | false | IO.rb:12:35:12:39 | "cat" | +| IO.rb:12:1:12:76 | call to popen | false | IO.rb:12:52:12:60 | "foo.txt" | +| IO.rb:14:1:14:13 | call to popen | false | IO.rb:14:10:14:12 | "-" | +| IO.rb:15:1:15:36 | call to popen | false | IO.rb:15:33:15:35 | "-" | +| IO.rb:16:1:16:50 | call to popen | false | IO.rb:16:33:16:35 | "-" | +| IO.rb:19:1:19:13 | call to popen | true | IO.rb:19:10:19:12 | cmd | +| IO.rb:20:1:20:36 | call to popen | true | IO.rb:20:33:20:35 | cmd | +| IO.rb:21:1:21:50 | call to popen | true | IO.rb:21:33:21:35 | cmd | +| IO.rb:24:1:24:13 | call to popen | true | IO.rb:24:10:24:12 | cmd | +| IO.rb:25:1:25:36 | call to popen | true | IO.rb:25:33:25:35 | cmd | +| IO.rb:26:1:26:50 | call to popen | true | IO.rb:26:33:26:35 | cmd | +| IO.rb:29:1:29:13 | call to popen | true | IO.rb:29:10:29:12 | cmd | +| IO.rb:30:1:30:36 | call to popen | true | IO.rb:30:33:30:35 | cmd | +| IO.rb:31:1:31:50 | call to popen | true | IO.rb:31:33:31:35 | cmd | +| IO.rb:34:3:34:15 | call to popen | true | IO.rb:34:12:34:14 | cmd | diff --git a/ruby/ql/test/library-tests/frameworks/core/IO.rb b/ruby/ql/test/library-tests/frameworks/core/IO.rb index 3ee5f8dd66b..5516624d770 100644 --- a/ruby/ql/test/library-tests/frameworks/core/IO.rb +++ b/ruby/ql/test/library-tests/frameworks/core/IO.rb @@ -9,6 +9,7 @@ IO.popen([{some_env_var: "123"}, "cat", "foo.txt"], {some: :opt}) IO.popen([["cat", "argv0"], "foo.txt"]) IO.popen([{some_env_var: "123"}, ["cat", "argv0"], "foo.txt"]) IO.popen([{some_env_var: "123"}, ["cat", "argv0"], "foo.txt"], {some: :opt}) +IO.popen({some_env_var: "123"}, [["cat", "argv0"], "foo.txt"], {some: :opt}) IO.popen("-") IO.popen({some_env_var: "123"}, "-") From a6cab022f6d8ebc20e3b208865f8e70a000e0af3 Mon Sep 17 00:00:00 2001 From: Harry Maclean Date: Thu, 28 Apr 2022 16:36:58 +1200 Subject: [PATCH 0424/1618] Ruby: Add missing import --- .../lib/codeql/ruby/security/InsecureDownloadCustomizations.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/ruby/ql/lib/codeql/ruby/security/InsecureDownloadCustomizations.qll b/ruby/ql/lib/codeql/ruby/security/InsecureDownloadCustomizations.qll index dc536e07659..045c34f8917 100644 --- a/ruby/ql/lib/codeql/ruby/security/InsecureDownloadCustomizations.qll +++ b/ruby/ql/lib/codeql/ruby/security/InsecureDownloadCustomizations.qll @@ -9,6 +9,7 @@ private import codeql.ruby.DataFlow private import codeql.ruby.Concepts private import codeql.ruby.typetracking.TypeTracker private import codeql.ruby.frameworks.Files +private import codeql.ruby.frameworks.core.IO /** * Classes and predicates for reasoning about download of sensitive file through insecure connection vulnerabilities. From 40503aa368b7d1414e13cb1256af0649967244f4 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Tue, 10 May 2022 08:06:25 +0000 Subject: [PATCH 0425/1618] Address review. --- csharp/tools/tracing-config.lua | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/csharp/tools/tracing-config.lua b/csharp/tools/tracing-config.lua index e7d1ce65dfd..77d69beb6b1 100644 --- a/csharp/tools/tracing-config.lua +++ b/csharp/tools/tracing-config.lua @@ -1,10 +1,7 @@ function RegisterExtractorPack() local extractor = GetPlatformToolsDirectory() .. 'Semmle.Extraction.CSharp.Driver' - if OperatingSystem == 'windows' then - extractor = GetPlatformToolsDirectory() .. - 'Semmle.Extraction.CSharp.Driver.exe' - end + if OperatingSystem == 'windows' then extractor = extractor .. '.exe' end local windowsMatchers = { CreatePatternMatcher({'^dotnet%.exe$'}, MatchCompilerName, extractor, {prepend = {'--dotnetexec', '--cil'}}), From f85e06c2e4ff288b6ff6cce66a92111c293d31f1 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 10 May 2022 10:12:39 +0200 Subject: [PATCH 0426/1618] Dataflow: Sync. --- .../cpp/dataflow/internal/DataFlowImpl.qll | 66 +++++++++++++++++-- .../cpp/dataflow/internal/DataFlowImpl2.qll | 66 +++++++++++++++++-- .../cpp/dataflow/internal/DataFlowImpl3.qll | 66 +++++++++++++++++-- .../cpp/dataflow/internal/DataFlowImpl4.qll | 66 +++++++++++++++++-- .../dataflow/internal/DataFlowImplLocal.qll | 66 +++++++++++++++++-- .../cpp/ir/dataflow/internal/DataFlowImpl.qll | 66 +++++++++++++++++-- .../ir/dataflow/internal/DataFlowImpl2.qll | 66 +++++++++++++++++-- .../ir/dataflow/internal/DataFlowImpl3.qll | 66 +++++++++++++++++-- .../ir/dataflow/internal/DataFlowImpl4.qll | 66 +++++++++++++++++-- .../csharp/dataflow/internal/DataFlowImpl.qll | 66 +++++++++++++++++-- .../dataflow/internal/DataFlowImpl2.qll | 66 +++++++++++++++++-- .../dataflow/internal/DataFlowImpl3.qll | 66 +++++++++++++++++-- .../dataflow/internal/DataFlowImpl4.qll | 66 +++++++++++++++++-- .../dataflow/internal/DataFlowImpl5.qll | 66 +++++++++++++++++-- .../java/dataflow/internal/DataFlowImpl2.qll | 66 +++++++++++++++++-- .../java/dataflow/internal/DataFlowImpl3.qll | 66 +++++++++++++++++-- .../java/dataflow/internal/DataFlowImpl4.qll | 66 +++++++++++++++++-- .../java/dataflow/internal/DataFlowImpl5.qll | 66 +++++++++++++++++-- .../java/dataflow/internal/DataFlowImpl6.qll | 66 +++++++++++++++++-- .../DataFlowImplForOnActivityResult.qll | 66 +++++++++++++++++-- .../DataFlowImplForSerializability.qll | 66 +++++++++++++++++-- .../dataflow/new/internal/DataFlowImpl.qll | 66 +++++++++++++++++-- .../dataflow/new/internal/DataFlowImpl2.qll | 66 +++++++++++++++++-- .../dataflow/new/internal/DataFlowImpl3.qll | 66 +++++++++++++++++-- .../dataflow/new/internal/DataFlowImpl4.qll | 66 +++++++++++++++++-- .../ruby/dataflow/internal/DataFlowImpl.qll | 66 +++++++++++++++++-- .../ruby/dataflow/internal/DataFlowImpl2.qll | 66 +++++++++++++++++-- .../internal/DataFlowImplForLibraries.qll | 66 +++++++++++++++++-- 28 files changed, 1652 insertions(+), 196 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index 89a35b00fa6..caa3841bc33 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index 89a35b00fa6..caa3841bc33 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index 89a35b00fa6..caa3841bc33 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index 89a35b00fa6..caa3841bc33 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index 89a35b00fa6..caa3841bc33 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index 89a35b00fa6..caa3841bc33 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index 89a35b00fa6..caa3841bc33 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index 89a35b00fa6..caa3841bc33 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index 89a35b00fa6..caa3841bc33 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index 89a35b00fa6..caa3841bc33 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index 89a35b00fa6..caa3841bc33 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index 89a35b00fa6..caa3841bc33 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index 89a35b00fa6..caa3841bc33 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index 89a35b00fa6..caa3841bc33 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index 89a35b00fa6..caa3841bc33 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index 89a35b00fa6..caa3841bc33 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index 89a35b00fa6..caa3841bc33 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index 89a35b00fa6..caa3841bc33 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index 89a35b00fa6..caa3841bc33 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll index 89a35b00fa6..caa3841bc33 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index 89a35b00fa6..caa3841bc33 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index 89a35b00fa6..caa3841bc33 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index 89a35b00fa6..caa3841bc33 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index 89a35b00fa6..caa3841bc33 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index 89a35b00fa6..caa3841bc33 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll index 89a35b00fa6..caa3841bc33 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll index 89a35b00fa6..caa3841bc33 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll index 89a35b00fa6..caa3841bc33 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll @@ -1673,10 +1673,24 @@ private module Stage2 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -2495,10 +2509,24 @@ private module Stage3 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3322,10 +3350,24 @@ private module Stage4 { storeStepFwd(_, ap, tc, _, _, config) } - predicate consCand(TypedContent tc, Ap ap, Configuration config) { + private predicate revConsCand(TypedContent tc, Ap ap, Configuration config) { storeStepCand(_, ap, tc, _, _, config) } + private predicate validAp(Ap ap, Configuration config) { + revFlow(_, _, _, _, ap, config) and ap instanceof ApNil + or + exists(TypedContent head, Ap tail | + consCand(head, tail, config) and + ap = apCons(head, tail) + ) + } + + predicate consCand(TypedContent tc, Ap ap, Configuration config) { + revConsCand(tc, ap, config) and + validAp(ap, config) + } + pragma[noinline] private predicate parameterFlow( ParamNodeEx p, Ap ap, Ap ap0, DataFlowCallable c, Configuration config @@ -3394,17 +3436,27 @@ private Configuration unbindConf(Configuration conf) { exists(Configuration c | result = pragma[only_bind_into](c) and conf = pragma[only_bind_into](c)) } -private predicate nodeMayUseSummary( - NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +pragma[nomagic] +private predicate nodeMayUseSummary0( + NodeEx n, DataFlowCallable c, FlowState state, AccessPathApprox apa, Configuration config ) { - exists(DataFlowCallable c, AccessPathApprox apa0 | - Stage4::parameterMayFlowThrough(_, c, apa, _) and + exists(AccessPathApprox apa0 | + Stage4::parameterMayFlowThrough(_, c, _, _) and Stage4::revFlow(n, state, true, _, apa0, config) and Stage4::fwdFlow(n, state, any(CallContextCall ccc), TAccessPathApproxSome(apa), apa0, config) and n.getEnclosingCallable() = c ) } +private predicate nodeMayUseSummary( + NodeEx n, FlowState state, AccessPathApprox apa, Configuration config +) { + exists(DataFlowCallable c | + Stage4::parameterMayFlowThrough(_, c, apa, _) and + nodeMayUseSummary0(n, c, state, apa, config) + ) +} + private newtype TSummaryCtx = TSummaryCtxNone() or TSummaryCtxSome(ParamNodeEx p, FlowState state, AccessPath ap) { From aa3d7babf42f88aa66b2f5601203ca21df7c4673 Mon Sep 17 00:00:00 2001 From: Rasmus Lerchedahl Petersen Date: Tue, 10 May 2022 11:37:41 +0200 Subject: [PATCH 0427/1618] python: fix bad merge caused by an optimistic attempt at solving a merge conflict in the online GUI. --- python/ql/test/experimental/meta/ConceptsTest.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python/ql/test/experimental/meta/ConceptsTest.qll b/python/ql/test/experimental/meta/ConceptsTest.qll index de0433bee63..8b1a6bad2bb 100644 --- a/python/ql/test/experimental/meta/ConceptsTest.qll +++ b/python/ql/test/experimental/meta/ConceptsTest.qll @@ -570,6 +570,9 @@ class CsrfLocalProtectionSettingTest extends InlineExpectationsTest { if p.csrfEnabled() then tag = "CsrfLocalProtectionEnabled" else tag = "CsrfLocalProtectionDisabled" + ) + } +} class XmlParsingTest extends InlineExpectationsTest { XmlParsingTest() { this = "XmlParsingTest" } From 0b9dc9703f008c1678d8d5c5167a4fb99d50abd2 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 10 May 2022 11:54:39 +0200 Subject: [PATCH 0428/1618] Swift: changes required for TBD node rework These changes are required to allow a new type-safe approach to TBD nodes, that will come in a separate commit. This introduces: * the possibility to add properties to the root `Element` * a functor taking tags to the corresponding binding trap entry * `hasProp()` methods for optional properties in QL * `getPrimaryQlClass()` method --- swift/codegen/cppgen.py | 2 +- swift/codegen/lib/cpp.py | 14 ++++---------- swift/codegen/lib/schema.py | 3 +-- swift/codegen/templates/cpp_classes.mustache | 14 +++++++------- swift/codegen/templates/ql_class.mustache | 10 +++++++++- swift/codegen/templates/trap_traps.mustache | 15 +++++++++++---- swift/codegen/test/test_cpp.py | 8 ++++---- swift/codegen/test/test_schema.py | 12 ++++++++++++ swift/codegen/trapgen.py | 2 +- swift/extractor/trap/TrapLabel.h | 4 +++- swift/extractor/trap/TrapTagTraits.h | 10 ++++++++-- swift/ql/lib/codeql/swift/generated/Element.qll | 2 ++ swift/ql/lib/codeql/swift/generated/File.qll | 2 +- swift/ql/lib/codeql/swift/generated/Location.qll | 2 +- .../lib/codeql/swift/generated/UnknownAstNode.qll | 2 +- .../swift/generated/decl/AbstractFunctionDecl.qll | 2 ++ .../codeql/swift/generated/decl/AccessorDecl.qll | 2 +- .../swift/generated/decl/AssociatedTypeDecl.qll | 2 +- .../lib/codeql/swift/generated/decl/ClassDecl.qll | 2 +- .../swift/generated/decl/ConcreteFuncDecl.qll | 2 +- .../swift/generated/decl/ConcreteVarDecl.qll | 2 +- .../swift/generated/decl/ConstructorDecl.qll | 2 +- .../swift/generated/decl/DestructorDecl.qll | 2 +- .../codeql/swift/generated/decl/EnumCaseDecl.qll | 2 +- .../lib/codeql/swift/generated/decl/EnumDecl.qll | 2 +- .../swift/generated/decl/EnumElementDecl.qll | 2 +- .../codeql/swift/generated/decl/ExtensionDecl.qll | 2 +- .../swift/generated/decl/GenericTypeParamDecl.qll | 2 +- .../codeql/swift/generated/decl/IfConfigDecl.qll | 2 +- .../codeql/swift/generated/decl/ImportDecl.qll | 2 +- .../swift/generated/decl/InfixOperatorDecl.qll | 2 +- .../swift/generated/decl/MissingMemberDecl.qll | 2 +- .../codeql/swift/generated/decl/ModuleDecl.qll | 2 +- .../swift/generated/decl/OpaqueTypeDecl.qll | 2 +- .../lib/codeql/swift/generated/decl/ParamDecl.qll | 2 +- .../swift/generated/decl/PatternBindingDecl.qll | 4 +++- .../swift/generated/decl/PostfixOperatorDecl.qll | 2 +- .../swift/generated/decl/PoundDiagnosticDecl.qll | 2 +- .../swift/generated/decl/PrecedenceGroupDecl.qll | 2 +- .../swift/generated/decl/PrefixOperatorDecl.qll | 2 +- .../codeql/swift/generated/decl/ProtocolDecl.qll | 2 +- .../codeql/swift/generated/decl/StructDecl.qll | 2 +- .../codeql/swift/generated/decl/SubscriptDecl.qll | 2 +- .../swift/generated/decl/TopLevelCodeDecl.qll | 2 +- .../codeql/swift/generated/decl/TypeAliasDecl.qll | 2 +- .../generated/expr/AnyHashableErasureExpr.qll | 2 +- .../generated/expr/AppliedPropertyWrapperExpr.qll | 2 +- .../swift/generated/expr/ArchetypeToSuperExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/Argument.qll | 2 +- .../lib/codeql/swift/generated/expr/ArrayExpr.qll | 2 +- .../swift/generated/expr/ArrayToPointerExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/ArrowExpr.qll | 2 +- .../codeql/swift/generated/expr/AssignExpr.qll | 2 +- .../swift/generated/expr/AutoClosureExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/AwaitExpr.qll | 2 +- .../codeql/swift/generated/expr/BinaryExpr.qll | 2 +- .../swift/generated/expr/BindOptionalExpr.qll | 2 +- .../swift/generated/expr/BooleanLiteralExpr.qll | 2 +- .../swift/generated/expr/BridgeFromObjCExpr.qll | 2 +- .../swift/generated/expr/BridgeToObjCExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/CallExpr.qll | 2 +- .../swift/generated/expr/CaptureListExpr.qll | 2 +- .../generated/expr/ClassMetatypeToObjectExpr.qll | 2 +- .../codeql/swift/generated/expr/ClosureExpr.qll | 2 +- .../swift/generated/expr/CodeCompletionExpr.qll | 2 +- .../codeql/swift/generated/expr/CoerceExpr.qll | 2 +- .../expr/CollectionUpcastConversionExpr.qll | 2 +- .../expr/ConditionalBridgeFromObjCExpr.qll | 2 +- .../generated/expr/ConditionalCheckedCastExpr.qll | 2 +- .../generated/expr/ConstructorRefCallExpr.qll | 2 +- .../expr/CovariantFunctionConversionExpr.qll | 2 +- .../expr/CovariantReturnConversionExpr.qll | 2 +- .../codeql/swift/generated/expr/DeclRefExpr.qll | 2 +- .../swift/generated/expr/DefaultArgumentExpr.qll | 4 +++- .../swift/generated/expr/DerivedToBaseExpr.qll | 2 +- .../swift/generated/expr/DestructureTupleExpr.qll | 2 +- .../swift/generated/expr/DictionaryExpr.qll | 2 +- .../generated/expr/DifferentiableFunctionExpr.qll | 2 +- .../DifferentiableFunctionExtractOriginalExpr.qll | 2 +- .../generated/expr/DiscardAssignmentExpr.qll | 2 +- .../codeql/swift/generated/expr/DotSelfExpr.qll | 2 +- .../generated/expr/DotSyntaxBaseIgnoredExpr.qll | 2 +- .../swift/generated/expr/DotSyntaxCallExpr.qll | 2 +- .../swift/generated/expr/DynamicMemberRefExpr.qll | 2 +- .../swift/generated/expr/DynamicSubscriptExpr.qll | 2 +- .../swift/generated/expr/DynamicTypeExpr.qll | 2 +- .../generated/expr/EditorPlaceholderExpr.qll | 2 +- .../swift/generated/expr/EnumIsCaseExpr.qll | 2 +- .../codeql/swift/generated/expr/ErasureExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/ErrorExpr.qll | 2 +- .../expr/ExistentialMetatypeToObjectExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/Expr.qll | 2 ++ .../swift/generated/expr/FloatLiteralExpr.qll | 2 +- .../codeql/swift/generated/expr/ForceTryExpr.qll | 2 +- .../swift/generated/expr/ForceValueExpr.qll | 2 +- .../generated/expr/ForcedCheckedCastExpr.qll | 2 +- .../expr/ForeignObjectConversionExpr.qll | 2 +- .../generated/expr/FunctionConversionExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/IfExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/InOutExpr.qll | 2 +- .../swift/generated/expr/InOutToPointerExpr.qll | 2 +- .../generated/expr/InjectIntoOptionalExpr.qll | 2 +- .../swift/generated/expr/IntegerLiteralExpr.qll | 2 +- .../expr/InterpolatedStringLiteralExpr.qll | 10 +++++++++- .../ql/lib/codeql/swift/generated/expr/IsExpr.qll | 2 +- .../generated/expr/KeyPathApplicationExpr.qll | 2 +- .../swift/generated/expr/KeyPathDotExpr.qll | 2 +- .../codeql/swift/generated/expr/KeyPathExpr.qll | 6 +++++- .../swift/generated/expr/LazyInitializerExpr.qll | 2 +- .../swift/generated/expr/LinearFunctionExpr.qll | 2 +- .../expr/LinearFunctionExtractOriginalExpr.qll | 2 +- .../expr/LinearToDifferentiableFunctionExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/LoadExpr.qll | 2 +- .../generated/expr/MagicIdentifierLiteralExpr.qll | 2 +- .../expr/MakeTemporarilyEscapableExpr.qll | 2 +- .../codeql/swift/generated/expr/MemberRefExpr.qll | 2 +- .../generated/expr/MetatypeConversionExpr.qll | 2 +- .../swift/generated/expr/NilLiteralExpr.qll | 2 +- .../swift/generated/expr/ObjCSelectorExpr.qll | 2 +- .../swift/generated/expr/ObjectLiteralExpr.qll | 2 +- .../codeql/swift/generated/expr/OneWayExpr.qll | 2 +- .../swift/generated/expr/OpaqueValueExpr.qll | 2 +- .../swift/generated/expr/OpenExistentialExpr.qll | 2 +- .../generated/expr/OptionalEvaluationExpr.qll | 2 +- .../swift/generated/expr/OptionalTryExpr.qll | 2 +- .../expr/OtherConstructorDeclRefExpr.qll | 2 +- .../generated/expr/OverloadedDeclRefExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/ParenExpr.qll | 2 +- .../swift/generated/expr/PointerToPointerExpr.qll | 2 +- .../swift/generated/expr/PostfixUnaryExpr.qll | 2 +- .../swift/generated/expr/PrefixUnaryExpr.qll | 2 +- .../expr/PropertyWrapperValuePlaceholderExpr.qll | 2 +- .../expr/ProtocolMetatypeToObjectExpr.qll | 2 +- .../expr/RebindSelfInConstructorExpr.qll | 2 +- .../swift/generated/expr/RegexLiteralExpr.qll | 2 +- .../codeql/swift/generated/expr/SequenceExpr.qll | 2 +- .../swift/generated/expr/StringLiteralExpr.qll | 2 +- .../swift/generated/expr/StringToPointerExpr.qll | 2 +- .../codeql/swift/generated/expr/SubscriptExpr.qll | 2 +- .../codeql/swift/generated/expr/SuperRefExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/TapExpr.qll | 4 +++- .../lib/codeql/swift/generated/expr/TryExpr.qll | 2 +- .../swift/generated/expr/TupleElementExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/TupleExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/TypeExpr.qll | 4 +++- .../generated/expr/UnderlyingToOpaqueExpr.qll | 2 +- .../generated/expr/UnevaluatedInstanceExpr.qll | 2 +- .../generated/expr/UnresolvedDeclRefExpr.qll | 2 +- .../swift/generated/expr/UnresolvedDotExpr.qll | 2 +- .../expr/UnresolvedMemberChainResultExpr.qll | 2 +- .../swift/generated/expr/UnresolvedMemberExpr.qll | 2 +- .../generated/expr/UnresolvedPatternExpr.qll | 2 +- .../generated/expr/UnresolvedSpecializeExpr.qll | 2 +- .../expr/UnresolvedTypeConversionExpr.qll | 2 +- .../swift/generated/expr/VarargExpansionExpr.qll | 2 +- .../codeql/swift/generated/pattern/AnyPattern.qll | 2 +- .../swift/generated/pattern/BindingPattern.qll | 2 +- .../swift/generated/pattern/BoolPattern.qll | 2 +- .../generated/pattern/EnumElementPattern.qll | 4 +++- .../swift/generated/pattern/ExprPattern.qll | 2 +- .../codeql/swift/generated/pattern/IsPattern.qll | 6 +++++- .../swift/generated/pattern/NamedPattern.qll | 2 +- .../generated/pattern/OptionalSomePattern.qll | 2 +- .../swift/generated/pattern/ParenPattern.qll | 2 +- .../swift/generated/pattern/TuplePattern.qll | 2 +- .../swift/generated/pattern/TypedPattern.qll | 4 +++- .../lib/codeql/swift/generated/stmt/BraceStmt.qll | 2 +- .../lib/codeql/swift/generated/stmt/BreakStmt.qll | 6 +++++- .../codeql/swift/generated/stmt/CaseLabelItem.qll | 4 +++- .../lib/codeql/swift/generated/stmt/CaseStmt.qll | 2 +- .../swift/generated/stmt/ConditionElement.qll | 8 +++++++- .../codeql/swift/generated/stmt/ContinueStmt.qll | 6 +++++- .../lib/codeql/swift/generated/stmt/DeferStmt.qll | 2 +- .../codeql/swift/generated/stmt/DoCatchStmt.qll | 2 +- .../ql/lib/codeql/swift/generated/stmt/DoStmt.qll | 2 +- .../lib/codeql/swift/generated/stmt/FailStmt.qll | 2 +- .../swift/generated/stmt/FallthroughStmt.qll | 2 +- .../codeql/swift/generated/stmt/ForEachStmt.qll | 4 +++- .../lib/codeql/swift/generated/stmt/GuardStmt.qll | 2 +- .../ql/lib/codeql/swift/generated/stmt/IfStmt.qll | 4 +++- .../codeql/swift/generated/stmt/LabeledStmt.qll | 2 ++ .../swift/generated/stmt/PoundAssertStmt.qll | 2 +- .../swift/generated/stmt/RepeatWhileStmt.qll | 2 +- .../codeql/swift/generated/stmt/ReturnStmt.qll | 4 +++- .../codeql/swift/generated/stmt/StmtCondition.qll | 2 +- .../codeql/swift/generated/stmt/SwitchStmt.qll | 2 +- .../lib/codeql/swift/generated/stmt/ThrowStmt.qll | 2 +- .../lib/codeql/swift/generated/stmt/WhileStmt.qll | 2 +- .../lib/codeql/swift/generated/stmt/YieldStmt.qll | 2 +- .../swift/generated/type/AnyGenericType.qll | 2 ++ .../swift/generated/type/ArraySliceType.qll | 2 +- .../generated/type/BoundGenericClassType.qll | 2 +- .../swift/generated/type/BoundGenericEnumType.qll | 2 +- .../generated/type/BoundGenericStructType.qll | 2 +- .../generated/type/BuiltinBridgeObjectType.qll | 2 +- .../type/BuiltinDefaultActorStorageType.qll | 2 +- .../swift/generated/type/BuiltinExecutorType.qll | 2 +- .../swift/generated/type/BuiltinFloatType.qll | 2 +- .../generated/type/BuiltinIntegerLiteralType.qll | 2 +- .../swift/generated/type/BuiltinIntegerType.qll | 2 +- .../swift/generated/type/BuiltinJobType.qll | 2 +- .../generated/type/BuiltinNativeObjectType.qll | 2 +- .../generated/type/BuiltinRawPointerType.qll | 2 +- .../type/BuiltinRawUnsafeContinuationType.qll | 2 +- .../type/BuiltinUnsafeValueBufferType.qll | 2 +- .../swift/generated/type/BuiltinVectorType.qll | 2 +- .../lib/codeql/swift/generated/type/ClassType.qll | 2 +- .../swift/generated/type/DependentMemberType.qll | 2 +- .../swift/generated/type/DictionaryType.qll | 2 +- .../swift/generated/type/DynamicSelfType.qll | 2 +- .../lib/codeql/swift/generated/type/EnumType.qll | 2 +- .../lib/codeql/swift/generated/type/ErrorType.qll | 2 +- .../generated/type/ExistentialMetatypeType.qll | 2 +- .../swift/generated/type/ExistentialType.qll | 2 +- .../codeql/swift/generated/type/FunctionType.qll | 2 +- .../swift/generated/type/GenericFunctionType.qll | 2 +- .../swift/generated/type/GenericTypeParamType.qll | 2 +- .../lib/codeql/swift/generated/type/InOutType.qll | 2 +- .../codeql/swift/generated/type/LValueType.qll | 2 +- .../codeql/swift/generated/type/MetatypeType.qll | 2 +- .../codeql/swift/generated/type/ModuleType.qll | 2 +- .../swift/generated/type/NestedArchetypeType.qll | 2 +- .../generated/type/OpaqueTypeArchetypeType.qll | 2 +- .../swift/generated/type/OpenedArchetypeType.qll | 2 +- .../codeql/swift/generated/type/OptionalType.qll | 2 +- .../lib/codeql/swift/generated/type/ParenType.qll | 2 +- .../swift/generated/type/PlaceholderType.qll | 2 +- .../swift/generated/type/PrimaryArchetypeType.qll | 2 +- .../generated/type/ProtocolCompositionType.qll | 2 +- .../codeql/swift/generated/type/ProtocolType.qll | 2 +- .../generated/type/SequenceArchetypeType.qll | 2 +- .../swift/generated/type/SilBlockStorageType.qll | 2 +- .../codeql/swift/generated/type/SilBoxType.qll | 2 +- .../swift/generated/type/SilFunctionType.qll | 2 +- .../codeql/swift/generated/type/SilTokenType.qll | 2 +- .../codeql/swift/generated/type/StructType.qll | 2 +- .../lib/codeql/swift/generated/type/TupleType.qll | 2 +- .../codeql/swift/generated/type/TypeAliasType.qll | 2 +- .../swift/generated/type/TypeVariableType.qll | 2 +- .../swift/generated/type/UnboundGenericType.qll | 2 +- .../codeql/swift/generated/type/UnknownType.qll | 2 +- .../swift/generated/type/UnmanagedStorageType.qll | 2 +- .../swift/generated/type/UnownedStorageType.qll | 2 +- .../swift/generated/type/UnresolvedType.qll | 2 +- .../swift/generated/type/VariadicSequenceType.qll | 2 +- .../swift/generated/type/WeakStorageType.qll | 2 +- 246 files changed, 351 insertions(+), 263 deletions(-) diff --git a/swift/codegen/cppgen.py b/swift/codegen/cppgen.py index eee66a812f0..623621e3559 100644 --- a/swift/codegen/cppgen.py +++ b/swift/codegen/cppgen.py @@ -27,7 +27,7 @@ def _get_field(cls: schema.Class, p: schema.Property, trap_affix: str) -> cpp.Fi if not p.is_predicate: trap_name = inflection.pluralize(trap_name) args = dict( - name=p.name + ("_" if p.name in cpp.cpp_keywords else ""), + field_name=p.name + ("_" if p.name in cpp.cpp_keywords else ""), type=_get_type(p.type, trap_affix), is_optional=p.is_optional, is_repeated=p.is_repeated, diff --git a/swift/codegen/lib/cpp.py b/swift/codegen/lib/cpp.py index 82dfbb44bcb..71bb364b74b 100644 --- a/swift/codegen/lib/cpp.py +++ b/swift/codegen/lib/cpp.py @@ -17,7 +17,7 @@ cpp_keywords = {"alignas", "alignof", "and", "and_eq", "asm", "atomic_cancel", " _field_overrides = [ (re.compile(r"(start|end)_(line|column)|index|width|num_.*"), {"type": "unsigned"}), - (re.compile(r"(.*)_"), lambda m: {"name": m[1]}), + (re.compile(r"(.*)_"), lambda m: {"field_name": m[1]}), ] @@ -31,7 +31,7 @@ def get_field_override(field: str): @dataclass class Field: - name: str + field_name: str type: str is_optional: bool = False is_repeated: bool = False @@ -44,12 +44,8 @@ class Field: self.type = f"std::optional<{self.type}>" if self.is_repeated: self.type = f"std::vector<{self.type}>" - - @property - def cpp_name(self): - if self.name in cpp_keywords: - return self.name + "_" - return self.name + if self.field_name in cpp_keywords: + self.field_name += "_" # using @property breaks pystache internals here def get_streamer(self): @@ -65,8 +61,6 @@ class Field: return not (self.is_optional or self.is_repeated or self.is_predicate) - - @dataclass class Trap: table_name: str diff --git a/swift/codegen/lib/schema.py b/swift/codegen/lib/schema.py index a65aaf24dca..648b8b2ec64 100644 --- a/swift/codegen/lib/schema.py +++ b/swift/codegen/lib/schema.py @@ -92,7 +92,6 @@ def load(path): data = yaml.load(input, Loader=yaml.SafeLoader) grouper = _DirSelector(data.get("_directories", {}).items()) classes = {root_class_name: Class(root_class_name)} - assert root_class_name not in data classes.update((cls, Class(cls, dir=grouper.get(cls))) for cls in data if not cls.startswith("_")) for name, info in data.items(): if name.startswith("_"): @@ -110,7 +109,7 @@ def load(path): classes[base].derived.add(name) elif k == "_dir": cls.dir = pathlib.Path(v) - if not cls.bases: + if not cls.bases and cls.name != root_class_name: cls.bases.add(root_class_name) classes[root_class_name].derived.add(name) diff --git a/swift/codegen/templates/cpp_classes.mustache b/swift/codegen/templates/cpp_classes.mustache index 15e33a378dc..fdaf52e3efe 100644 --- a/swift/codegen/templates/cpp_classes.mustache +++ b/swift/codegen/templates/cpp_classes.mustache @@ -14,7 +14,7 @@ namespace {{namespace}} { struct {{name}}{{#final}} : Binding<{{name}}Tag>{{#bases}}, {{ref.name}}{{/bases}}{{/final}}{{^final}}{{#has_bases}}: {{#bases}}{{^first}}, {{/first}}{{ref.name}}{{/bases}}{{/has_bases}}{{/final}} { {{#fields}} - {{type}} {{name}}{}; + {{type}} {{field_name}}{}; {{/fields}} {{#final}} @@ -27,27 +27,27 @@ struct {{name}}{{#final}} : Binding<{{name}}Tag>{{#bases}}, {{ref.name}}{{/bases protected: void emit({{^final}}{{trap_affix}}Label<{{name}}Tag> id, {{/final}}std::ostream& out) const { {{#trap_name}} - out << {{.}}{{trap_affix}}{id{{#single_fields}}, {{name}}{{/single_fields}}} << '\n'; + out << {{.}}{{trap_affix}}{id{{#single_fields}}, {{field_name}}{{/single_fields}}} << '\n'; {{/trap_name}} {{#bases}} {{ref.name}}::emit(id, out); {{/bases}} {{#fields}} {{#is_predicate}} - if ({{name}}) out << {{trap_name}}{{trap_affix}}{id} << '\n'; + if ({{field_name}}) out << {{trap_name}}{{trap_affix}}{id} << '\n'; {{/is_predicate}} {{#is_optional}} {{^is_repeated}} - if ({{name}}) out << {{trap_name}}{{trap_affix}}{id, *{{name}}} << '\n'; + if ({{field_name}}) out << {{trap_name}}{{trap_affix}}{id, *{{field_name}}} << '\n'; {{/is_repeated}} {{/is_optional}} {{#is_repeated}} - for (auto i = 0u; i < {{name}}.size(); ++i) { + for (auto i = 0u; i < {{field_name}}.size(); ++i) { {{^is_optional}} - out << {{trap_name}}{{trap_affix}}{id, i, {{name}}[i]}; + out << {{trap_name}}{{trap_affix}}{id, i, {{field_name}}[i]}; {{/is_optional}} {{#is_optional}} - if ({{name}}[i]) out << {{trap_name}}{{trap_affix}}{id, i, *{{name}}[i]}; + if ({{field_name}}[i]) out << {{trap_name}}{{trap_affix}}{id, i, *{{field_name}}[i]}; {{/is_optional}} } {{/is_repeated}} diff --git a/swift/codegen/templates/ql_class.mustache b/swift/codegen/templates/ql_class.mustache index 89da396be90..3c54467b7c4 100644 --- a/swift/codegen/templates/ql_class.mustache +++ b/swift/codegen/templates/ql_class.mustache @@ -8,6 +8,8 @@ class {{name}}Base extends {{db_id}}{{#bases}}, {{.}}{{/bases}} { {{#root}} string toString() { none() } // overridden by subclasses + string getPrimaryQlClass() { none() } // overridden by subclasses + {{name}}Base getResolveStep() { none() } // overridden by subclasses {{name}}Base resolve() { @@ -17,7 +19,7 @@ class {{name}}Base extends {{db_id}}{{#bases}}, {{.}}{{/bases}} { } {{/root}} {{#final}} - override string toString() { result = "{{name}}" } + override string getPrimaryQlClass() { result = "{{name}}" } {{/final}} {{#properties}} @@ -32,6 +34,12 @@ class {{name}}Base extends {{db_id}}{{#bases}}, {{.}}{{/bases}} { {{tablename}}({{#tableparams}}{{^first}}, {{/first}}{{param}}{{/tableparams}}) {{/type_is_class}} } + {{#is_optional}} + + predicate has{{singular}}({{#is_repeated}}int index{{/is_repeated}}) { + exists({{getter}}({{#is_repeated}}index{{/is_repeated}})) + } + {{/is_optional}} {{#is_repeated}} {{type}} {{indefinite_getter}}() { diff --git a/swift/codegen/templates/trap_traps.mustache b/swift/codegen/templates/trap_traps.mustache index 1848d3fbc87..a6b75a597d8 100644 --- a/swift/codegen/templates/trap_traps.mustache +++ b/swift/codegen/templates/trap_traps.mustache @@ -6,6 +6,7 @@ #include #include "{{include_dir}}/{{trap_affix}}Label.h" +#include "{{include_dir}}/{{trap_affix}}TagTraits.h" #include "./{{trap_affix}}Tags.h" namespace {{namespace}} { @@ -15,19 +16,25 @@ namespace {{namespace}} { struct {{name}}{{trap_affix}} { static constexpr bool is_binding = {{#id}}true{{/id}}{{^id}}false{{/id}}; {{#id}} - {{type}} getBoundLabel() const { return {{cpp_name}}; } + {{type}} getBoundLabel() const { return {{field_name}}; } {{/id}} {{#fields}} - {{type}} {{cpp_name}}{}; + {{type}} {{field_name}}{}; {{/fields}} }; inline std::ostream &operator<<(std::ostream &out, const {{name}}{{trap_affix}} &e) { out << "{{table_name}}("{{#fields}}{{^first}} << ", "{{/first}} - << {{#get_streamer}}e.{{cpp_name}}{{/get_streamer}}{{/fields}} << ")"; + << {{#get_streamer}}e.{{field_name}}{{/get_streamer}}{{/fields}} << ")"; return out; } -{{/traps}} +{{#id}} +template <> +struct TagToBindingTrapFunctor { + using type = {{name}}{{trap_affix}}; +}; +{{/id}} +{{/traps}} } diff --git a/swift/codegen/test/test_cpp.py b/swift/codegen/test/test_cpp.py index 06ff50f8a51..e6cd4f81305 100644 --- a/swift/codegen/test/test_cpp.py +++ b/swift/codegen/test/test_cpp.py @@ -7,14 +7,14 @@ from swift.codegen.lib import cpp @pytest.mark.parametrize("keyword", cpp.cpp_keywords) -def test_field_keyword_cpp_name(keyword): +def test_field_keyword_name(keyword): f = cpp.Field(keyword, "int") - assert f.cpp_name == keyword + "_" + assert f.field_name == keyword + "_" -def test_field_cpp_name(): +def test_field_name(): f = cpp.Field("foo", "int") - assert f.cpp_name == "foo" + assert f.field_name == "foo" @pytest.mark.parametrize("type,expected", [ diff --git a/swift/codegen/test/test_schema.py b/swift/codegen/test/test_schema.py index c1b64648894..cbeb9c6989a 100644 --- a/swift/codegen/test/test_schema.py +++ b/swift/codegen/test/test_schema.py @@ -155,5 +155,17 @@ A: ] +def test_element_properties(load): + ret = load(""" +Element: + x: string +""") + assert ret.classes == [ + schema.Class(root_name, properties=[ + schema.SingleProperty('x', 'string'), + ]), + ] + + if __name__ == '__main__': sys.exit(pytest.main([__file__] + sys.argv[1:])) diff --git a/swift/codegen/trapgen.py b/swift/codegen/trapgen.py index 495a51a8388..ed2fef4373b 100755 --- a/swift/codegen/trapgen.py +++ b/swift/codegen/trapgen.py @@ -28,7 +28,7 @@ def get_cpp_type(schema_type: str, trap_affix: str): def get_field(c: dbscheme.Column, trap_affix: str): args = { - "name": c.schema_name, + "field_name": c.schema_name, "type": c.type, } args.update(cpp.get_field_override(c.schema_name)) diff --git a/swift/extractor/trap/TrapLabel.h b/swift/extractor/trap/TrapLabel.h index 9928bb9a2b9..b601b5c041a 100644 --- a/swift/extractor/trap/TrapLabel.h +++ b/swift/extractor/trap/TrapLabel.h @@ -27,7 +27,7 @@ class UntypedTrapLabel { friend bool operator==(UntypedTrapLabel lhs, UntypedTrapLabel rhs) { return lhs.id_ == rhs.id_; } }; -template +template class TrapLabel : public UntypedTrapLabel { template friend class TrapLabel; @@ -35,6 +35,8 @@ class TrapLabel : public UntypedTrapLabel { using UntypedTrapLabel::UntypedTrapLabel; public: + using Tag = TagParam; + TrapLabel() = default; template diff --git a/swift/extractor/trap/TrapTagTraits.h b/swift/extractor/trap/TrapTagTraits.h index 280474b5304..930127403ac 100644 --- a/swift/extractor/trap/TrapTagTraits.h +++ b/swift/extractor/trap/TrapTagTraits.h @@ -2,7 +2,7 @@ #include -namespace codeql::trap { +namespace codeql { template struct ToTagFunctor; @@ -12,4 +12,10 @@ struct ToTagOverride : ToTagFunctor {}; template using ToTag = typename ToTagOverride>::type; -} // namespace codeql::trap +template +struct TagToBindingTrapFunctor; + +template +using TagToBindingTrap = typename TagToBindingTrapFunctor::type; + +} // namespace codeql diff --git a/swift/ql/lib/codeql/swift/generated/Element.qll b/swift/ql/lib/codeql/swift/generated/Element.qll index fcb8e68c86f..e9f54415ac1 100644 --- a/swift/ql/lib/codeql/swift/generated/Element.qll +++ b/swift/ql/lib/codeql/swift/generated/Element.qll @@ -2,6 +2,8 @@ class ElementBase extends @element { string toString() { none() } // overridden by subclasses + string getPrimaryQlClass() { none() } // overridden by subclasses + ElementBase getResolveStep() { none() } // overridden by subclasses ElementBase resolve() { diff --git a/swift/ql/lib/codeql/swift/generated/File.qll b/swift/ql/lib/codeql/swift/generated/File.qll index 9c431346952..a0cde68c73a 100644 --- a/swift/ql/lib/codeql/swift/generated/File.qll +++ b/swift/ql/lib/codeql/swift/generated/File.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.Element class FileBase extends @file, Element { - override string toString() { result = "File" } + override string getPrimaryQlClass() { result = "File" } string getName() { files(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/Location.qll b/swift/ql/lib/codeql/swift/generated/Location.qll index e30b4f275c1..a39ee13823c 100644 --- a/swift/ql/lib/codeql/swift/generated/Location.qll +++ b/swift/ql/lib/codeql/swift/generated/Location.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.Element import codeql.swift.elements.File class LocationBase extends @location, Element { - override string toString() { result = "Location" } + override string getPrimaryQlClass() { result = "Location" } File getFile() { exists(File x | diff --git a/swift/ql/lib/codeql/swift/generated/UnknownAstNode.qll b/swift/ql/lib/codeql/swift/generated/UnknownAstNode.qll index 657db267a96..06bca7af67d 100644 --- a/swift/ql/lib/codeql/swift/generated/UnknownAstNode.qll +++ b/swift/ql/lib/codeql/swift/generated/UnknownAstNode.qll @@ -6,7 +6,7 @@ import codeql.swift.elements.stmt.Stmt import codeql.swift.elements.typerepr.TypeRepr class UnknownAstNodeBase extends @unknown_ast_node, Decl, Expr, Pattern, Stmt, TypeRepr { - override string toString() { result = "UnknownAstNode" } + override string getPrimaryQlClass() { result = "UnknownAstNode" } string getName() { unknown_ast_nodes(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/AbstractFunctionDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/AbstractFunctionDecl.qll index 26e65473f13..5a6ba0e41a7 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/AbstractFunctionDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/AbstractFunctionDecl.qll @@ -14,6 +14,8 @@ class AbstractFunctionDeclBase extends @abstract_function_decl, GenericContext, ) } + predicate hasBody() { exists(getBody()) } + ParamDecl getParam(int index) { exists(ParamDecl x | abstract_function_decl_params(this, index, x) and diff --git a/swift/ql/lib/codeql/swift/generated/decl/AccessorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/AccessorDecl.qll index 6be785a6ece..5ac3dd7091a 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/AccessorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/AccessorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.FuncDecl class AccessorDeclBase extends @accessor_decl, FuncDecl { - override string toString() { result = "AccessorDecl" } + override string getPrimaryQlClass() { result = "AccessorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll index fbcfb20c3ed..e7970236870 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.AbstractTypeParamDecl class AssociatedTypeDeclBase extends @associated_type_decl, AbstractTypeParamDecl { - override string toString() { result = "AssociatedTypeDecl" } + override string getPrimaryQlClass() { result = "AssociatedTypeDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ClassDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ClassDecl.qll index 96a9cc587c5..07d6d63128f 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ClassDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ClassDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.NominalTypeDecl class ClassDeclBase extends @class_decl, NominalTypeDecl { - override string toString() { result = "ClassDecl" } + override string getPrimaryQlClass() { result = "ClassDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ConcreteFuncDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ConcreteFuncDecl.qll index b46b4745537..e34421da66d 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ConcreteFuncDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ConcreteFuncDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.FuncDecl class ConcreteFuncDeclBase extends @concrete_func_decl, FuncDecl { - override string toString() { result = "ConcreteFuncDecl" } + override string getPrimaryQlClass() { result = "ConcreteFuncDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ConcreteVarDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ConcreteVarDecl.qll index f94ee9cad28..c6564834c5f 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ConcreteVarDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ConcreteVarDecl.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.decl.VarDecl class ConcreteVarDeclBase extends @concrete_var_decl, VarDecl { - override string toString() { result = "ConcreteVarDecl" } + override string getPrimaryQlClass() { result = "ConcreteVarDecl" } int getIntroducerInt() { concrete_var_decls(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ConstructorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ConstructorDecl.qll index cc73243e409..fbd9db1e299 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ConstructorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ConstructorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.AbstractFunctionDecl class ConstructorDeclBase extends @constructor_decl, AbstractFunctionDecl { - override string toString() { result = "ConstructorDecl" } + override string getPrimaryQlClass() { result = "ConstructorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/DestructorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/DestructorDecl.qll index 3223ab2d196..667650662a0 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/DestructorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/DestructorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.AbstractFunctionDecl class DestructorDeclBase extends @destructor_decl, AbstractFunctionDecl { - override string toString() { result = "DestructorDecl" } + override string getPrimaryQlClass() { result = "DestructorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/EnumCaseDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/EnumCaseDecl.qll index ef87a7a2de6..654da108fa0 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/EnumCaseDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/EnumCaseDecl.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.decl.Decl import codeql.swift.elements.decl.EnumElementDecl class EnumCaseDeclBase extends @enum_case_decl, Decl { - override string toString() { result = "EnumCaseDecl" } + override string getPrimaryQlClass() { result = "EnumCaseDecl" } EnumElementDecl getElement(int index) { exists(EnumElementDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/decl/EnumDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/EnumDecl.qll index e1c78ecadd0..75120af5548 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/EnumDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/EnumDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.NominalTypeDecl class EnumDeclBase extends @enum_decl, NominalTypeDecl { - override string toString() { result = "EnumDecl" } + override string getPrimaryQlClass() { result = "EnumDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/EnumElementDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/EnumElementDecl.qll index ace35b89318..0210e22ddda 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/EnumElementDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/EnumElementDecl.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.decl.ParamDecl import codeql.swift.elements.decl.ValueDecl class EnumElementDeclBase extends @enum_element_decl, ValueDecl { - override string toString() { result = "EnumElementDecl" } + override string getPrimaryQlClass() { result = "EnumElementDecl" } string getName() { enum_element_decls(this, result) } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll index 653f791ec76..fff23dbeb47 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll @@ -4,5 +4,5 @@ import codeql.swift.elements.decl.GenericContext import codeql.swift.elements.decl.IterableDeclContext class ExtensionDeclBase extends @extension_decl, Decl, GenericContext, IterableDeclContext { - override string toString() { result = "ExtensionDecl" } + override string getPrimaryQlClass() { result = "ExtensionDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/GenericTypeParamDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/GenericTypeParamDecl.qll index effe651ea5e..9cc79737f0b 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/GenericTypeParamDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/GenericTypeParamDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.AbstractTypeParamDecl class GenericTypeParamDeclBase extends @generic_type_param_decl, AbstractTypeParamDecl { - override string toString() { result = "GenericTypeParamDecl" } + override string getPrimaryQlClass() { result = "GenericTypeParamDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/IfConfigDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/IfConfigDecl.qll index 6d53786e2c3..bcc629577d9 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/IfConfigDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/IfConfigDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.Decl class IfConfigDeclBase extends @if_config_decl, Decl { - override string toString() { result = "IfConfigDecl" } + override string getPrimaryQlClass() { result = "IfConfigDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ImportDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ImportDecl.qll index 53b2e7d9804..e2b9a59a72d 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ImportDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ImportDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.Decl class ImportDeclBase extends @import_decl, Decl { - override string toString() { result = "ImportDecl" } + override string getPrimaryQlClass() { result = "ImportDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/InfixOperatorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/InfixOperatorDecl.qll index 4c91bed5227..bac4345e86d 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/InfixOperatorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/InfixOperatorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.OperatorDecl class InfixOperatorDeclBase extends @infix_operator_decl, OperatorDecl { - override string toString() { result = "InfixOperatorDecl" } + override string getPrimaryQlClass() { result = "InfixOperatorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/MissingMemberDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/MissingMemberDecl.qll index 19131ef4d9a..046fece53b5 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/MissingMemberDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/MissingMemberDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.Decl class MissingMemberDeclBase extends @missing_member_decl, Decl { - override string toString() { result = "MissingMemberDecl" } + override string getPrimaryQlClass() { result = "MissingMemberDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ModuleDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ModuleDecl.qll index f9337f91618..94fac5a140b 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ModuleDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ModuleDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.TypeDecl class ModuleDeclBase extends @module_decl, TypeDecl { - override string toString() { result = "ModuleDecl" } + override string getPrimaryQlClass() { result = "ModuleDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/OpaqueTypeDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/OpaqueTypeDecl.qll index 5e1e176aa38..87307cf27b1 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/OpaqueTypeDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/OpaqueTypeDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.GenericTypeDecl class OpaqueTypeDeclBase extends @opaque_type_decl, GenericTypeDecl { - override string toString() { result = "OpaqueTypeDecl" } + override string getPrimaryQlClass() { result = "OpaqueTypeDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ParamDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ParamDecl.qll index e2f3b0a8d49..455f504e777 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ParamDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ParamDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.VarDecl class ParamDeclBase extends @param_decl, VarDecl { - override string toString() { result = "ParamDecl" } + override string getPrimaryQlClass() { result = "ParamDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll index 9d693c9f9c7..6b69930402e 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.pattern.Pattern class PatternBindingDeclBase extends @pattern_binding_decl, Decl { - override string toString() { result = "PatternBindingDecl" } + override string getPrimaryQlClass() { result = "PatternBindingDecl" } Expr getInit(int index) { exists(Expr x | @@ -13,6 +13,8 @@ class PatternBindingDeclBase extends @pattern_binding_decl, Decl { ) } + predicate hasInit(int index) { exists(getInit(index)) } + Expr getAnInit() { result = getInit(_) } Pattern getPattern(int index) { diff --git a/swift/ql/lib/codeql/swift/generated/decl/PostfixOperatorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/PostfixOperatorDecl.qll index 94f709fa1b4..4786bb2eb08 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/PostfixOperatorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/PostfixOperatorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.OperatorDecl class PostfixOperatorDeclBase extends @postfix_operator_decl, OperatorDecl { - override string toString() { result = "PostfixOperatorDecl" } + override string getPrimaryQlClass() { result = "PostfixOperatorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/PoundDiagnosticDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/PoundDiagnosticDecl.qll index af004769c83..ba7d98fde10 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/PoundDiagnosticDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/PoundDiagnosticDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.Decl class PoundDiagnosticDeclBase extends @pound_diagnostic_decl, Decl { - override string toString() { result = "PoundDiagnosticDecl" } + override string getPrimaryQlClass() { result = "PoundDiagnosticDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/PrecedenceGroupDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/PrecedenceGroupDecl.qll index 2da8c646cf0..a963aeff10d 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/PrecedenceGroupDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/PrecedenceGroupDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.Decl class PrecedenceGroupDeclBase extends @precedence_group_decl, Decl { - override string toString() { result = "PrecedenceGroupDecl" } + override string getPrimaryQlClass() { result = "PrecedenceGroupDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/PrefixOperatorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/PrefixOperatorDecl.qll index 9620dcb1d65..01db13ad940 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/PrefixOperatorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/PrefixOperatorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.OperatorDecl class PrefixOperatorDeclBase extends @prefix_operator_decl, OperatorDecl { - override string toString() { result = "PrefixOperatorDecl" } + override string getPrimaryQlClass() { result = "PrefixOperatorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ProtocolDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ProtocolDecl.qll index 322a29acd6b..29fcf2b507a 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ProtocolDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ProtocolDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.NominalTypeDecl class ProtocolDeclBase extends @protocol_decl, NominalTypeDecl { - override string toString() { result = "ProtocolDecl" } + override string getPrimaryQlClass() { result = "ProtocolDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/StructDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/StructDecl.qll index 65459bf93c2..26455f15484 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/StructDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/StructDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.NominalTypeDecl class StructDeclBase extends @struct_decl, NominalTypeDecl { - override string toString() { result = "StructDecl" } + override string getPrimaryQlClass() { result = "StructDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/SubscriptDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/SubscriptDecl.qll index b84abbec539..6329f269f49 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/SubscriptDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/SubscriptDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.AbstractStorageDecl class SubscriptDeclBase extends @subscript_decl, AbstractStorageDecl { - override string toString() { result = "SubscriptDecl" } + override string getPrimaryQlClass() { result = "SubscriptDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/TopLevelCodeDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/TopLevelCodeDecl.qll index 9d460066513..87899c24bfe 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/TopLevelCodeDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/TopLevelCodeDecl.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.BraceStmt import codeql.swift.elements.decl.Decl class TopLevelCodeDeclBase extends @top_level_code_decl, Decl { - override string toString() { result = "TopLevelCodeDecl" } + override string getPrimaryQlClass() { result = "TopLevelCodeDecl" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/decl/TypeAliasDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/TypeAliasDecl.qll index d4d3573614e..d5a41a716bc 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/TypeAliasDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/TypeAliasDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.GenericTypeDecl class TypeAliasDeclBase extends @type_alias_decl, GenericTypeDecl { - override string toString() { result = "TypeAliasDecl" } + override string getPrimaryQlClass() { result = "TypeAliasDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/AnyHashableErasureExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/AnyHashableErasureExpr.qll index 0c9bef9b580..de5c1534faf 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/AnyHashableErasureExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/AnyHashableErasureExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class AnyHashableErasureExprBase extends @any_hashable_erasure_expr, ImplicitConversionExpr { - override string toString() { result = "AnyHashableErasureExpr" } + override string getPrimaryQlClass() { result = "AnyHashableErasureExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/AppliedPropertyWrapperExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/AppliedPropertyWrapperExpr.qll index 9aec2e17c3b..e0f95ba2a02 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/AppliedPropertyWrapperExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/AppliedPropertyWrapperExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class AppliedPropertyWrapperExprBase extends @applied_property_wrapper_expr, Expr { - override string toString() { result = "AppliedPropertyWrapperExpr" } + override string getPrimaryQlClass() { result = "AppliedPropertyWrapperExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ArchetypeToSuperExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ArchetypeToSuperExpr.qll index 51bcd473f69..e5123e26e53 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ArchetypeToSuperExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ArchetypeToSuperExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ArchetypeToSuperExprBase extends @archetype_to_super_expr, ImplicitConversionExpr { - override string toString() { result = "ArchetypeToSuperExpr" } + override string getPrimaryQlClass() { result = "ArchetypeToSuperExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/Argument.qll b/swift/ql/lib/codeql/swift/generated/expr/Argument.qll index e64f57b13f3..0a3cdae3a66 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/Argument.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/Argument.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.Element import codeql.swift.elements.expr.Expr class ArgumentBase extends @argument, Element { - override string toString() { result = "Argument" } + override string getPrimaryQlClass() { result = "Argument" } string getLabel() { arguments(this, result, _) } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ArrayExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ArrayExpr.qll index 74af871bc6b..6a9cddd47ce 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ArrayExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ArrayExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.CollectionExpr import codeql.swift.elements.expr.Expr class ArrayExprBase extends @array_expr, CollectionExpr { - override string toString() { result = "ArrayExpr" } + override string getPrimaryQlClass() { result = "ArrayExpr" } Expr getElement(int index) { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/ArrayToPointerExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ArrayToPointerExpr.qll index 9eb43a5eafe..3d1b8c96d79 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ArrayToPointerExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ArrayToPointerExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ArrayToPointerExprBase extends @array_to_pointer_expr, ImplicitConversionExpr { - override string toString() { result = "ArrayToPointerExpr" } + override string getPrimaryQlClass() { result = "ArrayToPointerExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ArrowExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ArrowExpr.qll index a42bf380eee..a8dc1d1c8fe 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ArrowExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ArrowExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class ArrowExprBase extends @arrow_expr, Expr { - override string toString() { result = "ArrowExpr" } + override string getPrimaryQlClass() { result = "ArrowExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/AssignExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/AssignExpr.qll index d5c4c81a42a..743a4de6cf0 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/AssignExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/AssignExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class AssignExprBase extends @assign_expr, Expr { - override string toString() { result = "AssignExpr" } + override string getPrimaryQlClass() { result = "AssignExpr" } Expr getDest() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/AutoClosureExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/AutoClosureExpr.qll index 4c31a494205..05cccdedea8 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/AutoClosureExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/AutoClosureExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.AbstractClosureExpr import codeql.swift.elements.stmt.BraceStmt class AutoClosureExprBase extends @auto_closure_expr, AbstractClosureExpr { - override string toString() { result = "AutoClosureExpr" } + override string getPrimaryQlClass() { result = "AutoClosureExpr" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/AwaitExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/AwaitExpr.qll index 73a79322d30..abb9a883381 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/AwaitExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/AwaitExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.IdentityExpr class AwaitExprBase extends @await_expr, IdentityExpr { - override string toString() { result = "AwaitExpr" } + override string getPrimaryQlClass() { result = "AwaitExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/BinaryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/BinaryExpr.qll index f30bfc9b2cd..e7a10adbc86 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/BinaryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/BinaryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ApplyExpr class BinaryExprBase extends @binary_expr, ApplyExpr { - override string toString() { result = "BinaryExpr" } + override string getPrimaryQlClass() { result = "BinaryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/BindOptionalExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/BindOptionalExpr.qll index 335cd5d4038..e66a617f7c5 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/BindOptionalExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/BindOptionalExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class BindOptionalExprBase extends @bind_optional_expr, Expr { - override string toString() { result = "BindOptionalExpr" } + override string getPrimaryQlClass() { result = "BindOptionalExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/BooleanLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/BooleanLiteralExpr.qll index 9eb96b658bb..98616ad15f3 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/BooleanLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/BooleanLiteralExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.BuiltinLiteralExpr class BooleanLiteralExprBase extends @boolean_literal_expr, BuiltinLiteralExpr { - override string toString() { result = "BooleanLiteralExpr" } + override string getPrimaryQlClass() { result = "BooleanLiteralExpr" } boolean getValue() { boolean_literal_exprs(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/BridgeFromObjCExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/BridgeFromObjCExpr.qll index 0494883b44f..6f5a6e38f4e 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/BridgeFromObjCExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/BridgeFromObjCExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class BridgeFromObjCExprBase extends @bridge_from_obj_c_expr, ImplicitConversionExpr { - override string toString() { result = "BridgeFromObjCExpr" } + override string getPrimaryQlClass() { result = "BridgeFromObjCExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/BridgeToObjCExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/BridgeToObjCExpr.qll index c880a148dab..39f31e77f55 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/BridgeToObjCExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/BridgeToObjCExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class BridgeToObjCExprBase extends @bridge_to_obj_c_expr, ImplicitConversionExpr { - override string toString() { result = "BridgeToObjCExpr" } + override string getPrimaryQlClass() { result = "BridgeToObjCExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CallExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CallExpr.qll index 3fa6f1eef40..6a3329711e6 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CallExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CallExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ApplyExpr class CallExprBase extends @call_expr, ApplyExpr { - override string toString() { result = "CallExpr" } + override string getPrimaryQlClass() { result = "CallExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CaptureListExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CaptureListExpr.qll index 6f7985c2098..76aac82934e 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CaptureListExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CaptureListExpr.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.decl.PatternBindingDecl class CaptureListExprBase extends @capture_list_expr, Expr { - override string toString() { result = "CaptureListExpr" } + override string getPrimaryQlClass() { result = "CaptureListExpr" } PatternBindingDecl getBindingDecl(int index) { exists(PatternBindingDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/ClassMetatypeToObjectExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ClassMetatypeToObjectExpr.qll index b06e736ec5b..ec91100ecde 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ClassMetatypeToObjectExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ClassMetatypeToObjectExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ClassMetatypeToObjectExprBase extends @class_metatype_to_object_expr, ImplicitConversionExpr { - override string toString() { result = "ClassMetatypeToObjectExpr" } + override string getPrimaryQlClass() { result = "ClassMetatypeToObjectExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ClosureExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ClosureExpr.qll index 97439eb8316..5e8022d348c 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ClosureExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ClosureExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.AbstractClosureExpr import codeql.swift.elements.stmt.BraceStmt class ClosureExprBase extends @closure_expr, AbstractClosureExpr { - override string toString() { result = "ClosureExpr" } + override string getPrimaryQlClass() { result = "ClosureExpr" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/CodeCompletionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CodeCompletionExpr.qll index 31653297bde..34b3bb695b6 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CodeCompletionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CodeCompletionExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class CodeCompletionExprBase extends @code_completion_expr, Expr { - override string toString() { result = "CodeCompletionExpr" } + override string getPrimaryQlClass() { result = "CodeCompletionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CoerceExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CoerceExpr.qll index 4d7df95eb6b..90db24a184b 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CoerceExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CoerceExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ExplicitCastExpr class CoerceExprBase extends @coerce_expr, ExplicitCastExpr { - override string toString() { result = "CoerceExpr" } + override string getPrimaryQlClass() { result = "CoerceExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CollectionUpcastConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CollectionUpcastConversionExpr.qll index 434261d6fc2..7e3bd15a64c 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CollectionUpcastConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CollectionUpcastConversionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class CollectionUpcastConversionExprBase extends @collection_upcast_conversion_expr, ImplicitConversionExpr { - override string toString() { result = "CollectionUpcastConversionExpr" } + override string getPrimaryQlClass() { result = "CollectionUpcastConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ConditionalBridgeFromObjCExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ConditionalBridgeFromObjCExpr.qll index dfdde979082..05a627f8274 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ConditionalBridgeFromObjCExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ConditionalBridgeFromObjCExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ConditionalBridgeFromObjCExprBase extends @conditional_bridge_from_obj_c_expr, ImplicitConversionExpr { - override string toString() { result = "ConditionalBridgeFromObjCExpr" } + override string getPrimaryQlClass() { result = "ConditionalBridgeFromObjCExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ConditionalCheckedCastExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ConditionalCheckedCastExpr.qll index 3a6ecc63714..bfc5a53cb8d 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ConditionalCheckedCastExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ConditionalCheckedCastExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.CheckedCastExpr class ConditionalCheckedCastExprBase extends @conditional_checked_cast_expr, CheckedCastExpr { - override string toString() { result = "ConditionalCheckedCastExpr" } + override string getPrimaryQlClass() { result = "ConditionalCheckedCastExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ConstructorRefCallExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ConstructorRefCallExpr.qll index cd573bd87d6..33d454916ca 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ConstructorRefCallExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ConstructorRefCallExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.SelfApplyExpr class ConstructorRefCallExprBase extends @constructor_ref_call_expr, SelfApplyExpr { - override string toString() { result = "ConstructorRefCallExpr" } + override string getPrimaryQlClass() { result = "ConstructorRefCallExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CovariantFunctionConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CovariantFunctionConversionExpr.qll index f641ee17558..1fec877c953 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CovariantFunctionConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CovariantFunctionConversionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class CovariantFunctionConversionExprBase extends @covariant_function_conversion_expr, ImplicitConversionExpr { - override string toString() { result = "CovariantFunctionConversionExpr" } + override string getPrimaryQlClass() { result = "CovariantFunctionConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CovariantReturnConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CovariantReturnConversionExpr.qll index 79b86e32eec..4e7199cdc33 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CovariantReturnConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CovariantReturnConversionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class CovariantReturnConversionExprBase extends @covariant_return_conversion_expr, ImplicitConversionExpr { - override string toString() { result = "CovariantReturnConversionExpr" } + override string getPrimaryQlClass() { result = "CovariantReturnConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DeclRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DeclRefExpr.qll index 08816d46d36..7093a892a74 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DeclRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DeclRefExpr.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.type.Type class DeclRefExprBase extends @decl_ref_expr, Expr { - override string toString() { result = "DeclRefExpr" } + override string getPrimaryQlClass() { result = "DeclRefExpr" } Decl getDecl() { exists(Decl x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/DefaultArgumentExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DefaultArgumentExpr.qll index a4954a6214b..6374fa961f9 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DefaultArgumentExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DefaultArgumentExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.decl.ParamDecl class DefaultArgumentExprBase extends @default_argument_expr, Expr { - override string toString() { result = "DefaultArgumentExpr" } + override string getPrimaryQlClass() { result = "DefaultArgumentExpr" } ParamDecl getParamDecl() { exists(ParamDecl x | @@ -20,4 +20,6 @@ class DefaultArgumentExprBase extends @default_argument_expr, Expr { result = x.resolve() ) } + + predicate hasCallerSideDefault() { exists(getCallerSideDefault()) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DerivedToBaseExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DerivedToBaseExpr.qll index 627944b988c..554eb512d5a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DerivedToBaseExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DerivedToBaseExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class DerivedToBaseExprBase extends @derived_to_base_expr, ImplicitConversionExpr { - override string toString() { result = "DerivedToBaseExpr" } + override string getPrimaryQlClass() { result = "DerivedToBaseExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DestructureTupleExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DestructureTupleExpr.qll index 7118ab2f2a0..b7b376b7f38 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DestructureTupleExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DestructureTupleExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class DestructureTupleExprBase extends @destructure_tuple_expr, ImplicitConversionExpr { - override string toString() { result = "DestructureTupleExpr" } + override string getPrimaryQlClass() { result = "DestructureTupleExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DictionaryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DictionaryExpr.qll index 8e9e896db3a..49fe6818051 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DictionaryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DictionaryExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.CollectionExpr import codeql.swift.elements.expr.Expr class DictionaryExprBase extends @dictionary_expr, CollectionExpr { - override string toString() { result = "DictionaryExpr" } + override string getPrimaryQlClass() { result = "DictionaryExpr" } Expr getElement(int index) { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExpr.qll index 47e6c0235aa..e864e68e73a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class DifferentiableFunctionExprBase extends @differentiable_function_expr, ImplicitConversionExpr { - override string toString() { result = "DifferentiableFunctionExpr" } + override string getPrimaryQlClass() { result = "DifferentiableFunctionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExtractOriginalExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExtractOriginalExpr.qll index c28b0947cbd..790877fa186 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExtractOriginalExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExtractOriginalExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class DifferentiableFunctionExtractOriginalExprBase extends @differentiable_function_extract_original_expr, ImplicitConversionExpr { - override string toString() { result = "DifferentiableFunctionExtractOriginalExpr" } + override string getPrimaryQlClass() { result = "DifferentiableFunctionExtractOriginalExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DiscardAssignmentExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DiscardAssignmentExpr.qll index 5d067a0450a..e9470dab89a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DiscardAssignmentExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DiscardAssignmentExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class DiscardAssignmentExprBase extends @discard_assignment_expr, Expr { - override string toString() { result = "DiscardAssignmentExpr" } + override string getPrimaryQlClass() { result = "DiscardAssignmentExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DotSelfExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DotSelfExpr.qll index 8ade301e4c6..8df593c6c84 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DotSelfExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DotSelfExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.IdentityExpr class DotSelfExprBase extends @dot_self_expr, IdentityExpr { - override string toString() { result = "DotSelfExpr" } + override string getPrimaryQlClass() { result = "DotSelfExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxBaseIgnoredExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxBaseIgnoredExpr.qll index aa1e4a8fd61..6a4f9148640 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxBaseIgnoredExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxBaseIgnoredExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class DotSyntaxBaseIgnoredExprBase extends @dot_syntax_base_ignored_expr, Expr { - override string toString() { result = "DotSyntaxBaseIgnoredExpr" } + override string getPrimaryQlClass() { result = "DotSyntaxBaseIgnoredExpr" } Expr getQualifier() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxCallExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxCallExpr.qll index 34eae4c9878..d5d2f53db6f 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxCallExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxCallExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.SelfApplyExpr class DotSyntaxCallExprBase extends @dot_syntax_call_expr, SelfApplyExpr { - override string toString() { result = "DotSyntaxCallExpr" } + override string getPrimaryQlClass() { result = "DotSyntaxCallExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DynamicMemberRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DynamicMemberRefExpr.qll index b7e0bcd60ef..b03992c2f89 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DynamicMemberRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DynamicMemberRefExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.DynamicLookupExpr class DynamicMemberRefExprBase extends @dynamic_member_ref_expr, DynamicLookupExpr { - override string toString() { result = "DynamicMemberRefExpr" } + override string getPrimaryQlClass() { result = "DynamicMemberRefExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DynamicSubscriptExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DynamicSubscriptExpr.qll index 9b6e61edd1e..f3ebf5db289 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DynamicSubscriptExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DynamicSubscriptExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.DynamicLookupExpr class DynamicSubscriptExprBase extends @dynamic_subscript_expr, DynamicLookupExpr { - override string toString() { result = "DynamicSubscriptExpr" } + override string getPrimaryQlClass() { result = "DynamicSubscriptExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DynamicTypeExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DynamicTypeExpr.qll index 6a2ea93be0f..651088dcdc7 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DynamicTypeExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DynamicTypeExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class DynamicTypeExprBase extends @dynamic_type_expr, Expr { - override string toString() { result = "DynamicTypeExpr" } + override string getPrimaryQlClass() { result = "DynamicTypeExpr" } Expr getBaseExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/EditorPlaceholderExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/EditorPlaceholderExpr.qll index 29018732f81..13b01ebe579 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/EditorPlaceholderExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/EditorPlaceholderExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class EditorPlaceholderExprBase extends @editor_placeholder_expr, Expr { - override string toString() { result = "EditorPlaceholderExpr" } + override string getPrimaryQlClass() { result = "EditorPlaceholderExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/EnumIsCaseExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/EnumIsCaseExpr.qll index a7ec82fb94a..7671d1fe187 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/EnumIsCaseExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/EnumIsCaseExpr.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.typerepr.TypeRepr class EnumIsCaseExprBase extends @enum_is_case_expr, Expr { - override string toString() { result = "EnumIsCaseExpr" } + override string getPrimaryQlClass() { result = "EnumIsCaseExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/ErasureExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ErasureExpr.qll index 68eeed8a6a1..8f4006a35d8 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ErasureExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ErasureExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ErasureExprBase extends @erasure_expr, ImplicitConversionExpr { - override string toString() { result = "ErasureExpr" } + override string getPrimaryQlClass() { result = "ErasureExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ErrorExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ErrorExpr.qll index b364ba3662f..c93afa1d20d 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ErrorExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ErrorExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class ErrorExprBase extends @error_expr, Expr { - override string toString() { result = "ErrorExpr" } + override string getPrimaryQlClass() { result = "ErrorExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ExistentialMetatypeToObjectExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ExistentialMetatypeToObjectExpr.qll index def4df70dc8..474ef8d876a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ExistentialMetatypeToObjectExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ExistentialMetatypeToObjectExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ExistentialMetatypeToObjectExprBase extends @existential_metatype_to_object_expr, ImplicitConversionExpr { - override string toString() { result = "ExistentialMetatypeToObjectExpr" } + override string getPrimaryQlClass() { result = "ExistentialMetatypeToObjectExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/Expr.qll b/swift/ql/lib/codeql/swift/generated/expr/Expr.qll index 77e18eecc4f..281d30988a9 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/Expr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/Expr.qll @@ -9,4 +9,6 @@ class ExprBase extends @expr, AstNode { result = x.resolve() ) } + + predicate hasType() { exists(getType()) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/FloatLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/FloatLiteralExpr.qll index d5a75020b59..d6355497331 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/FloatLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/FloatLiteralExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.NumberLiteralExpr class FloatLiteralExprBase extends @float_literal_expr, NumberLiteralExpr { - override string toString() { result = "FloatLiteralExpr" } + override string getPrimaryQlClass() { result = "FloatLiteralExpr" } string getStringValue() { float_literal_exprs(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ForceTryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ForceTryExpr.qll index 6e79e8b9d0c..077dff2565a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ForceTryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ForceTryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.AnyTryExpr class ForceTryExprBase extends @force_try_expr, AnyTryExpr { - override string toString() { result = "ForceTryExpr" } + override string getPrimaryQlClass() { result = "ForceTryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ForceValueExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ForceValueExpr.qll index 9740fce5b07..a5af8ecd64f 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ForceValueExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ForceValueExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class ForceValueExprBase extends @force_value_expr, Expr { - override string toString() { result = "ForceValueExpr" } + override string getPrimaryQlClass() { result = "ForceValueExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/ForcedCheckedCastExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ForcedCheckedCastExpr.qll index 62712596d93..cbcd27323ca 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ForcedCheckedCastExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ForcedCheckedCastExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.CheckedCastExpr class ForcedCheckedCastExprBase extends @forced_checked_cast_expr, CheckedCastExpr { - override string toString() { result = "ForcedCheckedCastExpr" } + override string getPrimaryQlClass() { result = "ForcedCheckedCastExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ForeignObjectConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ForeignObjectConversionExpr.qll index 1a04dc63a00..685cb980165 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ForeignObjectConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ForeignObjectConversionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ForeignObjectConversionExprBase extends @foreign_object_conversion_expr, ImplicitConversionExpr { - override string toString() { result = "ForeignObjectConversionExpr" } + override string getPrimaryQlClass() { result = "ForeignObjectConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/FunctionConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/FunctionConversionExpr.qll index cefeacb56c9..e996cea15c1 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/FunctionConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/FunctionConversionExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class FunctionConversionExprBase extends @function_conversion_expr, ImplicitConversionExpr { - override string toString() { result = "FunctionConversionExpr" } + override string getPrimaryQlClass() { result = "FunctionConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/IfExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/IfExpr.qll index ffba0002a9e..491d4c4b315 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/IfExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/IfExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class IfExprBase extends @if_expr, Expr { - override string toString() { result = "IfExpr" } + override string getPrimaryQlClass() { result = "IfExpr" } Expr getCondition() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/InOutExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/InOutExpr.qll index 9d8e2f89c5b..d54b02880dc 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/InOutExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/InOutExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class InOutExprBase extends @in_out_expr, Expr { - override string toString() { result = "InOutExpr" } + override string getPrimaryQlClass() { result = "InOutExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/InOutToPointerExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/InOutToPointerExpr.qll index c1c4775f0dc..19b8a0c8feb 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/InOutToPointerExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/InOutToPointerExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class InOutToPointerExprBase extends @in_out_to_pointer_expr, ImplicitConversionExpr { - override string toString() { result = "InOutToPointerExpr" } + override string getPrimaryQlClass() { result = "InOutToPointerExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/InjectIntoOptionalExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/InjectIntoOptionalExpr.qll index 98186826917..af91274bdad 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/InjectIntoOptionalExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/InjectIntoOptionalExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class InjectIntoOptionalExprBase extends @inject_into_optional_expr, ImplicitConversionExpr { - override string toString() { result = "InjectIntoOptionalExpr" } + override string getPrimaryQlClass() { result = "InjectIntoOptionalExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/IntegerLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/IntegerLiteralExpr.qll index 61e309fc20c..2599e9926ee 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/IntegerLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/IntegerLiteralExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.NumberLiteralExpr class IntegerLiteralExprBase extends @integer_literal_expr, NumberLiteralExpr { - override string toString() { result = "IntegerLiteralExpr" } + override string getPrimaryQlClass() { result = "IntegerLiteralExpr" } string getStringValue() { integer_literal_exprs(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/InterpolatedStringLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/InterpolatedStringLiteralExpr.qll index d3d5f922f45..74e9062c995 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/InterpolatedStringLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/InterpolatedStringLiteralExpr.qll @@ -5,7 +5,7 @@ import codeql.swift.elements.expr.OpaqueValueExpr import codeql.swift.elements.expr.TapExpr class InterpolatedStringLiteralExprBase extends @interpolated_string_literal_expr, LiteralExpr { - override string toString() { result = "InterpolatedStringLiteralExpr" } + override string getPrimaryQlClass() { result = "InterpolatedStringLiteralExpr" } OpaqueValueExpr getInterpolationExpr() { exists(OpaqueValueExpr x | @@ -14,6 +14,8 @@ class InterpolatedStringLiteralExprBase extends @interpolated_string_literal_exp ) } + predicate hasInterpolationExpr() { exists(getInterpolationExpr()) } + Expr getInterpolationCountExpr() { exists(Expr x | interpolated_string_literal_expr_interpolation_count_exprs(this, x) and @@ -21,6 +23,8 @@ class InterpolatedStringLiteralExprBase extends @interpolated_string_literal_exp ) } + predicate hasInterpolationCountExpr() { exists(getInterpolationCountExpr()) } + Expr getLiteralCapacityExpr() { exists(Expr x | interpolated_string_literal_expr_literal_capacity_exprs(this, x) and @@ -28,10 +32,14 @@ class InterpolatedStringLiteralExprBase extends @interpolated_string_literal_exp ) } + predicate hasLiteralCapacityExpr() { exists(getLiteralCapacityExpr()) } + TapExpr getAppendingExpr() { exists(TapExpr x | interpolated_string_literal_expr_appending_exprs(this, x) and result = x.resolve() ) } + + predicate hasAppendingExpr() { exists(getAppendingExpr()) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/IsExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/IsExpr.qll index 51af55eddb7..2591820191a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/IsExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/IsExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.CheckedCastExpr class IsExprBase extends @is_expr, CheckedCastExpr { - override string toString() { result = "IsExpr" } + override string getPrimaryQlClass() { result = "IsExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/KeyPathApplicationExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/KeyPathApplicationExpr.qll index ebf1276e749..920c4248f26 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/KeyPathApplicationExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/KeyPathApplicationExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class KeyPathApplicationExprBase extends @key_path_application_expr, Expr { - override string toString() { result = "KeyPathApplicationExpr" } + override string getPrimaryQlClass() { result = "KeyPathApplicationExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/KeyPathDotExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/KeyPathDotExpr.qll index 6e4281c7d97..ac04f37e7fe 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/KeyPathDotExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/KeyPathDotExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class KeyPathDotExprBase extends @key_path_dot_expr, Expr { - override string toString() { result = "KeyPathDotExpr" } + override string getPrimaryQlClass() { result = "KeyPathDotExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/KeyPathExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/KeyPathExpr.qll index 4801e957a8a..ccd1596a863 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/KeyPathExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/KeyPathExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class KeyPathExprBase extends @key_path_expr, Expr { - override string toString() { result = "KeyPathExpr" } + override string getPrimaryQlClass() { result = "KeyPathExpr" } Expr getParsedRoot() { exists(Expr x | @@ -11,10 +11,14 @@ class KeyPathExprBase extends @key_path_expr, Expr { ) } + predicate hasParsedRoot() { exists(getParsedRoot()) } + Expr getParsedPath() { exists(Expr x | key_path_expr_parsed_paths(this, x) and result = x.resolve() ) } + + predicate hasParsedPath() { exists(getParsedPath()) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/LazyInitializerExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/LazyInitializerExpr.qll index 8ea9da8246a..8f83e5efb42 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/LazyInitializerExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/LazyInitializerExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class LazyInitializerExprBase extends @lazy_initializer_expr, Expr { - override string toString() { result = "LazyInitializerExpr" } + override string getPrimaryQlClass() { result = "LazyInitializerExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExpr.qll index 7a7c68f3859..06e95f715fb 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class LinearFunctionExprBase extends @linear_function_expr, ImplicitConversionExpr { - override string toString() { result = "LinearFunctionExpr" } + override string getPrimaryQlClass() { result = "LinearFunctionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExtractOriginalExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExtractOriginalExpr.qll index 82fbb7f32ba..b16b4a6a800 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExtractOriginalExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExtractOriginalExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class LinearFunctionExtractOriginalExprBase extends @linear_function_extract_original_expr, ImplicitConversionExpr { - override string toString() { result = "LinearFunctionExtractOriginalExpr" } + override string getPrimaryQlClass() { result = "LinearFunctionExtractOriginalExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/LinearToDifferentiableFunctionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/LinearToDifferentiableFunctionExpr.qll index f936d79cd3e..6a9412cff81 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/LinearToDifferentiableFunctionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/LinearToDifferentiableFunctionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class LinearToDifferentiableFunctionExprBase extends @linear_to_differentiable_function_expr, ImplicitConversionExpr { - override string toString() { result = "LinearToDifferentiableFunctionExpr" } + override string getPrimaryQlClass() { result = "LinearToDifferentiableFunctionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/LoadExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/LoadExpr.qll index c2274d9b689..94e2e0419bb 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/LoadExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/LoadExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class LoadExprBase extends @load_expr, ImplicitConversionExpr { - override string toString() { result = "LoadExpr" } + override string getPrimaryQlClass() { result = "LoadExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/MagicIdentifierLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/MagicIdentifierLiteralExpr.qll index 43915a6ab5b..8518d632bad 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/MagicIdentifierLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/MagicIdentifierLiteralExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.BuiltinLiteralExpr class MagicIdentifierLiteralExprBase extends @magic_identifier_literal_expr, BuiltinLiteralExpr { - override string toString() { result = "MagicIdentifierLiteralExpr" } + override string getPrimaryQlClass() { result = "MagicIdentifierLiteralExpr" } string getKind() { magic_identifier_literal_exprs(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/MakeTemporarilyEscapableExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/MakeTemporarilyEscapableExpr.qll index 3244ef7a849..db856980eec 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/MakeTemporarilyEscapableExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/MakeTemporarilyEscapableExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.expr.OpaqueValueExpr class MakeTemporarilyEscapableExprBase extends @make_temporarily_escapable_expr, Expr { - override string toString() { result = "MakeTemporarilyEscapableExpr" } + override string getPrimaryQlClass() { result = "MakeTemporarilyEscapableExpr" } OpaqueValueExpr getEscapingClosure() { exists(OpaqueValueExpr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/MemberRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/MemberRefExpr.qll index aa453e1c705..dc8dd448bf7 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/MemberRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/MemberRefExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.expr.LookupExpr class MemberRefExprBase extends @member_ref_expr, LookupExpr { - override string toString() { result = "MemberRefExpr" } + override string getPrimaryQlClass() { result = "MemberRefExpr" } Expr getBaseExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/MetatypeConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/MetatypeConversionExpr.qll index 999afa62c9e..582ecef25ec 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/MetatypeConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/MetatypeConversionExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class MetatypeConversionExprBase extends @metatype_conversion_expr, ImplicitConversionExpr { - override string toString() { result = "MetatypeConversionExpr" } + override string getPrimaryQlClass() { result = "MetatypeConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/NilLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/NilLiteralExpr.qll index 836ce38d548..8a5ec080b28 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/NilLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/NilLiteralExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.LiteralExpr class NilLiteralExprBase extends @nil_literal_expr, LiteralExpr { - override string toString() { result = "NilLiteralExpr" } + override string getPrimaryQlClass() { result = "NilLiteralExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ObjCSelectorExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ObjCSelectorExpr.qll index 9d6cb2a924e..1d2f0e9d3a5 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ObjCSelectorExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ObjCSelectorExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.decl.AbstractFunctionDecl import codeql.swift.elements.expr.Expr class ObjCSelectorExprBase extends @obj_c_selector_expr, Expr { - override string toString() { result = "ObjCSelectorExpr" } + override string getPrimaryQlClass() { result = "ObjCSelectorExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/ObjectLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ObjectLiteralExpr.qll index 9aea71ce341..b195bd9abc4 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ObjectLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ObjectLiteralExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.LiteralExpr class ObjectLiteralExprBase extends @object_literal_expr, LiteralExpr { - override string toString() { result = "ObjectLiteralExpr" } + override string getPrimaryQlClass() { result = "ObjectLiteralExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/OneWayExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OneWayExpr.qll index 6bbd20b70b2..22cfa7726a7 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OneWayExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OneWayExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class OneWayExprBase extends @one_way_expr, Expr { - override string toString() { result = "OneWayExpr" } + override string getPrimaryQlClass() { result = "OneWayExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/OpaqueValueExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OpaqueValueExpr.qll index d88089457f1..ba56d0cf3ca 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OpaqueValueExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OpaqueValueExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class OpaqueValueExprBase extends @opaque_value_expr, Expr { - override string toString() { result = "OpaqueValueExpr" } + override string getPrimaryQlClass() { result = "OpaqueValueExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/OpenExistentialExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OpenExistentialExpr.qll index 647f258ce09..a8e8c335fd2 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OpenExistentialExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OpenExistentialExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.expr.OpaqueValueExpr class OpenExistentialExprBase extends @open_existential_expr, Expr { - override string toString() { result = "OpenExistentialExpr" } + override string getPrimaryQlClass() { result = "OpenExistentialExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/OptionalEvaluationExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OptionalEvaluationExpr.qll index df7bbbe5e27..1529d44ba6d 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OptionalEvaluationExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OptionalEvaluationExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class OptionalEvaluationExprBase extends @optional_evaluation_expr, Expr { - override string toString() { result = "OptionalEvaluationExpr" } + override string getPrimaryQlClass() { result = "OptionalEvaluationExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/OptionalTryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OptionalTryExpr.qll index 8657344eb55..b62e6fd2865 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OptionalTryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OptionalTryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.AnyTryExpr class OptionalTryExprBase extends @optional_try_expr, AnyTryExpr { - override string toString() { result = "OptionalTryExpr" } + override string getPrimaryQlClass() { result = "OptionalTryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/OtherConstructorDeclRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OtherConstructorDeclRefExpr.qll index c32da7fa5af..e4bf4398924 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OtherConstructorDeclRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OtherConstructorDeclRefExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class OtherConstructorDeclRefExprBase extends @other_constructor_decl_ref_expr, Expr { - override string toString() { result = "OtherConstructorDeclRefExpr" } + override string getPrimaryQlClass() { result = "OtherConstructorDeclRefExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/OverloadedDeclRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OverloadedDeclRefExpr.qll index bd93baa605f..3e40c2810a3 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OverloadedDeclRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OverloadedDeclRefExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.OverloadSetRefExpr class OverloadedDeclRefExprBase extends @overloaded_decl_ref_expr, OverloadSetRefExpr { - override string toString() { result = "OverloadedDeclRefExpr" } + override string getPrimaryQlClass() { result = "OverloadedDeclRefExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ParenExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ParenExpr.qll index 20ad4d97304..f6b18942e02 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ParenExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ParenExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.IdentityExpr class ParenExprBase extends @paren_expr, IdentityExpr { - override string toString() { result = "ParenExpr" } + override string getPrimaryQlClass() { result = "ParenExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/PointerToPointerExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/PointerToPointerExpr.qll index 649653c8c3e..9e292a0eb04 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/PointerToPointerExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/PointerToPointerExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class PointerToPointerExprBase extends @pointer_to_pointer_expr, ImplicitConversionExpr { - override string toString() { result = "PointerToPointerExpr" } + override string getPrimaryQlClass() { result = "PointerToPointerExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/PostfixUnaryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/PostfixUnaryExpr.qll index ce96c7bfc11..6be511150c7 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/PostfixUnaryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/PostfixUnaryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ApplyExpr class PostfixUnaryExprBase extends @postfix_unary_expr, ApplyExpr { - override string toString() { result = "PostfixUnaryExpr" } + override string getPrimaryQlClass() { result = "PostfixUnaryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/PrefixUnaryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/PrefixUnaryExpr.qll index ec122b5d785..ef31ea8acec 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/PrefixUnaryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/PrefixUnaryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ApplyExpr class PrefixUnaryExprBase extends @prefix_unary_expr, ApplyExpr { - override string toString() { result = "PrefixUnaryExpr" } + override string getPrimaryQlClass() { result = "PrefixUnaryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/PropertyWrapperValuePlaceholderExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/PropertyWrapperValuePlaceholderExpr.qll index 74ad001df53..51407fef64b 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/PropertyWrapperValuePlaceholderExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/PropertyWrapperValuePlaceholderExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class PropertyWrapperValuePlaceholderExprBase extends @property_wrapper_value_placeholder_expr, Expr { - override string toString() { result = "PropertyWrapperValuePlaceholderExpr" } + override string getPrimaryQlClass() { result = "PropertyWrapperValuePlaceholderExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ProtocolMetatypeToObjectExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ProtocolMetatypeToObjectExpr.qll index e2c4c5c25ac..33426b7ab11 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ProtocolMetatypeToObjectExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ProtocolMetatypeToObjectExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ProtocolMetatypeToObjectExprBase extends @protocol_metatype_to_object_expr, ImplicitConversionExpr { - override string toString() { result = "ProtocolMetatypeToObjectExpr" } + override string getPrimaryQlClass() { result = "ProtocolMetatypeToObjectExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/RebindSelfInConstructorExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/RebindSelfInConstructorExpr.qll index bed2006bb27..569160eb573 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/RebindSelfInConstructorExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/RebindSelfInConstructorExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.decl.VarDecl class RebindSelfInConstructorExprBase extends @rebind_self_in_constructor_expr, Expr { - override string toString() { result = "RebindSelfInConstructorExpr" } + override string getPrimaryQlClass() { result = "RebindSelfInConstructorExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/RegexLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/RegexLiteralExpr.qll index 8369264e316..00d524b7f5c 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/RegexLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/RegexLiteralExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.LiteralExpr class RegexLiteralExprBase extends @regex_literal_expr, LiteralExpr { - override string toString() { result = "RegexLiteralExpr" } + override string getPrimaryQlClass() { result = "RegexLiteralExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/SequenceExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/SequenceExpr.qll index 6de638ea809..0b1397147a1 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/SequenceExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/SequenceExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class SequenceExprBase extends @sequence_expr, Expr { - override string toString() { result = "SequenceExpr" } + override string getPrimaryQlClass() { result = "SequenceExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/StringLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/StringLiteralExpr.qll index 3f9693ba780..beb1a71c829 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/StringLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/StringLiteralExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.BuiltinLiteralExpr class StringLiteralExprBase extends @string_literal_expr, BuiltinLiteralExpr { - override string toString() { result = "StringLiteralExpr" } + override string getPrimaryQlClass() { result = "StringLiteralExpr" } string getValue() { string_literal_exprs(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/StringToPointerExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/StringToPointerExpr.qll index 0a1d64dcc6f..19553c9936a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/StringToPointerExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/StringToPointerExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class StringToPointerExprBase extends @string_to_pointer_expr, ImplicitConversionExpr { - override string toString() { result = "StringToPointerExpr" } + override string getPrimaryQlClass() { result = "StringToPointerExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/SubscriptExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/SubscriptExpr.qll index 98f201103b8..98e07ecd25b 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/SubscriptExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/SubscriptExpr.qll @@ -5,7 +5,7 @@ import codeql.swift.elements.decl.GenericContext import codeql.swift.elements.expr.LookupExpr class SubscriptExprBase extends @subscript_expr, GenericContext, LookupExpr { - override string toString() { result = "SubscriptExpr" } + override string getPrimaryQlClass() { result = "SubscriptExpr" } Expr getBaseExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/SuperRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/SuperRefExpr.qll index ec5c04c5a31..f8c6bfa740b 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/SuperRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/SuperRefExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.decl.VarDecl class SuperRefExprBase extends @super_ref_expr, Expr { - override string toString() { result = "SuperRefExpr" } + override string getPrimaryQlClass() { result = "SuperRefExpr" } VarDecl getSelf() { exists(VarDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/TapExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/TapExpr.qll index 4f537f65229..1dfc2c39bce 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/TapExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/TapExpr.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.decl.VarDecl class TapExprBase extends @tap_expr, Expr { - override string toString() { result = "TapExpr" } + override string getPrimaryQlClass() { result = "TapExpr" } Expr getSubExpr() { exists(Expr x | @@ -13,6 +13,8 @@ class TapExprBase extends @tap_expr, Expr { ) } + predicate hasSubExpr() { exists(getSubExpr()) } + VarDecl getVar() { exists(VarDecl x | tap_exprs(this, x, _) and diff --git a/swift/ql/lib/codeql/swift/generated/expr/TryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/TryExpr.qll index 06f1d82f37e..ccffde14675 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/TryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/TryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.AnyTryExpr class TryExprBase extends @try_expr, AnyTryExpr { - override string toString() { result = "TryExpr" } + override string getPrimaryQlClass() { result = "TryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/TupleElementExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/TupleElementExpr.qll index 4b3e0728ace..4f2e3b54a9c 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/TupleElementExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/TupleElementExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class TupleElementExprBase extends @tuple_element_expr, Expr { - override string toString() { result = "TupleElementExpr" } + override string getPrimaryQlClass() { result = "TupleElementExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/TupleExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/TupleExpr.qll index c3d6210299d..8024390f677 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/TupleExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/TupleExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class TupleExprBase extends @tuple_expr, Expr { - override string toString() { result = "TupleExpr" } + override string getPrimaryQlClass() { result = "TupleExpr" } Expr getElement(int index) { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/TypeExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/TypeExpr.qll index 584ad811cab..a26c599811c 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/TypeExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/TypeExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.typerepr.TypeRepr class TypeExprBase extends @type_expr, Expr { - override string toString() { result = "TypeExpr" } + override string getPrimaryQlClass() { result = "TypeExpr" } TypeRepr getTypeRepr() { exists(TypeRepr x | @@ -11,4 +11,6 @@ class TypeExprBase extends @type_expr, Expr { result = x.resolve() ) } + + predicate hasTypeRepr() { exists(getTypeRepr()) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnderlyingToOpaqueExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnderlyingToOpaqueExpr.qll index 710c357d689..9a423be665f 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnderlyingToOpaqueExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnderlyingToOpaqueExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class UnderlyingToOpaqueExprBase extends @underlying_to_opaque_expr, ImplicitConversionExpr { - override string toString() { result = "UnderlyingToOpaqueExpr" } + override string getPrimaryQlClass() { result = "UnderlyingToOpaqueExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnevaluatedInstanceExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnevaluatedInstanceExpr.qll index 4aec9923cf5..c64186f12ef 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnevaluatedInstanceExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnevaluatedInstanceExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class UnevaluatedInstanceExprBase extends @unevaluated_instance_expr, ImplicitConversionExpr { - override string toString() { result = "UnevaluatedInstanceExpr" } + override string getPrimaryQlClass() { result = "UnevaluatedInstanceExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDeclRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDeclRefExpr.qll index c3f7ed0f5b1..57a3e87d235 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDeclRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDeclRefExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class UnresolvedDeclRefExprBase extends @unresolved_decl_ref_expr, Expr { - override string toString() { result = "UnresolvedDeclRefExpr" } + override string getPrimaryQlClass() { result = "UnresolvedDeclRefExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDotExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDotExpr.qll index e77552916bc..96db0e895ce 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDotExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDotExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class UnresolvedDotExprBase extends @unresolved_dot_expr, Expr { - override string toString() { result = "UnresolvedDotExpr" } + override string getPrimaryQlClass() { result = "UnresolvedDotExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberChainResultExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberChainResultExpr.qll index b2021ed8e60..a2da6922c26 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberChainResultExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberChainResultExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.IdentityExpr class UnresolvedMemberChainResultExprBase extends @unresolved_member_chain_result_expr, IdentityExpr { - override string toString() { result = "UnresolvedMemberChainResultExpr" } + override string getPrimaryQlClass() { result = "UnresolvedMemberChainResultExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberExpr.qll index 5591495d7c4..2d5f737f294 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class UnresolvedMemberExprBase extends @unresolved_member_expr, Expr { - override string toString() { result = "UnresolvedMemberExpr" } + override string getPrimaryQlClass() { result = "UnresolvedMemberExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedPatternExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedPatternExpr.qll index ea903e736b9..5d2e88636c8 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedPatternExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedPatternExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class UnresolvedPatternExprBase extends @unresolved_pattern_expr, Expr { - override string toString() { result = "UnresolvedPatternExpr" } + override string getPrimaryQlClass() { result = "UnresolvedPatternExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedSpecializeExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedSpecializeExpr.qll index 25d0c998c88..e61e89739b1 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedSpecializeExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedSpecializeExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class UnresolvedSpecializeExprBase extends @unresolved_specialize_expr, Expr { - override string toString() { result = "UnresolvedSpecializeExpr" } + override string getPrimaryQlClass() { result = "UnresolvedSpecializeExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedTypeConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedTypeConversionExpr.qll index 4878b79873e..ac24c0426ad 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedTypeConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedTypeConversionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class UnresolvedTypeConversionExprBase extends @unresolved_type_conversion_expr, ImplicitConversionExpr { - override string toString() { result = "UnresolvedTypeConversionExpr" } + override string getPrimaryQlClass() { result = "UnresolvedTypeConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/VarargExpansionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/VarargExpansionExpr.qll index c420ef75619..6061852d7ca 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/VarargExpansionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/VarargExpansionExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class VarargExpansionExprBase extends @vararg_expansion_expr, Expr { - override string toString() { result = "VarargExpansionExpr" } + override string getPrimaryQlClass() { result = "VarargExpansionExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/AnyPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/AnyPattern.qll index 04868020580..f211968136c 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/AnyPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/AnyPattern.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.pattern.Pattern class AnyPatternBase extends @any_pattern, Pattern { - override string toString() { result = "AnyPattern" } + override string getPrimaryQlClass() { result = "AnyPattern" } } diff --git a/swift/ql/lib/codeql/swift/generated/pattern/BindingPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/BindingPattern.qll index 02446bb7729..748c71fddb8 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/BindingPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/BindingPattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class BindingPatternBase extends @binding_pattern, Pattern { - override string toString() { result = "BindingPattern" } + override string getPrimaryQlClass() { result = "BindingPattern" } Pattern getSubPattern() { exists(Pattern x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/BoolPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/BoolPattern.qll index b533d9243eb..cc4902320c4 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/BoolPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/BoolPattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class BoolPatternBase extends @bool_pattern, Pattern { - override string toString() { result = "BoolPattern" } + override string getPrimaryQlClass() { result = "BoolPattern" } boolean getValue() { bool_patterns(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/pattern/EnumElementPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/EnumElementPattern.qll index fb7ade93a8b..1f9a27886b4 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/EnumElementPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/EnumElementPattern.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.decl.EnumElementDecl import codeql.swift.elements.pattern.Pattern class EnumElementPatternBase extends @enum_element_pattern, Pattern { - override string toString() { result = "EnumElementPattern" } + override string getPrimaryQlClass() { result = "EnumElementPattern" } EnumElementDecl getElement() { exists(EnumElementDecl x | @@ -18,4 +18,6 @@ class EnumElementPatternBase extends @enum_element_pattern, Pattern { result = x.resolve() ) } + + predicate hasSubPattern() { exists(getSubPattern()) } } diff --git a/swift/ql/lib/codeql/swift/generated/pattern/ExprPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/ExprPattern.qll index 2114614f348..49946d7bc59 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/ExprPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/ExprPattern.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.pattern.Pattern class ExprPatternBase extends @expr_pattern, Pattern { - override string toString() { result = "ExprPattern" } + override string getPrimaryQlClass() { result = "ExprPattern" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/IsPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/IsPattern.qll index dda92156f27..d491a253c28 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/IsPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/IsPattern.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.pattern.Pattern import codeql.swift.elements.typerepr.TypeRepr class IsPatternBase extends @is_pattern, Pattern { - override string toString() { result = "IsPattern" } + override string getPrimaryQlClass() { result = "IsPattern" } TypeRepr getCastTypeRepr() { exists(TypeRepr x | @@ -12,10 +12,14 @@ class IsPatternBase extends @is_pattern, Pattern { ) } + predicate hasCastTypeRepr() { exists(getCastTypeRepr()) } + Pattern getSubPattern() { exists(Pattern x | is_pattern_sub_patterns(this, x) and result = x.resolve() ) } + + predicate hasSubPattern() { exists(getSubPattern()) } } diff --git a/swift/ql/lib/codeql/swift/generated/pattern/NamedPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/NamedPattern.qll index 833474b11e9..d7d43f0b738 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/NamedPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/NamedPattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class NamedPatternBase extends @named_pattern, Pattern { - override string toString() { result = "NamedPattern" } + override string getPrimaryQlClass() { result = "NamedPattern" } string getName() { named_patterns(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/pattern/OptionalSomePattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/OptionalSomePattern.qll index bd205e2fe1d..0ca8700175b 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/OptionalSomePattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/OptionalSomePattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class OptionalSomePatternBase extends @optional_some_pattern, Pattern { - override string toString() { result = "OptionalSomePattern" } + override string getPrimaryQlClass() { result = "OptionalSomePattern" } Pattern getSubPattern() { exists(Pattern x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/ParenPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/ParenPattern.qll index f3ddab4b9dd..815df89026c 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/ParenPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/ParenPattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class ParenPatternBase extends @paren_pattern, Pattern { - override string toString() { result = "ParenPattern" } + override string getPrimaryQlClass() { result = "ParenPattern" } Pattern getSubPattern() { exists(Pattern x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/TuplePattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/TuplePattern.qll index f1de477cc55..86aad12c87d 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/TuplePattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/TuplePattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class TuplePatternBase extends @tuple_pattern, Pattern { - override string toString() { result = "TuplePattern" } + override string getPrimaryQlClass() { result = "TuplePattern" } Pattern getElement(int index) { exists(Pattern x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/TypedPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/TypedPattern.qll index e86ca301fdc..8eeb3f95744 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/TypedPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/TypedPattern.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.pattern.Pattern import codeql.swift.elements.typerepr.TypeRepr class TypedPatternBase extends @typed_pattern, Pattern { - override string toString() { result = "TypedPattern" } + override string getPrimaryQlClass() { result = "TypedPattern" } Pattern getSubPattern() { exists(Pattern x | @@ -18,4 +18,6 @@ class TypedPatternBase extends @typed_pattern, Pattern { result = x.resolve() ) } + + predicate hasTypeRepr() { exists(getTypeRepr()) } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/BraceStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/BraceStmt.qll index 6515d0ac26a..4195c11a226 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/BraceStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/BraceStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.AstNode import codeql.swift.elements.stmt.Stmt class BraceStmtBase extends @brace_stmt, Stmt { - override string toString() { result = "BraceStmt" } + override string getPrimaryQlClass() { result = "BraceStmt" } AstNode getElement(int index) { exists(AstNode x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/BreakStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/BreakStmt.qll index d0e0a84c59d..34e6913e79d 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/BreakStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/BreakStmt.qll @@ -2,14 +2,18 @@ import codeql.swift.elements.stmt.Stmt class BreakStmtBase extends @break_stmt, Stmt { - override string toString() { result = "BreakStmt" } + override string getPrimaryQlClass() { result = "BreakStmt" } string getTargetName() { break_stmt_target_names(this, result) } + predicate hasTargetName() { exists(getTargetName()) } + Stmt getTarget() { exists(Stmt x | break_stmt_targets(this, x) and result = x.resolve() ) } + + predicate hasTarget() { exists(getTarget()) } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/CaseLabelItem.qll b/swift/ql/lib/codeql/swift/generated/stmt/CaseLabelItem.qll index f5f9680ed6c..9f51f7da38f 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/CaseLabelItem.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/CaseLabelItem.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.pattern.Pattern class CaseLabelItemBase extends @case_label_item, AstNode { - override string toString() { result = "CaseLabelItem" } + override string getPrimaryQlClass() { result = "CaseLabelItem" } Pattern getPattern() { exists(Pattern x | @@ -19,4 +19,6 @@ class CaseLabelItemBase extends @case_label_item, AstNode { result = x.resolve() ) } + + predicate hasGuard() { exists(getGuard()) } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/CaseStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/CaseStmt.qll index 030a0236c07..738fca6ae43 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/CaseStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/CaseStmt.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.stmt.Stmt import codeql.swift.elements.decl.VarDecl class CaseStmtBase extends @case_stmt, Stmt { - override string toString() { result = "CaseStmt" } + override string getPrimaryQlClass() { result = "CaseStmt" } Stmt getBody() { exists(Stmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ConditionElement.qll b/swift/ql/lib/codeql/swift/generated/stmt/ConditionElement.qll index c704c8f2710..efde6e9a5e7 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/ConditionElement.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/ConditionElement.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.Locatable import codeql.swift.elements.pattern.Pattern class ConditionElementBase extends @condition_element, Locatable { - override string toString() { result = "ConditionElement" } + override string getPrimaryQlClass() { result = "ConditionElement" } Expr getBoolean() { exists(Expr x | @@ -13,6 +13,8 @@ class ConditionElementBase extends @condition_element, Locatable { ) } + predicate hasBoolean() { exists(getBoolean()) } + Pattern getPattern() { exists(Pattern x | condition_element_patterns(this, x) and @@ -20,10 +22,14 @@ class ConditionElementBase extends @condition_element, Locatable { ) } + predicate hasPattern() { exists(getPattern()) } + Expr getInitializer() { exists(Expr x | condition_element_initializers(this, x) and result = x.resolve() ) } + + predicate hasInitializer() { exists(getInitializer()) } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ContinueStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/ContinueStmt.qll index 0c616fc659a..1c03ce6521b 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/ContinueStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/ContinueStmt.qll @@ -2,14 +2,18 @@ import codeql.swift.elements.stmt.Stmt class ContinueStmtBase extends @continue_stmt, Stmt { - override string toString() { result = "ContinueStmt" } + override string getPrimaryQlClass() { result = "ContinueStmt" } string getTargetName() { continue_stmt_target_names(this, result) } + predicate hasTargetName() { exists(getTargetName()) } + Stmt getTarget() { exists(Stmt x | continue_stmt_targets(this, x) and result = x.resolve() ) } + + predicate hasTarget() { exists(getTarget()) } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/DeferStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/DeferStmt.qll index cbf703972f5..910b18c233d 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/DeferStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/DeferStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.BraceStmt import codeql.swift.elements.stmt.Stmt class DeferStmtBase extends @defer_stmt, Stmt { - override string toString() { result = "DeferStmt" } + override string getPrimaryQlClass() { result = "DeferStmt" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/DoCatchStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/DoCatchStmt.qll index 92d2664af0d..56f8224b98a 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/DoCatchStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/DoCatchStmt.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.stmt.LabeledStmt import codeql.swift.elements.stmt.Stmt class DoCatchStmtBase extends @do_catch_stmt, LabeledStmt { - override string toString() { result = "DoCatchStmt" } + override string getPrimaryQlClass() { result = "DoCatchStmt" } Stmt getBody() { exists(Stmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/DoStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/DoStmt.qll index d3b3964c13f..7cfa724b1e6 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/DoStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/DoStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.BraceStmt import codeql.swift.elements.stmt.LabeledStmt class DoStmtBase extends @do_stmt, LabeledStmt { - override string toString() { result = "DoStmt" } + override string getPrimaryQlClass() { result = "DoStmt" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/FailStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/FailStmt.qll index b045005cb7f..dc5ce43c903 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/FailStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/FailStmt.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.stmt.Stmt class FailStmtBase extends @fail_stmt, Stmt { - override string toString() { result = "FailStmt" } + override string getPrimaryQlClass() { result = "FailStmt" } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/FallthroughStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/FallthroughStmt.qll index beac80ab918..1adfbbd972f 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/FallthroughStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/FallthroughStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.CaseStmt import codeql.swift.elements.stmt.Stmt class FallthroughStmtBase extends @fallthrough_stmt, Stmt { - override string toString() { result = "FallthroughStmt" } + override string getPrimaryQlClass() { result = "FallthroughStmt" } CaseStmt getFallthroughSource() { exists(CaseStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ForEachStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/ForEachStmt.qll index b0a1e357d57..ad1fb14ee8e 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/ForEachStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/ForEachStmt.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.stmt.LabeledStmt class ForEachStmtBase extends @for_each_stmt, LabeledStmt { - override string toString() { result = "ForEachStmt" } + override string getPrimaryQlClass() { result = "ForEachStmt" } BraceStmt getBody() { exists(BraceStmt x | @@ -26,4 +26,6 @@ class ForEachStmtBase extends @for_each_stmt, LabeledStmt { result = x.resolve() ) } + + predicate hasWhere() { exists(getWhere()) } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/GuardStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/GuardStmt.qll index a22da861807..933bd56b2df 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/GuardStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/GuardStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.BraceStmt import codeql.swift.elements.stmt.LabeledConditionalStmt class GuardStmtBase extends @guard_stmt, LabeledConditionalStmt { - override string toString() { result = "GuardStmt" } + override string getPrimaryQlClass() { result = "GuardStmt" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/IfStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/IfStmt.qll index e9030626766..381c2cc9097 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/IfStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/IfStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.LabeledConditionalStmt import codeql.swift.elements.stmt.Stmt class IfStmtBase extends @if_stmt, LabeledConditionalStmt { - override string toString() { result = "IfStmt" } + override string getPrimaryQlClass() { result = "IfStmt" } Stmt getThen() { exists(Stmt x | @@ -18,4 +18,6 @@ class IfStmtBase extends @if_stmt, LabeledConditionalStmt { result = x.resolve() ) } + + predicate hasElse() { exists(getElse()) } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/LabeledStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/LabeledStmt.qll index 6fcd47930dc..98374c9a5d2 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/LabeledStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/LabeledStmt.qll @@ -3,4 +3,6 @@ import codeql.swift.elements.stmt.Stmt class LabeledStmtBase extends @labeled_stmt, Stmt { string getLabel() { labeled_stmt_labels(this, result) } + + predicate hasLabel() { exists(getLabel()) } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/PoundAssertStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/PoundAssertStmt.qll index ccce691d3d7..9538899c285 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/PoundAssertStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/PoundAssertStmt.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.stmt.Stmt class PoundAssertStmtBase extends @pound_assert_stmt, Stmt { - override string toString() { result = "PoundAssertStmt" } + override string getPrimaryQlClass() { result = "PoundAssertStmt" } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/RepeatWhileStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/RepeatWhileStmt.qll index 291c0723ecf..688847947c8 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/RepeatWhileStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/RepeatWhileStmt.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.stmt.LabeledStmt import codeql.swift.elements.stmt.Stmt class RepeatWhileStmtBase extends @repeat_while_stmt, LabeledStmt { - override string toString() { result = "RepeatWhileStmt" } + override string getPrimaryQlClass() { result = "RepeatWhileStmt" } Expr getCondition() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ReturnStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/ReturnStmt.qll index 4bde758e9e8..167d1795d19 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/ReturnStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/ReturnStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.stmt.Stmt class ReturnStmtBase extends @return_stmt, Stmt { - override string toString() { result = "ReturnStmt" } + override string getPrimaryQlClass() { result = "ReturnStmt" } Expr getResult() { exists(Expr x | @@ -11,4 +11,6 @@ class ReturnStmtBase extends @return_stmt, Stmt { result = x.resolve() ) } + + predicate hasResult() { exists(getResult()) } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/StmtCondition.qll b/swift/ql/lib/codeql/swift/generated/stmt/StmtCondition.qll index 348cd6c564b..19e0614f192 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/StmtCondition.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/StmtCondition.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.AstNode import codeql.swift.elements.stmt.ConditionElement class StmtConditionBase extends @stmt_condition, AstNode { - override string toString() { result = "StmtCondition" } + override string getPrimaryQlClass() { result = "StmtCondition" } ConditionElement getElement(int index) { exists(ConditionElement x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/SwitchStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/SwitchStmt.qll index f137d7bd228..9bc1223aa59 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/SwitchStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/SwitchStmt.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.stmt.LabeledStmt class SwitchStmtBase extends @switch_stmt, LabeledStmt { - override string toString() { result = "SwitchStmt" } + override string getPrimaryQlClass() { result = "SwitchStmt" } Expr getExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ThrowStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/ThrowStmt.qll index 5f724780bd1..5d542ced5b0 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/ThrowStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/ThrowStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.stmt.Stmt class ThrowStmtBase extends @throw_stmt, Stmt { - override string toString() { result = "ThrowStmt" } + override string getPrimaryQlClass() { result = "ThrowStmt" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/WhileStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/WhileStmt.qll index 23a69ccfa36..e4a197593d6 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/WhileStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/WhileStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.LabeledConditionalStmt import codeql.swift.elements.stmt.Stmt class WhileStmtBase extends @while_stmt, LabeledConditionalStmt { - override string toString() { result = "WhileStmt" } + override string getPrimaryQlClass() { result = "WhileStmt" } Stmt getBody() { exists(Stmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/YieldStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/YieldStmt.qll index 6c94f2936f5..544fdd9751e 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/YieldStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/YieldStmt.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.stmt.Stmt class YieldStmtBase extends @yield_stmt, Stmt { - override string toString() { result = "YieldStmt" } + override string getPrimaryQlClass() { result = "YieldStmt" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/AnyGenericType.qll b/swift/ql/lib/codeql/swift/generated/type/AnyGenericType.qll index b366aac7496..41659bd5f08 100644 --- a/swift/ql/lib/codeql/swift/generated/type/AnyGenericType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/AnyGenericType.qll @@ -10,6 +10,8 @@ class AnyGenericTypeBase extends @any_generic_type, Type { ) } + predicate hasParent() { exists(getParent()) } + Decl getDeclaration() { exists(Decl x | any_generic_types(this, x) and diff --git a/swift/ql/lib/codeql/swift/generated/type/ArraySliceType.qll b/swift/ql/lib/codeql/swift/generated/type/ArraySliceType.qll index f72995035e0..2b029e0f741 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ArraySliceType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ArraySliceType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.UnarySyntaxSugarType class ArraySliceTypeBase extends @array_slice_type, UnarySyntaxSugarType { - override string toString() { result = "ArraySliceType" } + override string getPrimaryQlClass() { result = "ArraySliceType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BoundGenericClassType.qll b/swift/ql/lib/codeql/swift/generated/type/BoundGenericClassType.qll index 10838dc3cd4..d7bf09fddd2 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BoundGenericClassType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BoundGenericClassType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BoundGenericType class BoundGenericClassTypeBase extends @bound_generic_class_type, BoundGenericType { - override string toString() { result = "BoundGenericClassType" } + override string getPrimaryQlClass() { result = "BoundGenericClassType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BoundGenericEnumType.qll b/swift/ql/lib/codeql/swift/generated/type/BoundGenericEnumType.qll index fb47e1e1012..e73f964c395 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BoundGenericEnumType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BoundGenericEnumType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BoundGenericType class BoundGenericEnumTypeBase extends @bound_generic_enum_type, BoundGenericType { - override string toString() { result = "BoundGenericEnumType" } + override string getPrimaryQlClass() { result = "BoundGenericEnumType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BoundGenericStructType.qll b/swift/ql/lib/codeql/swift/generated/type/BoundGenericStructType.qll index 9c52908a7a0..1b7a82b165a 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BoundGenericStructType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BoundGenericStructType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BoundGenericType class BoundGenericStructTypeBase extends @bound_generic_struct_type, BoundGenericType { - override string toString() { result = "BoundGenericStructType" } + override string getPrimaryQlClass() { result = "BoundGenericStructType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinBridgeObjectType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinBridgeObjectType.qll index c39b9d3c0e0..d9d99ea7621 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinBridgeObjectType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinBridgeObjectType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinBridgeObjectTypeBase extends @builtin_bridge_object_type, BuiltinType { - override string toString() { result = "BuiltinBridgeObjectType" } + override string getPrimaryQlClass() { result = "BuiltinBridgeObjectType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinDefaultActorStorageType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinDefaultActorStorageType.qll index be8f5527ab0..88766c8a91b 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinDefaultActorStorageType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinDefaultActorStorageType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinDefaultActorStorageTypeBase extends @builtin_default_actor_storage_type, BuiltinType { - override string toString() { result = "BuiltinDefaultActorStorageType" } + override string getPrimaryQlClass() { result = "BuiltinDefaultActorStorageType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinExecutorType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinExecutorType.qll index 13c3c8a672a..fb49989bf5e 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinExecutorType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinExecutorType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinExecutorTypeBase extends @builtin_executor_type, BuiltinType { - override string toString() { result = "BuiltinExecutorType" } + override string getPrimaryQlClass() { result = "BuiltinExecutorType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinFloatType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinFloatType.qll index 03395bb5d3a..32b1244b0ef 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinFloatType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinFloatType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinFloatTypeBase extends @builtin_float_type, BuiltinType { - override string toString() { result = "BuiltinFloatType" } + override string getPrimaryQlClass() { result = "BuiltinFloatType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerLiteralType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerLiteralType.qll index e4eeb5f574c..2e61b1008cf 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerLiteralType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerLiteralType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyBuiltinIntegerType class BuiltinIntegerLiteralTypeBase extends @builtin_integer_literal_type, AnyBuiltinIntegerType { - override string toString() { result = "BuiltinIntegerLiteralType" } + override string getPrimaryQlClass() { result = "BuiltinIntegerLiteralType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerType.qll index 05d0adf5ac2..eaeb8656e7d 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyBuiltinIntegerType class BuiltinIntegerTypeBase extends @builtin_integer_type, AnyBuiltinIntegerType { - override string toString() { result = "BuiltinIntegerType" } + override string getPrimaryQlClass() { result = "BuiltinIntegerType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinJobType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinJobType.qll index ec226839e5e..f2e8fc76c73 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinJobType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinJobType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinJobTypeBase extends @builtin_job_type, BuiltinType { - override string toString() { result = "BuiltinJobType" } + override string getPrimaryQlClass() { result = "BuiltinJobType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinNativeObjectType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinNativeObjectType.qll index 6a8f75fe582..6382b94bc1b 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinNativeObjectType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinNativeObjectType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinNativeObjectTypeBase extends @builtin_native_object_type, BuiltinType { - override string toString() { result = "BuiltinNativeObjectType" } + override string getPrimaryQlClass() { result = "BuiltinNativeObjectType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinRawPointerType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinRawPointerType.qll index ebc8e11fdd0..f56d5921d30 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinRawPointerType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinRawPointerType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinRawPointerTypeBase extends @builtin_raw_pointer_type, BuiltinType { - override string toString() { result = "BuiltinRawPointerType" } + override string getPrimaryQlClass() { result = "BuiltinRawPointerType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinRawUnsafeContinuationType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinRawUnsafeContinuationType.qll index 82d6bdb8e05..d9edb49d4b3 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinRawUnsafeContinuationType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinRawUnsafeContinuationType.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinRawUnsafeContinuationTypeBase extends @builtin_raw_unsafe_continuation_type, BuiltinType { - override string toString() { result = "BuiltinRawUnsafeContinuationType" } + override string getPrimaryQlClass() { result = "BuiltinRawUnsafeContinuationType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinUnsafeValueBufferType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinUnsafeValueBufferType.qll index dcf5ad2cc99..02e200cb39e 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinUnsafeValueBufferType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinUnsafeValueBufferType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinUnsafeValueBufferTypeBase extends @builtin_unsafe_value_buffer_type, BuiltinType { - override string toString() { result = "BuiltinUnsafeValueBufferType" } + override string getPrimaryQlClass() { result = "BuiltinUnsafeValueBufferType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinVectorType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinVectorType.qll index 2a8e43f4d8f..3c1b612470f 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinVectorType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinVectorType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinVectorTypeBase extends @builtin_vector_type, BuiltinType { - override string toString() { result = "BuiltinVectorType" } + override string getPrimaryQlClass() { result = "BuiltinVectorType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ClassType.qll b/swift/ql/lib/codeql/swift/generated/type/ClassType.qll index 379c8a71aef..5fbb1ea181c 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ClassType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ClassType.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.decl.ClassDecl import codeql.swift.elements.type.NominalType class ClassTypeBase extends @class_type, NominalType { - override string toString() { result = "ClassType" } + override string getPrimaryQlClass() { result = "ClassType" } ClassDecl getDecl() { exists(ClassDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/type/DependentMemberType.qll b/swift/ql/lib/codeql/swift/generated/type/DependentMemberType.qll index 7a70d09dbef..9724322349c 100644 --- a/swift/ql/lib/codeql/swift/generated/type/DependentMemberType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/DependentMemberType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class DependentMemberTypeBase extends @dependent_member_type, Type { - override string toString() { result = "DependentMemberType" } + override string getPrimaryQlClass() { result = "DependentMemberType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/DictionaryType.qll b/swift/ql/lib/codeql/swift/generated/type/DictionaryType.qll index 30bd28f99c1..8c469221d6d 100644 --- a/swift/ql/lib/codeql/swift/generated/type/DictionaryType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/DictionaryType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.SyntaxSugarType class DictionaryTypeBase extends @dictionary_type, SyntaxSugarType { - override string toString() { result = "DictionaryType" } + override string getPrimaryQlClass() { result = "DictionaryType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/DynamicSelfType.qll b/swift/ql/lib/codeql/swift/generated/type/DynamicSelfType.qll index 5b1913db7c7..cc1bd77d0ca 100644 --- a/swift/ql/lib/codeql/swift/generated/type/DynamicSelfType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/DynamicSelfType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class DynamicSelfTypeBase extends @dynamic_self_type, Type { - override string toString() { result = "DynamicSelfType" } + override string getPrimaryQlClass() { result = "DynamicSelfType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/EnumType.qll b/swift/ql/lib/codeql/swift/generated/type/EnumType.qll index 5fd3d90acb4..67b35b77327 100644 --- a/swift/ql/lib/codeql/swift/generated/type/EnumType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/EnumType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.NominalType class EnumTypeBase extends @enum_type, NominalType { - override string toString() { result = "EnumType" } + override string getPrimaryQlClass() { result = "EnumType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ErrorType.qll b/swift/ql/lib/codeql/swift/generated/type/ErrorType.qll index 2d65d938f86..9ca5121caba 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ErrorType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ErrorType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class ErrorTypeBase extends @error_type, Type { - override string toString() { result = "ErrorType" } + override string getPrimaryQlClass() { result = "ErrorType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ExistentialMetatypeType.qll b/swift/ql/lib/codeql/swift/generated/type/ExistentialMetatypeType.qll index b84efeb003a..f833a4ecb9c 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ExistentialMetatypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ExistentialMetatypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyMetatypeType class ExistentialMetatypeTypeBase extends @existential_metatype_type, AnyMetatypeType { - override string toString() { result = "ExistentialMetatypeType" } + override string getPrimaryQlClass() { result = "ExistentialMetatypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ExistentialType.qll b/swift/ql/lib/codeql/swift/generated/type/ExistentialType.qll index 5f4ae535fdb..349c5f2cd64 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ExistentialType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ExistentialType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class ExistentialTypeBase extends @existential_type, Type { - override string toString() { result = "ExistentialType" } + override string getPrimaryQlClass() { result = "ExistentialType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/FunctionType.qll b/swift/ql/lib/codeql/swift/generated/type/FunctionType.qll index c2550ea442c..e5bd2a38e61 100644 --- a/swift/ql/lib/codeql/swift/generated/type/FunctionType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/FunctionType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyFunctionType class FunctionTypeBase extends @function_type, AnyFunctionType { - override string toString() { result = "FunctionType" } + override string getPrimaryQlClass() { result = "FunctionType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/GenericFunctionType.qll b/swift/ql/lib/codeql/swift/generated/type/GenericFunctionType.qll index cc3395146be..2094eabead8 100644 --- a/swift/ql/lib/codeql/swift/generated/type/GenericFunctionType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/GenericFunctionType.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.type.AnyFunctionType import codeql.swift.elements.type.GenericTypeParamType class GenericFunctionTypeBase extends @generic_function_type, AnyFunctionType { - override string toString() { result = "GenericFunctionType" } + override string getPrimaryQlClass() { result = "GenericFunctionType" } GenericTypeParamType getGenericParam(int index) { exists(GenericTypeParamType x | diff --git a/swift/ql/lib/codeql/swift/generated/type/GenericTypeParamType.qll b/swift/ql/lib/codeql/swift/generated/type/GenericTypeParamType.qll index de0a5c7c596..848b6ca728e 100644 --- a/swift/ql/lib/codeql/swift/generated/type/GenericTypeParamType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/GenericTypeParamType.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.type.SubstitutableType class GenericTypeParamTypeBase extends @generic_type_param_type, SubstitutableType { - override string toString() { result = "GenericTypeParamType" } + override string getPrimaryQlClass() { result = "GenericTypeParamType" } string getName() { generic_type_param_types(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/type/InOutType.qll b/swift/ql/lib/codeql/swift/generated/type/InOutType.qll index 17ff1407de2..dc0ed86c0f6 100644 --- a/swift/ql/lib/codeql/swift/generated/type/InOutType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/InOutType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class InOutTypeBase extends @in_out_type, Type { - override string toString() { result = "InOutType" } + override string getPrimaryQlClass() { result = "InOutType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/LValueType.qll b/swift/ql/lib/codeql/swift/generated/type/LValueType.qll index a7ede84558f..abba3937ddc 100644 --- a/swift/ql/lib/codeql/swift/generated/type/LValueType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/LValueType.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.type.Type class LValueTypeBase extends @l_value_type, Type { - override string toString() { result = "LValueType" } + override string getPrimaryQlClass() { result = "LValueType" } Type getObjectType() { exists(Type x | diff --git a/swift/ql/lib/codeql/swift/generated/type/MetatypeType.qll b/swift/ql/lib/codeql/swift/generated/type/MetatypeType.qll index 376fa39728b..73ecd90e57d 100644 --- a/swift/ql/lib/codeql/swift/generated/type/MetatypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/MetatypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyMetatypeType class MetatypeTypeBase extends @metatype_type, AnyMetatypeType { - override string toString() { result = "MetatypeType" } + override string getPrimaryQlClass() { result = "MetatypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ModuleType.qll b/swift/ql/lib/codeql/swift/generated/type/ModuleType.qll index a73ffdbf887..d3930e98f16 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ModuleType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ModuleType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class ModuleTypeBase extends @module_type, Type { - override string toString() { result = "ModuleType" } + override string getPrimaryQlClass() { result = "ModuleType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/NestedArchetypeType.qll b/swift/ql/lib/codeql/swift/generated/type/NestedArchetypeType.qll index 60a4b419321..dcbc5e37382 100644 --- a/swift/ql/lib/codeql/swift/generated/type/NestedArchetypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/NestedArchetypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ArchetypeType class NestedArchetypeTypeBase extends @nested_archetype_type, ArchetypeType { - override string toString() { result = "NestedArchetypeType" } + override string getPrimaryQlClass() { result = "NestedArchetypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/OpaqueTypeArchetypeType.qll b/swift/ql/lib/codeql/swift/generated/type/OpaqueTypeArchetypeType.qll index 4da709633ae..a891f5fa01c 100644 --- a/swift/ql/lib/codeql/swift/generated/type/OpaqueTypeArchetypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/OpaqueTypeArchetypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ArchetypeType class OpaqueTypeArchetypeTypeBase extends @opaque_type_archetype_type, ArchetypeType { - override string toString() { result = "OpaqueTypeArchetypeType" } + override string getPrimaryQlClass() { result = "OpaqueTypeArchetypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/OpenedArchetypeType.qll b/swift/ql/lib/codeql/swift/generated/type/OpenedArchetypeType.qll index 7fb6feee0df..8060c387cb3 100644 --- a/swift/ql/lib/codeql/swift/generated/type/OpenedArchetypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/OpenedArchetypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ArchetypeType class OpenedArchetypeTypeBase extends @opened_archetype_type, ArchetypeType { - override string toString() { result = "OpenedArchetypeType" } + override string getPrimaryQlClass() { result = "OpenedArchetypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/OptionalType.qll b/swift/ql/lib/codeql/swift/generated/type/OptionalType.qll index d30a2f46b3f..6a9002753ae 100644 --- a/swift/ql/lib/codeql/swift/generated/type/OptionalType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/OptionalType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.UnarySyntaxSugarType class OptionalTypeBase extends @optional_type, UnarySyntaxSugarType { - override string toString() { result = "OptionalType" } + override string getPrimaryQlClass() { result = "OptionalType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ParenType.qll b/swift/ql/lib/codeql/swift/generated/type/ParenType.qll index e0d49f5ff10..a1124af7033 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ParenType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ParenType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.SugarType class ParenTypeBase extends @paren_type, SugarType { - override string toString() { result = "ParenType" } + override string getPrimaryQlClass() { result = "ParenType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/PlaceholderType.qll b/swift/ql/lib/codeql/swift/generated/type/PlaceholderType.qll index f5534efe9cd..7f5e292d326 100644 --- a/swift/ql/lib/codeql/swift/generated/type/PlaceholderType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/PlaceholderType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class PlaceholderTypeBase extends @placeholder_type, Type { - override string toString() { result = "PlaceholderType" } + override string getPrimaryQlClass() { result = "PlaceholderType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/PrimaryArchetypeType.qll b/swift/ql/lib/codeql/swift/generated/type/PrimaryArchetypeType.qll index 0e71f5aca0e..2790cad235c 100644 --- a/swift/ql/lib/codeql/swift/generated/type/PrimaryArchetypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/PrimaryArchetypeType.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.type.ArchetypeType import codeql.swift.elements.type.GenericTypeParamType class PrimaryArchetypeTypeBase extends @primary_archetype_type, ArchetypeType { - override string toString() { result = "PrimaryArchetypeType" } + override string getPrimaryQlClass() { result = "PrimaryArchetypeType" } GenericTypeParamType getInterfaceType() { exists(GenericTypeParamType x | diff --git a/swift/ql/lib/codeql/swift/generated/type/ProtocolCompositionType.qll b/swift/ql/lib/codeql/swift/generated/type/ProtocolCompositionType.qll index 9bb043938aa..05f1e2217b2 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ProtocolCompositionType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ProtocolCompositionType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class ProtocolCompositionTypeBase extends @protocol_composition_type, Type { - override string toString() { result = "ProtocolCompositionType" } + override string getPrimaryQlClass() { result = "ProtocolCompositionType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ProtocolType.qll b/swift/ql/lib/codeql/swift/generated/type/ProtocolType.qll index f30992b60bc..1550e83b488 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ProtocolType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ProtocolType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.NominalType class ProtocolTypeBase extends @protocol_type, NominalType { - override string toString() { result = "ProtocolType" } + override string getPrimaryQlClass() { result = "ProtocolType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/SequenceArchetypeType.qll b/swift/ql/lib/codeql/swift/generated/type/SequenceArchetypeType.qll index 7b1b753d046..289a2e353a9 100644 --- a/swift/ql/lib/codeql/swift/generated/type/SequenceArchetypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/SequenceArchetypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ArchetypeType class SequenceArchetypeTypeBase extends @sequence_archetype_type, ArchetypeType { - override string toString() { result = "SequenceArchetypeType" } + override string getPrimaryQlClass() { result = "SequenceArchetypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/SilBlockStorageType.qll b/swift/ql/lib/codeql/swift/generated/type/SilBlockStorageType.qll index 3e76470b7db..2743a47444d 100644 --- a/swift/ql/lib/codeql/swift/generated/type/SilBlockStorageType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/SilBlockStorageType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class SilBlockStorageTypeBase extends @sil_block_storage_type, Type { - override string toString() { result = "SilBlockStorageType" } + override string getPrimaryQlClass() { result = "SilBlockStorageType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/SilBoxType.qll b/swift/ql/lib/codeql/swift/generated/type/SilBoxType.qll index c9372a2189e..26d6ef84f3b 100644 --- a/swift/ql/lib/codeql/swift/generated/type/SilBoxType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/SilBoxType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class SilBoxTypeBase extends @sil_box_type, Type { - override string toString() { result = "SilBoxType" } + override string getPrimaryQlClass() { result = "SilBoxType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/SilFunctionType.qll b/swift/ql/lib/codeql/swift/generated/type/SilFunctionType.qll index 06095435896..2299a4ea753 100644 --- a/swift/ql/lib/codeql/swift/generated/type/SilFunctionType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/SilFunctionType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class SilFunctionTypeBase extends @sil_function_type, Type { - override string toString() { result = "SilFunctionType" } + override string getPrimaryQlClass() { result = "SilFunctionType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/SilTokenType.qll b/swift/ql/lib/codeql/swift/generated/type/SilTokenType.qll index 0214692a3b0..ed988b86014 100644 --- a/swift/ql/lib/codeql/swift/generated/type/SilTokenType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/SilTokenType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class SilTokenTypeBase extends @sil_token_type, Type { - override string toString() { result = "SilTokenType" } + override string getPrimaryQlClass() { result = "SilTokenType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/StructType.qll b/swift/ql/lib/codeql/swift/generated/type/StructType.qll index 4a78562f4a4..3d23e210c59 100644 --- a/swift/ql/lib/codeql/swift/generated/type/StructType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/StructType.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.type.NominalType import codeql.swift.elements.decl.StructDecl class StructTypeBase extends @struct_type, NominalType { - override string toString() { result = "StructType" } + override string getPrimaryQlClass() { result = "StructType" } StructDecl getDecl() { exists(StructDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/type/TupleType.qll b/swift/ql/lib/codeql/swift/generated/type/TupleType.qll index 91adaf4038f..ba5b4c50e2c 100644 --- a/swift/ql/lib/codeql/swift/generated/type/TupleType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/TupleType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class TupleTypeBase extends @tuple_type, Type { - override string toString() { result = "TupleType" } + override string getPrimaryQlClass() { result = "TupleType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/TypeAliasType.qll b/swift/ql/lib/codeql/swift/generated/type/TypeAliasType.qll index 6807dc7b2a3..e5a5d8d5aba 100644 --- a/swift/ql/lib/codeql/swift/generated/type/TypeAliasType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/TypeAliasType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.SugarType class TypeAliasTypeBase extends @type_alias_type, SugarType { - override string toString() { result = "TypeAliasType" } + override string getPrimaryQlClass() { result = "TypeAliasType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/TypeVariableType.qll b/swift/ql/lib/codeql/swift/generated/type/TypeVariableType.qll index 85b8fb8c908..0714a59f039 100644 --- a/swift/ql/lib/codeql/swift/generated/type/TypeVariableType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/TypeVariableType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class TypeVariableTypeBase extends @type_variable_type, Type { - override string toString() { result = "TypeVariableType" } + override string getPrimaryQlClass() { result = "TypeVariableType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/UnboundGenericType.qll b/swift/ql/lib/codeql/swift/generated/type/UnboundGenericType.qll index e5cc43f760e..4d64e72720f 100644 --- a/swift/ql/lib/codeql/swift/generated/type/UnboundGenericType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/UnboundGenericType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyGenericType class UnboundGenericTypeBase extends @unbound_generic_type, AnyGenericType { - override string toString() { result = "UnboundGenericType" } + override string getPrimaryQlClass() { result = "UnboundGenericType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/UnknownType.qll b/swift/ql/lib/codeql/swift/generated/type/UnknownType.qll index b5c925c0f9e..9b3fe7eb0c0 100644 --- a/swift/ql/lib/codeql/swift/generated/type/UnknownType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/UnknownType.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.type.Type class UnknownTypeBase extends @unknown_type, Type { - override string toString() { result = "UnknownType" } + override string getPrimaryQlClass() { result = "UnknownType" } string getName() { unknown_types(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/type/UnmanagedStorageType.qll b/swift/ql/lib/codeql/swift/generated/type/UnmanagedStorageType.qll index 4ea8526ebb1..3171a6aec32 100644 --- a/swift/ql/lib/codeql/swift/generated/type/UnmanagedStorageType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/UnmanagedStorageType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ReferenceStorageType class UnmanagedStorageTypeBase extends @unmanaged_storage_type, ReferenceStorageType { - override string toString() { result = "UnmanagedStorageType" } + override string getPrimaryQlClass() { result = "UnmanagedStorageType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/UnownedStorageType.qll b/swift/ql/lib/codeql/swift/generated/type/UnownedStorageType.qll index 8cb1f8cd688..6e3c2f1bd23 100644 --- a/swift/ql/lib/codeql/swift/generated/type/UnownedStorageType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/UnownedStorageType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ReferenceStorageType class UnownedStorageTypeBase extends @unowned_storage_type, ReferenceStorageType { - override string toString() { result = "UnownedStorageType" } + override string getPrimaryQlClass() { result = "UnownedStorageType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/UnresolvedType.qll b/swift/ql/lib/codeql/swift/generated/type/UnresolvedType.qll index abab4e4a661..a88083914ef 100644 --- a/swift/ql/lib/codeql/swift/generated/type/UnresolvedType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/UnresolvedType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class UnresolvedTypeBase extends @unresolved_type, Type { - override string toString() { result = "UnresolvedType" } + override string getPrimaryQlClass() { result = "UnresolvedType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/VariadicSequenceType.qll b/swift/ql/lib/codeql/swift/generated/type/VariadicSequenceType.qll index 900b5a8821d..38c85d12a5e 100644 --- a/swift/ql/lib/codeql/swift/generated/type/VariadicSequenceType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/VariadicSequenceType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.UnarySyntaxSugarType class VariadicSequenceTypeBase extends @variadic_sequence_type, UnarySyntaxSugarType { - override string toString() { result = "VariadicSequenceType" } + override string getPrimaryQlClass() { result = "VariadicSequenceType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/WeakStorageType.qll b/swift/ql/lib/codeql/swift/generated/type/WeakStorageType.qll index 31a456058ca..3adb449b4bc 100644 --- a/swift/ql/lib/codeql/swift/generated/type/WeakStorageType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/WeakStorageType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ReferenceStorageType class WeakStorageTypeBase extends @weak_storage_type, ReferenceStorageType { - override string toString() { result = "WeakStorageType" } + override string getPrimaryQlClass() { result = "WeakStorageType" } } From bfabfc3601e90caf1a079cd4c14a94b860766883 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 10 May 2022 12:40:46 +0200 Subject: [PATCH 0429/1618] Data flow: Add `Configuration::includeHiddenNodes()` --- .../ruby/dataflow/internal/DataFlowImpl.qll | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { From 712fe002b9ac17e334f431d2fe8aaa4e798663c9 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 10 May 2022 12:41:10 +0200 Subject: [PATCH 0430/1618] Data flow: Sync files --- .../cpp/dataflow/internal/DataFlowImpl.qll | 21 ++++++++++++++----- .../cpp/dataflow/internal/DataFlowImpl2.qll | 21 ++++++++++++++----- .../cpp/dataflow/internal/DataFlowImpl3.qll | 21 ++++++++++++++----- .../cpp/dataflow/internal/DataFlowImpl4.qll | 21 ++++++++++++++----- .../dataflow/internal/DataFlowImplLocal.qll | 21 ++++++++++++++----- .../cpp/ir/dataflow/internal/DataFlowImpl.qll | 21 ++++++++++++++----- .../ir/dataflow/internal/DataFlowImpl2.qll | 21 ++++++++++++++----- .../ir/dataflow/internal/DataFlowImpl3.qll | 21 ++++++++++++++----- .../ir/dataflow/internal/DataFlowImpl4.qll | 21 ++++++++++++++----- .../csharp/dataflow/internal/DataFlowImpl.qll | 21 ++++++++++++++----- .../dataflow/internal/DataFlowImpl2.qll | 21 ++++++++++++++----- .../dataflow/internal/DataFlowImpl3.qll | 21 ++++++++++++++----- .../dataflow/internal/DataFlowImpl4.qll | 21 ++++++++++++++----- .../dataflow/internal/DataFlowImpl5.qll | 21 ++++++++++++++----- .../java/dataflow/internal/DataFlowImpl.qll | 21 ++++++++++++++----- .../java/dataflow/internal/DataFlowImpl2.qll | 21 ++++++++++++++----- .../java/dataflow/internal/DataFlowImpl3.qll | 21 ++++++++++++++----- .../java/dataflow/internal/DataFlowImpl4.qll | 21 ++++++++++++++----- .../java/dataflow/internal/DataFlowImpl5.qll | 21 ++++++++++++++----- .../java/dataflow/internal/DataFlowImpl6.qll | 21 ++++++++++++++----- .../DataFlowImplForOnActivityResult.qll | 21 ++++++++++++++----- .../DataFlowImplForSerializability.qll | 21 ++++++++++++++----- .../dataflow/new/internal/DataFlowImpl.qll | 21 ++++++++++++++----- .../dataflow/new/internal/DataFlowImpl2.qll | 21 ++++++++++++++----- .../dataflow/new/internal/DataFlowImpl3.qll | 21 ++++++++++++++----- .../dataflow/new/internal/DataFlowImpl4.qll | 21 ++++++++++++++----- .../ruby/dataflow/internal/DataFlowImpl2.qll | 21 ++++++++++++++----- .../internal/DataFlowImplForLibraries.qll | 21 ++++++++++++++----- 28 files changed, 448 insertions(+), 140 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl2.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl3.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImpl4.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll +++ b/cpp/ql/lib/semmle/code/cpp/dataflow/internal/DataFlowImplLocal.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl2.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl3.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowImpl4.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl2.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl3.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl4.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowImpl5.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl2.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl3.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl4.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl5.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImpl6.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForOnActivityResult.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowImplForSerializability.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl2.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl3.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll +++ b/python/ql/lib/semmle/python/dataflow/new/internal/DataFlowImpl4.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImpl2.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll index 89a35b00fa6..c0fdf294dd4 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowImplForLibraries.qll @@ -170,6 +170,14 @@ abstract class Configuration extends string { */ int explorationLimit() { none() } + /** + * Holds if hidden nodes should be included in the data flow graph. + * + * This feature should only be used for debugging or when the data flow graph + * is not visualized (for example in a `path-problem` query). + */ + predicate includeHiddenNodes() { none() } + /** * Holds if there is a partial data flow path from `source` to `node`. The * approximate distance between `node` and the closest source is `dist` and @@ -3815,11 +3823,14 @@ abstract private class PathNodeImpl extends PathNode { abstract NodeEx getNodeEx(); predicate isHidden() { - hiddenNode(this.getNodeEx().asNode()) and - not this.isSource() and - not this instanceof PathNodeSink - or - this.getNodeEx() instanceof TNodeImplicitRead + not this.getConfiguration().includeHiddenNodes() and + ( + hiddenNode(this.getNodeEx().asNode()) and + not this.isSource() and + not this instanceof PathNodeSink + or + this.getNodeEx() instanceof TNodeImplicitRead + ) } private string ppAp() { From bf71e4c50092c78365915808bf1b914c9c266a81 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 10 May 2022 12:42:18 +0200 Subject: [PATCH 0431/1618] Swift: getPrimaryQlClass -> getAPrimaryQlClass --- swift/codegen/templates/ql_class.mustache | 6 ++++-- swift/ql/lib/codeql/swift/generated/Element.qll | 4 +++- swift/ql/lib/codeql/swift/generated/File.qll | 2 +- swift/ql/lib/codeql/swift/generated/Location.qll | 2 +- swift/ql/lib/codeql/swift/generated/UnknownAstNode.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/AccessorDecl.qll | 2 +- .../lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/ClassDecl.qll | 2 +- .../ql/lib/codeql/swift/generated/decl/ConcreteFuncDecl.qll | 2 +- .../ql/lib/codeql/swift/generated/decl/ConcreteVarDecl.qll | 2 +- .../ql/lib/codeql/swift/generated/decl/ConstructorDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/DestructorDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/EnumCaseDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/EnumDecl.qll | 2 +- .../ql/lib/codeql/swift/generated/decl/EnumElementDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll | 2 +- .../codeql/swift/generated/decl/GenericTypeParamDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/IfConfigDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/ImportDecl.qll | 2 +- .../lib/codeql/swift/generated/decl/InfixOperatorDecl.qll | 2 +- .../lib/codeql/swift/generated/decl/MissingMemberDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/ModuleDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/OpaqueTypeDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/ParamDecl.qll | 2 +- .../lib/codeql/swift/generated/decl/PatternBindingDecl.qll | 2 +- .../lib/codeql/swift/generated/decl/PostfixOperatorDecl.qll | 2 +- .../lib/codeql/swift/generated/decl/PoundDiagnosticDecl.qll | 2 +- .../lib/codeql/swift/generated/decl/PrecedenceGroupDecl.qll | 2 +- .../lib/codeql/swift/generated/decl/PrefixOperatorDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/ProtocolDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/StructDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/SubscriptDecl.qll | 2 +- .../ql/lib/codeql/swift/generated/decl/TopLevelCodeDecl.qll | 2 +- swift/ql/lib/codeql/swift/generated/decl/TypeAliasDecl.qll | 2 +- .../codeql/swift/generated/expr/AnyHashableErasureExpr.qll | 2 +- .../swift/generated/expr/AppliedPropertyWrapperExpr.qll | 2 +- .../codeql/swift/generated/expr/ArchetypeToSuperExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/Argument.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/ArrayExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/ArrayToPointerExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/ArrowExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/AssignExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/AutoClosureExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/AwaitExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/BinaryExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/BindOptionalExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/BooleanLiteralExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/BridgeFromObjCExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/BridgeToObjCExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/CallExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/CaptureListExpr.qll | 2 +- .../swift/generated/expr/ClassMetatypeToObjectExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/ClosureExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/CodeCompletionExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/CoerceExpr.qll | 2 +- .../swift/generated/expr/CollectionUpcastConversionExpr.qll | 2 +- .../swift/generated/expr/ConditionalBridgeFromObjCExpr.qll | 2 +- .../swift/generated/expr/ConditionalCheckedCastExpr.qll | 2 +- .../codeql/swift/generated/expr/ConstructorRefCallExpr.qll | 2 +- .../generated/expr/CovariantFunctionConversionExpr.qll | 2 +- .../swift/generated/expr/CovariantReturnConversionExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/DeclRefExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/DefaultArgumentExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/DerivedToBaseExpr.qll | 2 +- .../codeql/swift/generated/expr/DestructureTupleExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/DictionaryExpr.qll | 2 +- .../swift/generated/expr/DifferentiableFunctionExpr.qll | 2 +- .../expr/DifferentiableFunctionExtractOriginalExpr.qll | 2 +- .../codeql/swift/generated/expr/DiscardAssignmentExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/DotSelfExpr.qll | 2 +- .../swift/generated/expr/DotSyntaxBaseIgnoredExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/DotSyntaxCallExpr.qll | 2 +- .../codeql/swift/generated/expr/DynamicMemberRefExpr.qll | 2 +- .../codeql/swift/generated/expr/DynamicSubscriptExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/DynamicTypeExpr.qll | 2 +- .../codeql/swift/generated/expr/EditorPlaceholderExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/EnumIsCaseExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/ErasureExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/ErrorExpr.qll | 2 +- .../generated/expr/ExistentialMetatypeToObjectExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/FloatLiteralExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/ForceTryExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/ForceValueExpr.qll | 2 +- .../codeql/swift/generated/expr/ForcedCheckedCastExpr.qll | 2 +- .../swift/generated/expr/ForeignObjectConversionExpr.qll | 2 +- .../codeql/swift/generated/expr/FunctionConversionExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/IfExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/InOutExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/InOutToPointerExpr.qll | 2 +- .../codeql/swift/generated/expr/InjectIntoOptionalExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/IntegerLiteralExpr.qll | 2 +- .../swift/generated/expr/InterpolatedStringLiteralExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/IsExpr.qll | 2 +- .../codeql/swift/generated/expr/KeyPathApplicationExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/KeyPathDotExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/KeyPathExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/LazyInitializerExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/LinearFunctionExpr.qll | 2 +- .../generated/expr/LinearFunctionExtractOriginalExpr.qll | 2 +- .../generated/expr/LinearToDifferentiableFunctionExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/LoadExpr.qll | 2 +- .../swift/generated/expr/MagicIdentifierLiteralExpr.qll | 2 +- .../swift/generated/expr/MakeTemporarilyEscapableExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/MemberRefExpr.qll | 2 +- .../codeql/swift/generated/expr/MetatypeConversionExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/NilLiteralExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/ObjCSelectorExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/ObjectLiteralExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/OneWayExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/OpaqueValueExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/OpenExistentialExpr.qll | 2 +- .../codeql/swift/generated/expr/OptionalEvaluationExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/OptionalTryExpr.qll | 2 +- .../swift/generated/expr/OtherConstructorDeclRefExpr.qll | 2 +- .../codeql/swift/generated/expr/OverloadedDeclRefExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/ParenExpr.qll | 2 +- .../codeql/swift/generated/expr/PointerToPointerExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/PostfixUnaryExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/PrefixUnaryExpr.qll | 2 +- .../generated/expr/PropertyWrapperValuePlaceholderExpr.qll | 2 +- .../swift/generated/expr/ProtocolMetatypeToObjectExpr.qll | 2 +- .../swift/generated/expr/RebindSelfInConstructorExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/RegexLiteralExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/SequenceExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/StringLiteralExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/StringToPointerExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/SubscriptExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/SuperRefExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/TapExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/TryExpr.qll | 2 +- .../ql/lib/codeql/swift/generated/expr/TupleElementExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/TupleExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/expr/TypeExpr.qll | 2 +- .../codeql/swift/generated/expr/UnderlyingToOpaqueExpr.qll | 2 +- .../codeql/swift/generated/expr/UnevaluatedInstanceExpr.qll | 2 +- .../codeql/swift/generated/expr/UnresolvedDeclRefExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/UnresolvedDotExpr.qll | 2 +- .../generated/expr/UnresolvedMemberChainResultExpr.qll | 2 +- .../codeql/swift/generated/expr/UnresolvedMemberExpr.qll | 2 +- .../codeql/swift/generated/expr/UnresolvedPatternExpr.qll | 2 +- .../swift/generated/expr/UnresolvedSpecializeExpr.qll | 2 +- .../swift/generated/expr/UnresolvedTypeConversionExpr.qll | 2 +- .../lib/codeql/swift/generated/expr/VarargExpansionExpr.qll | 2 +- swift/ql/lib/codeql/swift/generated/pattern/AnyPattern.qll | 2 +- .../lib/codeql/swift/generated/pattern/BindingPattern.qll | 2 +- swift/ql/lib/codeql/swift/generated/pattern/BoolPattern.qll | 2 +- .../codeql/swift/generated/pattern/EnumElementPattern.qll | 2 +- swift/ql/lib/codeql/swift/generated/pattern/ExprPattern.qll | 2 +- swift/ql/lib/codeql/swift/generated/pattern/IsPattern.qll | 2 +- .../ql/lib/codeql/swift/generated/pattern/NamedPattern.qll | 2 +- .../codeql/swift/generated/pattern/OptionalSomePattern.qll | 2 +- .../ql/lib/codeql/swift/generated/pattern/ParenPattern.qll | 2 +- .../ql/lib/codeql/swift/generated/pattern/TuplePattern.qll | 2 +- .../ql/lib/codeql/swift/generated/pattern/TypedPattern.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/BraceStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/BreakStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/CaseLabelItem.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/CaseStmt.qll | 2 +- .../ql/lib/codeql/swift/generated/stmt/ConditionElement.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/ContinueStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/DeferStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/DoCatchStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/DoStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/FailStmt.qll | 2 +- .../ql/lib/codeql/swift/generated/stmt/FallthroughStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/ForEachStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/GuardStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/IfStmt.qll | 2 +- .../ql/lib/codeql/swift/generated/stmt/PoundAssertStmt.qll | 2 +- .../ql/lib/codeql/swift/generated/stmt/RepeatWhileStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/ReturnStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/StmtCondition.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/SwitchStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/ThrowStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/WhileStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/stmt/YieldStmt.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/ArraySliceType.qll | 2 +- .../codeql/swift/generated/type/BoundGenericClassType.qll | 2 +- .../codeql/swift/generated/type/BoundGenericEnumType.qll | 2 +- .../codeql/swift/generated/type/BoundGenericStructType.qll | 2 +- .../codeql/swift/generated/type/BuiltinBridgeObjectType.qll | 2 +- .../swift/generated/type/BuiltinDefaultActorStorageType.qll | 2 +- .../lib/codeql/swift/generated/type/BuiltinExecutorType.qll | 2 +- .../ql/lib/codeql/swift/generated/type/BuiltinFloatType.qll | 2 +- .../swift/generated/type/BuiltinIntegerLiteralType.qll | 2 +- .../lib/codeql/swift/generated/type/BuiltinIntegerType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/BuiltinJobType.qll | 2 +- .../codeql/swift/generated/type/BuiltinNativeObjectType.qll | 2 +- .../codeql/swift/generated/type/BuiltinRawPointerType.qll | 2 +- .../generated/type/BuiltinRawUnsafeContinuationType.qll | 2 +- .../swift/generated/type/BuiltinUnsafeValueBufferType.qll | 2 +- .../lib/codeql/swift/generated/type/BuiltinVectorType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/ClassType.qll | 2 +- .../lib/codeql/swift/generated/type/DependentMemberType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/DictionaryType.qll | 2 +- .../ql/lib/codeql/swift/generated/type/DynamicSelfType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/EnumType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/ErrorType.qll | 2 +- .../codeql/swift/generated/type/ExistentialMetatypeType.qll | 2 +- .../ql/lib/codeql/swift/generated/type/ExistentialType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/FunctionType.qll | 2 +- .../lib/codeql/swift/generated/type/GenericFunctionType.qll | 2 +- .../codeql/swift/generated/type/GenericTypeParamType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/InOutType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/LValueType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/MetatypeType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/ModuleType.qll | 2 +- .../lib/codeql/swift/generated/type/NestedArchetypeType.qll | 2 +- .../codeql/swift/generated/type/OpaqueTypeArchetypeType.qll | 2 +- .../lib/codeql/swift/generated/type/OpenedArchetypeType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/OptionalType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/ParenType.qll | 2 +- .../ql/lib/codeql/swift/generated/type/PlaceholderType.qll | 2 +- .../codeql/swift/generated/type/PrimaryArchetypeType.qll | 2 +- .../codeql/swift/generated/type/ProtocolCompositionType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/ProtocolType.qll | 2 +- .../codeql/swift/generated/type/SequenceArchetypeType.qll | 2 +- .../lib/codeql/swift/generated/type/SilBlockStorageType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/SilBoxType.qll | 2 +- .../ql/lib/codeql/swift/generated/type/SilFunctionType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/SilTokenType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/StructType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/TupleType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/TypeAliasType.qll | 2 +- .../ql/lib/codeql/swift/generated/type/TypeVariableType.qll | 2 +- .../lib/codeql/swift/generated/type/UnboundGenericType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/UnknownType.qll | 2 +- .../codeql/swift/generated/type/UnmanagedStorageType.qll | 2 +- .../lib/codeql/swift/generated/type/UnownedStorageType.qll | 2 +- swift/ql/lib/codeql/swift/generated/type/UnresolvedType.qll | 2 +- .../codeql/swift/generated/type/VariadicSequenceType.qll | 2 +- .../ql/lib/codeql/swift/generated/type/WeakStorageType.qll | 2 +- 232 files changed, 237 insertions(+), 233 deletions(-) diff --git a/swift/codegen/templates/ql_class.mustache b/swift/codegen/templates/ql_class.mustache index 3c54467b7c4..8c668de26d4 100644 --- a/swift/codegen/templates/ql_class.mustache +++ b/swift/codegen/templates/ql_class.mustache @@ -8,7 +8,9 @@ class {{name}}Base extends {{db_id}}{{#bases}}, {{.}}{{/bases}} { {{#root}} string toString() { none() } // overridden by subclasses - string getPrimaryQlClass() { none() } // overridden by subclasses + string getAPrimaryQlClass() { none() } // overridden by subclasses + + final string getPrimaryQlClasses() { result = concat(this.getAPrimaryQlClass(), ",") } {{name}}Base getResolveStep() { none() } // overridden by subclasses @@ -19,7 +21,7 @@ class {{name}}Base extends {{db_id}}{{#bases}}, {{.}}{{/bases}} { } {{/root}} {{#final}} - override string getPrimaryQlClass() { result = "{{name}}" } + override string getAPrimaryQlClass() { result = "{{name}}" } {{/final}} {{#properties}} diff --git a/swift/ql/lib/codeql/swift/generated/Element.qll b/swift/ql/lib/codeql/swift/generated/Element.qll index e9f54415ac1..a2c0de1016f 100644 --- a/swift/ql/lib/codeql/swift/generated/Element.qll +++ b/swift/ql/lib/codeql/swift/generated/Element.qll @@ -2,7 +2,9 @@ class ElementBase extends @element { string toString() { none() } // overridden by subclasses - string getPrimaryQlClass() { none() } // overridden by subclasses + string getAPrimaryQlClass() { none() } // overridden by subclasses + + final string getPrimaryQlClasses() { result = concat(this.getAPrimaryQlClass(), ",") } ElementBase getResolveStep() { none() } // overridden by subclasses diff --git a/swift/ql/lib/codeql/swift/generated/File.qll b/swift/ql/lib/codeql/swift/generated/File.qll index a0cde68c73a..38f1ea107a7 100644 --- a/swift/ql/lib/codeql/swift/generated/File.qll +++ b/swift/ql/lib/codeql/swift/generated/File.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.Element class FileBase extends @file, Element { - override string getPrimaryQlClass() { result = "File" } + override string getAPrimaryQlClass() { result = "File" } string getName() { files(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/Location.qll b/swift/ql/lib/codeql/swift/generated/Location.qll index a39ee13823c..8379e4a5259 100644 --- a/swift/ql/lib/codeql/swift/generated/Location.qll +++ b/swift/ql/lib/codeql/swift/generated/Location.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.Element import codeql.swift.elements.File class LocationBase extends @location, Element { - override string getPrimaryQlClass() { result = "Location" } + override string getAPrimaryQlClass() { result = "Location" } File getFile() { exists(File x | diff --git a/swift/ql/lib/codeql/swift/generated/UnknownAstNode.qll b/swift/ql/lib/codeql/swift/generated/UnknownAstNode.qll index 06bca7af67d..b3fe1fd4587 100644 --- a/swift/ql/lib/codeql/swift/generated/UnknownAstNode.qll +++ b/swift/ql/lib/codeql/swift/generated/UnknownAstNode.qll @@ -6,7 +6,7 @@ import codeql.swift.elements.stmt.Stmt import codeql.swift.elements.typerepr.TypeRepr class UnknownAstNodeBase extends @unknown_ast_node, Decl, Expr, Pattern, Stmt, TypeRepr { - override string getPrimaryQlClass() { result = "UnknownAstNode" } + override string getAPrimaryQlClass() { result = "UnknownAstNode" } string getName() { unknown_ast_nodes(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/AccessorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/AccessorDecl.qll index 5ac3dd7091a..d293463d999 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/AccessorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/AccessorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.FuncDecl class AccessorDeclBase extends @accessor_decl, FuncDecl { - override string getPrimaryQlClass() { result = "AccessorDecl" } + override string getAPrimaryQlClass() { result = "AccessorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll index e7970236870..efd33b04d8c 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.AbstractTypeParamDecl class AssociatedTypeDeclBase extends @associated_type_decl, AbstractTypeParamDecl { - override string getPrimaryQlClass() { result = "AssociatedTypeDecl" } + override string getAPrimaryQlClass() { result = "AssociatedTypeDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ClassDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ClassDecl.qll index 07d6d63128f..d770f1f7b4f 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ClassDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ClassDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.NominalTypeDecl class ClassDeclBase extends @class_decl, NominalTypeDecl { - override string getPrimaryQlClass() { result = "ClassDecl" } + override string getAPrimaryQlClass() { result = "ClassDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ConcreteFuncDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ConcreteFuncDecl.qll index e34421da66d..0ba9db75056 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ConcreteFuncDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ConcreteFuncDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.FuncDecl class ConcreteFuncDeclBase extends @concrete_func_decl, FuncDecl { - override string getPrimaryQlClass() { result = "ConcreteFuncDecl" } + override string getAPrimaryQlClass() { result = "ConcreteFuncDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ConcreteVarDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ConcreteVarDecl.qll index c6564834c5f..5be11bfe33a 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ConcreteVarDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ConcreteVarDecl.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.decl.VarDecl class ConcreteVarDeclBase extends @concrete_var_decl, VarDecl { - override string getPrimaryQlClass() { result = "ConcreteVarDecl" } + override string getAPrimaryQlClass() { result = "ConcreteVarDecl" } int getIntroducerInt() { concrete_var_decls(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ConstructorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ConstructorDecl.qll index fbd9db1e299..208804ca71a 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ConstructorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ConstructorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.AbstractFunctionDecl class ConstructorDeclBase extends @constructor_decl, AbstractFunctionDecl { - override string getPrimaryQlClass() { result = "ConstructorDecl" } + override string getAPrimaryQlClass() { result = "ConstructorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/DestructorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/DestructorDecl.qll index 667650662a0..647dbe8daec 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/DestructorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/DestructorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.AbstractFunctionDecl class DestructorDeclBase extends @destructor_decl, AbstractFunctionDecl { - override string getPrimaryQlClass() { result = "DestructorDecl" } + override string getAPrimaryQlClass() { result = "DestructorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/EnumCaseDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/EnumCaseDecl.qll index 654da108fa0..179552ebf94 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/EnumCaseDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/EnumCaseDecl.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.decl.Decl import codeql.swift.elements.decl.EnumElementDecl class EnumCaseDeclBase extends @enum_case_decl, Decl { - override string getPrimaryQlClass() { result = "EnumCaseDecl" } + override string getAPrimaryQlClass() { result = "EnumCaseDecl" } EnumElementDecl getElement(int index) { exists(EnumElementDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/decl/EnumDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/EnumDecl.qll index 75120af5548..ae84dea0998 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/EnumDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/EnumDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.NominalTypeDecl class EnumDeclBase extends @enum_decl, NominalTypeDecl { - override string getPrimaryQlClass() { result = "EnumDecl" } + override string getAPrimaryQlClass() { result = "EnumDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/EnumElementDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/EnumElementDecl.qll index 0210e22ddda..5a7cc81bb31 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/EnumElementDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/EnumElementDecl.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.decl.ParamDecl import codeql.swift.elements.decl.ValueDecl class EnumElementDeclBase extends @enum_element_decl, ValueDecl { - override string getPrimaryQlClass() { result = "EnumElementDecl" } + override string getAPrimaryQlClass() { result = "EnumElementDecl" } string getName() { enum_element_decls(this, result) } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll index fff23dbeb47..0efc904e43a 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll @@ -4,5 +4,5 @@ import codeql.swift.elements.decl.GenericContext import codeql.swift.elements.decl.IterableDeclContext class ExtensionDeclBase extends @extension_decl, Decl, GenericContext, IterableDeclContext { - override string getPrimaryQlClass() { result = "ExtensionDecl" } + override string getAPrimaryQlClass() { result = "ExtensionDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/GenericTypeParamDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/GenericTypeParamDecl.qll index 9cc79737f0b..990d69d1734 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/GenericTypeParamDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/GenericTypeParamDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.AbstractTypeParamDecl class GenericTypeParamDeclBase extends @generic_type_param_decl, AbstractTypeParamDecl { - override string getPrimaryQlClass() { result = "GenericTypeParamDecl" } + override string getAPrimaryQlClass() { result = "GenericTypeParamDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/IfConfigDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/IfConfigDecl.qll index bcc629577d9..578051e9f8b 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/IfConfigDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/IfConfigDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.Decl class IfConfigDeclBase extends @if_config_decl, Decl { - override string getPrimaryQlClass() { result = "IfConfigDecl" } + override string getAPrimaryQlClass() { result = "IfConfigDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ImportDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ImportDecl.qll index e2b9a59a72d..fdd89db170a 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ImportDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ImportDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.Decl class ImportDeclBase extends @import_decl, Decl { - override string getPrimaryQlClass() { result = "ImportDecl" } + override string getAPrimaryQlClass() { result = "ImportDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/InfixOperatorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/InfixOperatorDecl.qll index bac4345e86d..66910347c9d 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/InfixOperatorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/InfixOperatorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.OperatorDecl class InfixOperatorDeclBase extends @infix_operator_decl, OperatorDecl { - override string getPrimaryQlClass() { result = "InfixOperatorDecl" } + override string getAPrimaryQlClass() { result = "InfixOperatorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/MissingMemberDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/MissingMemberDecl.qll index 046fece53b5..bc6002e56d2 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/MissingMemberDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/MissingMemberDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.Decl class MissingMemberDeclBase extends @missing_member_decl, Decl { - override string getPrimaryQlClass() { result = "MissingMemberDecl" } + override string getAPrimaryQlClass() { result = "MissingMemberDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ModuleDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ModuleDecl.qll index 94fac5a140b..aad5d00c0c6 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ModuleDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ModuleDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.TypeDecl class ModuleDeclBase extends @module_decl, TypeDecl { - override string getPrimaryQlClass() { result = "ModuleDecl" } + override string getAPrimaryQlClass() { result = "ModuleDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/OpaqueTypeDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/OpaqueTypeDecl.qll index 87307cf27b1..42b8679dde0 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/OpaqueTypeDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/OpaqueTypeDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.GenericTypeDecl class OpaqueTypeDeclBase extends @opaque_type_decl, GenericTypeDecl { - override string getPrimaryQlClass() { result = "OpaqueTypeDecl" } + override string getAPrimaryQlClass() { result = "OpaqueTypeDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ParamDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ParamDecl.qll index 455f504e777..079c1cba19e 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ParamDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ParamDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.VarDecl class ParamDeclBase extends @param_decl, VarDecl { - override string getPrimaryQlClass() { result = "ParamDecl" } + override string getAPrimaryQlClass() { result = "ParamDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll index 6b69930402e..44c80c76efa 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/PatternBindingDecl.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.pattern.Pattern class PatternBindingDeclBase extends @pattern_binding_decl, Decl { - override string getPrimaryQlClass() { result = "PatternBindingDecl" } + override string getAPrimaryQlClass() { result = "PatternBindingDecl" } Expr getInit(int index) { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/decl/PostfixOperatorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/PostfixOperatorDecl.qll index 4786bb2eb08..a52d858f853 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/PostfixOperatorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/PostfixOperatorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.OperatorDecl class PostfixOperatorDeclBase extends @postfix_operator_decl, OperatorDecl { - override string getPrimaryQlClass() { result = "PostfixOperatorDecl" } + override string getAPrimaryQlClass() { result = "PostfixOperatorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/PoundDiagnosticDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/PoundDiagnosticDecl.qll index ba7d98fde10..32f723ae081 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/PoundDiagnosticDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/PoundDiagnosticDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.Decl class PoundDiagnosticDeclBase extends @pound_diagnostic_decl, Decl { - override string getPrimaryQlClass() { result = "PoundDiagnosticDecl" } + override string getAPrimaryQlClass() { result = "PoundDiagnosticDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/PrecedenceGroupDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/PrecedenceGroupDecl.qll index a963aeff10d..381b92ed030 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/PrecedenceGroupDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/PrecedenceGroupDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.Decl class PrecedenceGroupDeclBase extends @precedence_group_decl, Decl { - override string getPrimaryQlClass() { result = "PrecedenceGroupDecl" } + override string getAPrimaryQlClass() { result = "PrecedenceGroupDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/PrefixOperatorDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/PrefixOperatorDecl.qll index 01db13ad940..5f66eb16fc9 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/PrefixOperatorDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/PrefixOperatorDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.OperatorDecl class PrefixOperatorDeclBase extends @prefix_operator_decl, OperatorDecl { - override string getPrimaryQlClass() { result = "PrefixOperatorDecl" } + override string getAPrimaryQlClass() { result = "PrefixOperatorDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/ProtocolDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/ProtocolDecl.qll index 29fcf2b507a..1c57a13aae7 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/ProtocolDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/ProtocolDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.NominalTypeDecl class ProtocolDeclBase extends @protocol_decl, NominalTypeDecl { - override string getPrimaryQlClass() { result = "ProtocolDecl" } + override string getAPrimaryQlClass() { result = "ProtocolDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/StructDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/StructDecl.qll index 26455f15484..135efec442a 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/StructDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/StructDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.NominalTypeDecl class StructDeclBase extends @struct_decl, NominalTypeDecl { - override string getPrimaryQlClass() { result = "StructDecl" } + override string getAPrimaryQlClass() { result = "StructDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/SubscriptDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/SubscriptDecl.qll index 6329f269f49..5d916618229 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/SubscriptDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/SubscriptDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.AbstractStorageDecl class SubscriptDeclBase extends @subscript_decl, AbstractStorageDecl { - override string getPrimaryQlClass() { result = "SubscriptDecl" } + override string getAPrimaryQlClass() { result = "SubscriptDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/decl/TopLevelCodeDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/TopLevelCodeDecl.qll index 87899c24bfe..7c664ad9bca 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/TopLevelCodeDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/TopLevelCodeDecl.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.BraceStmt import codeql.swift.elements.decl.Decl class TopLevelCodeDeclBase extends @top_level_code_decl, Decl { - override string getPrimaryQlClass() { result = "TopLevelCodeDecl" } + override string getAPrimaryQlClass() { result = "TopLevelCodeDecl" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/decl/TypeAliasDecl.qll b/swift/ql/lib/codeql/swift/generated/decl/TypeAliasDecl.qll index d5a41a716bc..fd437a62676 100644 --- a/swift/ql/lib/codeql/swift/generated/decl/TypeAliasDecl.qll +++ b/swift/ql/lib/codeql/swift/generated/decl/TypeAliasDecl.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.decl.GenericTypeDecl class TypeAliasDeclBase extends @type_alias_decl, GenericTypeDecl { - override string getPrimaryQlClass() { result = "TypeAliasDecl" } + override string getAPrimaryQlClass() { result = "TypeAliasDecl" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/AnyHashableErasureExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/AnyHashableErasureExpr.qll index de5c1534faf..6e95203d957 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/AnyHashableErasureExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/AnyHashableErasureExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class AnyHashableErasureExprBase extends @any_hashable_erasure_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "AnyHashableErasureExpr" } + override string getAPrimaryQlClass() { result = "AnyHashableErasureExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/AppliedPropertyWrapperExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/AppliedPropertyWrapperExpr.qll index e0f95ba2a02..9fb974487e7 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/AppliedPropertyWrapperExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/AppliedPropertyWrapperExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class AppliedPropertyWrapperExprBase extends @applied_property_wrapper_expr, Expr { - override string getPrimaryQlClass() { result = "AppliedPropertyWrapperExpr" } + override string getAPrimaryQlClass() { result = "AppliedPropertyWrapperExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ArchetypeToSuperExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ArchetypeToSuperExpr.qll index e5123e26e53..7e9a9e4a7b8 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ArchetypeToSuperExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ArchetypeToSuperExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ArchetypeToSuperExprBase extends @archetype_to_super_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "ArchetypeToSuperExpr" } + override string getAPrimaryQlClass() { result = "ArchetypeToSuperExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/Argument.qll b/swift/ql/lib/codeql/swift/generated/expr/Argument.qll index 0a3cdae3a66..9f16b90e3fe 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/Argument.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/Argument.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.Element import codeql.swift.elements.expr.Expr class ArgumentBase extends @argument, Element { - override string getPrimaryQlClass() { result = "Argument" } + override string getAPrimaryQlClass() { result = "Argument" } string getLabel() { arguments(this, result, _) } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ArrayExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ArrayExpr.qll index 6a9cddd47ce..e62af8dde55 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ArrayExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ArrayExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.CollectionExpr import codeql.swift.elements.expr.Expr class ArrayExprBase extends @array_expr, CollectionExpr { - override string getPrimaryQlClass() { result = "ArrayExpr" } + override string getAPrimaryQlClass() { result = "ArrayExpr" } Expr getElement(int index) { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/ArrayToPointerExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ArrayToPointerExpr.qll index 3d1b8c96d79..0eef1004773 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ArrayToPointerExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ArrayToPointerExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ArrayToPointerExprBase extends @array_to_pointer_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "ArrayToPointerExpr" } + override string getAPrimaryQlClass() { result = "ArrayToPointerExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ArrowExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ArrowExpr.qll index a8dc1d1c8fe..a10d68af913 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ArrowExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ArrowExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class ArrowExprBase extends @arrow_expr, Expr { - override string getPrimaryQlClass() { result = "ArrowExpr" } + override string getAPrimaryQlClass() { result = "ArrowExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/AssignExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/AssignExpr.qll index 743a4de6cf0..b733f8fc3e2 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/AssignExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/AssignExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class AssignExprBase extends @assign_expr, Expr { - override string getPrimaryQlClass() { result = "AssignExpr" } + override string getAPrimaryQlClass() { result = "AssignExpr" } Expr getDest() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/AutoClosureExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/AutoClosureExpr.qll index 05cccdedea8..f25248ed0fb 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/AutoClosureExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/AutoClosureExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.AbstractClosureExpr import codeql.swift.elements.stmt.BraceStmt class AutoClosureExprBase extends @auto_closure_expr, AbstractClosureExpr { - override string getPrimaryQlClass() { result = "AutoClosureExpr" } + override string getAPrimaryQlClass() { result = "AutoClosureExpr" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/AwaitExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/AwaitExpr.qll index abb9a883381..e18243db73a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/AwaitExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/AwaitExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.IdentityExpr class AwaitExprBase extends @await_expr, IdentityExpr { - override string getPrimaryQlClass() { result = "AwaitExpr" } + override string getAPrimaryQlClass() { result = "AwaitExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/BinaryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/BinaryExpr.qll index e7a10adbc86..54895bbf294 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/BinaryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/BinaryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ApplyExpr class BinaryExprBase extends @binary_expr, ApplyExpr { - override string getPrimaryQlClass() { result = "BinaryExpr" } + override string getAPrimaryQlClass() { result = "BinaryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/BindOptionalExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/BindOptionalExpr.qll index e66a617f7c5..9cd270891ea 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/BindOptionalExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/BindOptionalExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class BindOptionalExprBase extends @bind_optional_expr, Expr { - override string getPrimaryQlClass() { result = "BindOptionalExpr" } + override string getAPrimaryQlClass() { result = "BindOptionalExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/BooleanLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/BooleanLiteralExpr.qll index 98616ad15f3..853c8f08629 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/BooleanLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/BooleanLiteralExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.BuiltinLiteralExpr class BooleanLiteralExprBase extends @boolean_literal_expr, BuiltinLiteralExpr { - override string getPrimaryQlClass() { result = "BooleanLiteralExpr" } + override string getAPrimaryQlClass() { result = "BooleanLiteralExpr" } boolean getValue() { boolean_literal_exprs(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/BridgeFromObjCExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/BridgeFromObjCExpr.qll index 6f5a6e38f4e..fc30c1b3f81 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/BridgeFromObjCExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/BridgeFromObjCExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class BridgeFromObjCExprBase extends @bridge_from_obj_c_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "BridgeFromObjCExpr" } + override string getAPrimaryQlClass() { result = "BridgeFromObjCExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/BridgeToObjCExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/BridgeToObjCExpr.qll index 39f31e77f55..da3cf85dc97 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/BridgeToObjCExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/BridgeToObjCExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class BridgeToObjCExprBase extends @bridge_to_obj_c_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "BridgeToObjCExpr" } + override string getAPrimaryQlClass() { result = "BridgeToObjCExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CallExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CallExpr.qll index 6a3329711e6..55dd803ce7d 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CallExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CallExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ApplyExpr class CallExprBase extends @call_expr, ApplyExpr { - override string getPrimaryQlClass() { result = "CallExpr" } + override string getAPrimaryQlClass() { result = "CallExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CaptureListExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CaptureListExpr.qll index 76aac82934e..5e273ab1e4c 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CaptureListExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CaptureListExpr.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.decl.PatternBindingDecl class CaptureListExprBase extends @capture_list_expr, Expr { - override string getPrimaryQlClass() { result = "CaptureListExpr" } + override string getAPrimaryQlClass() { result = "CaptureListExpr" } PatternBindingDecl getBindingDecl(int index) { exists(PatternBindingDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/ClassMetatypeToObjectExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ClassMetatypeToObjectExpr.qll index ec91100ecde..aaae45957cf 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ClassMetatypeToObjectExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ClassMetatypeToObjectExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ClassMetatypeToObjectExprBase extends @class_metatype_to_object_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "ClassMetatypeToObjectExpr" } + override string getAPrimaryQlClass() { result = "ClassMetatypeToObjectExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ClosureExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ClosureExpr.qll index 5e8022d348c..e1c1261654c 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ClosureExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ClosureExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.AbstractClosureExpr import codeql.swift.elements.stmt.BraceStmt class ClosureExprBase extends @closure_expr, AbstractClosureExpr { - override string getPrimaryQlClass() { result = "ClosureExpr" } + override string getAPrimaryQlClass() { result = "ClosureExpr" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/CodeCompletionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CodeCompletionExpr.qll index 34b3bb695b6..853f721ebb9 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CodeCompletionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CodeCompletionExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class CodeCompletionExprBase extends @code_completion_expr, Expr { - override string getPrimaryQlClass() { result = "CodeCompletionExpr" } + override string getAPrimaryQlClass() { result = "CodeCompletionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CoerceExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CoerceExpr.qll index 90db24a184b..b11218595cb 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CoerceExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CoerceExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ExplicitCastExpr class CoerceExprBase extends @coerce_expr, ExplicitCastExpr { - override string getPrimaryQlClass() { result = "CoerceExpr" } + override string getAPrimaryQlClass() { result = "CoerceExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CollectionUpcastConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CollectionUpcastConversionExpr.qll index 7e3bd15a64c..92dab3f54e0 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CollectionUpcastConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CollectionUpcastConversionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class CollectionUpcastConversionExprBase extends @collection_upcast_conversion_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "CollectionUpcastConversionExpr" } + override string getAPrimaryQlClass() { result = "CollectionUpcastConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ConditionalBridgeFromObjCExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ConditionalBridgeFromObjCExpr.qll index 05a627f8274..20a192b6c03 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ConditionalBridgeFromObjCExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ConditionalBridgeFromObjCExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ConditionalBridgeFromObjCExprBase extends @conditional_bridge_from_obj_c_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "ConditionalBridgeFromObjCExpr" } + override string getAPrimaryQlClass() { result = "ConditionalBridgeFromObjCExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ConditionalCheckedCastExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ConditionalCheckedCastExpr.qll index bfc5a53cb8d..d38199d4275 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ConditionalCheckedCastExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ConditionalCheckedCastExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.CheckedCastExpr class ConditionalCheckedCastExprBase extends @conditional_checked_cast_expr, CheckedCastExpr { - override string getPrimaryQlClass() { result = "ConditionalCheckedCastExpr" } + override string getAPrimaryQlClass() { result = "ConditionalCheckedCastExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ConstructorRefCallExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ConstructorRefCallExpr.qll index 33d454916ca..6d379b8576b 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ConstructorRefCallExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ConstructorRefCallExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.SelfApplyExpr class ConstructorRefCallExprBase extends @constructor_ref_call_expr, SelfApplyExpr { - override string getPrimaryQlClass() { result = "ConstructorRefCallExpr" } + override string getAPrimaryQlClass() { result = "ConstructorRefCallExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CovariantFunctionConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CovariantFunctionConversionExpr.qll index 1fec877c953..56837b28e22 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CovariantFunctionConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CovariantFunctionConversionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class CovariantFunctionConversionExprBase extends @covariant_function_conversion_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "CovariantFunctionConversionExpr" } + override string getAPrimaryQlClass() { result = "CovariantFunctionConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/CovariantReturnConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/CovariantReturnConversionExpr.qll index 4e7199cdc33..1df6850ead7 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/CovariantReturnConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/CovariantReturnConversionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class CovariantReturnConversionExprBase extends @covariant_return_conversion_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "CovariantReturnConversionExpr" } + override string getAPrimaryQlClass() { result = "CovariantReturnConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DeclRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DeclRefExpr.qll index 7093a892a74..11d81e5aecf 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DeclRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DeclRefExpr.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.type.Type class DeclRefExprBase extends @decl_ref_expr, Expr { - override string getPrimaryQlClass() { result = "DeclRefExpr" } + override string getAPrimaryQlClass() { result = "DeclRefExpr" } Decl getDecl() { exists(Decl x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/DefaultArgumentExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DefaultArgumentExpr.qll index 6374fa961f9..e959c9c4a44 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DefaultArgumentExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DefaultArgumentExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.decl.ParamDecl class DefaultArgumentExprBase extends @default_argument_expr, Expr { - override string getPrimaryQlClass() { result = "DefaultArgumentExpr" } + override string getAPrimaryQlClass() { result = "DefaultArgumentExpr" } ParamDecl getParamDecl() { exists(ParamDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/DerivedToBaseExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DerivedToBaseExpr.qll index 554eb512d5a..96ab92b74a9 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DerivedToBaseExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DerivedToBaseExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class DerivedToBaseExprBase extends @derived_to_base_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "DerivedToBaseExpr" } + override string getAPrimaryQlClass() { result = "DerivedToBaseExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DestructureTupleExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DestructureTupleExpr.qll index b7b376b7f38..e21812e0c3d 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DestructureTupleExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DestructureTupleExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class DestructureTupleExprBase extends @destructure_tuple_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "DestructureTupleExpr" } + override string getAPrimaryQlClass() { result = "DestructureTupleExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DictionaryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DictionaryExpr.qll index 49fe6818051..1daef547291 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DictionaryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DictionaryExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.CollectionExpr import codeql.swift.elements.expr.Expr class DictionaryExprBase extends @dictionary_expr, CollectionExpr { - override string getPrimaryQlClass() { result = "DictionaryExpr" } + override string getAPrimaryQlClass() { result = "DictionaryExpr" } Expr getElement(int index) { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExpr.qll index e864e68e73a..1b27a3888be 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class DifferentiableFunctionExprBase extends @differentiable_function_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "DifferentiableFunctionExpr" } + override string getAPrimaryQlClass() { result = "DifferentiableFunctionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExtractOriginalExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExtractOriginalExpr.qll index 790877fa186..039056df150 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExtractOriginalExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DifferentiableFunctionExtractOriginalExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class DifferentiableFunctionExtractOriginalExprBase extends @differentiable_function_extract_original_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "DifferentiableFunctionExtractOriginalExpr" } + override string getAPrimaryQlClass() { result = "DifferentiableFunctionExtractOriginalExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DiscardAssignmentExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DiscardAssignmentExpr.qll index e9470dab89a..3e1971fbc61 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DiscardAssignmentExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DiscardAssignmentExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class DiscardAssignmentExprBase extends @discard_assignment_expr, Expr { - override string getPrimaryQlClass() { result = "DiscardAssignmentExpr" } + override string getAPrimaryQlClass() { result = "DiscardAssignmentExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DotSelfExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DotSelfExpr.qll index 8df593c6c84..4c93babb697 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DotSelfExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DotSelfExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.IdentityExpr class DotSelfExprBase extends @dot_self_expr, IdentityExpr { - override string getPrimaryQlClass() { result = "DotSelfExpr" } + override string getAPrimaryQlClass() { result = "DotSelfExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxBaseIgnoredExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxBaseIgnoredExpr.qll index 6a4f9148640..bf5f76b3229 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxBaseIgnoredExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxBaseIgnoredExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class DotSyntaxBaseIgnoredExprBase extends @dot_syntax_base_ignored_expr, Expr { - override string getPrimaryQlClass() { result = "DotSyntaxBaseIgnoredExpr" } + override string getAPrimaryQlClass() { result = "DotSyntaxBaseIgnoredExpr" } Expr getQualifier() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxCallExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxCallExpr.qll index d5d2f53db6f..c026f329bce 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxCallExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DotSyntaxCallExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.SelfApplyExpr class DotSyntaxCallExprBase extends @dot_syntax_call_expr, SelfApplyExpr { - override string getPrimaryQlClass() { result = "DotSyntaxCallExpr" } + override string getAPrimaryQlClass() { result = "DotSyntaxCallExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DynamicMemberRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DynamicMemberRefExpr.qll index b03992c2f89..fd4291b5ee0 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DynamicMemberRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DynamicMemberRefExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.DynamicLookupExpr class DynamicMemberRefExprBase extends @dynamic_member_ref_expr, DynamicLookupExpr { - override string getPrimaryQlClass() { result = "DynamicMemberRefExpr" } + override string getAPrimaryQlClass() { result = "DynamicMemberRefExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DynamicSubscriptExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DynamicSubscriptExpr.qll index f3ebf5db289..a920f1b4329 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DynamicSubscriptExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DynamicSubscriptExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.DynamicLookupExpr class DynamicSubscriptExprBase extends @dynamic_subscript_expr, DynamicLookupExpr { - override string getPrimaryQlClass() { result = "DynamicSubscriptExpr" } + override string getAPrimaryQlClass() { result = "DynamicSubscriptExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/DynamicTypeExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/DynamicTypeExpr.qll index 651088dcdc7..c43659d6dd1 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/DynamicTypeExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/DynamicTypeExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class DynamicTypeExprBase extends @dynamic_type_expr, Expr { - override string getPrimaryQlClass() { result = "DynamicTypeExpr" } + override string getAPrimaryQlClass() { result = "DynamicTypeExpr" } Expr getBaseExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/EditorPlaceholderExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/EditorPlaceholderExpr.qll index 13b01ebe579..ce5397171b7 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/EditorPlaceholderExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/EditorPlaceholderExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class EditorPlaceholderExprBase extends @editor_placeholder_expr, Expr { - override string getPrimaryQlClass() { result = "EditorPlaceholderExpr" } + override string getAPrimaryQlClass() { result = "EditorPlaceholderExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/EnumIsCaseExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/EnumIsCaseExpr.qll index 7671d1fe187..e02b97813a4 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/EnumIsCaseExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/EnumIsCaseExpr.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.typerepr.TypeRepr class EnumIsCaseExprBase extends @enum_is_case_expr, Expr { - override string getPrimaryQlClass() { result = "EnumIsCaseExpr" } + override string getAPrimaryQlClass() { result = "EnumIsCaseExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/ErasureExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ErasureExpr.qll index 8f4006a35d8..9e3a585d8e7 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ErasureExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ErasureExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ErasureExprBase extends @erasure_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "ErasureExpr" } + override string getAPrimaryQlClass() { result = "ErasureExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ErrorExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ErrorExpr.qll index c93afa1d20d..224560ba9a6 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ErrorExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ErrorExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class ErrorExprBase extends @error_expr, Expr { - override string getPrimaryQlClass() { result = "ErrorExpr" } + override string getAPrimaryQlClass() { result = "ErrorExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ExistentialMetatypeToObjectExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ExistentialMetatypeToObjectExpr.qll index 474ef8d876a..065a08ad391 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ExistentialMetatypeToObjectExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ExistentialMetatypeToObjectExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ExistentialMetatypeToObjectExprBase extends @existential_metatype_to_object_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "ExistentialMetatypeToObjectExpr" } + override string getAPrimaryQlClass() { result = "ExistentialMetatypeToObjectExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/FloatLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/FloatLiteralExpr.qll index d6355497331..984819e59aa 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/FloatLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/FloatLiteralExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.NumberLiteralExpr class FloatLiteralExprBase extends @float_literal_expr, NumberLiteralExpr { - override string getPrimaryQlClass() { result = "FloatLiteralExpr" } + override string getAPrimaryQlClass() { result = "FloatLiteralExpr" } string getStringValue() { float_literal_exprs(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ForceTryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ForceTryExpr.qll index 077dff2565a..79596be65fa 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ForceTryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ForceTryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.AnyTryExpr class ForceTryExprBase extends @force_try_expr, AnyTryExpr { - override string getPrimaryQlClass() { result = "ForceTryExpr" } + override string getAPrimaryQlClass() { result = "ForceTryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ForceValueExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ForceValueExpr.qll index a5af8ecd64f..224dc78316e 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ForceValueExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ForceValueExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class ForceValueExprBase extends @force_value_expr, Expr { - override string getPrimaryQlClass() { result = "ForceValueExpr" } + override string getAPrimaryQlClass() { result = "ForceValueExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/ForcedCheckedCastExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ForcedCheckedCastExpr.qll index cbcd27323ca..0f1a2e44637 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ForcedCheckedCastExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ForcedCheckedCastExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.CheckedCastExpr class ForcedCheckedCastExprBase extends @forced_checked_cast_expr, CheckedCastExpr { - override string getPrimaryQlClass() { result = "ForcedCheckedCastExpr" } + override string getAPrimaryQlClass() { result = "ForcedCheckedCastExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ForeignObjectConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ForeignObjectConversionExpr.qll index 685cb980165..ab40420b67b 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ForeignObjectConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ForeignObjectConversionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ForeignObjectConversionExprBase extends @foreign_object_conversion_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "ForeignObjectConversionExpr" } + override string getAPrimaryQlClass() { result = "ForeignObjectConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/FunctionConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/FunctionConversionExpr.qll index e996cea15c1..c6e771f3f11 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/FunctionConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/FunctionConversionExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class FunctionConversionExprBase extends @function_conversion_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "FunctionConversionExpr" } + override string getAPrimaryQlClass() { result = "FunctionConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/IfExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/IfExpr.qll index 491d4c4b315..b1ec1a192f7 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/IfExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/IfExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class IfExprBase extends @if_expr, Expr { - override string getPrimaryQlClass() { result = "IfExpr" } + override string getAPrimaryQlClass() { result = "IfExpr" } Expr getCondition() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/InOutExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/InOutExpr.qll index d54b02880dc..43da09784ae 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/InOutExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/InOutExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class InOutExprBase extends @in_out_expr, Expr { - override string getPrimaryQlClass() { result = "InOutExpr" } + override string getAPrimaryQlClass() { result = "InOutExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/InOutToPointerExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/InOutToPointerExpr.qll index 19b8a0c8feb..d158c645de4 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/InOutToPointerExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/InOutToPointerExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class InOutToPointerExprBase extends @in_out_to_pointer_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "InOutToPointerExpr" } + override string getAPrimaryQlClass() { result = "InOutToPointerExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/InjectIntoOptionalExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/InjectIntoOptionalExpr.qll index af91274bdad..cedf59de7bf 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/InjectIntoOptionalExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/InjectIntoOptionalExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class InjectIntoOptionalExprBase extends @inject_into_optional_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "InjectIntoOptionalExpr" } + override string getAPrimaryQlClass() { result = "InjectIntoOptionalExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/IntegerLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/IntegerLiteralExpr.qll index 2599e9926ee..dcd8f4b97a5 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/IntegerLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/IntegerLiteralExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.NumberLiteralExpr class IntegerLiteralExprBase extends @integer_literal_expr, NumberLiteralExpr { - override string getPrimaryQlClass() { result = "IntegerLiteralExpr" } + override string getAPrimaryQlClass() { result = "IntegerLiteralExpr" } string getStringValue() { integer_literal_exprs(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/InterpolatedStringLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/InterpolatedStringLiteralExpr.qll index 74e9062c995..72f0fdac418 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/InterpolatedStringLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/InterpolatedStringLiteralExpr.qll @@ -5,7 +5,7 @@ import codeql.swift.elements.expr.OpaqueValueExpr import codeql.swift.elements.expr.TapExpr class InterpolatedStringLiteralExprBase extends @interpolated_string_literal_expr, LiteralExpr { - override string getPrimaryQlClass() { result = "InterpolatedStringLiteralExpr" } + override string getAPrimaryQlClass() { result = "InterpolatedStringLiteralExpr" } OpaqueValueExpr getInterpolationExpr() { exists(OpaqueValueExpr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/IsExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/IsExpr.qll index 2591820191a..45ddca73d8e 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/IsExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/IsExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.CheckedCastExpr class IsExprBase extends @is_expr, CheckedCastExpr { - override string getPrimaryQlClass() { result = "IsExpr" } + override string getAPrimaryQlClass() { result = "IsExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/KeyPathApplicationExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/KeyPathApplicationExpr.qll index 920c4248f26..e746c44943b 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/KeyPathApplicationExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/KeyPathApplicationExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class KeyPathApplicationExprBase extends @key_path_application_expr, Expr { - override string getPrimaryQlClass() { result = "KeyPathApplicationExpr" } + override string getAPrimaryQlClass() { result = "KeyPathApplicationExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/KeyPathDotExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/KeyPathDotExpr.qll index ac04f37e7fe..fbd58631fd4 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/KeyPathDotExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/KeyPathDotExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class KeyPathDotExprBase extends @key_path_dot_expr, Expr { - override string getPrimaryQlClass() { result = "KeyPathDotExpr" } + override string getAPrimaryQlClass() { result = "KeyPathDotExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/KeyPathExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/KeyPathExpr.qll index ccd1596a863..7ac3d4614f0 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/KeyPathExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/KeyPathExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class KeyPathExprBase extends @key_path_expr, Expr { - override string getPrimaryQlClass() { result = "KeyPathExpr" } + override string getAPrimaryQlClass() { result = "KeyPathExpr" } Expr getParsedRoot() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/LazyInitializerExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/LazyInitializerExpr.qll index 8f83e5efb42..b38aa2ebd5a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/LazyInitializerExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/LazyInitializerExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class LazyInitializerExprBase extends @lazy_initializer_expr, Expr { - override string getPrimaryQlClass() { result = "LazyInitializerExpr" } + override string getAPrimaryQlClass() { result = "LazyInitializerExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExpr.qll index 06e95f715fb..144278727be 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class LinearFunctionExprBase extends @linear_function_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "LinearFunctionExpr" } + override string getAPrimaryQlClass() { result = "LinearFunctionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExtractOriginalExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExtractOriginalExpr.qll index b16b4a6a800..e03586daacc 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExtractOriginalExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/LinearFunctionExtractOriginalExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class LinearFunctionExtractOriginalExprBase extends @linear_function_extract_original_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "LinearFunctionExtractOriginalExpr" } + override string getAPrimaryQlClass() { result = "LinearFunctionExtractOriginalExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/LinearToDifferentiableFunctionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/LinearToDifferentiableFunctionExpr.qll index 6a9412cff81..e3bd9ae91b9 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/LinearToDifferentiableFunctionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/LinearToDifferentiableFunctionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class LinearToDifferentiableFunctionExprBase extends @linear_to_differentiable_function_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "LinearToDifferentiableFunctionExpr" } + override string getAPrimaryQlClass() { result = "LinearToDifferentiableFunctionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/LoadExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/LoadExpr.qll index 94e2e0419bb..89466753b9a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/LoadExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/LoadExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class LoadExprBase extends @load_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "LoadExpr" } + override string getAPrimaryQlClass() { result = "LoadExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/MagicIdentifierLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/MagicIdentifierLiteralExpr.qll index 8518d632bad..075cb1f955a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/MagicIdentifierLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/MagicIdentifierLiteralExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.BuiltinLiteralExpr class MagicIdentifierLiteralExprBase extends @magic_identifier_literal_expr, BuiltinLiteralExpr { - override string getPrimaryQlClass() { result = "MagicIdentifierLiteralExpr" } + override string getAPrimaryQlClass() { result = "MagicIdentifierLiteralExpr" } string getKind() { magic_identifier_literal_exprs(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/MakeTemporarilyEscapableExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/MakeTemporarilyEscapableExpr.qll index db856980eec..5fe0c7c829d 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/MakeTemporarilyEscapableExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/MakeTemporarilyEscapableExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.expr.OpaqueValueExpr class MakeTemporarilyEscapableExprBase extends @make_temporarily_escapable_expr, Expr { - override string getPrimaryQlClass() { result = "MakeTemporarilyEscapableExpr" } + override string getAPrimaryQlClass() { result = "MakeTemporarilyEscapableExpr" } OpaqueValueExpr getEscapingClosure() { exists(OpaqueValueExpr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/MemberRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/MemberRefExpr.qll index dc8dd448bf7..94bf0d6acf0 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/MemberRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/MemberRefExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.expr.LookupExpr class MemberRefExprBase extends @member_ref_expr, LookupExpr { - override string getPrimaryQlClass() { result = "MemberRefExpr" } + override string getAPrimaryQlClass() { result = "MemberRefExpr" } Expr getBaseExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/MetatypeConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/MetatypeConversionExpr.qll index 582ecef25ec..876074af22e 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/MetatypeConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/MetatypeConversionExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class MetatypeConversionExprBase extends @metatype_conversion_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "MetatypeConversionExpr" } + override string getAPrimaryQlClass() { result = "MetatypeConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/NilLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/NilLiteralExpr.qll index 8a5ec080b28..a0c78e7e567 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/NilLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/NilLiteralExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.LiteralExpr class NilLiteralExprBase extends @nil_literal_expr, LiteralExpr { - override string getPrimaryQlClass() { result = "NilLiteralExpr" } + override string getAPrimaryQlClass() { result = "NilLiteralExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ObjCSelectorExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ObjCSelectorExpr.qll index 1d2f0e9d3a5..9853878d1a2 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ObjCSelectorExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ObjCSelectorExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.decl.AbstractFunctionDecl import codeql.swift.elements.expr.Expr class ObjCSelectorExprBase extends @obj_c_selector_expr, Expr { - override string getPrimaryQlClass() { result = "ObjCSelectorExpr" } + override string getAPrimaryQlClass() { result = "ObjCSelectorExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/ObjectLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ObjectLiteralExpr.qll index b195bd9abc4..247c2cc3cf9 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ObjectLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ObjectLiteralExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.LiteralExpr class ObjectLiteralExprBase extends @object_literal_expr, LiteralExpr { - override string getPrimaryQlClass() { result = "ObjectLiteralExpr" } + override string getAPrimaryQlClass() { result = "ObjectLiteralExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/OneWayExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OneWayExpr.qll index 22cfa7726a7..4bebba18f26 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OneWayExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OneWayExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class OneWayExprBase extends @one_way_expr, Expr { - override string getPrimaryQlClass() { result = "OneWayExpr" } + override string getAPrimaryQlClass() { result = "OneWayExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/OpaqueValueExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OpaqueValueExpr.qll index ba56d0cf3ca..d88483fe6ab 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OpaqueValueExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OpaqueValueExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class OpaqueValueExprBase extends @opaque_value_expr, Expr { - override string getPrimaryQlClass() { result = "OpaqueValueExpr" } + override string getAPrimaryQlClass() { result = "OpaqueValueExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/OpenExistentialExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OpenExistentialExpr.qll index a8e8c335fd2..5ee0583013d 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OpenExistentialExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OpenExistentialExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.expr.OpaqueValueExpr class OpenExistentialExprBase extends @open_existential_expr, Expr { - override string getPrimaryQlClass() { result = "OpenExistentialExpr" } + override string getAPrimaryQlClass() { result = "OpenExistentialExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/OptionalEvaluationExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OptionalEvaluationExpr.qll index 1529d44ba6d..a4ae044d1a4 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OptionalEvaluationExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OptionalEvaluationExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class OptionalEvaluationExprBase extends @optional_evaluation_expr, Expr { - override string getPrimaryQlClass() { result = "OptionalEvaluationExpr" } + override string getAPrimaryQlClass() { result = "OptionalEvaluationExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/OptionalTryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OptionalTryExpr.qll index b62e6fd2865..fa11ff63a72 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OptionalTryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OptionalTryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.AnyTryExpr class OptionalTryExprBase extends @optional_try_expr, AnyTryExpr { - override string getPrimaryQlClass() { result = "OptionalTryExpr" } + override string getAPrimaryQlClass() { result = "OptionalTryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/OtherConstructorDeclRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OtherConstructorDeclRefExpr.qll index e4bf4398924..7d139c9b616 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OtherConstructorDeclRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OtherConstructorDeclRefExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class OtherConstructorDeclRefExprBase extends @other_constructor_decl_ref_expr, Expr { - override string getPrimaryQlClass() { result = "OtherConstructorDeclRefExpr" } + override string getAPrimaryQlClass() { result = "OtherConstructorDeclRefExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/OverloadedDeclRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/OverloadedDeclRefExpr.qll index 3e40c2810a3..96904abb628 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/OverloadedDeclRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/OverloadedDeclRefExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.OverloadSetRefExpr class OverloadedDeclRefExprBase extends @overloaded_decl_ref_expr, OverloadSetRefExpr { - override string getPrimaryQlClass() { result = "OverloadedDeclRefExpr" } + override string getAPrimaryQlClass() { result = "OverloadedDeclRefExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ParenExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ParenExpr.qll index f6b18942e02..c8e92eeea24 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ParenExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ParenExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.IdentityExpr class ParenExprBase extends @paren_expr, IdentityExpr { - override string getPrimaryQlClass() { result = "ParenExpr" } + override string getAPrimaryQlClass() { result = "ParenExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/PointerToPointerExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/PointerToPointerExpr.qll index 9e292a0eb04..dc81ee62119 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/PointerToPointerExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/PointerToPointerExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class PointerToPointerExprBase extends @pointer_to_pointer_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "PointerToPointerExpr" } + override string getAPrimaryQlClass() { result = "PointerToPointerExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/PostfixUnaryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/PostfixUnaryExpr.qll index 6be511150c7..4e3ffb93560 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/PostfixUnaryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/PostfixUnaryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ApplyExpr class PostfixUnaryExprBase extends @postfix_unary_expr, ApplyExpr { - override string getPrimaryQlClass() { result = "PostfixUnaryExpr" } + override string getAPrimaryQlClass() { result = "PostfixUnaryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/PrefixUnaryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/PrefixUnaryExpr.qll index ef31ea8acec..fcc0f15e3bd 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/PrefixUnaryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/PrefixUnaryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ApplyExpr class PrefixUnaryExprBase extends @prefix_unary_expr, ApplyExpr { - override string getPrimaryQlClass() { result = "PrefixUnaryExpr" } + override string getAPrimaryQlClass() { result = "PrefixUnaryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/PropertyWrapperValuePlaceholderExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/PropertyWrapperValuePlaceholderExpr.qll index 51407fef64b..786cca40bca 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/PropertyWrapperValuePlaceholderExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/PropertyWrapperValuePlaceholderExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class PropertyWrapperValuePlaceholderExprBase extends @property_wrapper_value_placeholder_expr, Expr { - override string getPrimaryQlClass() { result = "PropertyWrapperValuePlaceholderExpr" } + override string getAPrimaryQlClass() { result = "PropertyWrapperValuePlaceholderExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/ProtocolMetatypeToObjectExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/ProtocolMetatypeToObjectExpr.qll index 33426b7ab11..d09c67d83b3 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/ProtocolMetatypeToObjectExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/ProtocolMetatypeToObjectExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class ProtocolMetatypeToObjectExprBase extends @protocol_metatype_to_object_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "ProtocolMetatypeToObjectExpr" } + override string getAPrimaryQlClass() { result = "ProtocolMetatypeToObjectExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/RebindSelfInConstructorExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/RebindSelfInConstructorExpr.qll index 569160eb573..101a8c73b09 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/RebindSelfInConstructorExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/RebindSelfInConstructorExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.decl.VarDecl class RebindSelfInConstructorExprBase extends @rebind_self_in_constructor_expr, Expr { - override string getPrimaryQlClass() { result = "RebindSelfInConstructorExpr" } + override string getAPrimaryQlClass() { result = "RebindSelfInConstructorExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/RegexLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/RegexLiteralExpr.qll index 00d524b7f5c..ce4df9d13cb 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/RegexLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/RegexLiteralExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.LiteralExpr class RegexLiteralExprBase extends @regex_literal_expr, LiteralExpr { - override string getPrimaryQlClass() { result = "RegexLiteralExpr" } + override string getAPrimaryQlClass() { result = "RegexLiteralExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/SequenceExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/SequenceExpr.qll index 0b1397147a1..0361c393a72 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/SequenceExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/SequenceExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class SequenceExprBase extends @sequence_expr, Expr { - override string getPrimaryQlClass() { result = "SequenceExpr" } + override string getAPrimaryQlClass() { result = "SequenceExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/StringLiteralExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/StringLiteralExpr.qll index beb1a71c829..bb8e4174ad7 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/StringLiteralExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/StringLiteralExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.BuiltinLiteralExpr class StringLiteralExprBase extends @string_literal_expr, BuiltinLiteralExpr { - override string getPrimaryQlClass() { result = "StringLiteralExpr" } + override string getAPrimaryQlClass() { result = "StringLiteralExpr" } string getValue() { string_literal_exprs(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/StringToPointerExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/StringToPointerExpr.qll index 19553c9936a..ec679e974fb 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/StringToPointerExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/StringToPointerExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class StringToPointerExprBase extends @string_to_pointer_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "StringToPointerExpr" } + override string getAPrimaryQlClass() { result = "StringToPointerExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/SubscriptExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/SubscriptExpr.qll index 98e07ecd25b..cddbe8e8a2b 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/SubscriptExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/SubscriptExpr.qll @@ -5,7 +5,7 @@ import codeql.swift.elements.decl.GenericContext import codeql.swift.elements.expr.LookupExpr class SubscriptExprBase extends @subscript_expr, GenericContext, LookupExpr { - override string getPrimaryQlClass() { result = "SubscriptExpr" } + override string getAPrimaryQlClass() { result = "SubscriptExpr" } Expr getBaseExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/SuperRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/SuperRefExpr.qll index f8c6bfa740b..3513af5c0d7 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/SuperRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/SuperRefExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.decl.VarDecl class SuperRefExprBase extends @super_ref_expr, Expr { - override string getPrimaryQlClass() { result = "SuperRefExpr" } + override string getAPrimaryQlClass() { result = "SuperRefExpr" } VarDecl getSelf() { exists(VarDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/TapExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/TapExpr.qll index 1dfc2c39bce..a61533704e6 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/TapExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/TapExpr.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.decl.VarDecl class TapExprBase extends @tap_expr, Expr { - override string getPrimaryQlClass() { result = "TapExpr" } + override string getAPrimaryQlClass() { result = "TapExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/TryExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/TryExpr.qll index ccffde14675..2e14a85bd16 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/TryExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/TryExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.AnyTryExpr class TryExprBase extends @try_expr, AnyTryExpr { - override string getPrimaryQlClass() { result = "TryExpr" } + override string getAPrimaryQlClass() { result = "TryExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/TupleElementExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/TupleElementExpr.qll index 4f2e3b54a9c..4281d8d875c 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/TupleElementExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/TupleElementExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class TupleElementExprBase extends @tuple_element_expr, Expr { - override string getPrimaryQlClass() { result = "TupleElementExpr" } + override string getAPrimaryQlClass() { result = "TupleElementExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/TupleExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/TupleExpr.qll index 8024390f677..b985d64d111 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/TupleExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/TupleExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class TupleExprBase extends @tuple_expr, Expr { - override string getPrimaryQlClass() { result = "TupleExpr" } + override string getAPrimaryQlClass() { result = "TupleExpr" } Expr getElement(int index) { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/TypeExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/TypeExpr.qll index a26c599811c..8b9e238b3ca 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/TypeExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/TypeExpr.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.typerepr.TypeRepr class TypeExprBase extends @type_expr, Expr { - override string getPrimaryQlClass() { result = "TypeExpr" } + override string getAPrimaryQlClass() { result = "TypeExpr" } TypeRepr getTypeRepr() { exists(TypeRepr x | diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnderlyingToOpaqueExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnderlyingToOpaqueExpr.qll index 9a423be665f..314b404b11b 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnderlyingToOpaqueExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnderlyingToOpaqueExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class UnderlyingToOpaqueExprBase extends @underlying_to_opaque_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "UnderlyingToOpaqueExpr" } + override string getAPrimaryQlClass() { result = "UnderlyingToOpaqueExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnevaluatedInstanceExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnevaluatedInstanceExpr.qll index c64186f12ef..659f52e3fe2 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnevaluatedInstanceExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnevaluatedInstanceExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class UnevaluatedInstanceExprBase extends @unevaluated_instance_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "UnevaluatedInstanceExpr" } + override string getAPrimaryQlClass() { result = "UnevaluatedInstanceExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDeclRefExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDeclRefExpr.qll index 57a3e87d235..d30ac8d5d10 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDeclRefExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDeclRefExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class UnresolvedDeclRefExprBase extends @unresolved_decl_ref_expr, Expr { - override string getPrimaryQlClass() { result = "UnresolvedDeclRefExpr" } + override string getAPrimaryQlClass() { result = "UnresolvedDeclRefExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDotExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDotExpr.qll index 96db0e895ce..4aa821a1476 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDotExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedDotExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class UnresolvedDotExprBase extends @unresolved_dot_expr, Expr { - override string getPrimaryQlClass() { result = "UnresolvedDotExpr" } + override string getAPrimaryQlClass() { result = "UnresolvedDotExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberChainResultExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberChainResultExpr.qll index a2da6922c26..fde8b29000e 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberChainResultExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberChainResultExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.IdentityExpr class UnresolvedMemberChainResultExprBase extends @unresolved_member_chain_result_expr, IdentityExpr { - override string getPrimaryQlClass() { result = "UnresolvedMemberChainResultExpr" } + override string getAPrimaryQlClass() { result = "UnresolvedMemberChainResultExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberExpr.qll index 2d5f737f294..5cb908bdd18 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedMemberExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class UnresolvedMemberExprBase extends @unresolved_member_expr, Expr { - override string getPrimaryQlClass() { result = "UnresolvedMemberExpr" } + override string getAPrimaryQlClass() { result = "UnresolvedMemberExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedPatternExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedPatternExpr.qll index 5d2e88636c8..8d03b2079aa 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedPatternExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedPatternExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class UnresolvedPatternExprBase extends @unresolved_pattern_expr, Expr { - override string getPrimaryQlClass() { result = "UnresolvedPatternExpr" } + override string getAPrimaryQlClass() { result = "UnresolvedPatternExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedSpecializeExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedSpecializeExpr.qll index e61e89739b1..6109728e089 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedSpecializeExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedSpecializeExpr.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.expr.Expr class UnresolvedSpecializeExprBase extends @unresolved_specialize_expr, Expr { - override string getPrimaryQlClass() { result = "UnresolvedSpecializeExpr" } + override string getAPrimaryQlClass() { result = "UnresolvedSpecializeExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedTypeConversionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedTypeConversionExpr.qll index ac24c0426ad..fb4f5259c0a 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/UnresolvedTypeConversionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/UnresolvedTypeConversionExpr.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.expr.ImplicitConversionExpr class UnresolvedTypeConversionExprBase extends @unresolved_type_conversion_expr, ImplicitConversionExpr { - override string getPrimaryQlClass() { result = "UnresolvedTypeConversionExpr" } + override string getAPrimaryQlClass() { result = "UnresolvedTypeConversionExpr" } } diff --git a/swift/ql/lib/codeql/swift/generated/expr/VarargExpansionExpr.qll b/swift/ql/lib/codeql/swift/generated/expr/VarargExpansionExpr.qll index 6061852d7ca..b72261cf82f 100644 --- a/swift/ql/lib/codeql/swift/generated/expr/VarargExpansionExpr.qll +++ b/swift/ql/lib/codeql/swift/generated/expr/VarargExpansionExpr.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.expr.Expr class VarargExpansionExprBase extends @vararg_expansion_expr, Expr { - override string getPrimaryQlClass() { result = "VarargExpansionExpr" } + override string getAPrimaryQlClass() { result = "VarargExpansionExpr" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/AnyPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/AnyPattern.qll index f211968136c..d4349ccaa7e 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/AnyPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/AnyPattern.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.pattern.Pattern class AnyPatternBase extends @any_pattern, Pattern { - override string getPrimaryQlClass() { result = "AnyPattern" } + override string getAPrimaryQlClass() { result = "AnyPattern" } } diff --git a/swift/ql/lib/codeql/swift/generated/pattern/BindingPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/BindingPattern.qll index 748c71fddb8..0303ddab467 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/BindingPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/BindingPattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class BindingPatternBase extends @binding_pattern, Pattern { - override string getPrimaryQlClass() { result = "BindingPattern" } + override string getAPrimaryQlClass() { result = "BindingPattern" } Pattern getSubPattern() { exists(Pattern x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/BoolPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/BoolPattern.qll index cc4902320c4..2890e662e28 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/BoolPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/BoolPattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class BoolPatternBase extends @bool_pattern, Pattern { - override string getPrimaryQlClass() { result = "BoolPattern" } + override string getAPrimaryQlClass() { result = "BoolPattern" } boolean getValue() { bool_patterns(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/pattern/EnumElementPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/EnumElementPattern.qll index 1f9a27886b4..e0df35b15a0 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/EnumElementPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/EnumElementPattern.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.decl.EnumElementDecl import codeql.swift.elements.pattern.Pattern class EnumElementPatternBase extends @enum_element_pattern, Pattern { - override string getPrimaryQlClass() { result = "EnumElementPattern" } + override string getAPrimaryQlClass() { result = "EnumElementPattern" } EnumElementDecl getElement() { exists(EnumElementDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/ExprPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/ExprPattern.qll index 49946d7bc59..75fdb81cad9 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/ExprPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/ExprPattern.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.pattern.Pattern class ExprPatternBase extends @expr_pattern, Pattern { - override string getPrimaryQlClass() { result = "ExprPattern" } + override string getAPrimaryQlClass() { result = "ExprPattern" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/IsPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/IsPattern.qll index d491a253c28..8caf5493b36 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/IsPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/IsPattern.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.pattern.Pattern import codeql.swift.elements.typerepr.TypeRepr class IsPatternBase extends @is_pattern, Pattern { - override string getPrimaryQlClass() { result = "IsPattern" } + override string getAPrimaryQlClass() { result = "IsPattern" } TypeRepr getCastTypeRepr() { exists(TypeRepr x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/NamedPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/NamedPattern.qll index d7d43f0b738..a3d382fda9e 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/NamedPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/NamedPattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class NamedPatternBase extends @named_pattern, Pattern { - override string getPrimaryQlClass() { result = "NamedPattern" } + override string getAPrimaryQlClass() { result = "NamedPattern" } string getName() { named_patterns(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/pattern/OptionalSomePattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/OptionalSomePattern.qll index 0ca8700175b..3517777b9ce 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/OptionalSomePattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/OptionalSomePattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class OptionalSomePatternBase extends @optional_some_pattern, Pattern { - override string getPrimaryQlClass() { result = "OptionalSomePattern" } + override string getAPrimaryQlClass() { result = "OptionalSomePattern" } Pattern getSubPattern() { exists(Pattern x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/ParenPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/ParenPattern.qll index 815df89026c..63d5e2909ec 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/ParenPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/ParenPattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class ParenPatternBase extends @paren_pattern, Pattern { - override string getPrimaryQlClass() { result = "ParenPattern" } + override string getAPrimaryQlClass() { result = "ParenPattern" } Pattern getSubPattern() { exists(Pattern x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/TuplePattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/TuplePattern.qll index 86aad12c87d..b9eb01c83c9 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/TuplePattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/TuplePattern.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.pattern.Pattern class TuplePatternBase extends @tuple_pattern, Pattern { - override string getPrimaryQlClass() { result = "TuplePattern" } + override string getAPrimaryQlClass() { result = "TuplePattern" } Pattern getElement(int index) { exists(Pattern x | diff --git a/swift/ql/lib/codeql/swift/generated/pattern/TypedPattern.qll b/swift/ql/lib/codeql/swift/generated/pattern/TypedPattern.qll index 8eeb3f95744..9a16c9cfe02 100644 --- a/swift/ql/lib/codeql/swift/generated/pattern/TypedPattern.qll +++ b/swift/ql/lib/codeql/swift/generated/pattern/TypedPattern.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.pattern.Pattern import codeql.swift.elements.typerepr.TypeRepr class TypedPatternBase extends @typed_pattern, Pattern { - override string getPrimaryQlClass() { result = "TypedPattern" } + override string getAPrimaryQlClass() { result = "TypedPattern" } Pattern getSubPattern() { exists(Pattern x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/BraceStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/BraceStmt.qll index 4195c11a226..0cb37ff31bf 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/BraceStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/BraceStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.AstNode import codeql.swift.elements.stmt.Stmt class BraceStmtBase extends @brace_stmt, Stmt { - override string getPrimaryQlClass() { result = "BraceStmt" } + override string getAPrimaryQlClass() { result = "BraceStmt" } AstNode getElement(int index) { exists(AstNode x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/BreakStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/BreakStmt.qll index 34e6913e79d..05ba4de8fd3 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/BreakStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/BreakStmt.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.stmt.Stmt class BreakStmtBase extends @break_stmt, Stmt { - override string getPrimaryQlClass() { result = "BreakStmt" } + override string getAPrimaryQlClass() { result = "BreakStmt" } string getTargetName() { break_stmt_target_names(this, result) } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/CaseLabelItem.qll b/swift/ql/lib/codeql/swift/generated/stmt/CaseLabelItem.qll index 9f51f7da38f..f4f00f285b0 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/CaseLabelItem.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/CaseLabelItem.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.pattern.Pattern class CaseLabelItemBase extends @case_label_item, AstNode { - override string getPrimaryQlClass() { result = "CaseLabelItem" } + override string getAPrimaryQlClass() { result = "CaseLabelItem" } Pattern getPattern() { exists(Pattern x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/CaseStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/CaseStmt.qll index 738fca6ae43..d7111914429 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/CaseStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/CaseStmt.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.stmt.Stmt import codeql.swift.elements.decl.VarDecl class CaseStmtBase extends @case_stmt, Stmt { - override string getPrimaryQlClass() { result = "CaseStmt" } + override string getAPrimaryQlClass() { result = "CaseStmt" } Stmt getBody() { exists(Stmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ConditionElement.qll b/swift/ql/lib/codeql/swift/generated/stmt/ConditionElement.qll index efde6e9a5e7..eb68c35bdf0 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/ConditionElement.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/ConditionElement.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.Locatable import codeql.swift.elements.pattern.Pattern class ConditionElementBase extends @condition_element, Locatable { - override string getPrimaryQlClass() { result = "ConditionElement" } + override string getAPrimaryQlClass() { result = "ConditionElement" } Expr getBoolean() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ContinueStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/ContinueStmt.qll index 1c03ce6521b..10e6b2ac302 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/ContinueStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/ContinueStmt.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.stmt.Stmt class ContinueStmtBase extends @continue_stmt, Stmt { - override string getPrimaryQlClass() { result = "ContinueStmt" } + override string getAPrimaryQlClass() { result = "ContinueStmt" } string getTargetName() { continue_stmt_target_names(this, result) } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/DeferStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/DeferStmt.qll index 910b18c233d..7edd92fe917 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/DeferStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/DeferStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.BraceStmt import codeql.swift.elements.stmt.Stmt class DeferStmtBase extends @defer_stmt, Stmt { - override string getPrimaryQlClass() { result = "DeferStmt" } + override string getAPrimaryQlClass() { result = "DeferStmt" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/DoCatchStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/DoCatchStmt.qll index 56f8224b98a..7f98906d007 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/DoCatchStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/DoCatchStmt.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.stmt.LabeledStmt import codeql.swift.elements.stmt.Stmt class DoCatchStmtBase extends @do_catch_stmt, LabeledStmt { - override string getPrimaryQlClass() { result = "DoCatchStmt" } + override string getAPrimaryQlClass() { result = "DoCatchStmt" } Stmt getBody() { exists(Stmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/DoStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/DoStmt.qll index 7cfa724b1e6..f83646426e4 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/DoStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/DoStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.BraceStmt import codeql.swift.elements.stmt.LabeledStmt class DoStmtBase extends @do_stmt, LabeledStmt { - override string getPrimaryQlClass() { result = "DoStmt" } + override string getAPrimaryQlClass() { result = "DoStmt" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/FailStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/FailStmt.qll index dc5ce43c903..15f69def40d 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/FailStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/FailStmt.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.stmt.Stmt class FailStmtBase extends @fail_stmt, Stmt { - override string getPrimaryQlClass() { result = "FailStmt" } + override string getAPrimaryQlClass() { result = "FailStmt" } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/FallthroughStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/FallthroughStmt.qll index 1adfbbd972f..5faaac0ad9b 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/FallthroughStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/FallthroughStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.CaseStmt import codeql.swift.elements.stmt.Stmt class FallthroughStmtBase extends @fallthrough_stmt, Stmt { - override string getPrimaryQlClass() { result = "FallthroughStmt" } + override string getAPrimaryQlClass() { result = "FallthroughStmt" } CaseStmt getFallthroughSource() { exists(CaseStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ForEachStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/ForEachStmt.qll index ad1fb14ee8e..f75e0a6f08b 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/ForEachStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/ForEachStmt.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.stmt.LabeledStmt class ForEachStmtBase extends @for_each_stmt, LabeledStmt { - override string getPrimaryQlClass() { result = "ForEachStmt" } + override string getAPrimaryQlClass() { result = "ForEachStmt" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/GuardStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/GuardStmt.qll index 933bd56b2df..7ce5fae33a2 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/GuardStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/GuardStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.BraceStmt import codeql.swift.elements.stmt.LabeledConditionalStmt class GuardStmtBase extends @guard_stmt, LabeledConditionalStmt { - override string getPrimaryQlClass() { result = "GuardStmt" } + override string getAPrimaryQlClass() { result = "GuardStmt" } BraceStmt getBody() { exists(BraceStmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/IfStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/IfStmt.qll index 381c2cc9097..4311173fe51 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/IfStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/IfStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.LabeledConditionalStmt import codeql.swift.elements.stmt.Stmt class IfStmtBase extends @if_stmt, LabeledConditionalStmt { - override string getPrimaryQlClass() { result = "IfStmt" } + override string getAPrimaryQlClass() { result = "IfStmt" } Stmt getThen() { exists(Stmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/PoundAssertStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/PoundAssertStmt.qll index 9538899c285..afbd1ffdf13 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/PoundAssertStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/PoundAssertStmt.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.stmt.Stmt class PoundAssertStmtBase extends @pound_assert_stmt, Stmt { - override string getPrimaryQlClass() { result = "PoundAssertStmt" } + override string getAPrimaryQlClass() { result = "PoundAssertStmt" } } diff --git a/swift/ql/lib/codeql/swift/generated/stmt/RepeatWhileStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/RepeatWhileStmt.qll index 688847947c8..6d03dcc07a9 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/RepeatWhileStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/RepeatWhileStmt.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.stmt.LabeledStmt import codeql.swift.elements.stmt.Stmt class RepeatWhileStmtBase extends @repeat_while_stmt, LabeledStmt { - override string getPrimaryQlClass() { result = "RepeatWhileStmt" } + override string getAPrimaryQlClass() { result = "RepeatWhileStmt" } Expr getCondition() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ReturnStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/ReturnStmt.qll index 167d1795d19..dcdaaae19b6 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/ReturnStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/ReturnStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.stmt.Stmt class ReturnStmtBase extends @return_stmt, Stmt { - override string getPrimaryQlClass() { result = "ReturnStmt" } + override string getAPrimaryQlClass() { result = "ReturnStmt" } Expr getResult() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/StmtCondition.qll b/swift/ql/lib/codeql/swift/generated/stmt/StmtCondition.qll index 19e0614f192..94aa0b746d2 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/StmtCondition.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/StmtCondition.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.AstNode import codeql.swift.elements.stmt.ConditionElement class StmtConditionBase extends @stmt_condition, AstNode { - override string getPrimaryQlClass() { result = "StmtCondition" } + override string getAPrimaryQlClass() { result = "StmtCondition" } ConditionElement getElement(int index) { exists(ConditionElement x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/SwitchStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/SwitchStmt.qll index 9bc1223aa59..79bd3116cfe 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/SwitchStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/SwitchStmt.qll @@ -4,7 +4,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.stmt.LabeledStmt class SwitchStmtBase extends @switch_stmt, LabeledStmt { - override string getPrimaryQlClass() { result = "SwitchStmt" } + override string getAPrimaryQlClass() { result = "SwitchStmt" } Expr getExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/ThrowStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/ThrowStmt.qll index 5d542ced5b0..7ede67545bb 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/ThrowStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/ThrowStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.expr.Expr import codeql.swift.elements.stmt.Stmt class ThrowStmtBase extends @throw_stmt, Stmt { - override string getPrimaryQlClass() { result = "ThrowStmt" } + override string getAPrimaryQlClass() { result = "ThrowStmt" } Expr getSubExpr() { exists(Expr x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/WhileStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/WhileStmt.qll index e4a197593d6..959a129834b 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/WhileStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/WhileStmt.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.stmt.LabeledConditionalStmt import codeql.swift.elements.stmt.Stmt class WhileStmtBase extends @while_stmt, LabeledConditionalStmt { - override string getPrimaryQlClass() { result = "WhileStmt" } + override string getAPrimaryQlClass() { result = "WhileStmt" } Stmt getBody() { exists(Stmt x | diff --git a/swift/ql/lib/codeql/swift/generated/stmt/YieldStmt.qll b/swift/ql/lib/codeql/swift/generated/stmt/YieldStmt.qll index 544fdd9751e..4cc32d764e1 100644 --- a/swift/ql/lib/codeql/swift/generated/stmt/YieldStmt.qll +++ b/swift/ql/lib/codeql/swift/generated/stmt/YieldStmt.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.stmt.Stmt class YieldStmtBase extends @yield_stmt, Stmt { - override string getPrimaryQlClass() { result = "YieldStmt" } + override string getAPrimaryQlClass() { result = "YieldStmt" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ArraySliceType.qll b/swift/ql/lib/codeql/swift/generated/type/ArraySliceType.qll index 2b029e0f741..bb132bc2c72 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ArraySliceType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ArraySliceType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.UnarySyntaxSugarType class ArraySliceTypeBase extends @array_slice_type, UnarySyntaxSugarType { - override string getPrimaryQlClass() { result = "ArraySliceType" } + override string getAPrimaryQlClass() { result = "ArraySliceType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BoundGenericClassType.qll b/swift/ql/lib/codeql/swift/generated/type/BoundGenericClassType.qll index d7bf09fddd2..3d2a78b2309 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BoundGenericClassType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BoundGenericClassType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BoundGenericType class BoundGenericClassTypeBase extends @bound_generic_class_type, BoundGenericType { - override string getPrimaryQlClass() { result = "BoundGenericClassType" } + override string getAPrimaryQlClass() { result = "BoundGenericClassType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BoundGenericEnumType.qll b/swift/ql/lib/codeql/swift/generated/type/BoundGenericEnumType.qll index e73f964c395..57103dce7f7 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BoundGenericEnumType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BoundGenericEnumType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BoundGenericType class BoundGenericEnumTypeBase extends @bound_generic_enum_type, BoundGenericType { - override string getPrimaryQlClass() { result = "BoundGenericEnumType" } + override string getAPrimaryQlClass() { result = "BoundGenericEnumType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BoundGenericStructType.qll b/swift/ql/lib/codeql/swift/generated/type/BoundGenericStructType.qll index 1b7a82b165a..2f5d514488a 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BoundGenericStructType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BoundGenericStructType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BoundGenericType class BoundGenericStructTypeBase extends @bound_generic_struct_type, BoundGenericType { - override string getPrimaryQlClass() { result = "BoundGenericStructType" } + override string getAPrimaryQlClass() { result = "BoundGenericStructType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinBridgeObjectType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinBridgeObjectType.qll index d9d99ea7621..8e18276ef2c 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinBridgeObjectType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinBridgeObjectType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinBridgeObjectTypeBase extends @builtin_bridge_object_type, BuiltinType { - override string getPrimaryQlClass() { result = "BuiltinBridgeObjectType" } + override string getAPrimaryQlClass() { result = "BuiltinBridgeObjectType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinDefaultActorStorageType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinDefaultActorStorageType.qll index 88766c8a91b..cdc635f42a7 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinDefaultActorStorageType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinDefaultActorStorageType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinDefaultActorStorageTypeBase extends @builtin_default_actor_storage_type, BuiltinType { - override string getPrimaryQlClass() { result = "BuiltinDefaultActorStorageType" } + override string getAPrimaryQlClass() { result = "BuiltinDefaultActorStorageType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinExecutorType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinExecutorType.qll index fb49989bf5e..32444cc4704 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinExecutorType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinExecutorType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinExecutorTypeBase extends @builtin_executor_type, BuiltinType { - override string getPrimaryQlClass() { result = "BuiltinExecutorType" } + override string getAPrimaryQlClass() { result = "BuiltinExecutorType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinFloatType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinFloatType.qll index 32b1244b0ef..509e66a070c 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinFloatType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinFloatType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinFloatTypeBase extends @builtin_float_type, BuiltinType { - override string getPrimaryQlClass() { result = "BuiltinFloatType" } + override string getAPrimaryQlClass() { result = "BuiltinFloatType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerLiteralType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerLiteralType.qll index 2e61b1008cf..88c8b0dd3db 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerLiteralType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerLiteralType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyBuiltinIntegerType class BuiltinIntegerLiteralTypeBase extends @builtin_integer_literal_type, AnyBuiltinIntegerType { - override string getPrimaryQlClass() { result = "BuiltinIntegerLiteralType" } + override string getAPrimaryQlClass() { result = "BuiltinIntegerLiteralType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerType.qll index eaeb8656e7d..a725a9001c3 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinIntegerType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyBuiltinIntegerType class BuiltinIntegerTypeBase extends @builtin_integer_type, AnyBuiltinIntegerType { - override string getPrimaryQlClass() { result = "BuiltinIntegerType" } + override string getAPrimaryQlClass() { result = "BuiltinIntegerType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinJobType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinJobType.qll index f2e8fc76c73..4f89a9a02c2 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinJobType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinJobType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinJobTypeBase extends @builtin_job_type, BuiltinType { - override string getPrimaryQlClass() { result = "BuiltinJobType" } + override string getAPrimaryQlClass() { result = "BuiltinJobType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinNativeObjectType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinNativeObjectType.qll index 6382b94bc1b..26d84273d89 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinNativeObjectType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinNativeObjectType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinNativeObjectTypeBase extends @builtin_native_object_type, BuiltinType { - override string getPrimaryQlClass() { result = "BuiltinNativeObjectType" } + override string getAPrimaryQlClass() { result = "BuiltinNativeObjectType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinRawPointerType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinRawPointerType.qll index f56d5921d30..509f0eddba6 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinRawPointerType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinRawPointerType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinRawPointerTypeBase extends @builtin_raw_pointer_type, BuiltinType { - override string getPrimaryQlClass() { result = "BuiltinRawPointerType" } + override string getAPrimaryQlClass() { result = "BuiltinRawPointerType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinRawUnsafeContinuationType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinRawUnsafeContinuationType.qll index d9edb49d4b3..4fd93326e5e 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinRawUnsafeContinuationType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinRawUnsafeContinuationType.qll @@ -3,5 +3,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinRawUnsafeContinuationTypeBase extends @builtin_raw_unsafe_continuation_type, BuiltinType { - override string getPrimaryQlClass() { result = "BuiltinRawUnsafeContinuationType" } + override string getAPrimaryQlClass() { result = "BuiltinRawUnsafeContinuationType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinUnsafeValueBufferType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinUnsafeValueBufferType.qll index 02e200cb39e..76f2beb8d95 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinUnsafeValueBufferType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinUnsafeValueBufferType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinUnsafeValueBufferTypeBase extends @builtin_unsafe_value_buffer_type, BuiltinType { - override string getPrimaryQlClass() { result = "BuiltinUnsafeValueBufferType" } + override string getAPrimaryQlClass() { result = "BuiltinUnsafeValueBufferType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/BuiltinVectorType.qll b/swift/ql/lib/codeql/swift/generated/type/BuiltinVectorType.qll index 3c1b612470f..493a64f7717 100644 --- a/swift/ql/lib/codeql/swift/generated/type/BuiltinVectorType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/BuiltinVectorType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.BuiltinType class BuiltinVectorTypeBase extends @builtin_vector_type, BuiltinType { - override string getPrimaryQlClass() { result = "BuiltinVectorType" } + override string getAPrimaryQlClass() { result = "BuiltinVectorType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ClassType.qll b/swift/ql/lib/codeql/swift/generated/type/ClassType.qll index 5fbb1ea181c..377bf3dc4d3 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ClassType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ClassType.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.decl.ClassDecl import codeql.swift.elements.type.NominalType class ClassTypeBase extends @class_type, NominalType { - override string getPrimaryQlClass() { result = "ClassType" } + override string getAPrimaryQlClass() { result = "ClassType" } ClassDecl getDecl() { exists(ClassDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/type/DependentMemberType.qll b/swift/ql/lib/codeql/swift/generated/type/DependentMemberType.qll index 9724322349c..e7cc3141023 100644 --- a/swift/ql/lib/codeql/swift/generated/type/DependentMemberType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/DependentMemberType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class DependentMemberTypeBase extends @dependent_member_type, Type { - override string getPrimaryQlClass() { result = "DependentMemberType" } + override string getAPrimaryQlClass() { result = "DependentMemberType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/DictionaryType.qll b/swift/ql/lib/codeql/swift/generated/type/DictionaryType.qll index 8c469221d6d..8fa8ea3cdf6 100644 --- a/swift/ql/lib/codeql/swift/generated/type/DictionaryType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/DictionaryType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.SyntaxSugarType class DictionaryTypeBase extends @dictionary_type, SyntaxSugarType { - override string getPrimaryQlClass() { result = "DictionaryType" } + override string getAPrimaryQlClass() { result = "DictionaryType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/DynamicSelfType.qll b/swift/ql/lib/codeql/swift/generated/type/DynamicSelfType.qll index cc1bd77d0ca..ff3eeb90b87 100644 --- a/swift/ql/lib/codeql/swift/generated/type/DynamicSelfType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/DynamicSelfType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class DynamicSelfTypeBase extends @dynamic_self_type, Type { - override string getPrimaryQlClass() { result = "DynamicSelfType" } + override string getAPrimaryQlClass() { result = "DynamicSelfType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/EnumType.qll b/swift/ql/lib/codeql/swift/generated/type/EnumType.qll index 67b35b77327..99e2cea2fcd 100644 --- a/swift/ql/lib/codeql/swift/generated/type/EnumType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/EnumType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.NominalType class EnumTypeBase extends @enum_type, NominalType { - override string getPrimaryQlClass() { result = "EnumType" } + override string getAPrimaryQlClass() { result = "EnumType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ErrorType.qll b/swift/ql/lib/codeql/swift/generated/type/ErrorType.qll index 9ca5121caba..f7156ec110c 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ErrorType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ErrorType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class ErrorTypeBase extends @error_type, Type { - override string getPrimaryQlClass() { result = "ErrorType" } + override string getAPrimaryQlClass() { result = "ErrorType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ExistentialMetatypeType.qll b/swift/ql/lib/codeql/swift/generated/type/ExistentialMetatypeType.qll index f833a4ecb9c..fcdd1a52224 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ExistentialMetatypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ExistentialMetatypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyMetatypeType class ExistentialMetatypeTypeBase extends @existential_metatype_type, AnyMetatypeType { - override string getPrimaryQlClass() { result = "ExistentialMetatypeType" } + override string getAPrimaryQlClass() { result = "ExistentialMetatypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ExistentialType.qll b/swift/ql/lib/codeql/swift/generated/type/ExistentialType.qll index 349c5f2cd64..e2d92d553de 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ExistentialType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ExistentialType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class ExistentialTypeBase extends @existential_type, Type { - override string getPrimaryQlClass() { result = "ExistentialType" } + override string getAPrimaryQlClass() { result = "ExistentialType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/FunctionType.qll b/swift/ql/lib/codeql/swift/generated/type/FunctionType.qll index e5bd2a38e61..dcb5da46bbd 100644 --- a/swift/ql/lib/codeql/swift/generated/type/FunctionType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/FunctionType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyFunctionType class FunctionTypeBase extends @function_type, AnyFunctionType { - override string getPrimaryQlClass() { result = "FunctionType" } + override string getAPrimaryQlClass() { result = "FunctionType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/GenericFunctionType.qll b/swift/ql/lib/codeql/swift/generated/type/GenericFunctionType.qll index 2094eabead8..7b34e262d03 100644 --- a/swift/ql/lib/codeql/swift/generated/type/GenericFunctionType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/GenericFunctionType.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.type.AnyFunctionType import codeql.swift.elements.type.GenericTypeParamType class GenericFunctionTypeBase extends @generic_function_type, AnyFunctionType { - override string getPrimaryQlClass() { result = "GenericFunctionType" } + override string getAPrimaryQlClass() { result = "GenericFunctionType" } GenericTypeParamType getGenericParam(int index) { exists(GenericTypeParamType x | diff --git a/swift/ql/lib/codeql/swift/generated/type/GenericTypeParamType.qll b/swift/ql/lib/codeql/swift/generated/type/GenericTypeParamType.qll index 848b6ca728e..c0b13904806 100644 --- a/swift/ql/lib/codeql/swift/generated/type/GenericTypeParamType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/GenericTypeParamType.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.type.SubstitutableType class GenericTypeParamTypeBase extends @generic_type_param_type, SubstitutableType { - override string getPrimaryQlClass() { result = "GenericTypeParamType" } + override string getAPrimaryQlClass() { result = "GenericTypeParamType" } string getName() { generic_type_param_types(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/type/InOutType.qll b/swift/ql/lib/codeql/swift/generated/type/InOutType.qll index dc0ed86c0f6..4d54e929657 100644 --- a/swift/ql/lib/codeql/swift/generated/type/InOutType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/InOutType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class InOutTypeBase extends @in_out_type, Type { - override string getPrimaryQlClass() { result = "InOutType" } + override string getAPrimaryQlClass() { result = "InOutType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/LValueType.qll b/swift/ql/lib/codeql/swift/generated/type/LValueType.qll index abba3937ddc..df0f433ac84 100644 --- a/swift/ql/lib/codeql/swift/generated/type/LValueType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/LValueType.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.type.Type class LValueTypeBase extends @l_value_type, Type { - override string getPrimaryQlClass() { result = "LValueType" } + override string getAPrimaryQlClass() { result = "LValueType" } Type getObjectType() { exists(Type x | diff --git a/swift/ql/lib/codeql/swift/generated/type/MetatypeType.qll b/swift/ql/lib/codeql/swift/generated/type/MetatypeType.qll index 73ecd90e57d..e6663f3b357 100644 --- a/swift/ql/lib/codeql/swift/generated/type/MetatypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/MetatypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyMetatypeType class MetatypeTypeBase extends @metatype_type, AnyMetatypeType { - override string getPrimaryQlClass() { result = "MetatypeType" } + override string getAPrimaryQlClass() { result = "MetatypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ModuleType.qll b/swift/ql/lib/codeql/swift/generated/type/ModuleType.qll index d3930e98f16..91da39854d7 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ModuleType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ModuleType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class ModuleTypeBase extends @module_type, Type { - override string getPrimaryQlClass() { result = "ModuleType" } + override string getAPrimaryQlClass() { result = "ModuleType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/NestedArchetypeType.qll b/swift/ql/lib/codeql/swift/generated/type/NestedArchetypeType.qll index dcbc5e37382..7306e294785 100644 --- a/swift/ql/lib/codeql/swift/generated/type/NestedArchetypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/NestedArchetypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ArchetypeType class NestedArchetypeTypeBase extends @nested_archetype_type, ArchetypeType { - override string getPrimaryQlClass() { result = "NestedArchetypeType" } + override string getAPrimaryQlClass() { result = "NestedArchetypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/OpaqueTypeArchetypeType.qll b/swift/ql/lib/codeql/swift/generated/type/OpaqueTypeArchetypeType.qll index a891f5fa01c..c0a1f637f3c 100644 --- a/swift/ql/lib/codeql/swift/generated/type/OpaqueTypeArchetypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/OpaqueTypeArchetypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ArchetypeType class OpaqueTypeArchetypeTypeBase extends @opaque_type_archetype_type, ArchetypeType { - override string getPrimaryQlClass() { result = "OpaqueTypeArchetypeType" } + override string getAPrimaryQlClass() { result = "OpaqueTypeArchetypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/OpenedArchetypeType.qll b/swift/ql/lib/codeql/swift/generated/type/OpenedArchetypeType.qll index 8060c387cb3..2d723dfb10d 100644 --- a/swift/ql/lib/codeql/swift/generated/type/OpenedArchetypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/OpenedArchetypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ArchetypeType class OpenedArchetypeTypeBase extends @opened_archetype_type, ArchetypeType { - override string getPrimaryQlClass() { result = "OpenedArchetypeType" } + override string getAPrimaryQlClass() { result = "OpenedArchetypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/OptionalType.qll b/swift/ql/lib/codeql/swift/generated/type/OptionalType.qll index 6a9002753ae..a814cf4d002 100644 --- a/swift/ql/lib/codeql/swift/generated/type/OptionalType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/OptionalType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.UnarySyntaxSugarType class OptionalTypeBase extends @optional_type, UnarySyntaxSugarType { - override string getPrimaryQlClass() { result = "OptionalType" } + override string getAPrimaryQlClass() { result = "OptionalType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ParenType.qll b/swift/ql/lib/codeql/swift/generated/type/ParenType.qll index a1124af7033..036a551f4e4 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ParenType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ParenType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.SugarType class ParenTypeBase extends @paren_type, SugarType { - override string getPrimaryQlClass() { result = "ParenType" } + override string getAPrimaryQlClass() { result = "ParenType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/PlaceholderType.qll b/swift/ql/lib/codeql/swift/generated/type/PlaceholderType.qll index 7f5e292d326..134bdb7a6c8 100644 --- a/swift/ql/lib/codeql/swift/generated/type/PlaceholderType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/PlaceholderType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class PlaceholderTypeBase extends @placeholder_type, Type { - override string getPrimaryQlClass() { result = "PlaceholderType" } + override string getAPrimaryQlClass() { result = "PlaceholderType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/PrimaryArchetypeType.qll b/swift/ql/lib/codeql/swift/generated/type/PrimaryArchetypeType.qll index 2790cad235c..6f062e05799 100644 --- a/swift/ql/lib/codeql/swift/generated/type/PrimaryArchetypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/PrimaryArchetypeType.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.type.ArchetypeType import codeql.swift.elements.type.GenericTypeParamType class PrimaryArchetypeTypeBase extends @primary_archetype_type, ArchetypeType { - override string getPrimaryQlClass() { result = "PrimaryArchetypeType" } + override string getAPrimaryQlClass() { result = "PrimaryArchetypeType" } GenericTypeParamType getInterfaceType() { exists(GenericTypeParamType x | diff --git a/swift/ql/lib/codeql/swift/generated/type/ProtocolCompositionType.qll b/swift/ql/lib/codeql/swift/generated/type/ProtocolCompositionType.qll index 05f1e2217b2..863f8c8ca8b 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ProtocolCompositionType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ProtocolCompositionType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class ProtocolCompositionTypeBase extends @protocol_composition_type, Type { - override string getPrimaryQlClass() { result = "ProtocolCompositionType" } + override string getAPrimaryQlClass() { result = "ProtocolCompositionType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/ProtocolType.qll b/swift/ql/lib/codeql/swift/generated/type/ProtocolType.qll index 1550e83b488..9f157eb06ef 100644 --- a/swift/ql/lib/codeql/swift/generated/type/ProtocolType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/ProtocolType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.NominalType class ProtocolTypeBase extends @protocol_type, NominalType { - override string getPrimaryQlClass() { result = "ProtocolType" } + override string getAPrimaryQlClass() { result = "ProtocolType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/SequenceArchetypeType.qll b/swift/ql/lib/codeql/swift/generated/type/SequenceArchetypeType.qll index 289a2e353a9..08a9350d9ac 100644 --- a/swift/ql/lib/codeql/swift/generated/type/SequenceArchetypeType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/SequenceArchetypeType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ArchetypeType class SequenceArchetypeTypeBase extends @sequence_archetype_type, ArchetypeType { - override string getPrimaryQlClass() { result = "SequenceArchetypeType" } + override string getAPrimaryQlClass() { result = "SequenceArchetypeType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/SilBlockStorageType.qll b/swift/ql/lib/codeql/swift/generated/type/SilBlockStorageType.qll index 2743a47444d..185652e2e8a 100644 --- a/swift/ql/lib/codeql/swift/generated/type/SilBlockStorageType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/SilBlockStorageType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class SilBlockStorageTypeBase extends @sil_block_storage_type, Type { - override string getPrimaryQlClass() { result = "SilBlockStorageType" } + override string getAPrimaryQlClass() { result = "SilBlockStorageType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/SilBoxType.qll b/swift/ql/lib/codeql/swift/generated/type/SilBoxType.qll index 26d6ef84f3b..5a879026ef3 100644 --- a/swift/ql/lib/codeql/swift/generated/type/SilBoxType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/SilBoxType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class SilBoxTypeBase extends @sil_box_type, Type { - override string getPrimaryQlClass() { result = "SilBoxType" } + override string getAPrimaryQlClass() { result = "SilBoxType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/SilFunctionType.qll b/swift/ql/lib/codeql/swift/generated/type/SilFunctionType.qll index 2299a4ea753..103e80dddf1 100644 --- a/swift/ql/lib/codeql/swift/generated/type/SilFunctionType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/SilFunctionType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class SilFunctionTypeBase extends @sil_function_type, Type { - override string getPrimaryQlClass() { result = "SilFunctionType" } + override string getAPrimaryQlClass() { result = "SilFunctionType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/SilTokenType.qll b/swift/ql/lib/codeql/swift/generated/type/SilTokenType.qll index ed988b86014..50582c2b761 100644 --- a/swift/ql/lib/codeql/swift/generated/type/SilTokenType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/SilTokenType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class SilTokenTypeBase extends @sil_token_type, Type { - override string getPrimaryQlClass() { result = "SilTokenType" } + override string getAPrimaryQlClass() { result = "SilTokenType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/StructType.qll b/swift/ql/lib/codeql/swift/generated/type/StructType.qll index 3d23e210c59..fedb9024bfb 100644 --- a/swift/ql/lib/codeql/swift/generated/type/StructType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/StructType.qll @@ -3,7 +3,7 @@ import codeql.swift.elements.type.NominalType import codeql.swift.elements.decl.StructDecl class StructTypeBase extends @struct_type, NominalType { - override string getPrimaryQlClass() { result = "StructType" } + override string getAPrimaryQlClass() { result = "StructType" } StructDecl getDecl() { exists(StructDecl x | diff --git a/swift/ql/lib/codeql/swift/generated/type/TupleType.qll b/swift/ql/lib/codeql/swift/generated/type/TupleType.qll index ba5b4c50e2c..15250bdaf9d 100644 --- a/swift/ql/lib/codeql/swift/generated/type/TupleType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/TupleType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class TupleTypeBase extends @tuple_type, Type { - override string getPrimaryQlClass() { result = "TupleType" } + override string getAPrimaryQlClass() { result = "TupleType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/TypeAliasType.qll b/swift/ql/lib/codeql/swift/generated/type/TypeAliasType.qll index e5a5d8d5aba..595b20e0cfe 100644 --- a/swift/ql/lib/codeql/swift/generated/type/TypeAliasType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/TypeAliasType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.SugarType class TypeAliasTypeBase extends @type_alias_type, SugarType { - override string getPrimaryQlClass() { result = "TypeAliasType" } + override string getAPrimaryQlClass() { result = "TypeAliasType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/TypeVariableType.qll b/swift/ql/lib/codeql/swift/generated/type/TypeVariableType.qll index 0714a59f039..c6c82c1e982 100644 --- a/swift/ql/lib/codeql/swift/generated/type/TypeVariableType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/TypeVariableType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class TypeVariableTypeBase extends @type_variable_type, Type { - override string getPrimaryQlClass() { result = "TypeVariableType" } + override string getAPrimaryQlClass() { result = "TypeVariableType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/UnboundGenericType.qll b/swift/ql/lib/codeql/swift/generated/type/UnboundGenericType.qll index 4d64e72720f..b4946cea77d 100644 --- a/swift/ql/lib/codeql/swift/generated/type/UnboundGenericType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/UnboundGenericType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.AnyGenericType class UnboundGenericTypeBase extends @unbound_generic_type, AnyGenericType { - override string getPrimaryQlClass() { result = "UnboundGenericType" } + override string getAPrimaryQlClass() { result = "UnboundGenericType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/UnknownType.qll b/swift/ql/lib/codeql/swift/generated/type/UnknownType.qll index 9b3fe7eb0c0..220f9e44370 100644 --- a/swift/ql/lib/codeql/swift/generated/type/UnknownType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/UnknownType.qll @@ -2,7 +2,7 @@ import codeql.swift.elements.type.Type class UnknownTypeBase extends @unknown_type, Type { - override string getPrimaryQlClass() { result = "UnknownType" } + override string getAPrimaryQlClass() { result = "UnknownType" } string getName() { unknown_types(this, result) } } diff --git a/swift/ql/lib/codeql/swift/generated/type/UnmanagedStorageType.qll b/swift/ql/lib/codeql/swift/generated/type/UnmanagedStorageType.qll index 3171a6aec32..def9e7be671 100644 --- a/swift/ql/lib/codeql/swift/generated/type/UnmanagedStorageType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/UnmanagedStorageType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ReferenceStorageType class UnmanagedStorageTypeBase extends @unmanaged_storage_type, ReferenceStorageType { - override string getPrimaryQlClass() { result = "UnmanagedStorageType" } + override string getAPrimaryQlClass() { result = "UnmanagedStorageType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/UnownedStorageType.qll b/swift/ql/lib/codeql/swift/generated/type/UnownedStorageType.qll index 6e3c2f1bd23..3a8b60c19b0 100644 --- a/swift/ql/lib/codeql/swift/generated/type/UnownedStorageType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/UnownedStorageType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ReferenceStorageType class UnownedStorageTypeBase extends @unowned_storage_type, ReferenceStorageType { - override string getPrimaryQlClass() { result = "UnownedStorageType" } + override string getAPrimaryQlClass() { result = "UnownedStorageType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/UnresolvedType.qll b/swift/ql/lib/codeql/swift/generated/type/UnresolvedType.qll index a88083914ef..a5a5abb4d91 100644 --- a/swift/ql/lib/codeql/swift/generated/type/UnresolvedType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/UnresolvedType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.Type class UnresolvedTypeBase extends @unresolved_type, Type { - override string getPrimaryQlClass() { result = "UnresolvedType" } + override string getAPrimaryQlClass() { result = "UnresolvedType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/VariadicSequenceType.qll b/swift/ql/lib/codeql/swift/generated/type/VariadicSequenceType.qll index 38c85d12a5e..18ad64789df 100644 --- a/swift/ql/lib/codeql/swift/generated/type/VariadicSequenceType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/VariadicSequenceType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.UnarySyntaxSugarType class VariadicSequenceTypeBase extends @variadic_sequence_type, UnarySyntaxSugarType { - override string getPrimaryQlClass() { result = "VariadicSequenceType" } + override string getAPrimaryQlClass() { result = "VariadicSequenceType" } } diff --git a/swift/ql/lib/codeql/swift/generated/type/WeakStorageType.qll b/swift/ql/lib/codeql/swift/generated/type/WeakStorageType.qll index 3adb449b4bc..ce6a8837816 100644 --- a/swift/ql/lib/codeql/swift/generated/type/WeakStorageType.qll +++ b/swift/ql/lib/codeql/swift/generated/type/WeakStorageType.qll @@ -2,5 +2,5 @@ import codeql.swift.elements.type.ReferenceStorageType class WeakStorageTypeBase extends @weak_storage_type, ReferenceStorageType { - override string getPrimaryQlClass() { result = "WeakStorageType" } + override string getAPrimaryQlClass() { result = "WeakStorageType" } } From 7c10f3e76bc08b4319fa78d230367d19024dfef6 Mon Sep 17 00:00:00 2001 From: Cornelius Riemenschneider Date: Tue, 10 May 2022 14:38:53 +0000 Subject: [PATCH 0432/1618] C#: Lua tracing config: Use API function. --- csharp/tools/tracing-config.lua | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/csharp/tools/tracing-config.lua b/csharp/tools/tracing-config.lua index 77d69beb6b1..f0b7b67f46d 100644 --- a/csharp/tools/tracing-config.lua +++ b/csharp/tools/tracing-config.lua @@ -1,4 +1,4 @@ -function RegisterExtractorPack() +function RegisterExtractorPack(id) local extractor = GetPlatformToolsDirectory() .. 'Semmle.Extraction.CSharp.Driver' if OperatingSystem == 'windows' then extractor = extractor .. '.exe' end @@ -26,14 +26,10 @@ function RegisterExtractorPack() return { replace = true, invocations = { - { - path = compilerPath, - transformedArguments = { - nativeArgumentPointer = compilerArguments['nativeArgumentPointer'], - append = {'/p:UseSharedCompilation=false'}, - prepend = {} - } - } + BuildExtractorInvocation(id, compilerPath, compilerPath, + compilerArguments, nil, { + '/p:UseSharedCompilation=false' + }) } } end From e3ecf4c52d6043881f57132952654b17a599ca91 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 27 Jul 2021 17:36:14 +0100 Subject: [PATCH 0433/1618] Kotlin: Add kotlin-extractor --- java/kotlin-extractor/build.gradle | 23 +++ java/kotlin-extractor/gradle.properties | 7 + java/kotlin-extractor/settings.gradle | 8 + .../KotlinExtractorCommandLineProcessor.kt | 32 ++++ .../KotlinExtractorComponentRegistrar.kt | 16 ++ .../main/kotlin/KotlinExtractorExtension.kt | 139 ++++++++++++++++++ ...otlin.compiler.plugin.CommandLineProcessor | 1 + ....kotlin.compiler.plugin.ComponentRegistrar | 1 + 8 files changed, 227 insertions(+) create mode 100644 java/kotlin-extractor/build.gradle create mode 100644 java/kotlin-extractor/gradle.properties create mode 100644 java/kotlin-extractor/settings.gradle create mode 100644 java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt create mode 100644 java/kotlin-extractor/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor create mode 100644 java/kotlin-extractor/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar diff --git a/java/kotlin-extractor/build.gradle b/java/kotlin-extractor/build.gradle new file mode 100644 index 00000000000..eb392cb5ada --- /dev/null +++ b/java/kotlin-extractor/build.gradle @@ -0,0 +1,23 @@ +plugins { + id 'org.jetbrains.kotlin.jvm' version "${kotlinVersion}" + id 'org.jetbrains.dokka' version '1.4.32' + id "com.vanniktech.maven.publish" version '0.15.1' +} + +group 'com.github.codeql' +version '0.0.1' + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib" + compileOnly("org.jetbrains.kotlin:kotlin-compiler") +} + +repositories { + mavenCentral() +} + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { + kotlinOptions { + jvmTarget = "1.8" + } +} diff --git a/java/kotlin-extractor/gradle.properties b/java/kotlin-extractor/gradle.properties new file mode 100644 index 00000000000..1e999c1e9d9 --- /dev/null +++ b/java/kotlin-extractor/gradle.properties @@ -0,0 +1,7 @@ +kotlin.code.style=official +kotlinVersion=1.5.21 + +GROUP=com.github.codeql +VERSION_NAME=0.0.1 +POM_DESCRIPTION=CodeQL Kotlin extractor + diff --git a/java/kotlin-extractor/settings.gradle b/java/kotlin-extractor/settings.gradle new file mode 100644 index 00000000000..fa1b7937da6 --- /dev/null +++ b/java/kotlin-extractor/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + } +} + +rootProject.name = 'codeql-kotlin-extractor' diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt new file mode 100644 index 00000000000..ee7a1b6b17f --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt @@ -0,0 +1,32 @@ +package com.github.codeql + +import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption +import org.jetbrains.kotlin.compiler.plugin.CliOption +import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor +import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.config.CompilerConfigurationKey + +class KotlinExtractorCommandLineProcessor : CommandLineProcessor { + override val pluginId = "kotlin-extractor" + + override val pluginOptions = listOf( + CliOption( + optionName = "testOption", + valueDescription = "A test option", + description = "For testing options", + required = false, + allowMultipleOccurrences = true + ) + ) + + override fun processOption( + option: AbstractCliOption, + value: String, + configuration: CompilerConfiguration + ) = when (option.optionName) { + "testOption" -> configuration.appendList(KEY_TEST, value) + else -> error("kotlin extractor: Bad option: ${option.optionName}") + } +} + +val KEY_TEST = CompilerConfigurationKey>("kotlin extractor test") diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt new file mode 100644 index 00000000000..6254f39df7e --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt @@ -0,0 +1,16 @@ +package com.github.codeql + +import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension +import com.intellij.mock.MockProject +import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar +import org.jetbrains.kotlin.config.CompilerConfiguration + +class KotlinExtractorComponentRegistrar : ComponentRegistrar { + override fun registerProjectComponents( + project: MockProject, + configuration: CompilerConfiguration + ) { + val tests = configuration[KEY_TEST] ?: emptyList() + IrGenerationExtension.registerExtension(project, KotlinExtractorExtension(tests)) + } +} diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt new file mode 100644 index 00000000000..5b0c229009a --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -0,0 +1,139 @@ +package com.github.codeql + +import java.io.BufferedWriter +import java.io.File +import java.nio.file.Files +import java.nio.file.Paths +import kotlin.system.exitProcess +import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension +import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.IrModuleFragment +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.path +import org.jetbrains.kotlin.ir.util.dump +import org.jetbrains.kotlin.ir.util.packageFqName +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import org.jetbrains.kotlin.ir.IrFileEntry + +class KotlinExtractorExtension(private val tests: List) : IrGenerationExtension { + override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { + val trapDir = File(System.getenv("CODEQL_EXTRACTOR_KOTLIN_TRAP_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/trap") + trapDir.mkdirs() + val srcDir = File(System.getenv("CODEQL_EXTRACTOR_KOTLIN_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") + srcDir.mkdirs() + moduleFragment.accept(KotlinExtractorVisitor(trapDir, srcDir), RootTrapWriter()) + // We don't want the compiler to continue and generate class + // files etc, so we just exit when we are finished extracting. + exitProcess(0) + } +} + +fun extractorBug(msg: String) { + println(msg) +} + +interface TrapWriter { + fun writeTrap(trap: String) + fun getLocation(startOffset: Int, endOffset: Int): Int + fun getIdFor(label: String): Int + fun getFreshId(): Int +} + +class RootTrapWriter: TrapWriter { + override fun writeTrap(trap: String) { + extractorBug("Tried to write TRAP outside a file: $trap") + } + override fun getLocation(startOffset: Int, endOffset: Int): Int { + extractorBug("Asked for location, but not in a file") + return 0 + } + override fun getIdFor(label: String): Int { + extractorBug("Asked for ID for '$label' outside a file") + return 0 + } + override fun getFreshId(): Int { + extractorBug("Asked for fresh ID outside a file") + return 0 + } +} + +class FileTrapWriter( + val fileLabel: String, + val file: BufferedWriter, + val fileEntry: IrFileEntry +): TrapWriter { + var nextId: Int = 100 + override fun writeTrap(trap: String) { + file.write(trap) + } + override fun getLocation(startOffset: Int, endOffset: Int): Int { + val startLine = fileEntry.getLineNumber(startOffset) + 1 + val startColumn = fileEntry.getColumnNumber(startOffset) + 1 + val endLine = fileEntry.getLineNumber(endOffset) + 1 + val endColumn = fileEntry.getColumnNumber(endOffset) + val id = getFreshId() + val fileId = getIdFor(fileLabel) + writeTrap("#$id = @\"loc,{#$fileId},$startLine,$startColumn,$endLine,$endColumn\"\n") + writeTrap("locations_default(#$id, #$fileId, $startLine, $startColumn, $endLine, $endColumn)\n") + return id + } + val labelMapping: MutableMap = mutableMapOf() + override fun getIdFor(label: String): Int { + val maybeId = labelMapping.get(label) + if(maybeId == null) { + val id = getFreshId() + labelMapping.put(label, id) + return id + } else { + return maybeId + } + } + override fun getFreshId(): Int { + return nextId++ + } +} + +class KotlinExtractorVisitor(val trapDir: File, val srcDir: File) : IrElementVisitor { + override fun visitElement(element: IrElement, data: TrapWriter) { + extractorBug("Unrecognised IrElement: " + element.javaClass) + if(data is RootTrapWriter) { + extractorBug("... and outside any file!") + } + element.acceptChildren(this, data) + } + override fun visitClass(declaration: IrClass, data: TrapWriter) { + val id = data.getFreshId() + val locId = data.getLocation(declaration.startOffset, declaration.endOffset) + val pkg = declaration.packageFqName?.asString() ?: "" + val cls = declaration.name.asString() + data.writeTrap("#$id = @\"class;$pkg.$cls\"\n") + data.writeTrap("classes(#$id, \"$cls\")\n") + data.writeTrap("hasLocation(#$id, #$locId)\n") + declaration.acceptChildren(this, data) + } + override fun visitFile(declaration: IrFile, data: TrapWriter) { + val filePath = declaration.path + val file = File(filePath) + val fileLabel = "@\"$filePath;sourcefile\"" + val basename = file.nameWithoutExtension + val extension = file.extension + val dest = Paths.get("$srcDir/${declaration.path}") + val destDir = dest.getParent() + Files.createDirectories(destDir) + Files.copy(Paths.get(declaration.path), dest) + + val trapFile = File("$trapDir/$filePath.trap") + val trapFileDir = trapFile.getParentFile() + trapFileDir.mkdirs() + trapFile.bufferedWriter().use { trapFileBW -> + val tw = FileTrapWriter(fileLabel, trapFileBW, declaration.fileEntry) + val id = tw.getIdFor(fileLabel) + tw.writeTrap("#$id = $fileLabel\n") + tw.writeTrap("files(#$id, \"$filePath\", \"$basename\", \"$extension\", 0)\n") + declaration.acceptChildren(this, tw) + } + } +} + diff --git a/java/kotlin-extractor/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor b/java/kotlin-extractor/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor new file mode 100644 index 00000000000..2d0055c74d4 --- /dev/null +++ b/java/kotlin-extractor/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor @@ -0,0 +1 @@ +com.github.codeql.KotlinExtractorCommandLineProcessor diff --git a/java/kotlin-extractor/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/java/kotlin-extractor/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar new file mode 100644 index 00000000000..564ed6bfe25 --- /dev/null +++ b/java/kotlin-extractor/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar @@ -0,0 +1 @@ +com.github.codeql.KotlinExtractorComponentRegistrar From f15c6dede11253f9caa6cbb48f0be22efc1a2e1c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 27 Jul 2021 18:14:57 +0100 Subject: [PATCH 0434/1618] Kotlin: Get extractor working in a Java context --- .../src/main/kotlin/KotlinExtractorExtension.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 5b0c229009a..5844263577f 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -19,9 +19,9 @@ import org.jetbrains.kotlin.ir.IrFileEntry class KotlinExtractorExtension(private val tests: List) : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { - val trapDir = File(System.getenv("CODEQL_EXTRACTOR_KOTLIN_TRAP_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/trap") + val trapDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_TRAP_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/trap") trapDir.mkdirs() - val srcDir = File(System.getenv("CODEQL_EXTRACTOR_KOTLIN_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") + val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") srcDir.mkdirs() moduleFragment.accept(KotlinExtractorVisitor(trapDir, srcDir), RootTrapWriter()) // We don't want the compiler to continue and generate class @@ -105,11 +105,14 @@ class KotlinExtractorVisitor(val trapDir: File, val srcDir: File) : IrElementVis } override fun visitClass(declaration: IrClass, data: TrapWriter) { val id = data.getFreshId() + val pkgId = data.getFreshId() val locId = data.getLocation(declaration.startOffset, declaration.endOffset) val pkg = declaration.packageFqName?.asString() ?: "" val cls = declaration.name.asString() + data.writeTrap("#$pkgId = @\"pkg;$pkg\"\n") + data.writeTrap("packages(#$pkgId, \"$pkg\")\n") data.writeTrap("#$id = @\"class;$pkg.$cls\"\n") - data.writeTrap("classes(#$id, \"$cls\")\n") + data.writeTrap("classes(#$id, \"$cls\", #$pkgId, #$id)\n") data.writeTrap("hasLocation(#$id, #$locId)\n") declaration.acceptChildren(this, data) } From 4721ccd9654090cf79c5d48969a4f606cda4da59 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 27 Jul 2021 19:12:58 +0100 Subject: [PATCH 0435/1618] Kotlin: Add tests --- .../library-tests/classes/classes.expected | 4 ++++ .../test/kotlin/library-tests/classes/classes.kt | 16 ++++++++++++++++ .../test/kotlin/library-tests/classes/classes.ql | 5 +++++ .../multiple_files/classes.expected | 2 ++ .../library-tests/multiple_files/classes.ql | 5 +++++ .../kotlin/library-tests/multiple_files/file1.kt | 3 +++ .../kotlin/library-tests/multiple_files/file2.kt | 3 +++ 7 files changed, 38 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/classes/classes.expected create mode 100644 java/ql/test/kotlin/library-tests/classes/classes.kt create mode 100644 java/ql/test/kotlin/library-tests/classes/classes.ql create mode 100644 java/ql/test/kotlin/library-tests/multiple_files/classes.expected create mode 100644 java/ql/test/kotlin/library-tests/multiple_files/classes.ql create mode 100644 java/ql/test/kotlin/library-tests/multiple_files/file1.kt create mode 100644 java/ql/test/kotlin/library-tests/multiple_files/file2.kt diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected new file mode 100644 index 00000000000..f96de7942ea --- /dev/null +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -0,0 +1,4 @@ +| classes.kt:2:1:2:18 | ClassOne | +| classes.kt:4:1:6:1 | ClassTwo | +| classes.kt:8:1:10:1 | ClassThree | +| classes.kt:12:1:15:1 | ClassFour | diff --git a/java/ql/test/kotlin/library-tests/classes/classes.kt b/java/ql/test/kotlin/library-tests/classes/classes.kt new file mode 100644 index 00000000000..6a05bfdedf9 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/classes/classes.kt @@ -0,0 +1,16 @@ + +class ClassOne { } + +class ClassTwo (val arg: Int) { + val x: Int = 3 +} + +abstract class ClassThree { + abstract fun foo(arg: Int) +} + +class ClassFour: ClassThree() { + override fun foo(arg: Int) { + } +} + diff --git a/java/ql/test/kotlin/library-tests/classes/classes.ql b/java/ql/test/kotlin/library-tests/classes/classes.ql new file mode 100644 index 00000000000..ab786d2b7d0 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/classes/classes.ql @@ -0,0 +1,5 @@ +import java + +from Class c +select c + diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected new file mode 100644 index 00000000000..f50a0039450 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected @@ -0,0 +1,2 @@ +| file1.kt:2:1:2:16 | Class1 | +| file2.kt:2:1:2:16 | Class2 | diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.ql b/java/ql/test/kotlin/library-tests/multiple_files/classes.ql new file mode 100644 index 00000000000..ab786d2b7d0 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.ql @@ -0,0 +1,5 @@ +import java + +from Class c +select c + diff --git a/java/ql/test/kotlin/library-tests/multiple_files/file1.kt b/java/ql/test/kotlin/library-tests/multiple_files/file1.kt new file mode 100644 index 00000000000..7e99ac5b4c0 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/multiple_files/file1.kt @@ -0,0 +1,3 @@ + +class Class1 { } + diff --git a/java/ql/test/kotlin/library-tests/multiple_files/file2.kt b/java/ql/test/kotlin/library-tests/multiple_files/file2.kt new file mode 100644 index 00000000000..98ec7827760 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/multiple_files/file2.kt @@ -0,0 +1,3 @@ + +class Class2 { } + From d28059a1c0a02070d73209aa5ef3207ce49594c3 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 28 Jul 2021 11:55:50 +0100 Subject: [PATCH 0436/1618] Kotlin: Generate a module from the dbscheme --- java/kotlin-extractor/generate_dbscheme.py | 94 +++++++++++++++++++ .../main/kotlin/KotlinExtractorExtension.kt | 60 ++++++------ 2 files changed, 124 insertions(+), 30 deletions(-) create mode 100755 java/kotlin-extractor/generate_dbscheme.py diff --git a/java/kotlin-extractor/generate_dbscheme.py b/java/kotlin-extractor/generate_dbscheme.py new file mode 100755 index 00000000000..2f75bc12212 --- /dev/null +++ b/java/kotlin-extractor/generate_dbscheme.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 + +import re +import sys + +def upperFirst(string): + return string[0].upper() + string[1:] + +with open('../ql/src/config/semmlecode.dbscheme', 'r') as f: + dbscheme = f.read() + +# Remove comments +dbscheme = re.sub(r'/\*.*?\*/', '', dbscheme, flags=re.DOTALL) +dbscheme = re.sub(r'//[^\r\n]*/', '', dbscheme) + +type_hierarchy = {} + +with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: + kt.write('/* Generated by ' + sys.argv[0] + ': Do not edit manually. */\n') + kt.write('package com.github.codeql\n') + + kt.write('class Label(val name: Int) {\n') + kt.write(' override fun toString(): String = "#$name"\n') + kt.write('}\n') + + + # kind enums + for name, kind, body in re.findall(r'case\s+@([^.\s]*)\.([^.\s]*)\s+of\b(.*?);', + dbscheme, + flags=re.DOTALL): + for num, typ in re.findall(r'(\d+)\s*=\s*@(\S+)', body): + s = type_hierarchy.get(typ, set()) + s.add(name) + type_hierarchy[typ] = s + + # unions + for name, unions in re.findall(r'@(\w+)\s*=\s*(@\w+(?:\s*\|\s*@\w+)*)', + dbscheme, + flags=re.DOTALL): + type_hierarchy[name] = type_hierarchy.get(name, set()) + for typ in re.findall(r'@(\w+)', unions): + s = type_hierarchy.get(typ, set()) + s.add(name) + type_hierarchy[typ] = s + kt.write('\n') + + # tables + for relname, body in re.findall('\n([\w_]+)(\([^)]*\))', + dbscheme, + flags=re.DOTALL): + for db_type in re.findall(':\s*@([^\s,]+)\s*(?:,|$)', body): + type_hierarchy[db_type] = type_hierarchy.get(db_type, set()) + kt.write('fun write' + upperFirst(relname) + '(data: TrapWriter, ') + for colname, db_type in re.findall('(\S+)\s*:\s*([^\s,]+)', body): + kt.write(colname + ': ') + if db_type == 'int': + # TODO: Do something better if the column is a 'case' + kt.write('Int') + elif db_type == 'float': + kt.write('Double') + elif db_type == 'string': + kt.write('String') + elif db_type == 'date': + kt.write('String') + elif db_type == 'boolean': + kt.write('Boolean') + elif db_type[0] == '@': + kt.write('Label') + else: + raise Exception('Bad db_type: ' + db_type) + kt.write(', ') + kt.write(') {\n') + kt.write(' data.writeTrap("' + relname + '(') + comma = '' + for colname, db_type in re.findall('(\S+)\s*:\s*([^\s,]+)', body): + kt.write(comma) + if db_type == 'string' or db_type == 'date': + kt.write('\\"$' + colname + '\\"') # TODO: Escaping + else: + # TODO: Any reformatting or escaping necessary? + # e.g. float formats? + kt.write('$' + colname) + comma = ', ' + kt.write(')\\n")\n') + kt.write('}\n') + + for typ in type_hierarchy: + kt.write('sealed interface Db' + upperFirst(typ)) + names = type_hierarchy[typ] + if names: + kt.write(': ') + kt.write(', '.join(map(lambda name: 'Db' + upperFirst(name), type_hierarchy[typ]))) + kt.write(' {}\n') + diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 5844263577f..283853ac5c9 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -36,26 +36,26 @@ fun extractorBug(msg: String) { interface TrapWriter { fun writeTrap(trap: String) - fun getLocation(startOffset: Int, endOffset: Int): Int - fun getIdFor(label: String): Int - fun getFreshId(): Int + fun getLocation(startOffset: Int, endOffset: Int): Label + fun getIdFor(label: String): Label + fun getFreshId(): Label } class RootTrapWriter: TrapWriter { override fun writeTrap(trap: String) { extractorBug("Tried to write TRAP outside a file: $trap") } - override fun getLocation(startOffset: Int, endOffset: Int): Int { + override fun getLocation(startOffset: Int, endOffset: Int): Label { extractorBug("Asked for location, but not in a file") - return 0 + return Label(0) } - override fun getIdFor(label: String): Int { + override fun getIdFor(label: String): Label { extractorBug("Asked for ID for '$label' outside a file") - return 0 + return Label(0) } - override fun getFreshId(): Int { + override fun getFreshId(): Label { extractorBug("Asked for fresh ID outside a file") - return 0 + return Label(0) } } @@ -68,30 +68,30 @@ class FileTrapWriter( override fun writeTrap(trap: String) { file.write(trap) } - override fun getLocation(startOffset: Int, endOffset: Int): Int { + override fun getLocation(startOffset: Int, endOffset: Int): Label { val startLine = fileEntry.getLineNumber(startOffset) + 1 val startColumn = fileEntry.getColumnNumber(startOffset) + 1 val endLine = fileEntry.getLineNumber(endOffset) + 1 val endColumn = fileEntry.getColumnNumber(endOffset) - val id = getFreshId() - val fileId = getIdFor(fileLabel) - writeTrap("#$id = @\"loc,{#$fileId},$startLine,$startColumn,$endLine,$endColumn\"\n") - writeTrap("locations_default(#$id, #$fileId, $startLine, $startColumn, $endLine, $endColumn)\n") + val id: Label = getFreshId() + val fileId: Label = getIdFor(fileLabel) + writeTrap("$id = @\"loc,{$fileId},$startLine,$startColumn,$endLine,$endColumn\"\n") + writeLocations_default(this, id, fileId, startLine, startColumn, endLine, endColumn) return id } - val labelMapping: MutableMap = mutableMapOf() - override fun getIdFor(label: String): Int { + val labelMapping: MutableMap> = mutableMapOf>() + override fun getIdFor(label: String): Label { val maybeId = labelMapping.get(label) if(maybeId == null) { - val id = getFreshId() + val id: Label = getFreshId() labelMapping.put(label, id) return id } else { - return maybeId + return maybeId as Label } } - override fun getFreshId(): Int { - return nextId++ + override fun getFreshId(): Label { + return Label(nextId++) } } @@ -104,16 +104,16 @@ class KotlinExtractorVisitor(val trapDir: File, val srcDir: File) : IrElementVis element.acceptChildren(this, data) } override fun visitClass(declaration: IrClass, data: TrapWriter) { - val id = data.getFreshId() - val pkgId = data.getFreshId() + val id: Label = data.getFreshId() + val pkgId: Label = data.getFreshId() val locId = data.getLocation(declaration.startOffset, declaration.endOffset) val pkg = declaration.packageFqName?.asString() ?: "" val cls = declaration.name.asString() - data.writeTrap("#$pkgId = @\"pkg;$pkg\"\n") - data.writeTrap("packages(#$pkgId, \"$pkg\")\n") - data.writeTrap("#$id = @\"class;$pkg.$cls\"\n") - data.writeTrap("classes(#$id, \"$cls\", #$pkgId, #$id)\n") - data.writeTrap("hasLocation(#$id, #$locId)\n") + data.writeTrap("$pkgId = @\"pkg;$pkg\"\n") + writePackages(data, pkgId, pkg) + data.writeTrap("$id = @\"class;$pkg.$cls\"\n") + writeClasses(data, id, cls, pkgId, id) + writeHasLocation(data, id, locId) declaration.acceptChildren(this, data) } override fun visitFile(declaration: IrFile, data: TrapWriter) { @@ -132,9 +132,9 @@ class KotlinExtractorVisitor(val trapDir: File, val srcDir: File) : IrElementVis trapFileDir.mkdirs() trapFile.bufferedWriter().use { trapFileBW -> val tw = FileTrapWriter(fileLabel, trapFileBW, declaration.fileEntry) - val id = tw.getIdFor(fileLabel) - tw.writeTrap("#$id = $fileLabel\n") - tw.writeTrap("files(#$id, \"$filePath\", \"$basename\", \"$extension\", 0)\n") + val id: Label = tw.getIdFor(fileLabel) + tw.writeTrap("$id = $fileLabel\n") + writeFiles(tw, id, filePath, basename, extension, 0) declaration.acceptChildren(this, tw) } } From 4e27da33e4a4346781c0aa41875d800ae6a8797b Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 28 Jul 2021 12:05:42 +0100 Subject: [PATCH 0437/1618] Kotlin: Tweak generator --- java/kotlin-extractor/generate_dbscheme.py | 4 ++-- .../src/main/kotlin/KotlinExtractorExtension.kt | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/java/kotlin-extractor/generate_dbscheme.py b/java/kotlin-extractor/generate_dbscheme.py index 2f75bc12212..e89247a40f8 100755 --- a/java/kotlin-extractor/generate_dbscheme.py +++ b/java/kotlin-extractor/generate_dbscheme.py @@ -50,7 +50,7 @@ with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: flags=re.DOTALL): for db_type in re.findall(':\s*@([^\s,]+)\s*(?:,|$)', body): type_hierarchy[db_type] = type_hierarchy.get(db_type, set()) - kt.write('fun write' + upperFirst(relname) + '(data: TrapWriter, ') + kt.write('fun TrapWriter.write' + upperFirst(relname) + '(') for colname, db_type in re.findall('(\S+)\s*:\s*([^\s,]+)', body): kt.write(colname + ': ') if db_type == 'int': @@ -70,7 +70,7 @@ with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: raise Exception('Bad db_type: ' + db_type) kt.write(', ') kt.write(') {\n') - kt.write(' data.writeTrap("' + relname + '(') + kt.write(' this.writeTrap("' + relname + '(') comma = '' for colname, db_type in re.findall('(\S+)\s*:\s*([^\s,]+)', body): kt.write(comma) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 283853ac5c9..90cce391a36 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -76,7 +76,7 @@ class FileTrapWriter( val id: Label = getFreshId() val fileId: Label = getIdFor(fileLabel) writeTrap("$id = @\"loc,{$fileId},$startLine,$startColumn,$endLine,$endColumn\"\n") - writeLocations_default(this, id, fileId, startLine, startColumn, endLine, endColumn) + writeLocations_default(id, fileId, startLine, startColumn, endLine, endColumn) return id } val labelMapping: MutableMap> = mutableMapOf>() @@ -110,10 +110,10 @@ class KotlinExtractorVisitor(val trapDir: File, val srcDir: File) : IrElementVis val pkg = declaration.packageFqName?.asString() ?: "" val cls = declaration.name.asString() data.writeTrap("$pkgId = @\"pkg;$pkg\"\n") - writePackages(data, pkgId, pkg) + data.writePackages(pkgId, pkg) data.writeTrap("$id = @\"class;$pkg.$cls\"\n") - writeClasses(data, id, cls, pkgId, id) - writeHasLocation(data, id, locId) + data.writeClasses(id, cls, pkgId, id) + data.writeHasLocation(id, locId) declaration.acceptChildren(this, data) } override fun visitFile(declaration: IrFile, data: TrapWriter) { @@ -134,7 +134,7 @@ class KotlinExtractorVisitor(val trapDir: File, val srcDir: File) : IrElementVis val tw = FileTrapWriter(fileLabel, trapFileBW, declaration.fileEntry) val id: Label = tw.getIdFor(fileLabel) tw.writeTrap("$id = $fileLabel\n") - writeFiles(tw, id, filePath, basename, extension, 0) + tw.writeFiles(id, filePath, basename, extension, 0) declaration.acceptChildren(this, tw) } } From fb26859425ae5342468b1d962eca22103879d88d Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 28 Jul 2021 12:18:10 +0100 Subject: [PATCH 0438/1618] Kotlin: Suppress an unchecked cast warning I don't think we can easily do better here. --- .../kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 90cce391a36..385575471f3 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -87,6 +87,7 @@ class FileTrapWriter( labelMapping.put(label, id) return id } else { + @Suppress("UNCHECKED_CAST") return maybeId as Label } } From 6dd102731582844e5bb2bc77c303b23a62e38c0e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 28 Jul 2021 15:41:56 +0100 Subject: [PATCH 0439/1618] Kotlin: Refactoring --- .../main/kotlin/KotlinExtractorExtension.kt | 137 ++++++++---------- 1 file changed, 63 insertions(+), 74 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 385575471f3..67f199d0d0d 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -8,10 +8,11 @@ import kotlin.system.exitProcess import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.path import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFile -import org.jetbrains.kotlin.ir.declarations.path import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.packageFqName import org.jetbrains.kotlin.ir.visitors.IrElementVisitor @@ -23,7 +24,7 @@ class KotlinExtractorExtension(private val tests: List) : IrGenerationEx trapDir.mkdirs() val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") srcDir.mkdirs() - moduleFragment.accept(KotlinExtractorVisitor(trapDir, srcDir), RootTrapWriter()) + moduleFragment.files.map { extractFile(trapDir, srcDir, it) } // We don't want the compiler to continue and generate class // files etc, so we just exit when we are finished extracting. exitProcess(0) @@ -34,41 +35,16 @@ fun extractorBug(msg: String) { println(msg) } -interface TrapWriter { - fun writeTrap(trap: String) - fun getLocation(startOffset: Int, endOffset: Int): Label - fun getIdFor(label: String): Label - fun getFreshId(): Label -} - -class RootTrapWriter: TrapWriter { - override fun writeTrap(trap: String) { - extractorBug("Tried to write TRAP outside a file: $trap") - } - override fun getLocation(startOffset: Int, endOffset: Int): Label { - extractorBug("Asked for location, but not in a file") - return Label(0) - } - override fun getIdFor(label: String): Label { - extractorBug("Asked for ID for '$label' outside a file") - return Label(0) - } - override fun getFreshId(): Label { - extractorBug("Asked for fresh ID outside a file") - return Label(0) - } -} - -class FileTrapWriter( +class TrapWriter ( val fileLabel: String, val file: BufferedWriter, val fileEntry: IrFileEntry -): TrapWriter { +) { var nextId: Int = 100 - override fun writeTrap(trap: String) { + fun writeTrap(trap: String) { file.write(trap) } - override fun getLocation(startOffset: Int, endOffset: Int): Label { + fun getLocation(startOffset: Int, endOffset: Int): Label { val startLine = fileEntry.getLineNumber(startOffset) + 1 val startColumn = fileEntry.getColumnNumber(startOffset) + 1 val endLine = fileEntry.getLineNumber(endOffset) + 1 @@ -80,64 +56,77 @@ class FileTrapWriter( return id } val labelMapping: MutableMap> = mutableMapOf>() - override fun getIdFor(label: String): Label { + fun getIdFor(label: String, initialise: (Label) -> Unit = {}): Label { val maybeId = labelMapping.get(label) if(maybeId == null) { val id: Label = getFreshId() labelMapping.put(label, id) + writeTrap("$id = $label\n") + initialise(id) return id } else { @Suppress("UNCHECKED_CAST") return maybeId as Label } } - override fun getFreshId(): Label { + fun getFreshId(): Label { return Label(nextId++) } } -class KotlinExtractorVisitor(val trapDir: File, val srcDir: File) : IrElementVisitor { - override fun visitElement(element: IrElement, data: TrapWriter) { - extractorBug("Unrecognised IrElement: " + element.javaClass) - if(data is RootTrapWriter) { - extractorBug("... and outside any file!") - } - element.acceptChildren(this, data) - } - override fun visitClass(declaration: IrClass, data: TrapWriter) { - val id: Label = data.getFreshId() - val pkgId: Label = data.getFreshId() - val locId = data.getLocation(declaration.startOffset, declaration.endOffset) - val pkg = declaration.packageFqName?.asString() ?: "" - val cls = declaration.name.asString() - data.writeTrap("$pkgId = @\"pkg;$pkg\"\n") - data.writePackages(pkgId, pkg) - data.writeTrap("$id = @\"class;$pkg.$cls\"\n") - data.writeClasses(id, cls, pkgId, id) - data.writeHasLocation(id, locId) - declaration.acceptChildren(this, data) - } - override fun visitFile(declaration: IrFile, data: TrapWriter) { - val filePath = declaration.path - val file = File(filePath) - val fileLabel = "@\"$filePath;sourcefile\"" - val basename = file.nameWithoutExtension - val extension = file.extension - val dest = Paths.get("$srcDir/${declaration.path}") - val destDir = dest.getParent() - Files.createDirectories(destDir) - Files.copy(Paths.get(declaration.path), dest) +fun extractFile(trapDir: File, srcDir: File, declaration: IrFile) { + val filePath = declaration.path + val file = File(filePath) + val fileLabel = "@\"$filePath;sourcefile\"" + val basename = file.nameWithoutExtension + val extension = file.extension + val dest = Paths.get("$srcDir/${declaration.path}") + val destDir = dest.getParent() + Files.createDirectories(destDir) + Files.copy(Paths.get(declaration.path), dest) - val trapFile = File("$trapDir/$filePath.trap") - val trapFileDir = trapFile.getParentFile() - trapFileDir.mkdirs() - trapFile.bufferedWriter().use { trapFileBW -> - val tw = FileTrapWriter(fileLabel, trapFileBW, declaration.fileEntry) - val id: Label = tw.getIdFor(fileLabel) - tw.writeTrap("$id = $fileLabel\n") - tw.writeFiles(id, filePath, basename, extension, 0) - declaration.acceptChildren(this, tw) - } + val trapFile = File("$trapDir/$filePath.trap") + val trapFileDir = trapFile.getParentFile() + trapFileDir.mkdirs() + trapFile.bufferedWriter().use { trapFileBW -> + val tw = TrapWriter(fileLabel, trapFileBW, declaration.fileEntry) + val id: Label = tw.getIdFor(fileLabel) + tw.writeFiles(id, filePath, basename, extension, 0) + val fileExtractor = KotlinFileExtractor(tw) + val pkg = declaration.fqName.asString() + val pkgId = fileExtractor.extractPackage(pkg) + tw.writeCupackage(id, pkgId) + declaration.declarations.map { fileExtractor.extractDeclaration(it) } + } +} + +class KotlinFileExtractor(val tw: TrapWriter) { + fun extractPackage(pkg: String): Label { + val pkgLabel = "@\"package;$pkg\"" + val id: Label = tw.getIdFor(pkgLabel, { + tw.writePackages(it, pkg) + }) + return id + } + + fun extractDeclaration(declaration: IrDeclaration) { + when (declaration) { + is IrClass -> extractClass(declaration) + else -> extractorBug("Unrecognised IrDeclaration: " + declaration.javaClass) + } + } + + fun extractClass(declaration: IrClass) { + val id: Label = tw.getFreshId() + val locId = tw.getLocation(declaration.startOffset, declaration.endOffset) + val pkg = declaration.packageFqName?.asString() ?: "" + val cls = declaration.name.asString() + val qualClassName = if (pkg.isEmpty()) cls else "$pkg.$cls" + val pkgId = extractPackage(pkg) + tw.writeTrap("$id = @\"class;$qualClassName\"\n") + tw.writeClasses(id, cls, pkgId, id) + tw.writeHasLocation(id, locId) + declaration.declarations.map { extractDeclaration(it) } } } From 49a4e479dad037fc66e31652b1c0772c0e33c753 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 28 Jul 2021 19:05:45 +0100 Subject: [PATCH 0440/1618] Kotlin: Extract methods --- .../main/kotlin/KotlinExtractorExtension.kt | 88 ++++++++++++++++--- java/ql/lib/config/semmlecode.dbscheme | 4 +- .../library-tests/methods/methods.expected | 10 +++ .../kotlin/library-tests/methods/methods.kt | 9 ++ .../kotlin/library-tests/methods/methods.ql | 5 ++ .../kotlin/library-tests/methods/methods2.kt | 11 +++ 6 files changed, 116 insertions(+), 11 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/methods/methods.expected create mode 100644 java/ql/test/kotlin/library-tests/methods/methods.kt create mode 100644 java/ql/test/kotlin/library-tests/methods/methods.ql create mode 100644 java/ql/test/kotlin/library-tests/methods/methods2.kt diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 67f199d0d0d..e2e7330af6c 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -12,11 +12,16 @@ import org.jetbrains.kotlin.ir.declarations.path import org.jetbrains.kotlin.ir.declarations.IrModuleFragment import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclaration +import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.packageFqName import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.IrFileEntry +import org.jetbrains.kotlin.ir.types.IrType +import org.jetbrains.kotlin.ir.types.IrSimpleType class KotlinExtractorExtension(private val tests: List) : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { @@ -96,12 +101,16 @@ fun extractFile(trapDir: File, srcDir: File, declaration: IrFile) { val pkg = declaration.fqName.asString() val pkgId = fileExtractor.extractPackage(pkg) tw.writeCupackage(id, pkgId) - declaration.declarations.map { fileExtractor.extractDeclaration(it) } + declaration.declarations.map { fileExtractor.extractDeclaration(it, pkgId) } } } class KotlinFileExtractor(val tw: TrapWriter) { - fun extractPackage(pkg: String): Label { + fun usePackage(pkg: String): Label { + return extractPackage(pkg) + } + + fun extractPackage(pkg: String): Label { val pkgLabel = "@\"package;$pkg\"" val id: Label = tw.getIdFor(pkgLabel, { tw.writePackages(it, pkg) @@ -109,24 +118,83 @@ class KotlinFileExtractor(val tw: TrapWriter) { return id } - fun extractDeclaration(declaration: IrDeclaration) { + fun extractDeclaration(declaration: IrDeclaration, parentid: Label) { when (declaration) { is IrClass -> extractClass(declaration) + is IrFunction -> extractFunction(declaration, parentid) else -> extractorBug("Unrecognised IrDeclaration: " + declaration.javaClass) } } - fun extractClass(declaration: IrClass) { - val id: Label = tw.getFreshId() - val locId = tw.getLocation(declaration.startOffset, declaration.endOffset) - val pkg = declaration.packageFqName?.asString() ?: "" - val cls = declaration.name.asString() + @Suppress("UNUSED_PARAMETER") + fun useSimpleType(c: IrSimpleType): Label { + // TODO: This shouldn't assume all SimpleType's are Int + val label = "@\"type;int\"" + val id: Label = tw.getIdFor(label, { + tw.writePrimitives(it, "int") + }) + return id + } + + fun useClass(c: IrClass): Label { + val pkg = c.packageFqName?.asString() ?: "" + val cls = c.name.asString() val qualClassName = if (pkg.isEmpty()) cls else "$pkg.$cls" + val label = "@\"class;$qualClassName\"" + val id: Label = tw.getIdFor(label) + return id + } + + fun extractClass(c: IrClass) { + val id = useClass(c) + val locId = tw.getLocation(c.startOffset, c.endOffset) + val pkg = c.packageFqName?.asString() ?: "" + val cls = c.name.asString() val pkgId = extractPackage(pkg) - tw.writeTrap("$id = @\"class;$qualClassName\"\n") tw.writeClasses(id, cls, pkgId, id) tw.writeHasLocation(id, locId) - declaration.declarations.map { extractDeclaration(it) } + c.declarations.map { extractDeclaration(it, id) } } + + fun useType(t: IrType): Label { + when(t) { + is IrSimpleType -> return useSimpleType(t) + is IrClass -> return useClass(t) + else -> { + extractorBug("Unrecognised IrType: " + t.javaClass) + return Label(0) + } + } + } + + fun useDeclarationParent(dp: IrDeclarationParent): Label { + when(dp) { + is IrFile -> return usePackage(dp.fqName.asString()) + is IrClass -> return useClass(dp) + else -> { + extractorBug("Unrecognised IrDeclarationParent: " + dp.javaClass) + return Label(0) + } + } + } + + fun useFunction(f: IrFunction): Label { + val paramTypeIds = f.valueParameters.joinToString() { "{${useType(it.type).toString()}}" } + val returnTypeId = useType(f.returnType) + val parentId = useDeclarationParent(f.parent) + val label = "@\"callable;{$parentId}.${f.name.asString()}($paramTypeIds){$returnTypeId}\"" + val id: Label = tw.getIdFor(label) + return id + } + + fun extractFunction(f: IrFunction, parentid: Label) { + val id = useFunction(f) + val locId = tw.getLocation(f.startOffset, f.endOffset) + val signature = "TODO" + val returnTypeId = useType(f.returnType) + tw.writeMethods(id, f.name.asString(), signature, returnTypeId, parentid, id) + tw.writeHasLocation(id, locId) + } + } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 37f33da42d2..68b5434e283 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -332,12 +332,14 @@ constrs( int sourceid: @constructor ref ); +@package_or_reftype = @package | @reftype + methods( unique int id: @method, string nodeName: string ref, string signature: string ref, int typeid: @type ref, - int parentid: @reftype ref, + int parentid: @package_or_reftype ref, int sourceid: @method ref ); diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected new file mode 100644 index 00000000000..72b1a061a22 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -0,0 +1,10 @@ +| methods2.kt:7:1:10:1 | | +| methods2.kt:7:1:10:1 | equals | +| methods2.kt:7:1:10:1 | hashCode | +| methods2.kt:7:1:10:1 | toString | +| methods2.kt:8:5:9:5 | fooBarClassMethod | +| methods.kt:5:1:8:1 | | +| methods.kt:5:1:8:1 | equals | +| methods.kt:5:1:8:1 | hashCode | +| methods.kt:5:1:8:1 | toString | +| methods.kt:6:5:7:5 | classMethod | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.kt b/java/ql/test/kotlin/library-tests/methods/methods.kt new file mode 100644 index 00000000000..8be7e51d1ba --- /dev/null +++ b/java/ql/test/kotlin/library-tests/methods/methods.kt @@ -0,0 +1,9 @@ + +fun topLevelMethod(x: Int, y: Int) { +} + +class Class { + fun classMethod(x: Int, y: Int) { + } +} + diff --git a/java/ql/test/kotlin/library-tests/methods/methods.ql b/java/ql/test/kotlin/library-tests/methods/methods.ql new file mode 100644 index 00000000000..8ae755f95d0 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/methods/methods.ql @@ -0,0 +1,5 @@ +import java + +from Method m +select m + diff --git a/java/ql/test/kotlin/library-tests/methods/methods2.kt b/java/ql/test/kotlin/library-tests/methods/methods2.kt new file mode 100644 index 00000000000..2e89e9ea0d0 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/methods/methods2.kt @@ -0,0 +1,11 @@ + +package foo.bar + +fun fooBarTopLevelMethod(x: Int, y: Int) { +} + +class Class { + fun fooBarClassMethod(x: Int, y: Int) { + } +} + From 03d5646c19deb8d61753ac9545a1988a1f9239b2 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 29 Jul 2021 11:41:45 +0100 Subject: [PATCH 0441/1618] Kotlin: Add stmt/expr support --- .../main/kotlin/KotlinExtractorExtension.kt | 106 ++++++++++++++++-- .../kotlin/library-tests/exprs/exprs.expected | 3 + .../test/kotlin/library-tests/exprs/exprs.kt | 5 + .../test/kotlin/library-tests/exprs/exprs.ql | 5 + .../kotlin/library-tests/stmts/stmts.expected | 2 + .../test/kotlin/library-tests/stmts/stmts.kt | 5 + .../test/kotlin/library-tests/stmts/stmts.ql | 5 + 7 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/exprs/exprs.expected create mode 100644 java/ql/test/kotlin/library-tests/exprs/exprs.kt create mode 100644 java/ql/test/kotlin/library-tests/exprs/exprs.ql create mode 100644 java/ql/test/kotlin/library-tests/stmts/stmts.expected create mode 100644 java/ql/test/kotlin/library-tests/stmts/stmts.kt create mode 100644 java/ql/test/kotlin/library-tests/stmts/stmts.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index e2e7330af6c..8c87a0e4d55 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -22,6 +22,14 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.IrFileEntry import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrSimpleType +import org.jetbrains.kotlin.ir.expressions.IrBody +import org.jetbrains.kotlin.ir.expressions.IrBlockBody +import org.jetbrains.kotlin.ir.expressions.IrReturn +import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.IrCall +import org.jetbrains.kotlin.ir.expressions.IrGetValue +import org.jetbrains.kotlin.ir.expressions.IrConst +import org.jetbrains.kotlin.ir.IrStatement class KotlinExtractorExtension(private val tests: List) : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { @@ -54,17 +62,17 @@ class TrapWriter ( val startColumn = fileEntry.getColumnNumber(startOffset) + 1 val endLine = fileEntry.getLineNumber(endOffset) + 1 val endColumn = fileEntry.getColumnNumber(endOffset) - val id: Label = getFreshId() - val fileId: Label = getIdFor(fileLabel) + val id: Label = getFreshLabel() + val fileId: Label = getLabelFor(fileLabel) writeTrap("$id = @\"loc,{$fileId},$startLine,$startColumn,$endLine,$endColumn\"\n") writeLocations_default(id, fileId, startLine, startColumn, endLine, endColumn) return id } val labelMapping: MutableMap> = mutableMapOf>() - fun getIdFor(label: String, initialise: (Label) -> Unit = {}): Label { + fun getLabelFor(label: String, initialise: (Label) -> Unit = {}): Label { val maybeId = labelMapping.get(label) if(maybeId == null) { - val id: Label = getFreshId() + val id: Label = getFreshLabel() labelMapping.put(label, id) writeTrap("$id = $label\n") initialise(id) @@ -74,9 +82,14 @@ class TrapWriter ( return maybeId as Label } } - fun getFreshId(): Label { + fun getFreshLabel(): Label { return Label(nextId++) } + fun getFreshIdLabel(): Label { + val label = Label(nextId++) + writeTrap("$label = *\n") + return label + } } fun extractFile(trapDir: File, srcDir: File, declaration: IrFile) { @@ -95,7 +108,7 @@ fun extractFile(trapDir: File, srcDir: File, declaration: IrFile) { trapFileDir.mkdirs() trapFile.bufferedWriter().use { trapFileBW -> val tw = TrapWriter(fileLabel, trapFileBW, declaration.fileEntry) - val id: Label = tw.getIdFor(fileLabel) + val id: Label = tw.getLabelFor(fileLabel) tw.writeFiles(id, filePath, basename, extension, 0) val fileExtractor = KotlinFileExtractor(tw) val pkg = declaration.fqName.asString() @@ -112,7 +125,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { fun extractPackage(pkg: String): Label { val pkgLabel = "@\"package;$pkg\"" - val id: Label = tw.getIdFor(pkgLabel, { + val id: Label = tw.getLabelFor(pkgLabel, { tw.writePackages(it, pkg) }) return id @@ -130,7 +143,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { fun useSimpleType(c: IrSimpleType): Label { // TODO: This shouldn't assume all SimpleType's are Int val label = "@\"type;int\"" - val id: Label = tw.getIdFor(label, { + val id: Label = tw.getLabelFor(label, { tw.writePrimitives(it, "int") }) return id @@ -141,7 +154,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { val cls = c.name.asString() val qualClassName = if (pkg.isEmpty()) cls else "$pkg.$cls" val label = "@\"class;$qualClassName\"" - val id: Label = tw.getIdFor(label) + val id: Label = tw.getLabelFor(label) return id } @@ -183,7 +196,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { val returnTypeId = useType(f.returnType) val parentId = useDeclarationParent(f.parent) val label = "@\"callable;{$parentId}.${f.name.asString()}($paramTypeIds){$returnTypeId}\"" - val id: Label = tw.getIdFor(label) + val id: Label = tw.getLabelFor(label) return id } @@ -194,7 +207,80 @@ class KotlinFileExtractor(val tw: TrapWriter) { val returnTypeId = useType(f.returnType) tw.writeMethods(id, f.name.asString(), signature, returnTypeId, parentid, id) tw.writeHasLocation(id, locId) + val body = f.body + if(body != null) { + extractBody(body, id) + } } + fun extractBody(b: IrBody, callable: Label) { + when(b) { + is IrBlockBody -> extractBlockBody(b, callable, callable, 0) + else -> extractorBug("Unrecognised IrBody: " + b.javaClass) + } + } + + fun extractBlockBody(b: IrBlockBody, callable: Label, parent: Label, idx: Int) { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(b.startOffset, b.endOffset) + val kind = 0 // TODO: stmt kind for block from generated module + tw.writeStmts(id, kind, parent, idx, callable) + tw.writeHasLocation(id, locId) + for((sIdx, stmt) in b.statements.withIndex()) { + extractStatement(stmt, callable, id, sIdx) + } + } + + fun extractStatement(s: IrStatement, callable: Label, parent: Label, idx: Int) { + when(s) { + is IrReturn -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(s.startOffset, s.endOffset) + val kind = 9 // TODO: stmt kind for return from generated module + tw.writeStmts(id, kind, parent, idx, callable) + tw.writeHasLocation(id, locId) + extractExpression(s.value, id, 0) + } + } + } + + fun extractExpression(e: IrExpression, parent: Label, idx: Int) { + when(e) { + is IrCall -> { + // TODO: This shouldn't assume all IrCalls's are addexpr's + if(e.valueArgumentsCount == 1) { + val left = e.dispatchReceiver + val right = e.getValueArgument(0) + if(left != null && right != null) { + val kind = 27 // TODO: expr kind for addexpr from generated module + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs(id, kind, typeId, parent, idx) + tw.writeHasLocation(id, locId) + extractExpression(left, id, 0) + extractExpression(right, id, 1) + } else { + extractorBug("Unrecognised IrCall: left or right is null") + } + } else { + extractorBug("Unrecognised IrCall: Not binary") + } + } + is IrConst<*> -> { + val v = e.value as Int + val kind = 17 // TODO: expr kind for integerliteral from generated module + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs(id, kind, typeId, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeNamestrings(v.toString(), v.toString(), id) + } + else -> { + extractorBug("Unrecognised IrExpression: " + e.javaClass) + } + } + } } diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected new file mode 100644 index 00000000000..8217e1dd059 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -0,0 +1,3 @@ +| exprs.kt:3:12:3:14 | 123 | +| exprs.kt:3:12:3:20 | ... + ... | +| exprs.kt:3:18:3:20 | 456 | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt new file mode 100644 index 00000000000..51a4ec451c7 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -0,0 +1,5 @@ + +fun topLevelMethod(x: Int, y: Int): Int { + return 123 + 456 +} + diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.ql b/java/ql/test/kotlin/library-tests/exprs/exprs.ql new file mode 100644 index 00000000000..ca00a557663 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.ql @@ -0,0 +1,5 @@ +import java + +from Expr e +select e + diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected new file mode 100644 index 00000000000..f055b801b60 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -0,0 +1,2 @@ +| stmts.kt:2:41:4:1 | { ... } | +| stmts.kt:3:5:3:16 | return ... | diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.kt b/java/ql/test/kotlin/library-tests/stmts/stmts.kt new file mode 100644 index 00000000000..e0a7210031a --- /dev/null +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.kt @@ -0,0 +1,5 @@ + +fun topLevelMethod(x: Int, y: Int): Int { + return x + y +} + diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.ql b/java/ql/test/kotlin/library-tests/stmts/stmts.ql new file mode 100644 index 00000000000..56dd54b1bbf --- /dev/null +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.ql @@ -0,0 +1,5 @@ +import java + +from Stmt s +select s + From b2acb7d7a13c576ec2b238f4befdc691bf9be540 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 29 Jul 2021 14:42:20 +0100 Subject: [PATCH 0442/1618] Add a consistency query --- java/ql/consistency-queries/locations.ql | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 java/ql/consistency-queries/locations.ql diff --git a/java/ql/consistency-queries/locations.ql b/java/ql/consistency-queries/locations.ql new file mode 100644 index 00000000000..c58a6be6ca1 --- /dev/null +++ b/java/ql/consistency-queries/locations.ql @@ -0,0 +1,21 @@ +import java + +// Locations should either be :0:0:0:0 locations (UnknownLocation, or +// a whole file), or all 4 fields should be positive. +Location badLocation() { + [result.getStartLine(), result.getEndLine(), result.getStartColumn(), result.getEndColumn()] != 0 and + [result.getStartLine(), result.getEndLine(), result.getStartColumn(), result.getEndColumn()] < 1 +} + +// The start should not be after the end. +Location backwardsLocation() { + result.getStartLine() > result.getEndLine() + or + result.getStartLine() = result.getEndLine() and + result.getStartColumn() > result.getEndColumn() +} + +from Location l +where l = badLocation() or l = backwardsLocation() +select l + From 06d9d305c28f4b8812fb11b9948f616ab829fe53 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 29 Jul 2021 15:58:07 +0100 Subject: [PATCH 0443/1618] Java: More consistency queries --- java/ql/consistency-queries/locations.ql | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/java/ql/consistency-queries/locations.ql b/java/ql/consistency-queries/locations.ql index c58a6be6ca1..883176396f2 100644 --- a/java/ql/consistency-queries/locations.ql +++ b/java/ql/consistency-queries/locations.ql @@ -1,4 +1,5 @@ import java +import semmle.code.configfiles.ConfigFiles // Locations should either be :0:0:0:0 locations (UnknownLocation, or // a whole file), or all 4 fields should be positive. @@ -15,7 +16,20 @@ Location backwardsLocation() { result.getStartColumn() > result.getEndColumn() } +Location unusedLocation() { + not exists(Top t | t.getLocation() = result) and + not exists(XMLLocatable x | x.getLocation() = result) and + not exists(ConfigLocatable c | c.getLocation() = result) and + not (result.getFile().getExtension() = "xml" and + result.getStartLine() = 0 and + result.getStartColumn() = 0 and + result.getEndLine() = 0 and + result.getEndColumn() = 0) +} + from Location l -where l = badLocation() or l = backwardsLocation() +where l = badLocation() + or l = backwardsLocation() + or l = unusedLocation() select l From bbbd5d78a77bb16091728e1e1b0f596db247f139 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 9 Aug 2021 11:28:40 +0100 Subject: [PATCH 0444/1618] Java: Add toString consistency query --- java/ql/consistency-queries/toString.ql | 33 +++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 java/ql/consistency-queries/toString.ql diff --git a/java/ql/consistency-queries/toString.ql b/java/ql/consistency-queries/toString.ql new file mode 100644 index 00000000000..375d7e98f4e --- /dev/null +++ b/java/ql/consistency-queries/toString.ql @@ -0,0 +1,33 @@ +import java + +string topToString(Top t) { + result = t.toString() + or + // TypeBound doesn't extend Top (but probably should) + result = t.(TypeBound).toString() + or + // XMLLocatable doesn't extend Top (but probably should) + result = t.(XMLLocatable).toString() + or + // Java #142 + t instanceof FieldDeclaration and not exists(t.toString()) and result = "" + or + // Java #143 + t instanceof Javadoc and not exists(t.toString()) and result = "" + or + // Java #144 + t instanceof ReflectiveAccessAnnotation and not exists(t.toString()) and result = "" +} + +string not1ToString() { + exists(Top t | count(topToString(t)) != 1 and result = "Top which doesn't have exactly 1 toString: " + concat(t.getAQlClass(), ", ")) + or + exists(Location l | count(l.toString()) != 1 and result = "Location which doesn't have exactly 1 toString: " + concat(l.getAQlClass(), ", ")) + or + exists(Module m | count(m.toString()) != 1 and result = "Module which doesn't have exactly 1 toString: " + concat(m.getAQlClass(), ", ")) + or + exists(Directive d | count(d.toString()) != 1 and result = "Directive which doesn't have exactly 1 toString: " + concat(d.getAQlClass(), ", ")) +} + +select not1ToString() + From 15be80631f6c7244d17e25233ad13369879d51bd Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 9 Aug 2021 12:24:39 +0100 Subject: [PATCH 0445/1618] Java: Add a consistency test for expressions They should have exactly 1 Type. --- java/ql/consistency-queries/expressions.ql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 java/ql/consistency-queries/expressions.ql diff --git a/java/ql/consistency-queries/expressions.ql b/java/ql/consistency-queries/expressions.ql new file mode 100644 index 00000000000..e901a3dff56 --- /dev/null +++ b/java/ql/consistency-queries/expressions.ql @@ -0,0 +1,9 @@ +import java + +from Expr e, int n +where n = count(e.getType()) + and n != 1 + // Java #144 + and not e instanceof ReflectiveAccessAnnotation +select e, n + From afea1871a7bbbebad504d04e07438a7245f4f2f3 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 9 Aug 2021 13:23:40 +0100 Subject: [PATCH 0446/1618] Java: Add a variables consistency query --- java/ql/consistency-queries/variables.ql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 java/ql/consistency-queries/variables.ql diff --git a/java/ql/consistency-queries/variables.ql b/java/ql/consistency-queries/variables.ql new file mode 100644 index 00000000000..771c9774f9c --- /dev/null +++ b/java/ql/consistency-queries/variables.ql @@ -0,0 +1,7 @@ +import java + +from Variable v, int n +where n = count(v.getType()) + and n != 1 +select v, n + From dbef42120407dfab96e2e5073bc8f54fd668f2e3 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 9 Aug 2021 23:11:29 +0100 Subject: [PATCH 0447/1618] Kotlin: Generate dbscheme deterministically --- java/kotlin-extractor/generate_dbscheme.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/generate_dbscheme.py b/java/kotlin-extractor/generate_dbscheme.py index e89247a40f8..f4ae530aaf9 100755 --- a/java/kotlin-extractor/generate_dbscheme.py +++ b/java/kotlin-extractor/generate_dbscheme.py @@ -42,7 +42,6 @@ with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: s = type_hierarchy.get(typ, set()) s.add(name) type_hierarchy[typ] = s - kt.write('\n') # tables for relname, body in re.findall('\n([\w_]+)(\([^)]*\))', @@ -84,11 +83,11 @@ with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: kt.write(')\\n")\n') kt.write('}\n') - for typ in type_hierarchy: + for typ in sorted(type_hierarchy): kt.write('sealed interface Db' + upperFirst(typ)) - names = type_hierarchy[typ] + names = sorted(type_hierarchy[typ]) if names: kt.write(': ') - kt.write(', '.join(map(lambda name: 'Db' + upperFirst(name), type_hierarchy[typ]))) + kt.write(', '.join(map(lambda name: 'Db' + upperFirst(name), names))) kt.write(' {}\n') From 5f991653c1a0cad7dc8ed334743be58b9d040011 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 9 Aug 2021 23:31:27 +0100 Subject: [PATCH 0448/1618] Kotlin: Generate type aliases for dbscheme --- java/kotlin-extractor/generate_dbscheme.py | 28 ++++++++++++------- .../main/kotlin/KotlinExtractorExtension.kt | 4 +-- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/java/kotlin-extractor/generate_dbscheme.py b/java/kotlin-extractor/generate_dbscheme.py index f4ae530aaf9..8a1272d036d 100755 --- a/java/kotlin-extractor/generate_dbscheme.py +++ b/java/kotlin-extractor/generate_dbscheme.py @@ -13,6 +13,7 @@ with open('../ql/src/config/semmlecode.dbscheme', 'r') as f: dbscheme = re.sub(r'/\*.*?\*/', '', dbscheme, flags=re.DOTALL) dbscheme = re.sub(r'//[^\r\n]*/', '', dbscheme) +type_aliases = {} type_hierarchy = {} with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: @@ -38,10 +39,14 @@ with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: dbscheme, flags=re.DOTALL): type_hierarchy[name] = type_hierarchy.get(name, set()) - for typ in re.findall(r'@(\w+)', unions): - s = type_hierarchy.get(typ, set()) - s.add(name) - type_hierarchy[typ] = s + typs = re.findall(r'@(\w+)', unions) + if len(typs) == 1: + type_aliases[name] = typs[0] + else: + for typ in typs: + s = type_hierarchy.get(typ, set()) + s.add(name) + type_hierarchy[typ] = s # tables for relname, body in re.findall('\n([\w_]+)(\([^)]*\))', @@ -84,10 +89,13 @@ with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: kt.write('}\n') for typ in sorted(type_hierarchy): - kt.write('sealed interface Db' + upperFirst(typ)) - names = sorted(type_hierarchy[typ]) - if names: - kt.write(': ') - kt.write(', '.join(map(lambda name: 'Db' + upperFirst(name), names))) - kt.write(' {}\n') + if typ in type_aliases: + kt.write('typealias Db' + upperFirst(typ) + ' = Db' + upperFirst(type_aliases[typ]) + '\n') + else: + kt.write('sealed interface Db' + upperFirst(typ)) + names = sorted(type_hierarchy[typ]) + if names: + kt.write(': ') + kt.write(', '.join(map(lambda name: 'Db' + upperFirst(name), names))) + kt.write('\n') diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 8c87a0e4d55..10801a5ec88 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -57,12 +57,12 @@ class TrapWriter ( fun writeTrap(trap: String) { file.write(trap) } - fun getLocation(startOffset: Int, endOffset: Int): Label { + fun getLocation(startOffset: Int, endOffset: Int): Label { val startLine = fileEntry.getLineNumber(startOffset) + 1 val startColumn = fileEntry.getColumnNumber(startOffset) + 1 val endLine = fileEntry.getLineNumber(endOffset) + 1 val endColumn = fileEntry.getColumnNumber(endOffset) - val id: Label = getFreshLabel() + val id: Label = getFreshLabel() val fileId: Label = getLabelFor(fileLabel) writeTrap("$id = @\"loc,{$fileId},$startLine,$startColumn,$endLine,$endColumn\"\n") writeLocations_default(id, fileId, startLine, startColumn, endLine, endColumn) From b68178e8cc76f0dc8e69b3f410688ca5e0a132f0 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 9 Aug 2021 23:57:52 +0100 Subject: [PATCH 0449/1618] Kotlin: Handle enums better when generating dbscheme --- java/kotlin-extractor/generate_dbscheme.py | 90 ++++++++++++------- .../main/kotlin/KotlinExtractorExtension.kt | 12 +-- 2 files changed, 61 insertions(+), 41 deletions(-) diff --git a/java/kotlin-extractor/generate_dbscheme.py b/java/kotlin-extractor/generate_dbscheme.py index 8a1272d036d..8f75cbdee0b 100755 --- a/java/kotlin-extractor/generate_dbscheme.py +++ b/java/kotlin-extractor/generate_dbscheme.py @@ -13,9 +13,54 @@ with open('../ql/src/config/semmlecode.dbscheme', 'r') as f: dbscheme = re.sub(r'/\*.*?\*/', '', dbscheme, flags=re.DOTALL) dbscheme = re.sub(r'//[^\r\n]*/', '', dbscheme) +enums = {} type_aliases = {} type_hierarchy = {} +def genTable(kt, relname, body, enum = None, kind = None, num = None, typ = None): + kt.write('fun TrapWriter.write' + upperFirst(relname)) + if kind is not None: + kt.write('_' + typ) + kt.write('(') + for colname, db_type in re.findall('(\S+)\s*:\s*([^\s,]+)', body): + if colname != kind: + kt.write(colname + ': ') + if db_type == 'int': + # TODO: Do something better if the column is a 'case' + kt.write('Int') + elif db_type == 'float': + kt.write('Double') + elif db_type == 'string': + kt.write('String') + elif db_type == 'date': + kt.write('String') + elif db_type == 'boolean': + kt.write('Boolean') + elif db_type[0] == '@': + label = db_type[1:] + if label == enum: + label = typ + kt.write('Label') + else: + raise Exception('Bad db_type: ' + db_type) + kt.write(', ') + kt.write(') {\n') + kt.write(' this.writeTrap("' + relname + '(') + comma = '' + for colname, db_type in re.findall('(\S+)\s*:\s*([^\s,]+)', body): + kt.write(comma) + if colname == kind: + kt.write(str(num)) + elif db_type == 'string' or db_type == 'date': + kt.write('\\"$' + colname + '\\"') # TODO: Escaping + else: + # TODO: Any reformatting or escaping necessary? + # e.g. float formats? + kt.write('$' + colname) + comma = ', ' + kt.write(')\\n")\n') + kt.write('}\n') + with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: kt.write('/* Generated by ' + sys.argv[0] + ': Do not edit manually. */\n') kt.write('package com.github.codeql\n') @@ -29,10 +74,13 @@ with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: for name, kind, body in re.findall(r'case\s+@([^.\s]*)\.([^.\s]*)\s+of\b(.*?);', dbscheme, flags=re.DOTALL): + mapping = [] for num, typ in re.findall(r'(\d+)\s*=\s*@(\S+)', body): s = type_hierarchy.get(typ, set()) s.add(name) type_hierarchy[typ] = s + mapping.append((int(num), typ)) + enums[name] = (kind, mapping) # unions for name, unions in re.findall(r'@(\w+)\s*=\s*(@\w+(?:\s*\|\s*@\w+)*)', @@ -52,41 +100,17 @@ with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: for relname, body in re.findall('\n([\w_]+)(\([^)]*\))', dbscheme, flags=re.DOTALL): + enum = None for db_type in re.findall(':\s*@([^\s,]+)\s*(?:,|$)', body): type_hierarchy[db_type] = type_hierarchy.get(db_type, set()) - kt.write('fun TrapWriter.write' + upperFirst(relname) + '(') - for colname, db_type in re.findall('(\S+)\s*:\s*([^\s,]+)', body): - kt.write(colname + ': ') - if db_type == 'int': - # TODO: Do something better if the column is a 'case' - kt.write('Int') - elif db_type == 'float': - kt.write('Double') - elif db_type == 'string': - kt.write('String') - elif db_type == 'date': - kt.write('String') - elif db_type == 'boolean': - kt.write('Boolean') - elif db_type[0] == '@': - kt.write('Label') - else: - raise Exception('Bad db_type: ' + db_type) - kt.write(', ') - kt.write(') {\n') - kt.write(' this.writeTrap("' + relname + '(') - comma = '' - for colname, db_type in re.findall('(\S+)\s*:\s*([^\s,]+)', body): - kt.write(comma) - if db_type == 'string' or db_type == 'date': - kt.write('\\"$' + colname + '\\"') # TODO: Escaping - else: - # TODO: Any reformatting or escaping necessary? - # e.g. float formats? - kt.write('$' + colname) - comma = ', ' - kt.write(')\\n")\n') - kt.write('}\n') + if db_type in enums: + enum = db_type + if enum is None: + genTable(kt, relname, body) + else: + (kind, mapping) = enums[enum] + for num, typ in mapping: + genTable(kt, relname, body, enum, kind, num, typ) for typ in sorted(type_hierarchy): if typ in type_aliases: diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 10801a5ec88..7330752b259 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -223,8 +223,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { fun extractBlockBody(b: IrBlockBody, callable: Label, parent: Label, idx: Int) { val id = tw.getFreshIdLabel() val locId = tw.getLocation(b.startOffset, b.endOffset) - val kind = 0 // TODO: stmt kind for block from generated module - tw.writeStmts(id, kind, parent, idx, callable) + tw.writeStmts_block(id, parent, idx, callable) tw.writeHasLocation(id, locId) for((sIdx, stmt) in b.statements.withIndex()) { extractStatement(stmt, callable, id, sIdx) @@ -236,8 +235,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { is IrReturn -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(s.startOffset, s.endOffset) - val kind = 9 // TODO: stmt kind for return from generated module - tw.writeStmts(id, kind, parent, idx, callable) + tw.writeStmts_returnstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) extractExpression(s.value, id, 0) } @@ -252,11 +250,10 @@ class KotlinFileExtractor(val tw: TrapWriter) { val left = e.dispatchReceiver val right = e.getValueArgument(0) if(left != null && right != null) { - val kind = 27 // TODO: expr kind for addexpr from generated module val id = tw.getFreshIdLabel() val typeId = useType(e.type) val locId = tw.getLocation(e.startOffset, e.endOffset) - tw.writeExprs(id, kind, typeId, parent, idx) + tw.writeExprs_addexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) extractExpression(left, id, 0) extractExpression(right, id, 1) @@ -269,11 +266,10 @@ class KotlinFileExtractor(val tw: TrapWriter) { } is IrConst<*> -> { val v = e.value as Int - val kind = 17 // TODO: expr kind for integerliteral from generated module val id = tw.getFreshIdLabel() val typeId = useType(e.type) val locId = tw.getLocation(e.startOffset, e.endOffset) - tw.writeExprs(id, kind, typeId, parent, idx) + tw.writeExprs_integerliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } From f6083840858e90769a556dc661830231672a9ead Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 10 Aug 2021 11:00:04 +0100 Subject: [PATCH 0450/1618] Kotlin: Add a "bug" case --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 7330752b259..28b4cfcbe57 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -238,6 +238,8 @@ class KotlinFileExtractor(val tw: TrapWriter) { tw.writeStmts_returnstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) extractExpression(s.value, id, 0) + } else -> { + extractorBug("Unrecognised IrStatement: " + s.javaClass) } } } From 9a75ca7f62a9d0a327d3f926ba665378df4adc17 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 10 Aug 2021 11:49:36 +0100 Subject: [PATCH 0451/1618] Kotlin: Identify the int type better --- .../main/kotlin/KotlinExtractorExtension.kt | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 28b4cfcbe57..661748ed595 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.packageFqName import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.IrFileEntry +import org.jetbrains.kotlin.ir.types.isInt import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrSimpleType import org.jetbrains.kotlin.ir.expressions.IrBody @@ -140,13 +141,20 @@ class KotlinFileExtractor(val tw: TrapWriter) { } @Suppress("UNUSED_PARAMETER") - fun useSimpleType(c: IrSimpleType): Label { - // TODO: This shouldn't assume all SimpleType's are Int - val label = "@\"type;int\"" - val id: Label = tw.getLabelFor(label, { - tw.writePrimitives(it, "int") - }) - return id + fun useSimpleType(s: IrSimpleType): Label { + when { + s.isInt() -> { + val label = "@\"type;int\"" + val id: Label = tw.getLabelFor(label, { + tw.writePrimitives(it, "int") + }) + return id + } + else -> { + extractorBug("Unrecognised IrSimpleType: " + s.javaClass) + return Label(0) + } + } } fun useClass(c: IrClass): Label { From d48739cc92fbcade7f741ba8409a7f4cfa23a749 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 10 Aug 2021 12:40:20 +0100 Subject: [PATCH 0452/1618] Kotlin: Check a call actually is an addition --- .../main/kotlin/KotlinExtractorExtension.kt | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 661748ed595..b6ce08317e7 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -17,7 +17,9 @@ import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.util.dump +import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.packageFqName +import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.IrFileEntry import org.jetbrains.kotlin.ir.types.isInt @@ -255,23 +257,32 @@ class KotlinFileExtractor(val tw: TrapWriter) { fun extractExpression(e: IrExpression, parent: Label, idx: Int) { when(e) { is IrCall -> { - // TODO: This shouldn't assume all IrCalls's are addexpr's - if(e.valueArgumentsCount == 1) { - val left = e.dispatchReceiver - val right = e.getValueArgument(0) - if(left != null && right != null) { - val id = tw.getFreshIdLabel() - val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) - tw.writeExprs_addexpr(id, typeId, parent, idx) - tw.writeHasLocation(id, locId) - extractExpression(left, id, 0) - extractExpression(right, id, 1) - } else { - extractorBug("Unrecognised IrCall: left or right is null") - } + val sig: IdSignature.PublicSignature? = e.symbol.signature?.asPublic() + if(sig == null) { + extractorBug("IrCall without public signature") } else { - extractorBug("Unrecognised IrCall: Not binary") + when { + sig.packageFqName == "kotlin" && sig.declarationFqName == "Int.plus" -> { + if(e.valueArgumentsCount == 1) { + val left = e.dispatchReceiver + val right = e.getValueArgument(0) + if(left != null && right != null) { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs_addexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + extractExpression(left, id, 0) + extractExpression(right, id, 1) + } else { + extractorBug("Unrecognised IrCall: left or right is null") + } + } else { + extractorBug("Unrecognised IrCall: Not binary") + } + } + else -> extractorBug("Unrecognised IrCall: " + e.render()) + } } } is IrConst<*> -> { From f0903726bf7f5c15f38cebb475ca2257e7079fad Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 10 Aug 2021 14:04:12 +0100 Subject: [PATCH 0453/1618] Kotlin: Add some if-stmt support --- .../main/kotlin/KotlinExtractorExtension.kt | 27 ++++++++++++++++++- .../kotlin/library-tests/stmts/stmts.expected | 6 +++-- .../test/kotlin/library-tests/stmts/stmts.kt | 4 +++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index b6ce08317e7..b06e44faa94 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -32,6 +32,9 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrGetValue import org.jetbrains.kotlin.ir.expressions.IrConst +import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.* +import org.jetbrains.kotlin.ir.expressions.IrWhen +import org.jetbrains.kotlin.ir.expressions.IrElseBranch import org.jetbrains.kotlin.ir.IrStatement class KotlinExtractorExtension(private val tests: List) : IrGenerationExtension { @@ -248,6 +251,28 @@ class KotlinFileExtractor(val tw: TrapWriter) { tw.writeStmts_returnstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) extractExpression(s.value, id, 0) + } is IrWhen -> { + val x: IrWhen = s + if(s.origin == IF) { + var branchParent = parent + var branchIdx = idx + for(b in x.branches) { + if(b is IrElseBranch) { + // TODO + } else { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(b.startOffset, b.endOffset) + tw.writeStmts_ifstmt(id, branchParent, branchIdx, callable) + tw.writeHasLocation(id, locId) + extractExpression(b.condition, id, 0) + extractExpression(b.result, id, 1) // TODO: The QLLs think this is a Stmt + branchParent = id + branchIdx = 2 + } + } + } else { + extractorBug("Unrecognised IrWhen: " + s.javaClass) + } } else -> { extractorBug("Unrecognised IrStatement: " + s.javaClass) } @@ -262,7 +287,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { extractorBug("IrCall without public signature") } else { when { - sig.packageFqName == "kotlin" && sig.declarationFqName == "Int.plus" -> { + e.origin == PLUS -> { if(e.valueArgumentsCount == 1) { val left = e.dispatchReceiver val right = e.getValueArgument(0) diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index f055b801b60..49d45b42fd6 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -1,2 +1,4 @@ -| stmts.kt:2:41:4:1 | { ... } | -| stmts.kt:3:5:3:16 | return ... | +| stmts.kt:2:41:8:1 | { ... } | +| stmts.kt:3:8:3:12 | if (...) | +| stmts.kt:4:15:4:19 | if (...) | +| stmts.kt:7:5:7:16 | return ... | diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.kt b/java/ql/test/kotlin/library-tests/stmts/stmts.kt index e0a7210031a..fbaae3a0ed1 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.kt +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.kt @@ -1,5 +1,9 @@ fun topLevelMethod(x: Int, y: Int): Int { + if(x > y) { + } else if(x < y) { + } else { + } return x + y } From 00cff5593f85b6b9efc6b973092daea770ca4aed Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 10 Aug 2021 16:25:57 +0100 Subject: [PATCH 0454/1618] Kotlin: Fix the tests The handling of Unit is very kludgy at the moment. Will need rethinking. --- .../main/kotlin/KotlinExtractorExtension.kt | 67 ++++++++++++++----- .../library-tests/classes/classes.expected | 1 + .../kotlin/library-tests/classes/classes.kt | 1 - .../library-tests/methods/methods.expected | 6 ++ 4 files changed, 59 insertions(+), 16 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index b06e44faa94..1ff37eb0a12 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -22,9 +22,7 @@ import org.jetbrains.kotlin.ir.util.packageFqName import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.IrFileEntry -import org.jetbrains.kotlin.ir.types.isInt -import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.types.IrSimpleType +import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrBlockBody import org.jetbrains.kotlin.ir.expressions.IrReturn @@ -36,6 +34,7 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.* import org.jetbrains.kotlin.ir.expressions.IrWhen import org.jetbrains.kotlin.ir.expressions.IrElseBranch import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol class KotlinExtractorExtension(private val tests: List) : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { @@ -64,19 +63,25 @@ class TrapWriter ( file.write(trap) } fun getLocation(startOffset: Int, endOffset: Int): Label { - val startLine = fileEntry.getLineNumber(startOffset) + 1 - val startColumn = fileEntry.getColumnNumber(startOffset) + 1 - val endLine = fileEntry.getLineNumber(endOffset) + 1 - val endColumn = fileEntry.getColumnNumber(endOffset) + val unknownLoc = startOffset == -1 && endOffset == -1 + val startLine = if(unknownLoc) 0 else fileEntry.getLineNumber(startOffset) + 1 + val startColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(startOffset) + 1 + val endLine = if(unknownLoc) 0 else fileEntry.getLineNumber(endOffset) + 1 + val endColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(endOffset) val id: Label = getFreshLabel() + // TODO: This isn't right for UnknownLocation val fileId: Label = getLabelFor(fileLabel) writeTrap("$id = @\"loc,{$fileId},$startLine,$startColumn,$endLine,$endColumn\"\n") writeLocations_default(id, fileId, startLine, startColumn, endLine, endColumn) return id } val labelMapping: MutableMap> = mutableMapOf>() + fun getExistingLabelFor(label: String): Label? { + @Suppress("UNCHECKED_CAST") + return labelMapping.get(label) as Label? + } fun getLabelFor(label: String, initialise: (Label) -> Unit = {}): Label { - val maybeId = labelMapping.get(label) + val maybeId: Label? = getExistingLabelFor(label) if(maybeId == null) { val id: Label = getFreshLabel() labelMapping.put(label, id) @@ -84,8 +89,7 @@ class TrapWriter ( initialise(id) return id } else { - @Suppress("UNCHECKED_CAST") - return maybeId as Label + return maybeId } } fun getFreshLabel(): Label { @@ -146,7 +150,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { } @Suppress("UNUSED_PARAMETER") - fun useSimpleType(s: IrSimpleType): Label { + fun useSimpleType(s: IrSimpleType): Label { when { s.isInt() -> { val label = "@\"type;int\"" @@ -155,24 +159,56 @@ class KotlinFileExtractor(val tw: TrapWriter) { }) return id } + s.isBoolean() -> { + val label = "@\"type;boolean\"" + val id: Label = tw.getLabelFor(label, { + tw.writePrimitives(it, "boolean") + }) + return id + } + s.isString() -> { + val label = "@\"type;string\"" + val id: Label = tw.getLabelFor(label, { + tw.writePrimitives(it, "string") + }) + return id + } + s.classifier.owner is IrClass -> { + val classifier: IrClassifierSymbol = s.classifier + val cls: IrClass = classifier.owner as IrClass + return useClass(cls) + } else -> { - extractorBug("Unrecognised IrSimpleType: " + s.javaClass) + extractorBug("Unrecognised IrSimpleType: " + s.javaClass + ": " + s.render()) return Label(0) } } } - fun useClass(c: IrClass): Label { + fun getClassLabel(c: IrClass): String { val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() val qualClassName = if (pkg.isEmpty()) cls else "$pkg.$cls" val label = "@\"class;$qualClassName\"" + return label + } + + fun addClassLabel(c: IrClass): Label { + val label = getClassLabel(c) val id: Label = tw.getLabelFor(label) return id } - fun extractClass(c: IrClass) { - val id = useClass(c) + fun useClass(c: IrClass): Label { + if(c.name.asString() == "Unit" && tw.getExistingLabelFor(getClassLabel(c)) == null) { + return extractClass(c) + } else { + return addClassLabel(c) + } + } + + fun extractClass(c: IrClass): Label { + val id = addClassLabel(c) val locId = tw.getLocation(c.startOffset, c.endOffset) val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() @@ -180,6 +216,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { tw.writeClasses(id, cls, pkgId, id) tw.writeHasLocation(id, locId) c.declarations.map { extractDeclaration(it, id) } + return id } fun useType(t: IrType): Label { diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index f96de7942ea..a2ac7c8dc9b 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -1,3 +1,4 @@ +| classes.kt:0:0:0:0 | Unit | | classes.kt:2:1:2:18 | ClassOne | | classes.kt:4:1:6:1 | ClassTwo | | classes.kt:8:1:10:1 | ClassThree | diff --git a/java/ql/test/kotlin/library-tests/classes/classes.kt b/java/ql/test/kotlin/library-tests/classes/classes.kt index 6a05bfdedf9..d557fafe725 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.kt +++ b/java/ql/test/kotlin/library-tests/classes/classes.kt @@ -13,4 +13,3 @@ class ClassFour: ClassThree() { override fun foo(arg: Int) { } } - diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index 72b1a061a22..be0025e9e40 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -1,8 +1,14 @@ +| methods2.kt:0:0:0:0 | equals | +| methods2.kt:0:0:0:0 | hashCode | +| methods2.kt:0:0:0:0 | toString | | methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | equals | | methods2.kt:7:1:10:1 | hashCode | | methods2.kt:7:1:10:1 | toString | | methods2.kt:8:5:9:5 | fooBarClassMethod | +| methods.kt:0:0:0:0 | equals | +| methods.kt:0:0:0:0 | hashCode | +| methods.kt:0:0:0:0 | toString | | methods.kt:5:1:8:1 | | | methods.kt:5:1:8:1 | equals | | methods.kt:5:1:8:1 | hashCode | From b25ea03211dfd19650520f4d2bd07e5648f396fb Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 11 Aug 2021 12:32:55 +0100 Subject: [PATCH 0455/1618] Kotlin: Add while statements --- .../src/main/kotlin/KotlinExtractorExtension.kt | 11 +++++++++++ .../ql/test/kotlin/library-tests/stmts/stmts.expected | 5 +++-- java/ql/test/kotlin/library-tests/stmts/stmts.kt | 2 ++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 1ff37eb0a12..61183ec7a71 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -33,6 +33,7 @@ import org.jetbrains.kotlin.ir.expressions.IrConst import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.* import org.jetbrains.kotlin.ir.expressions.IrWhen import org.jetbrains.kotlin.ir.expressions.IrElseBranch +import org.jetbrains.kotlin.ir.expressions.IrWhileLoop import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol @@ -288,6 +289,16 @@ class KotlinFileExtractor(val tw: TrapWriter) { tw.writeStmts_returnstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) extractExpression(s.value, id, 0) + } is IrWhileLoop -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(s.startOffset, s.endOffset) + tw.writeStmts_whilestmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + extractExpression(s.condition, id, 0) + val body = s.body + if(body != null) { + extractExpression(body, id, 1) // TODO: The QLLs think this is a Stmt + } } is IrWhen -> { val x: IrWhen = s if(s.origin == IF) { diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index 49d45b42fd6..93dd9568f2b 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -1,4 +1,5 @@ -| stmts.kt:2:41:8:1 | { ... } | +| stmts.kt:2:41:10:1 | { ... } | | stmts.kt:3:8:3:12 | if (...) | | stmts.kt:4:15:4:19 | if (...) | -| stmts.kt:7:5:7:16 | return ... | +| stmts.kt:7:5:8:16 | while (...) | +| stmts.kt:9:5:9:16 | return ... | diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.kt b/java/ql/test/kotlin/library-tests/stmts/stmts.kt index fbaae3a0ed1..eedc5756409 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.kt +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.kt @@ -4,6 +4,8 @@ fun topLevelMethod(x: Int, y: Int): Int { } else if(x < y) { } else { } + while(x > y) + return x return x + y } From a8a6b4c09f2ac8630a64f11f8b1f27030006f229 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 11 Aug 2021 12:51:56 +0100 Subject: [PATCH 0456/1618] Kotlin: Move some expressions to the right place --- java/kotlin-extractor/generate_dbscheme.py | 10 ++- .../main/kotlin/KotlinExtractorExtension.kt | 87 ++++++++++--------- java/ql/lib/config/semmlecode.dbscheme | 3 +- .../kotlin/library-tests/stmts/stmts.expected | 1 + 4 files changed, 57 insertions(+), 44 deletions(-) diff --git a/java/kotlin-extractor/generate_dbscheme.py b/java/kotlin-extractor/generate_dbscheme.py index 8f75cbdee0b..718e4087a41 100755 --- a/java/kotlin-extractor/generate_dbscheme.py +++ b/java/kotlin-extractor/generate_dbscheme.py @@ -17,6 +17,11 @@ enums = {} type_aliases = {} type_hierarchy = {} +def unalias(t): + while t in type_aliases: + t = type_aliases[t] + return t + def genTable(kt, relname, body, enum = None, kind = None, num = None, typ = None): kt.write('fun TrapWriter.write' + upperFirst(relname)) if kind is not None: @@ -117,7 +122,10 @@ with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: kt.write('typealias Db' + upperFirst(typ) + ' = Db' + upperFirst(type_aliases[typ]) + '\n') else: kt.write('sealed interface Db' + upperFirst(typ)) - names = sorted(type_hierarchy[typ]) + # This map of unalias avoids duplicates when both T and an + # alias of T appear in the set. Sorting makes the output + # deterministic. + names = sorted(set(map(unalias, type_hierarchy[typ]))) if names: kt.write(': ') kt.write(', '.join(map(lambda name: 'Db' + upperFirst(name), names))) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 61183ec7a71..862b36d952e 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -283,51 +283,16 @@ class KotlinFileExtractor(val tw: TrapWriter) { fun extractStatement(s: IrStatement, callable: Label, parent: Label, idx: Int) { when(s) { - is IrReturn -> { - val id = tw.getFreshIdLabel() - val locId = tw.getLocation(s.startOffset, s.endOffset) - tw.writeStmts_returnstmt(id, parent, idx, callable) - tw.writeHasLocation(id, locId) - extractExpression(s.value, id, 0) - } is IrWhileLoop -> { - val id = tw.getFreshIdLabel() - val locId = tw.getLocation(s.startOffset, s.endOffset) - tw.writeStmts_whilestmt(id, parent, idx, callable) - tw.writeHasLocation(id, locId) - extractExpression(s.condition, id, 0) - val body = s.body - if(body != null) { - extractExpression(body, id, 1) // TODO: The QLLs think this is a Stmt - } - } is IrWhen -> { - val x: IrWhen = s - if(s.origin == IF) { - var branchParent = parent - var branchIdx = idx - for(b in x.branches) { - if(b is IrElseBranch) { - // TODO - } else { - val id = tw.getFreshIdLabel() - val locId = tw.getLocation(b.startOffset, b.endOffset) - tw.writeStmts_ifstmt(id, branchParent, branchIdx, callable) - tw.writeHasLocation(id, locId) - extractExpression(b.condition, id, 0) - extractExpression(b.result, id, 1) // TODO: The QLLs think this is a Stmt - branchParent = id - branchIdx = 2 - } - } - } else { - extractorBug("Unrecognised IrWhen: " + s.javaClass) - } - } else -> { + is IrExpression -> { + extractExpression(s, callable, parent, idx) + } + else -> { extractorBug("Unrecognised IrStatement: " + s.javaClass) } } } - fun extractExpression(e: IrExpression, parent: Label, idx: Int) { + fun extractExpression(e: IrExpression, callable: Label, parent: Label, idx: Int) { when(e) { is IrCall -> { val sig: IdSignature.PublicSignature? = e.symbol.signature?.asPublic() @@ -345,8 +310,8 @@ class KotlinFileExtractor(val tw: TrapWriter) { val locId = tw.getLocation(e.startOffset, e.endOffset) tw.writeExprs_addexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) - extractExpression(left, id, 0) - extractExpression(right, id, 1) + extractExpression(left, callable, id, 0) + extractExpression(right, callable, id, 1) } else { extractorBug("Unrecognised IrCall: left or right is null") } @@ -367,6 +332,44 @@ class KotlinFileExtractor(val tw: TrapWriter) { tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } + is IrReturn -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeStmts_returnstmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + extractExpression(e.value, callable, id, 0) + } is IrWhileLoop -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeStmts_whilestmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + extractExpression(e.condition, callable, id, 0) + val body = e.body + if(body != null) { + extractExpression(body, callable, id, 1) // TODO: The QLLs think this is a Stmt + } + } is IrWhen -> { + if(e.origin == IF) { + var branchParent = parent + var branchIdx = idx + for(b in e.branches) { + if(b is IrElseBranch) { + // TODO + } else { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(b.startOffset, b.endOffset) + tw.writeStmts_ifstmt(id, branchParent, branchIdx, callable) + tw.writeHasLocation(id, locId) + extractExpression(b.condition, callable, id, 0) + extractExpression(b.result, callable, id, 1) // TODO: The QLLs think this is a Stmt + branchParent = id + branchIdx = 2 + } + } + } else { + extractorBug("Unrecognised IrWhen: " + e.javaClass) + } + } else -> { extractorBug("Unrecognised IrExpression: " + e.javaClass) } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 68b5434e283..11625ec8707 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -503,7 +503,8 @@ stmts( int bodydecl: @callable ref ); -@stmtparent = @callable | @stmt | @switchexpr; +// @stmtparent = @callable | @stmt | @switchexpr; +@stmtparent = @exprparent; case @stmt.kind of 0 = @block diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index 93dd9568f2b..8ad2a3b892f 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -2,4 +2,5 @@ | stmts.kt:3:8:3:12 | if (...) | | stmts.kt:4:15:4:19 | if (...) | | stmts.kt:7:5:8:16 | while (...) | +| stmts.kt:8:9:8:16 | return ... | | stmts.kt:9:5:9:16 | return ... | From 0c429e4f8008cf82ed735e2d2f4c2bcadfcdc6b6 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 11 Aug 2021 13:03:20 +0100 Subject: [PATCH 0457/1618] Kotlin: Add blocks --- .../src/main/kotlin/KotlinExtractorExtension.kt | 9 +++++++++ java/ql/test/kotlin/library-tests/stmts/stmts.expected | 9 +++++++-- java/ql/test/kotlin/library-tests/stmts/stmts.kt | 3 +++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 862b36d952e..820b3dd97df 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.* import org.jetbrains.kotlin.ir.expressions.IrWhen import org.jetbrains.kotlin.ir.expressions.IrElseBranch import org.jetbrains.kotlin.ir.expressions.IrWhileLoop +import org.jetbrains.kotlin.ir.expressions.IrBlock import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol @@ -338,6 +339,14 @@ class KotlinFileExtractor(val tw: TrapWriter) { tw.writeStmts_returnstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) extractExpression(e.value, callable, id, 0) + } is IrBlock -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeStmts_block(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + e.statements.forEachIndexed { i, s -> + extractStatement(s, callable, id, i) + } } is IrWhileLoop -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e.startOffset, e.endOffset) diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index 8ad2a3b892f..b74fb97af46 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -1,6 +1,11 @@ -| stmts.kt:2:41:10:1 | { ... } | +| stmts.kt:2:41:13:1 | { ... } | | stmts.kt:3:8:3:12 | if (...) | +| stmts.kt:3:15:4:5 | { ... } | | stmts.kt:4:15:4:19 | if (...) | +| stmts.kt:4:22:5:5 | { ... } | | stmts.kt:7:5:8:16 | while (...) | | stmts.kt:8:9:8:16 | return ... | -| stmts.kt:9:5:9:16 | return ... | +| stmts.kt:9:5:11:5 | while (...) | +| stmts.kt:9:18:11:5 | { ... } | +| stmts.kt:10:9:10:16 | return ... | +| stmts.kt:12:5:12:16 | return ... | diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.kt b/java/ql/test/kotlin/library-tests/stmts/stmts.kt index eedc5756409..9f0332ee8ed 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.kt +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.kt @@ -6,6 +6,9 @@ fun topLevelMethod(x: Int, y: Int): Int { } while(x > y) return x + while(x < y) { + return y + } return x + y } From 97722faee9ae7885abfd931f828bd1fab505d864 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 11 Aug 2021 13:53:39 +0100 Subject: [PATCH 0458/1618] Kotlin: Add do/while loops --- .../src/main/kotlin/KotlinExtractorExtension.kt | 11 +++++++++++ java/ql/test/kotlin/library-tests/stmts/stmts.kt | 3 +++ 2 files changed, 14 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 820b3dd97df..608c3149537 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.ir.expressions.IrWhen import org.jetbrains.kotlin.ir.expressions.IrElseBranch import org.jetbrains.kotlin.ir.expressions.IrWhileLoop import org.jetbrains.kotlin.ir.expressions.IrBlock +import org.jetbrains.kotlin.ir.expressions.IrDoWhileLoop import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol @@ -357,6 +358,16 @@ class KotlinFileExtractor(val tw: TrapWriter) { if(body != null) { extractExpression(body, callable, id, 1) // TODO: The QLLs think this is a Stmt } + } is IrDoWhileLoop -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeStmts_dostmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + extractExpression(e.condition, callable, id, 0) + val body = e.body + if(body != null) { + extractExpression(body, callable, id, 1) // TODO: The QLLs think this is a Stmt + } } is IrWhen -> { if(e.origin == IF) { var branchParent = parent diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.kt b/java/ql/test/kotlin/library-tests/stmts/stmts.kt index 9f0332ee8ed..2dcef96147c 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.kt +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.kt @@ -9,6 +9,9 @@ fun topLevelMethod(x: Int, y: Int): Int { while(x < y) { return y } + do { + return y + } while(x < y) return x + y } From b91660a0f082c62bd2f2e7d4bc1a56de79e9a06d Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 11 Aug 2021 15:21:43 +0100 Subject: [PATCH 0459/1618] Kotlin: Extract properties --- .../main/kotlin/KotlinExtractorExtension.kt | 22 +++++++++++++++++++ java/ql/lib/config/semmlecode.dbscheme | 2 +- .../kotlin/library-tests/stmts/stmts.expected | 6 +++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 608c3149537..6104e3981d9 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter +import org.jetbrains.kotlin.ir.declarations.IrProperty import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.packageFqName @@ -148,6 +149,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { when (declaration) { is IrClass -> extractClass(declaration) is IrFunction -> extractFunction(declaration, parentid) + is IrProperty -> extractProperty(declaration, parentid) else -> extractorBug("Unrecognised IrDeclaration: " + declaration.javaClass) } } @@ -266,6 +268,26 @@ class KotlinFileExtractor(val tw: TrapWriter) { } } + fun useProperty(p: IrProperty): Label { + val parentId = useDeclarationParent(p.parent) + val label = "@\"field;{$parentId};${p.name.asString()}\"" + val id: Label = tw.getLabelFor(label) + return id + } + + fun extractProperty(p: IrProperty, parentid: Label) { + val bf = p.backingField + if(bf == null) { + extractorBug("IrProperty without backing field") + } else { + val id = useProperty(p) + val locId = tw.getLocation(p.startOffset, p.endOffset) + val typeId = useType(bf.type) + tw.writeFields(id, p.name.asString(), typeId, parentid, id) + tw.writeHasLocation(id, locId) + } + } + fun extractBody(b: IrBody, callable: Label) { when(b) { is IrBlockBody -> extractBlockBody(b, callable, callable, 0) diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 11625ec8707..4faf1e8bd68 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -319,7 +319,7 @@ fields( unique int id: @field, string nodeName: string ref, int typeid: @type ref, - int parentid: @reftype ref, + int parentid: @package_or_reftype ref, int sourceid: @field ref ); diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index b74fb97af46..726e9b76217 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -1,4 +1,4 @@ -| stmts.kt:2:41:13:1 | { ... } | +| stmts.kt:2:41:16:1 | { ... } | | stmts.kt:3:8:3:12 | if (...) | | stmts.kt:3:15:4:5 | { ... } | | stmts.kt:4:15:4:19 | if (...) | @@ -8,4 +8,6 @@ | stmts.kt:9:5:11:5 | while (...) | | stmts.kt:9:18:11:5 | { ... } | | stmts.kt:10:9:10:16 | return ... | -| stmts.kt:12:5:12:16 | return ... | +| stmts.kt:12:5:14:18 | do ... while (...) | +| stmts.kt:12:5:14:18 | { ... } | +| stmts.kt:15:5:15:16 | return ... | From 1c39f001e59260de042f68f9514918c3fb314ac8 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 11 Aug 2021 16:44:39 +0100 Subject: [PATCH 0460/1618] Kotlin: Add variables test --- .../test/kotlin/library-tests/variables/variables.expected | 1 + java/ql/test/kotlin/library-tests/variables/variables.kt | 7 +++++++ java/ql/test/kotlin/library-tests/variables/variables.ql | 5 +++++ 3 files changed, 13 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/variables/variables.expected create mode 100644 java/ql/test/kotlin/library-tests/variables/variables.kt create mode 100644 java/ql/test/kotlin/library-tests/variables/variables.ql diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected new file mode 100644 index 00000000000..9a556da4655 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -0,0 +1 @@ +| variables.kt:3:5:3:21 | prop | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.kt b/java/ql/test/kotlin/library-tests/variables/variables.kt new file mode 100644 index 00000000000..8418cafc7c9 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/variables/variables.kt @@ -0,0 +1,7 @@ + +class Foo { + val prop: Int = 1 +} + +// TODO: val topLevel: Int = 1 + diff --git a/java/ql/test/kotlin/library-tests/variables/variables.ql b/java/ql/test/kotlin/library-tests/variables/variables.ql new file mode 100644 index 00000000000..42423f7bf7f --- /dev/null +++ b/java/ql/test/kotlin/library-tests/variables/variables.ql @@ -0,0 +1,5 @@ +import java + +from Variable v +select v + From 46add88bb52d85f3a6faca4a56435eb12e4a87cf Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 11 Aug 2021 17:28:52 +0100 Subject: [PATCH 0461/1618] Kotlin: Add more types --- .../main/kotlin/KotlinExtractorExtension.kt | 40 +++++++++---------- .../kotlin/library-tests/types/types.expected | 10 +++++ .../test/kotlin/library-tests/types/types.kt | 34 ++++++++++++++++ .../test/kotlin/library-tests/types/types.ql | 5 +++ 4 files changed, 69 insertions(+), 20 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/types/types.expected create mode 100644 java/ql/test/kotlin/library-tests/types/types.kt create mode 100644 java/ql/test/kotlin/library-tests/types/types.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 6104e3981d9..9f49f052e47 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -156,28 +156,28 @@ class KotlinFileExtractor(val tw: TrapWriter) { @Suppress("UNUSED_PARAMETER") fun useSimpleType(s: IrSimpleType): Label { + fun primitiveType(name: String): Label { + return tw.getLabelFor("@\"type;$name\"", { + tw.writePrimitives(it, name) + }) + } when { - s.isInt() -> { - val label = "@\"type;int\"" - val id: Label = tw.getLabelFor(label, { - tw.writePrimitives(it, "int") - }) - return id - } - s.isBoolean() -> { - val label = "@\"type;boolean\"" - val id: Label = tw.getLabelFor(label, { - tw.writePrimitives(it, "boolean") - }) - return id - } - s.isString() -> { - val label = "@\"type;string\"" - val id: Label = tw.getLabelFor(label, { - tw.writePrimitives(it, "string") - }) - return id + s.isByte() -> return primitiveType("byte") + s.isShort() -> return primitiveType("short") + s.isInt() -> return primitiveType("int") + s.isLong() -> return primitiveType("long") + s.isUByte() || s.isUShort() || s.isUInt() || s.isULong() -> { + extractorBug("Unhandled unsigned type") + return Label(0) } + + s.isDouble() -> return primitiveType("double") + s.isFloat() -> return primitiveType("float") + + s.isBoolean() -> return primitiveType("boolean") + + s.isChar() -> return primitiveType("char") + s.isString() -> return primitiveType("string") // TODO: Wrong s.classifier.owner is IrClass -> { val classifier: IrClassifierSymbol = s.classifier val cls: IrClass = classifier.owner as IrClass diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected new file mode 100644 index 00000000000..27677b67b5a --- /dev/null +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -0,0 +1,10 @@ +| file://:0:0:0:0 | boolean | PrimitiveType | +| file://:0:0:0:0 | byte | PrimitiveType | +| file://:0:0:0:0 | char | PrimitiveType | +| file://:0:0:0:0 | double | PrimitiveType | +| file://:0:0:0:0 | float | PrimitiveType | +| file://:0:0:0:0 | int | PrimitiveType | +| file://:0:0:0:0 | long | PrimitiveType | +| file://:0:0:0:0 | short | PrimitiveType | +| file://:0:0:0:0 | string | ??? | +| types.kt:2:1:33:1 | Foo | Class | diff --git a/java/ql/test/kotlin/library-tests/types/types.kt b/java/ql/test/kotlin/library-tests/types/types.kt new file mode 100644 index 00000000000..8364629bd07 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/types/types.kt @@ -0,0 +1,34 @@ + +class Foo { + val propByte: Byte = 1 + val propShort: Short = 1 + val propInt: Int = 1 + val propLong: Long = 1 + +/* +TODO + val propUByte: UByte = 1u + val propUShort: UShort = 1u + val propUInt: UInt = 1u + val propULong: ULong = 1u +*/ + + val propFloat: Float = 1.0f + val propDouble: Double = 1.0 + + val propBoolean: Boolean = true + + val propChar: Char = 'c' + val propString: String = "str" + +/* +TODO + val propArray: Array = arrayOf(1, 2, 3) + + val propByteArray: ByteArray = byteArrayOf(1, 2, 3) + val propShortArray: ShortArray = shortArrayOf(1, 2, 3) + val propIntArray: IntArray = intArrayOf(1, 2, 3) + val propLongArray: LongArray = longArrayOf(1, 2, 3) +*/ +} + diff --git a/java/ql/test/kotlin/library-tests/types/types.ql b/java/ql/test/kotlin/library-tests/types/types.ql new file mode 100644 index 00000000000..eeadf0d7073 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/types/types.ql @@ -0,0 +1,5 @@ +import java + +from Type t +select t, concat(t.getAPrimaryQlClass(), ", ") + From 799cf64fd22834e906b61dd3d6159b995ce71ad9 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 11 Aug 2021 18:38:00 +0100 Subject: [PATCH 0462/1618] Kotlin: Local variables --- .../src/main/kotlin/KotlinExtractorExtension.kt | 15 +++++++++++++++ .../library-tests/variables/variables.expected | 3 ++- .../kotlin/library-tests/variables/variables.kt | 4 ++++ .../kotlin/library-tests/variables/variables.ql | 2 +- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 9f49f052e47..773b3e8306e 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFunction import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.declarations.IrProperty +import org.jetbrains.kotlin.ir.declarations.IrVariable import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.packageFqName @@ -305,11 +306,25 @@ class KotlinFileExtractor(val tw: TrapWriter) { } } + fun extractVariable(v: IrVariable, parent: Label, idx: Int) { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(v.startOffset, v.endOffset) + val typeId = useType(v.type) + tw.writeExprs_localvariabledeclexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + val varId = tw.getFreshIdLabel() + tw.writeLocalvars(varId, v.name.asString(), typeId, id) + tw.writeHasLocation(varId, locId) + } + fun extractStatement(s: IrStatement, callable: Label, parent: Label, idx: Int) { when(s) { is IrExpression -> { extractExpression(s, callable, parent, idx) } + is IrVariable -> { + extractVariable(s, parent, idx) + } else -> { extractorBug("Unrecognised IrStatement: " + s.javaClass) } diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index 9a556da4655..0faffde5e92 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -1 +1,2 @@ -| variables.kt:3:5:3:21 | prop | +| variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | +| variables.kt:6:9:6:21 | int local | file://:0:0:0:0 | int | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.kt b/java/ql/test/kotlin/library-tests/variables/variables.kt index 8418cafc7c9..4c7fca445b5 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.kt +++ b/java/ql/test/kotlin/library-tests/variables/variables.kt @@ -1,6 +1,10 @@ class Foo { val prop: Int = 1 + + fun myFunction(param: Int) { + val local = 2 + } } // TODO: val topLevel: Int = 1 diff --git a/java/ql/test/kotlin/library-tests/variables/variables.ql b/java/ql/test/kotlin/library-tests/variables/variables.ql index 42423f7bf7f..f3a3f33190e 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.ql +++ b/java/ql/test/kotlin/library-tests/variables/variables.ql @@ -1,5 +1,5 @@ import java from Variable v -select v +select v, v.getType() From 4ba13d36633075c85f173377d8a682b34357e0f7 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 11 Aug 2021 19:06:50 +0100 Subject: [PATCH 0463/1618] Kotlin: Extract parameters --- .../main/kotlin/KotlinExtractorExtension.kt | 21 +++++++++++++++---- .../variables/variables.expected | 4 ++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 773b3e8306e..de590f64fb3 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -206,11 +206,12 @@ class KotlinFileExtractor(val tw: TrapWriter) { } fun useClass(c: IrClass): Label { - if(c.name.asString() == "Unit" && tw.getExistingLabelFor(getClassLabel(c)) == null) { - return extractClass(c) - } else { - return addClassLabel(c) + if(c.name.asString() == "Any" || c.name.asString() == "Unit") { + if(tw.getExistingLabelFor(getClassLabel(c)) == null) { + return extractClass(c) + } } + return addClassLabel(c) } fun extractClass(c: IrClass): Label { @@ -256,6 +257,15 @@ class KotlinFileExtractor(val tw: TrapWriter) { return id } + fun extractValueParameter(vp: IrValueParameter, parent: Label, idx: Int) { + val id = tw.getFreshIdLabel() + val typeId = useType(vp.type) + val locId = tw.getLocation(vp.startOffset, vp.endOffset) + tw.writeParams(id, typeId, idx, parent, id) + tw.writeHasLocation(id, locId) + tw.writeParamName(id, vp.name.asString()) + } + fun extractFunction(f: IrFunction, parentid: Label) { val id = useFunction(f) val locId = tw.getLocation(f.startOffset, f.endOffset) @@ -267,6 +277,9 @@ class KotlinFileExtractor(val tw: TrapWriter) { if(body != null) { extractBody(body, id) } + f.valueParameters.forEachIndexed { i, vp -> + extractValueParameter(vp, id, i) + } } fun useProperty(p: IrProperty): Label { diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index 0faffde5e92..dfead718bd2 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -1,2 +1,6 @@ +| variables.kt:0:0:0:0 | other | variables.kt:0:0:0:0 | Any | +| variables.kt:0:0:0:0 | other | variables.kt:0:0:0:0 | Any | +| variables.kt:2:1:8:1 | other | variables.kt:0:0:0:0 | Any | | variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | +| variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | | variables.kt:6:9:6:21 | int local | file://:0:0:0:0 | int | From f5e2826b9fe26167213e3b139a3479043b5ff761 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 11 Aug 2021 19:09:34 +0100 Subject: [PATCH 0464/1618] Kotlin: Accept test changes --- .../ql/test/kotlin/library-tests/classes/classes.expected | 1 + .../ql/test/kotlin/library-tests/methods/methods.expected | 8 ++++++++ .../kotlin/library-tests/multiple_files/classes.expected | 2 ++ java/ql/test/kotlin/library-tests/types/types.expected | 1 + 4 files changed, 12 insertions(+) diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index a2ac7c8dc9b..10ef7cb6010 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -1,3 +1,4 @@ +| classes.kt:0:0:0:0 | Any | | classes.kt:0:0:0:0 | Unit | | classes.kt:2:1:2:18 | ClassOne | | classes.kt:4:1:6:1 | ClassTwo | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index be0025e9e40..6b96b784f23 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -1,13 +1,21 @@ +| methods2.kt:0:0:0:0 | | +| methods2.kt:0:0:0:0 | equals | | methods2.kt:0:0:0:0 | equals | | methods2.kt:0:0:0:0 | hashCode | +| methods2.kt:0:0:0:0 | hashCode | +| methods2.kt:0:0:0:0 | toString | | methods2.kt:0:0:0:0 | toString | | methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | equals | | methods2.kt:7:1:10:1 | hashCode | | methods2.kt:7:1:10:1 | toString | | methods2.kt:8:5:9:5 | fooBarClassMethod | +| methods.kt:0:0:0:0 | | +| methods.kt:0:0:0:0 | equals | | methods.kt:0:0:0:0 | equals | | methods.kt:0:0:0:0 | hashCode | +| methods.kt:0:0:0:0 | hashCode | +| methods.kt:0:0:0:0 | toString | | methods.kt:0:0:0:0 | toString | | methods.kt:5:1:8:1 | | | methods.kt:5:1:8:1 | equals | diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected index f50a0039450..3386fb2df40 100644 --- a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected @@ -1,2 +1,4 @@ +| file1.kt:0:0:0:0 | Any | | file1.kt:2:1:2:16 | Class1 | +| file2.kt:0:0:0:0 | Any | | file2.kt:2:1:2:16 | Class2 | diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index 27677b67b5a..837c7ae9037 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -7,4 +7,5 @@ | file://:0:0:0:0 | long | PrimitiveType | | file://:0:0:0:0 | short | PrimitiveType | | file://:0:0:0:0 | string | ??? | +| types.kt:0:0:0:0 | Any | Class | | types.kt:2:1:33:1 | Foo | Class | From 3daec4376fd31dc0d5bde8430c85d979d44631e0 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 12 Aug 2021 12:17:41 +0100 Subject: [PATCH 0465/1618] Kotlin: Variable initialisers --- .../main/kotlin/KotlinExtractorExtension.kt | 18 ++++++---- .../variables/variables.expected | 12 +++---- .../library-tests/variables/variables.kt | 2 +- .../library-tests/variables/variables.ql | 34 +++++++++++++++++-- 4 files changed, 50 insertions(+), 16 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index de590f64fb3..24cb129087a 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -319,15 +319,19 @@ class KotlinFileExtractor(val tw: TrapWriter) { } } - fun extractVariable(v: IrVariable, parent: Label, idx: Int) { - val id = tw.getFreshIdLabel() + fun extractVariable(v: IrVariable, callable: Label) { + val id = tw.getFreshIdLabel() val locId = tw.getLocation(v.startOffset, v.endOffset) val typeId = useType(v.type) - tw.writeExprs_localvariabledeclexpr(id, typeId, parent, idx) + val decId = tw.getFreshIdLabel() + tw.writeLocalvars(id, v.name.asString(), typeId, decId) tw.writeHasLocation(id, locId) - val varId = tw.getFreshIdLabel() - tw.writeLocalvars(varId, v.name.asString(), typeId, id) - tw.writeHasLocation(varId, locId) + tw.writeExprs_localvariabledeclexpr(decId, typeId, id, 0) + tw.writeHasLocation(id, locId) + val i = v.initializer + if(i != null) { + extractExpression(i, callable, decId, 0) + } } fun extractStatement(s: IrStatement, callable: Label, parent: Label, idx: Int) { @@ -336,7 +340,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { extractExpression(s, callable, parent, idx) } is IrVariable -> { - extractVariable(s, parent, idx) + extractVariable(s, callable) } else -> { extractorBug("Unrecognised IrStatement: " + s.javaClass) diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index dfead718bd2..9ab4a75289d 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -1,6 +1,6 @@ -| variables.kt:0:0:0:0 | other | variables.kt:0:0:0:0 | Any | -| variables.kt:0:0:0:0 | other | variables.kt:0:0:0:0 | Any | -| variables.kt:2:1:8:1 | other | variables.kt:0:0:0:0 | Any | -| variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | -| variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | -| variables.kt:6:9:6:21 | int local | file://:0:0:0:0 | int | +| variables.kt:0:0:0:0 | other | variables.kt:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:0:0:0:0 | other | variables.kt:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:2:1:8:1 | other | variables.kt:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| variables.kt:6:9:6:25 | int local | file://:0:0:0:0 | int | variables.kt:6:21:6:25 | ... + ... | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.kt b/java/ql/test/kotlin/library-tests/variables/variables.kt index 4c7fca445b5..640fa076d63 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.kt +++ b/java/ql/test/kotlin/library-tests/variables/variables.kt @@ -3,7 +3,7 @@ class Foo { val prop: Int = 1 fun myFunction(param: Int) { - val local = 2 + val local = 2 + 3 } } diff --git a/java/ql/test/kotlin/library-tests/variables/variables.ql b/java/ql/test/kotlin/library-tests/variables/variables.ql index f3a3f33190e..92cf1e45e97 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.ql +++ b/java/ql/test/kotlin/library-tests/variables/variables.ql @@ -1,5 +1,35 @@ import java -from Variable v -select v, v.getType() +newtype TMaybeExpr = + TExpr(Expr c) or + TNoExpr() + +class MaybeExpr extends TMaybeExpr { + abstract string toString(); + abstract Location getLocation(); +} + +class YesMaybeExpr extends MaybeExpr { + Expr c; + + YesMaybeExpr() { this = TExpr(c) } + override string toString() { result = c.toString() } + override Location getLocation() { result = c.getLocation() } +} + +class NoMaybeExpr extends MaybeExpr { + NoMaybeExpr() { this = TNoExpr() } + + override string toString() { result = "" } + override Location getLocation() { none() } +} + +MaybeExpr initializer(Variable v) { + if exists(v.getInitializer()) + then result = TExpr(v.getInitializer()) + else result = TNoExpr() +} + +from Variable v +select v, v.getType(), initializer(v) From 4c8ff16552cf39acdc776ad5598adc607e58c4ad Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 12 Aug 2021 13:23:01 +0100 Subject: [PATCH 0466/1618] Kotlin: Fixes --- .../src/main/kotlin/KotlinExtractorExtension.kt | 3 ++- java/ql/consistency-queries/qlpack.yml | 4 ++++ java/ql/test/kotlin/library-tests/exprs/exprs.expected | 8 +++++--- java/ql/test/kotlin/library-tests/exprs/exprs.kt | 1 + java/ql/test/kotlin/library-tests/methods/methods2.kt | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 java/ql/consistency-queries/qlpack.yml diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 24cb129087a..9da4f4236c9 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -258,7 +258,8 @@ class KotlinFileExtractor(val tw: TrapWriter) { } fun extractValueParameter(vp: IrValueParameter, parent: Label, idx: Int) { - val id = tw.getFreshIdLabel() + val label = "@\"params;{$parent};$idx\"" + val id = tw.getLabelFor(label) val typeId = useType(vp.type) val locId = tw.getLocation(vp.startOffset, vp.endOffset) tw.writeParams(id, typeId, idx, parent, id) diff --git a/java/ql/consistency-queries/qlpack.yml b/java/ql/consistency-queries/qlpack.yml new file mode 100644 index 00000000000..1a2bd965d00 --- /dev/null +++ b/java/ql/consistency-queries/qlpack.yml @@ -0,0 +1,4 @@ +name: codeql-java-consistency-queries +version: 0.0.0 +libraryPathDependencies: + - codeql-java diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 8217e1dd059..84a8cbb9a84 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -1,3 +1,5 @@ -| exprs.kt:3:12:3:14 | 123 | -| exprs.kt:3:12:3:20 | ... + ... | -| exprs.kt:3:18:3:20 | 456 | +| exprs.kt:3:13:3:17 | ... + ... | +| exprs.kt:4:12:4:14 | 123 | +| exprs.kt:4:12:4:20 | ... + ... | +| exprs.kt:4:18:4:20 | 456 | +| file://:0:0:0:0 | i | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index 51a4ec451c7..d82cc0e3b09 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -1,5 +1,6 @@ fun topLevelMethod(x: Int, y: Int): Int { + var i = x + y return 123 + 456 } diff --git a/java/ql/test/kotlin/library-tests/methods/methods2.kt b/java/ql/test/kotlin/library-tests/methods/methods2.kt index 2e89e9ea0d0..4c642e2d189 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods2.kt +++ b/java/ql/test/kotlin/library-tests/methods/methods2.kt @@ -4,7 +4,7 @@ package foo.bar fun fooBarTopLevelMethod(x: Int, y: Int) { } -class Class { +class Class2 { fun fooBarClassMethod(x: Int, y: Int) { } } From 14a46b08b5c3d8e215fa3b0d1466a0babf7c6f71 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 12 Aug 2021 14:08:03 +0100 Subject: [PATCH 0467/1618] Kotlin: Variable accesses --- .../main/kotlin/KotlinExtractorExtension.kt | 48 ++++++++++++++----- .../kotlin/library-tests/exprs/exprs.expected | 2 + 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 9da4f4236c9..47c5fb1830d 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -8,16 +8,7 @@ import kotlin.system.exitProcess import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.declarations.path -import org.jetbrains.kotlin.ir.declarations.IrModuleFragment -import org.jetbrains.kotlin.ir.declarations.IrClass -import org.jetbrains.kotlin.ir.declarations.IrDeclaration -import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent -import org.jetbrains.kotlin.ir.declarations.IrFile -import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.ir.declarations.IrValueParameter -import org.jetbrains.kotlin.ir.declarations.IrProperty -import org.jetbrains.kotlin.ir.declarations.IrVariable +import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.ir.util.packageFqName @@ -237,10 +228,11 @@ class KotlinFileExtractor(val tw: TrapWriter) { } } - fun useDeclarationParent(dp: IrDeclarationParent): Label { + fun useDeclarationParent(dp: IrDeclarationParent): Label { when(dp) { is IrFile -> return usePackage(dp.fqName.asString()) is IrClass -> return useClass(dp) + is IrFunction -> return useFunction(dp) else -> { extractorBug("Unrecognised IrDeclarationParent: " + dp.javaClass) return Label(0) @@ -257,9 +249,17 @@ class KotlinFileExtractor(val tw: TrapWriter) { return id } - fun extractValueParameter(vp: IrValueParameter, parent: Label, idx: Int) { - val label = "@\"params;{$parent};$idx\"" + fun useValueParameter(vp: IrValueParameter): Label { + @Suppress("UNCHECKED_CAST") + val parentId: Label = useDeclarationParent(vp.parent) as Label + val idx = vp.index + val label = "@\"params;{$parentId};$idx\"" val id = tw.getLabelFor(label) + return id + } + + fun extractValueParameter(vp: IrValueParameter, parent: Label, idx: Int) { + val id = useValueParameter(vp) val typeId = useType(vp.type) val locId = tw.getLocation(vp.startOffset, vp.endOffset) tw.writeParams(id, typeId, idx, parent, id) @@ -349,6 +349,18 @@ class KotlinFileExtractor(val tw: TrapWriter) { } } + fun useValueDeclaration(d: IrValueDeclaration): Label { + when(d) { + is IrValueParameter -> { + return useValueParameter(d) + } + else -> { + extractorBug("Unrecognised IrValueDeclaration: " + d.javaClass) + return Label(0) + } + } + } + fun extractExpression(e: IrExpression, callable: Label, parent: Label, idx: Int) { when(e) { is IrCall -> { @@ -389,6 +401,16 @@ class KotlinFileExtractor(val tw: TrapWriter) { tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } + is IrGetValue -> { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs_varaccess(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + + val vId = useValueDeclaration(e.symbol.owner) + tw.writeVariableBinding(id, vId) + } is IrReturn -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e.startOffset, e.endOffset) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 84a8cbb9a84..9d1939de056 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -1,4 +1,6 @@ +| exprs.kt:3:13:3:13 | x | | exprs.kt:3:13:3:17 | ... + ... | +| exprs.kt:3:17:3:17 | y | | exprs.kt:4:12:4:14 | 123 | | exprs.kt:4:12:4:20 | ... + ... | | exprs.kt:4:18:4:20 | 456 | From b4bc40630f0ecb4c5cf6035af7b1e7927391a433 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 12 Aug 2021 14:58:04 +0100 Subject: [PATCH 0468/1618] Kotlin: More expressions --- .../main/kotlin/KotlinExtractorExtension.kt | 78 ++++++++++++------- .../kotlin/library-tests/exprs/exprs.expected | 28 +++++-- .../test/kotlin/library-tests/exprs/exprs.kt | 6 +- 3 files changed, 75 insertions(+), 37 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 47c5fb1830d..49e73abb235 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -361,37 +361,57 @@ class KotlinFileExtractor(val tw: TrapWriter) { } } + fun extractCall(c: IrCall, callable: Label, parent: Label, idx: Int) { + val exprId: Label = when { + c.origin == PLUS -> { + val id = tw.getFreshIdLabel() + val typeId = useType(c.type) + val locId = tw.getLocation(c.startOffset, c.endOffset) + tw.writeExprs_addexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + id + } c.origin == MINUS -> { + val id = tw.getFreshIdLabel() + val typeId = useType(c.type) + val locId = tw.getLocation(c.startOffset, c.endOffset) + tw.writeExprs_subexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + id + } c.origin == DIV -> { + val id = tw.getFreshIdLabel() + val typeId = useType(c.type) + val locId = tw.getLocation(c.startOffset, c.endOffset) + tw.writeExprs_divexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + id + } c.origin == PERC -> { + val id = tw.getFreshIdLabel() + val typeId = useType(c.type) + val locId = tw.getLocation(c.startOffset, c.endOffset) + tw.writeExprs_remexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + id + } else -> { + extractorBug("Unrecognised IrCall: " + c.render()) + return + } + } + val dr = c.dispatchReceiver + val offset = if(dr == null) 0 else 1 + if(dr != null) { + extractExpression(dr, callable, exprId, 0) + } + for(i in 0 until c.valueArgumentsCount) { + val arg = c.getValueArgument(i) + if(arg != null) { + extractExpression(arg, callable, exprId, i + offset) + } + } + } + fun extractExpression(e: IrExpression, callable: Label, parent: Label, idx: Int) { when(e) { - is IrCall -> { - val sig: IdSignature.PublicSignature? = e.symbol.signature?.asPublic() - if(sig == null) { - extractorBug("IrCall without public signature") - } else { - when { - e.origin == PLUS -> { - if(e.valueArgumentsCount == 1) { - val left = e.dispatchReceiver - val right = e.getValueArgument(0) - if(left != null && right != null) { - val id = tw.getFreshIdLabel() - val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) - tw.writeExprs_addexpr(id, typeId, parent, idx) - tw.writeHasLocation(id, locId) - extractExpression(left, callable, id, 0) - extractExpression(right, callable, id, 1) - } else { - extractorBug("Unrecognised IrCall: left or right is null") - } - } else { - extractorBug("Unrecognised IrCall: Not binary") - } - } - else -> extractorBug("Unrecognised IrCall: " + e.render()) - } - } - } + is IrCall -> extractCall(e, callable, parent, idx) is IrConst<*> -> { val v = e.value as Int val id = tw.getFreshIdLabel() diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 9d1939de056..cc27474e678 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -1,7 +1,21 @@ -| exprs.kt:3:13:3:13 | x | -| exprs.kt:3:13:3:17 | ... + ... | -| exprs.kt:3:17:3:17 | y | -| exprs.kt:4:12:4:14 | 123 | -| exprs.kt:4:12:4:20 | ... + ... | -| exprs.kt:4:18:4:20 | 456 | -| file://:0:0:0:0 | i | +| exprs.kt:3:14:3:14 | 1 | +| exprs.kt:4:14:4:14 | x | +| exprs.kt:4:14:4:18 | ... + ... | +| exprs.kt:4:18:4:18 | y | +| exprs.kt:5:14:5:14 | x | +| exprs.kt:5:14:5:18 | ... - ... | +| exprs.kt:5:18:5:18 | y | +| exprs.kt:6:14:6:14 | x | +| exprs.kt:6:14:6:18 | ... / ... | +| exprs.kt:6:18:6:18 | y | +| exprs.kt:7:14:7:14 | x | +| exprs.kt:7:14:7:18 | ... % ... | +| exprs.kt:7:18:7:18 | y | +| exprs.kt:8:12:8:14 | 123 | +| exprs.kt:8:12:8:20 | ... + ... | +| exprs.kt:8:18:8:20 | 456 | +| file://:0:0:0:0 | i1 | +| file://:0:0:0:0 | i2 | +| file://:0:0:0:0 | i3 | +| file://:0:0:0:0 | i4 | +| file://:0:0:0:0 | i5 | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index d82cc0e3b09..c530bb8ef3c 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -1,6 +1,10 @@ fun topLevelMethod(x: Int, y: Int): Int { - var i = x + y + val i1 = 1 + val i2 = x + y + val i3 = x - y + val i4 = x / y + val i5 = x % y return 123 + 456 } From 492dc3dfb31b69c7d277af1f985c42bffa4a98eb Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 12 Aug 2021 15:21:15 +0100 Subject: [PATCH 0469/1618] Kotlin: More tests (of unhandled expressions) --- .../test/kotlin/library-tests/exprs/exprs.expected | 13 ++++++++++--- java/ql/test/kotlin/library-tests/exprs/exprs.kt | 7 +++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index cc27474e678..f18dff2fad9 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -11,11 +11,18 @@ | exprs.kt:7:14:7:14 | x | | exprs.kt:7:14:7:18 | ... % ... | | exprs.kt:7:18:7:18 | y | -| exprs.kt:8:12:8:14 | 123 | -| exprs.kt:8:12:8:20 | ... + ... | -| exprs.kt:8:18:8:20 | 456 | +| exprs.kt:15:12:15:14 | 123 | +| exprs.kt:15:12:15:20 | ... + ... | +| exprs.kt:15:18:15:20 | 456 | | file://:0:0:0:0 | i1 | | file://:0:0:0:0 | i2 | | file://:0:0:0:0 | i3 | | file://:0:0:0:0 | i4 | | file://:0:0:0:0 | i5 | +| file://:0:0:0:0 | i6 | +| file://:0:0:0:0 | i7 | +| file://:0:0:0:0 | i8 | +| file://:0:0:0:0 | i9 | +| file://:0:0:0:0 | i10 | +| file://:0:0:0:0 | i11 | +| file://:0:0:0:0 | i12 | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index c530bb8ef3c..a51ac76bd2e 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -5,6 +5,13 @@ fun topLevelMethod(x: Int, y: Int): Int { val i3 = x - y val i4 = x / y val i5 = x % y + val i6 = x shl y + val i7 = x shr y + val i8 = x ushr y + val i9 = x and y + val i10 = x or y + val i11 = x xor y + val i12 = x.inv() return 123 + 456 } From 90161b9e9dc62df0db4d506ea420dc114c196ca1 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 12 Aug 2021 17:16:37 +0100 Subject: [PATCH 0470/1618] Kotlin: Add more expressions --- .../main/kotlin/KotlinExtractorExtension.kt | 42 +++++++++++++++++++ .../kotlin/library-tests/exprs/exprs.expected | 33 +++++++++++++-- .../test/kotlin/library-tests/exprs/exprs.kt | 8 ++++ 3 files changed, 80 insertions(+), 3 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 49e73abb235..996310bf773 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -391,6 +391,48 @@ class KotlinFileExtractor(val tw: TrapWriter) { tw.writeExprs_remexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id + } c.origin == EQEQ -> { + val id = tw.getFreshIdLabel() + val typeId = useType(c.type) + val locId = tw.getLocation(c.startOffset, c.endOffset) + tw.writeExprs_eqexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + id + } c.origin == EXCLEQ -> { + val id = tw.getFreshIdLabel() + val typeId = useType(c.type) + val locId = tw.getLocation(c.startOffset, c.endOffset) + tw.writeExprs_neexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + id + } c.origin == LT -> { + val id = tw.getFreshIdLabel() + val typeId = useType(c.type) + val locId = tw.getLocation(c.startOffset, c.endOffset) + tw.writeExprs_ltexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + id + } c.origin == LTEQ -> { + val id = tw.getFreshIdLabel() + val typeId = useType(c.type) + val locId = tw.getLocation(c.startOffset, c.endOffset) + tw.writeExprs_leexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + id + } c.origin == GT -> { + val id = tw.getFreshIdLabel() + val typeId = useType(c.type) + val locId = tw.getLocation(c.startOffset, c.endOffset) + tw.writeExprs_gtexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + id + } c.origin == GTEQ -> { + val id = tw.getFreshIdLabel() + val typeId = useType(c.type) + val locId = tw.getLocation(c.startOffset, c.endOffset) + tw.writeExprs_geexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + id } else -> { extractorBug("Unrecognised IrCall: " + c.render()) return diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index f18dff2fad9..ce72b202ec0 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -11,9 +11,28 @@ | exprs.kt:7:14:7:14 | x | | exprs.kt:7:14:7:18 | ... % ... | | exprs.kt:7:18:7:18 | y | -| exprs.kt:15:12:15:14 | 123 | -| exprs.kt:15:12:15:20 | ... + ... | -| exprs.kt:15:18:15:20 | 456 | +| exprs.kt:15:15:15:15 | x | +| exprs.kt:15:15:15:20 | ... == ... | +| exprs.kt:15:20:15:20 | y | +| exprs.kt:16:15:16:15 | x | +| exprs.kt:16:15:16:20 | ... != ... | +| exprs.kt:16:15:16:20 | ... != ... | +| exprs.kt:16:20:16:20 | y | +| exprs.kt:17:15:17:15 | x | +| exprs.kt:17:15:17:19 | ... < ... | +| exprs.kt:17:19:17:19 | y | +| exprs.kt:18:15:18:15 | x | +| exprs.kt:18:15:18:20 | ... <= ... | +| exprs.kt:18:20:18:20 | y | +| exprs.kt:19:15:19:15 | x | +| exprs.kt:19:15:19:19 | ... > ... | +| exprs.kt:19:19:19:19 | y | +| exprs.kt:20:15:20:15 | x | +| exprs.kt:20:15:20:20 | ... >= ... | +| exprs.kt:20:20:20:20 | y | +| exprs.kt:23:12:23:14 | 123 | +| exprs.kt:23:12:23:20 | ... + ... | +| exprs.kt:23:18:23:20 | 456 | | file://:0:0:0:0 | i1 | | file://:0:0:0:0 | i2 | | file://:0:0:0:0 | i3 | @@ -26,3 +45,11 @@ | file://:0:0:0:0 | i10 | | file://:0:0:0:0 | i11 | | file://:0:0:0:0 | i12 | +| file://:0:0:0:0 | i13 | +| file://:0:0:0:0 | i14 | +| file://:0:0:0:0 | i15 | +| file://:0:0:0:0 | i16 | +| file://:0:0:0:0 | i17 | +| file://:0:0:0:0 | i18 | +| file://:0:0:0:0 | i20 | +| file://:0:0:0:0 | i21 | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index a51ac76bd2e..29baa289466 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -12,6 +12,14 @@ fun topLevelMethod(x: Int, y: Int): Int { val i10 = x or y val i11 = x xor y val i12 = x.inv() + val i13 = x == y + val i14 = x != y + val i15 = x < y + val i16 = x <= y + val i17 = x > y + val i18 = x >= y + val i20 = x in x .. y + val i21 = x !in x .. y return 123 + 456 } From 1de12e72d4151ba390473c70d630e49d74a56d56 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 12 Aug 2021 17:29:58 +0100 Subject: [PATCH 0471/1618] Kotlin: More expressions --- .../main/kotlin/KotlinExtractorExtension.kt | 31 ++++++++++++++----- .../kotlin/library-tests/exprs/exprs.expected | 13 ++++++-- .../test/kotlin/library-tests/exprs/exprs.kt | 5 +++ 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 996310bf773..7ce04c7c8a3 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -455,13 +455,30 @@ class KotlinFileExtractor(val tw: TrapWriter) { when(e) { is IrCall -> extractCall(e, callable, parent, idx) is IrConst<*> -> { - val v = e.value as Int - val id = tw.getFreshIdLabel() - val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) - tw.writeExprs_integerliteral(id, typeId, parent, idx) - tw.writeHasLocation(id, locId) - tw.writeNamestrings(v.toString(), v.toString(), id) + val v = e.value + when(v) { + is Int -> { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs_integerliteral(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeNamestrings(v.toString(), v.toString(), id) + } is Boolean -> { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs_booleanliteral(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeNamestrings(v.toString(), v.toString(), id) + } else -> { + if(v == null) { + extractorBug("Unrecognised IrConst: null value") + } else { + extractorBug("Unrecognised IrConst: " + v.javaClass) + } + } + } } is IrGetValue -> { val id = tw.getFreshIdLabel() diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index ce72b202ec0..a235c6006d2 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -30,9 +30,16 @@ | exprs.kt:20:15:20:15 | x | | exprs.kt:20:15:20:20 | ... >= ... | | exprs.kt:20:20:20:20 | y | -| exprs.kt:23:12:23:14 | 123 | -| exprs.kt:23:12:23:20 | ... + ... | -| exprs.kt:23:18:23:20 | 456 | +| exprs.kt:23:14:23:17 | true | +| exprs.kt:24:14:24:18 | false | +| exprs.kt:28:12:28:14 | 123 | +| exprs.kt:28:12:28:20 | ... + ... | +| exprs.kt:28:18:28:20 | 456 | +| file://:0:0:0:0 | b1 | +| file://:0:0:0:0 | b2 | +| file://:0:0:0:0 | b3 | +| file://:0:0:0:0 | b4 | +| file://:0:0:0:0 | b5 | | file://:0:0:0:0 | i1 | | file://:0:0:0:0 | i2 | | file://:0:0:0:0 | i3 | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index 29baa289466..95dbf1ad255 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -20,6 +20,11 @@ fun topLevelMethod(x: Int, y: Int): Int { val i18 = x >= y val i20 = x in x .. y val i21 = x !in x .. y + val b1 = true + val b2 = false + val b3 = b1 && b2 + val b4 = b1 || b2 + val b5 = !b1 return 123 + 456 } From bb89b25e918a8c4f354ef9050a5189a602e4ac89 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 12 Aug 2021 17:38:08 +0100 Subject: [PATCH 0472/1618] Kotlin: More expressions --- .../src/main/kotlin/KotlinExtractorExtension.kt | 14 ++++++++++++++ .../test/kotlin/library-tests/exprs/exprs.expected | 10 +++++++--- java/ql/test/kotlin/library-tests/exprs/exprs.kt | 2 ++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 7ce04c7c8a3..06e757de58c 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -471,6 +471,20 @@ class KotlinFileExtractor(val tw: TrapWriter) { tw.writeExprs_booleanliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) + } is Char -> { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs_characterliteral(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeNamestrings(v.toString(), v.toString(), id) + } is String -> { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs_stringliteral(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeNamestrings(v.toString(), v.toString(), id) } else -> { if(v == null) { extractorBug("Unrecognised IrConst: null value") diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index a235c6006d2..b9794506cb0 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -32,14 +32,17 @@ | exprs.kt:20:20:20:20 | y | | exprs.kt:23:14:23:17 | true | | exprs.kt:24:14:24:18 | false | -| exprs.kt:28:12:28:14 | 123 | -| exprs.kt:28:12:28:20 | ... + ... | -| exprs.kt:28:18:28:20 | 456 | +| exprs.kt:28:13:28:15 | x | +| exprs.kt:29:16:29:25 | string lit | +| exprs.kt:30:12:30:14 | 123 | +| exprs.kt:30:12:30:20 | ... + ... | +| exprs.kt:30:18:30:20 | 456 | | file://:0:0:0:0 | b1 | | file://:0:0:0:0 | b2 | | file://:0:0:0:0 | b3 | | file://:0:0:0:0 | b4 | | file://:0:0:0:0 | b5 | +| file://:0:0:0:0 | c | | file://:0:0:0:0 | i1 | | file://:0:0:0:0 | i2 | | file://:0:0:0:0 | i3 | @@ -60,3 +63,4 @@ | file://:0:0:0:0 | i18 | | file://:0:0:0:0 | i20 | | file://:0:0:0:0 | i21 | +| file://:0:0:0:0 | str | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index 95dbf1ad255..67d63bfa193 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -25,6 +25,8 @@ fun topLevelMethod(x: Int, y: Int): Int { val b3 = b1 && b2 val b4 = b1 || b2 val b5 = !b1 + val c = 'x' + val str = "string lit" return 123 + 456 } From 4ae7d19235b6683859e8a452d3a58dc627ec28fd Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 12 Aug 2021 17:53:46 +0100 Subject: [PATCH 0473/1618] Kotlin: More expressions --- java/ql/test/kotlin/library-tests/exprs/exprs.expected | 9 ++++++--- java/ql/test/kotlin/library-tests/exprs/exprs.kt | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index b9794506cb0..bd361f2afa2 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -34,14 +34,17 @@ | exprs.kt:24:14:24:18 | false | | exprs.kt:28:13:28:15 | x | | exprs.kt:29:16:29:25 | string lit | -| exprs.kt:30:12:30:14 | 123 | -| exprs.kt:30:12:30:20 | ... + ... | -| exprs.kt:30:18:30:20 | 456 | +| exprs.kt:33:12:33:14 | 123 | +| exprs.kt:33:12:33:20 | ... + ... | +| exprs.kt:33:18:33:20 | 456 | | file://:0:0:0:0 | b1 | | file://:0:0:0:0 | b2 | | file://:0:0:0:0 | b3 | | file://:0:0:0:0 | b4 | | file://:0:0:0:0 | b5 | +| file://:0:0:0:0 | b6 | +| file://:0:0:0:0 | b7 | +| file://:0:0:0:0 | b8 | | file://:0:0:0:0 | c | | file://:0:0:0:0 | i1 | | file://:0:0:0:0 | i2 | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index 67d63bfa193..cccedd1972d 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -27,6 +27,9 @@ fun topLevelMethod(x: Int, y: Int): Int { val b5 = !b1 val c = 'x' val str = "string lit" + val b6 = i1 is Int + val b7 = i1 !is Int + val b8 = b7 as Boolean return 123 + 456 } From f85cf27df853faa0d814258929116fb999f1fbdd Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 16 Aug 2021 10:38:59 +0100 Subject: [PATCH 0474/1618] Kotlin: Better logging infrastructure --- .../main/kotlin/KotlinExtractorExtension.kt | 82 ++++++++++++++----- 1 file changed, 62 insertions(+), 20 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 06e757de58c..b766f18032d 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -4,6 +4,8 @@ import java.io.BufferedWriter import java.io.File import java.nio.file.Files import java.nio.file.Paths +import java.text.SimpleDateFormat +import java.util.Date import kotlin.system.exitProcess import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext @@ -34,19 +36,59 @@ import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol class KotlinExtractorExtension(private val tests: List) : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { + val logger = Logger() + logger.info("Extraction started") val trapDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_TRAP_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/trap") trapDir.mkdirs() val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") srcDir.mkdirs() - moduleFragment.files.map { extractFile(trapDir, srcDir, it) } + moduleFragment.files.map { extractFile(logger, trapDir, srcDir, it) } + logger.printLimitedWarningCounts() // We don't want the compiler to continue and generate class // files etc, so we just exit when we are finished extracting. + logger.info("Extraction completed") exitProcess(0) } } -fun extractorBug(msg: String) { - println(msg) +class Logger() { + private val warningCounts = mutableMapOf() + private val warningLimit: Int + init { + warningLimit = System.getenv("CODEQL_EXTRACTOR_KOTLIN_WARNING_LIMIT")?.toIntOrNull() ?: 100 + } + private fun timestamp(): String { + return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" + } + + fun info(msg: String) { + print("${timestamp()} $msg\n") + } + fun warn(msg: String) { + val st = Exception().stackTrace + val suffix = + if(st.size < 2) { + " Missing caller information.\n" + } else { + val caller = st[1].toString() + val count = warningCounts.getOrDefault(caller, 0) + 1 + warningCounts[caller] = count + when { + warningLimit <= 0 -> "" + count == warningLimit -> " Limit reached for warnings from $caller.\n" + count > warningLimit -> return + else -> "" + } + } + print("${timestamp()} Warning: $msg\n$suffix") + } + fun printLimitedWarningCounts() { + for((caller, count) in warningCounts) { + if(count >= warningLimit) { + println("Total of $count warnings from $caller.") + } + } + } } class TrapWriter ( @@ -98,7 +140,7 @@ class TrapWriter ( } } -fun extractFile(trapDir: File, srcDir: File, declaration: IrFile) { +fun extractFile(logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { val filePath = declaration.path val file = File(filePath) val fileLabel = "@\"$filePath;sourcefile\"" @@ -116,7 +158,7 @@ fun extractFile(trapDir: File, srcDir: File, declaration: IrFile) { val tw = TrapWriter(fileLabel, trapFileBW, declaration.fileEntry) val id: Label = tw.getLabelFor(fileLabel) tw.writeFiles(id, filePath, basename, extension, 0) - val fileExtractor = KotlinFileExtractor(tw) + val fileExtractor = KotlinFileExtractor(logger, tw) val pkg = declaration.fqName.asString() val pkgId = fileExtractor.extractPackage(pkg) tw.writeCupackage(id, pkgId) @@ -124,7 +166,7 @@ fun extractFile(trapDir: File, srcDir: File, declaration: IrFile) { } } -class KotlinFileExtractor(val tw: TrapWriter) { +class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { fun usePackage(pkg: String): Label { return extractPackage(pkg) } @@ -142,7 +184,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { is IrClass -> extractClass(declaration) is IrFunction -> extractFunction(declaration, parentid) is IrProperty -> extractProperty(declaration, parentid) - else -> extractorBug("Unrecognised IrDeclaration: " + declaration.javaClass) + else -> logger.warn("Unrecognised IrDeclaration: " + declaration.javaClass) } } @@ -159,7 +201,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { s.isInt() -> return primitiveType("int") s.isLong() -> return primitiveType("long") s.isUByte() || s.isUShort() || s.isUInt() || s.isULong() -> { - extractorBug("Unhandled unsigned type") + logger.warn("Unhandled unsigned type") return Label(0) } @@ -176,7 +218,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { return useClass(cls) } else -> { - extractorBug("Unrecognised IrSimpleType: " + s.javaClass + ": " + s.render()) + logger.warn("Unrecognised IrSimpleType: " + s.javaClass + ": " + s.render()) return Label(0) } } @@ -222,7 +264,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { is IrSimpleType -> return useSimpleType(t) is IrClass -> return useClass(t) else -> { - extractorBug("Unrecognised IrType: " + t.javaClass) + logger.warn("Unrecognised IrType: " + t.javaClass) return Label(0) } } @@ -234,7 +276,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { is IrClass -> return useClass(dp) is IrFunction -> return useFunction(dp) else -> { - extractorBug("Unrecognised IrDeclarationParent: " + dp.javaClass) + logger.warn("Unrecognised IrDeclarationParent: " + dp.javaClass) return Label(0) } } @@ -293,7 +335,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { fun extractProperty(p: IrProperty, parentid: Label) { val bf = p.backingField if(bf == null) { - extractorBug("IrProperty without backing field") + logger.warn("IrProperty without backing field") } else { val id = useProperty(p) val locId = tw.getLocation(p.startOffset, p.endOffset) @@ -306,7 +348,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { fun extractBody(b: IrBody, callable: Label) { when(b) { is IrBlockBody -> extractBlockBody(b, callable, callable, 0) - else -> extractorBug("Unrecognised IrBody: " + b.javaClass) + else -> logger.warn("Unrecognised IrBody: " + b.javaClass) } } @@ -344,7 +386,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { extractVariable(s, callable) } else -> { - extractorBug("Unrecognised IrStatement: " + s.javaClass) + logger.warn("Unrecognised IrStatement: " + s.javaClass) } } } @@ -355,7 +397,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { return useValueParameter(d) } else -> { - extractorBug("Unrecognised IrValueDeclaration: " + d.javaClass) + logger.warn("Unrecognised IrValueDeclaration: " + d.javaClass) return Label(0) } } @@ -434,7 +476,7 @@ class KotlinFileExtractor(val tw: TrapWriter) { tw.writeHasLocation(id, locId) id } else -> { - extractorBug("Unrecognised IrCall: " + c.render()) + logger.warn("Unrecognised IrCall: " + c.render()) return } } @@ -487,9 +529,9 @@ class KotlinFileExtractor(val tw: TrapWriter) { tw.writeNamestrings(v.toString(), v.toString(), id) } else -> { if(v == null) { - extractorBug("Unrecognised IrConst: null value") + logger.warn("Unrecognised IrConst: null value") } else { - extractorBug("Unrecognised IrConst: " + v.javaClass) + logger.warn("Unrecognised IrConst: " + v.javaClass) } } } @@ -557,11 +599,11 @@ class KotlinFileExtractor(val tw: TrapWriter) { } } } else { - extractorBug("Unrecognised IrWhen: " + e.javaClass) + logger.warn("Unrecognised IrWhen: " + e.javaClass) } } else -> { - extractorBug("Unrecognised IrExpression: " + e.javaClass) + logger.warn("Unrecognised IrExpression: " + e.javaClass) } } } From bbb9d013e07352aa2a7467690278cd7ecdc5fd09 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 16 Aug 2021 10:45:46 +0100 Subject: [PATCH 0475/1618] Kotlin: Escape TRAP strings --- java/kotlin-extractor/generate_dbscheme.py | 7 +------ .../src/main/kotlin/KotlinExtractorExtension.kt | 6 ++++++ java/ql/test/kotlin/library-tests/exprs/exprs.expected | 8 +++++--- java/ql/test/kotlin/library-tests/exprs/exprs.kt | 1 + 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/java/kotlin-extractor/generate_dbscheme.py b/java/kotlin-extractor/generate_dbscheme.py index 718e4087a41..f0a5feaa946 100755 --- a/java/kotlin-extractor/generate_dbscheme.py +++ b/java/kotlin-extractor/generate_dbscheme.py @@ -57,7 +57,7 @@ def genTable(kt, relname, body, enum = None, kind = None, num = None, typ = None if colname == kind: kt.write(str(num)) elif db_type == 'string' or db_type == 'date': - kt.write('\\"$' + colname + '\\"') # TODO: Escaping + kt.write('\\"${escapeTrapString(' + colname + ')}\\"') else: # TODO: Any reformatting or escaping necessary? # e.g. float formats? @@ -70,11 +70,6 @@ with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: kt.write('/* Generated by ' + sys.argv[0] + ': Do not edit manually. */\n') kt.write('package com.github.codeql\n') - kt.write('class Label(val name: Int) {\n') - kt.write(' override fun toString(): String = "#$name"\n') - kt.write('}\n') - - # kind enums for name, kind, body in re.findall(r'case\s+@([^.\s]*)\.([^.\s]*)\s+of\b(.*?);', dbscheme, diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index b766f18032d..86f17f9f679 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -51,6 +51,12 @@ class KotlinExtractorExtension(private val tests: List) : IrGenerationEx } } +class Label(val name: Int) { + override fun toString(): String = "#$name" +} + +fun escapeTrapString(str: String) = str.replace("\"", "\"\"") + class Logger() { private val warningCounts = mutableMapOf() private val warningLimit: Int diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index bd361f2afa2..6799d92e90e 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -34,9 +34,10 @@ | exprs.kt:24:14:24:18 | false | | exprs.kt:28:13:28:15 | x | | exprs.kt:29:16:29:25 | string lit | -| exprs.kt:33:12:33:14 | 123 | -| exprs.kt:33:12:33:20 | ... + ... | -| exprs.kt:33:18:33:20 | 456 | +| exprs.kt:30:25:30:37 | string " lit | +| exprs.kt:34:12:34:14 | 123 | +| exprs.kt:34:12:34:20 | ... + ... | +| exprs.kt:34:18:34:20 | 456 | | file://:0:0:0:0 | b1 | | file://:0:0:0:0 | b2 | | file://:0:0:0:0 | b3 | @@ -67,3 +68,4 @@ | file://:0:0:0:0 | i20 | | file://:0:0:0:0 | i21 | | file://:0:0:0:0 | str | +| file://:0:0:0:0 | strWithQuote | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index cccedd1972d..3034b98d8bd 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -27,6 +27,7 @@ fun topLevelMethod(x: Int, y: Int): Int { val b5 = !b1 val c = 'x' val str = "string lit" + val strWithQuote = "string \" lit" val b6 = i1 is Int val b7 = i1 !is Int val b8 = b7 as Boolean From a64fedf764233a5e8bff33191acff8c675a9661f Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 16 Aug 2021 14:05:30 +0100 Subject: [PATCH 0476/1618] Kotlin: When expressions --- .../main/kotlin/KotlinExtractorExtension.kt | 37 +++++++++---------- java/ql/lib/config/semmlecode.dbscheme | 18 ++++++++- java/ql/lib/semmle/code/java/Expr.qll | 30 +++++++++++++++ .../kotlin/library-tests/exprs/exprs.expected | 15 +++----- .../test/kotlin/library-tests/exprs/exprs.kt | 3 ++ .../kotlin/library-tests/stmts/exprs.expected | 32 ++++++++++++++++ .../test/kotlin/library-tests/stmts/exprs.ql | 5 +++ .../kotlin/library-tests/stmts/stmts.expected | 9 +++-- .../test/kotlin/library-tests/stmts/stmts.kt | 4 ++ 9 files changed, 119 insertions(+), 34 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/stmts/exprs.expected create mode 100644 java/ql/test/kotlin/library-tests/stmts/exprs.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 86f17f9f679..0c09f4cb87f 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -574,7 +574,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { extractExpression(e.condition, callable, id, 0) val body = e.body if(body != null) { - extractExpression(body, callable, id, 1) // TODO: The QLLs think this is a Stmt + extractExpression(body, callable, id, 1) } } is IrDoWhileLoop -> { val id = tw.getFreshIdLabel() @@ -584,28 +584,27 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { extractExpression(e.condition, callable, id, 0) val body = e.body if(body != null) { - extractExpression(body, callable, id, 1) // TODO: The QLLs think this is a Stmt + extractExpression(body, callable, id, 1) } } is IrWhen -> { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs_whenexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) if(e.origin == IF) { - var branchParent = parent - var branchIdx = idx - for(b in e.branches) { - if(b is IrElseBranch) { - // TODO - } else { - val id = tw.getFreshIdLabel() - val locId = tw.getLocation(b.startOffset, b.endOffset) - tw.writeStmts_ifstmt(id, branchParent, branchIdx, callable) - tw.writeHasLocation(id, locId) - extractExpression(b.condition, callable, id, 0) - extractExpression(b.result, callable, id, 1) // TODO: The QLLs think this is a Stmt - branchParent = id - branchIdx = 2 - } + tw.writeWhen_if(id) + } + e.branches.forEachIndexed { i, b -> + val bId = tw.getFreshIdLabel() + val bLocId = tw.getLocation(b.startOffset, b.endOffset) + tw.writeWhen_branch(bId, id, i) + tw.writeHasLocation(bId, bLocId) + extractExpression(b.condition, callable, bId, 0) + extractExpression(b.result, callable, bId, 1) + if(b is IrElseBranch) { + tw.writeWhen_branch_else(bId) } - } else { - logger.warn("Unrecognised IrWhen: " + e.javaClass) } } else -> { diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 4faf1e8bd68..357c588c301 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -633,8 +633,22 @@ case @expr.kind of | 72 = @intersectiontypeaccess | 73 = @switchexpr | 74 = @errorexpr +| 75 = @whenexpr ; +/** Holds if this `when` expression was written as an `if` expression. */ +when_if(unique int id: @whenexpr ref); + +#keyset[whenid,idx] +when_branch( + int id: @whenbranch, + int whenid: @whenexpr ref, + int idx: int ref +); + +/** Holds if this `when` branch was written as an `else` branch. */ +when_branch_else(unique int id: @whenbranch ref); + @classinstancexpr = @newexpr | @lambdaexpr | @memberref @annotation = @declannotation | @typeannotation @@ -713,7 +727,7 @@ memberRefBinding( int callable: @callable ref ); -@exprparent = @stmt | @expr | @callable | @field | @fielddecl | @class | @interface | @param | @localvar | @typevariable; +@exprparent = @stmt | @expr | @whenbranch | @callable | @field | @fielddecl | @class | @interface | @param | @localvar | @typevariable; variableBinding( unique int expr: @varaccess ref, @@ -881,7 +895,7 @@ javadocText( @locatable = @file | @class | @interface | @fielddecl | @field | @constructor | @method | @param | @exception | @boundedtype | @typebound | @array | @primitive - | @import | @stmt | @expr | @localvar | @javadoc | @javadocTag | @javadocText + | @import | @stmt | @expr | @whenbranch | @localvar | @javadoc | @javadocTag | @javadocText | @xmllocatable; @top = @element | @locatable | @folder; diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index b154595abc5..d4fa3323b3d 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2133,3 +2133,33 @@ class Argument extends Expr { ) } } + +/** A Kotlin `when` expression. */ +class WhenExpr extends Expr, @whenexpr { + override string toString() { result = "when ..." } + + override string getHalsteadID() { result = "WhenExpr" } + + override string getAPrimaryQlClass() { result = "WhenExpr" } + + /** Gets the `i`th branch. */ + WhenBranch getBranch(int i) { + when_branch(result, this, i) + } +} + +/** A Kotlin `when` branch. */ +class WhenBranch extends Top, @whenbranch { + /** Gets the condition of this branch. */ + Expr getCondition() { result.isNthChildOf(this, 0) } + + /** Gets the result of this branch. */ + Top getResult() { + result.(Expr).isNthChildOf(this, 1) or + result.(Stmt).isNthChildOf(this, 1) + } + + override string toString() { result = "... -> ..." } + + override string getAPrimaryQlClass() { result = "WhenBranch" } +} diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 6799d92e90e..2b3fd8527fb 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -32,17 +32,14 @@ | exprs.kt:20:20:20:20 | y | | exprs.kt:23:14:23:17 | true | | exprs.kt:24:14:24:18 | false | -| exprs.kt:28:13:28:15 | x | -| exprs.kt:29:16:29:25 | string lit | -| exprs.kt:30:25:30:37 | string " lit | -| exprs.kt:34:12:34:14 | 123 | -| exprs.kt:34:12:34:20 | ... + ... | -| exprs.kt:34:18:34:20 | 456 | +| exprs.kt:31:13:31:15 | x | +| exprs.kt:32:16:32:25 | string lit | +| exprs.kt:33:25:33:37 | string " lit | +| exprs.kt:37:12:37:14 | 123 | +| exprs.kt:37:12:37:20 | ... + ... | +| exprs.kt:37:18:37:20 | 456 | | file://:0:0:0:0 | b1 | | file://:0:0:0:0 | b2 | -| file://:0:0:0:0 | b3 | -| file://:0:0:0:0 | b4 | -| file://:0:0:0:0 | b5 | | file://:0:0:0:0 | b6 | | file://:0:0:0:0 | b7 | | file://:0:0:0:0 | b8 | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index 3034b98d8bd..8da67703485 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -22,9 +22,12 @@ fun topLevelMethod(x: Int, y: Int): Int { val i21 = x !in x .. y val b1 = true val b2 = false +/* +TODO val b3 = b1 && b2 val b4 = b1 || b2 val b5 = !b1 +*/ val c = 'x' val str = "string lit" val strWithQuote = "string \" lit" diff --git a/java/ql/test/kotlin/library-tests/stmts/exprs.expected b/java/ql/test/kotlin/library-tests/stmts/exprs.expected new file mode 100644 index 00000000000..3f5238be9ac --- /dev/null +++ b/java/ql/test/kotlin/library-tests/stmts/exprs.expected @@ -0,0 +1,32 @@ +| file://:0:0:0:0 | q2 | +| file://:0:0:0:0 | q3 | +| file://:0:0:0:0 | z | +| stmts.kt:3:5:6:5 | when ... | +| stmts.kt:3:8:3:8 | x | +| stmts.kt:3:8:3:12 | ... > ... | +| stmts.kt:3:12:3:12 | y | +| stmts.kt:4:15:4:15 | x | +| stmts.kt:4:15:4:19 | ... < ... | +| stmts.kt:4:19:4:19 | y | +| stmts.kt:5:12:6:5 | true | +| stmts.kt:7:11:7:11 | x | +| stmts.kt:7:11:7:15 | ... > ... | +| stmts.kt:7:15:7:15 | y | +| stmts.kt:8:16:8:16 | x | +| stmts.kt:9:11:9:11 | x | +| stmts.kt:9:11:9:15 | ... < ... | +| stmts.kt:9:15:9:15 | y | +| stmts.kt:10:16:10:16 | y | +| stmts.kt:14:13:14:13 | x | +| stmts.kt:14:13:14:17 | ... < ... | +| stmts.kt:14:17:14:17 | y | +| stmts.kt:15:13:15:13 | 3 | +| stmts.kt:17:26:17:58 | true | +| stmts.kt:17:26:17:58 | when ... | +| stmts.kt:17:29:17:32 | true | +| stmts.kt:18:26:18:56 | true | +| stmts.kt:18:26:18:56 | when ... | +| stmts.kt:18:29:18:32 | true | +| stmts.kt:19:12:19:12 | x | +| stmts.kt:19:12:19:16 | ... + ... | +| stmts.kt:19:16:19:16 | y | diff --git a/java/ql/test/kotlin/library-tests/stmts/exprs.ql b/java/ql/test/kotlin/library-tests/stmts/exprs.ql new file mode 100644 index 00000000000..ca00a557663 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/stmts/exprs.ql @@ -0,0 +1,5 @@ +import java + +from Expr e +select e + diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index 726e9b76217..e6d16b0deb7 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -1,8 +1,7 @@ -| stmts.kt:2:41:16:1 | { ... } | -| stmts.kt:3:8:3:12 | if (...) | +| stmts.kt:2:41:20:1 | { ... } | | stmts.kt:3:15:4:5 | { ... } | -| stmts.kt:4:15:4:19 | if (...) | | stmts.kt:4:22:5:5 | { ... } | +| stmts.kt:5:12:6:5 | { ... } | | stmts.kt:7:5:8:16 | while (...) | | stmts.kt:8:9:8:16 | return ... | | stmts.kt:9:5:11:5 | while (...) | @@ -10,4 +9,6 @@ | stmts.kt:10:9:10:16 | return ... | | stmts.kt:12:5:14:18 | do ... while (...) | | stmts.kt:12:5:14:18 | { ... } | -| stmts.kt:15:5:15:16 | return ... | +| stmts.kt:17:35:17:43 | { ... } | +| stmts.kt:17:50:17:58 | { ... } | +| stmts.kt:19:5:19:16 | return ... | diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.kt b/java/ql/test/kotlin/library-tests/stmts/stmts.kt index 2dcef96147c..8d429dd2963 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.kt +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.kt @@ -12,6 +12,10 @@ fun topLevelMethod(x: Int, y: Int): Int { do { return y } while(x < y) + var z = 3 +// TODO: val q1: () -> Unit = { z = 4 } + val q2: Unit = if(true) { z = 4 } else { z = 5 } + val q3: Unit = if(true) z = 4 else z = 5 return x + y } From e7cabfb965da0f30e98ee53f46cfa2b49e8d9166 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 16 Aug 2021 15:31:40 +0100 Subject: [PATCH 0477/1618] Kotlin: Add assign exprs --- .../main/kotlin/KotlinExtractorExtension.kt | 69 ++++++++++++++----- .../kotlin/library-tests/stmts/exprs.expected | 12 ++++ 2 files changed, 63 insertions(+), 18 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 0c09f4cb87f..5a5aad18167 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -2,6 +2,8 @@ package com.github.codeql import java.io.BufferedWriter import java.io.File +import java.io.PrintWriter +import java.io.StringWriter import java.nio.file.Files import java.nio.file.Paths import java.text.SimpleDateFormat @@ -18,19 +20,8 @@ import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.IrFileEntry import org.jetbrains.kotlin.ir.types.* -import org.jetbrains.kotlin.ir.expressions.IrBody -import org.jetbrains.kotlin.ir.expressions.IrBlockBody -import org.jetbrains.kotlin.ir.expressions.IrReturn -import org.jetbrains.kotlin.ir.expressions.IrExpression -import org.jetbrains.kotlin.ir.expressions.IrCall -import org.jetbrains.kotlin.ir.expressions.IrGetValue -import org.jetbrains.kotlin.ir.expressions.IrConst +import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.* -import org.jetbrains.kotlin.ir.expressions.IrWhen -import org.jetbrains.kotlin.ir.expressions.IrElseBranch -import org.jetbrains.kotlin.ir.expressions.IrWhileLoop -import org.jetbrains.kotlin.ir.expressions.IrBlock -import org.jetbrains.kotlin.ir.expressions.IrDoWhileLoop import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol @@ -136,6 +127,18 @@ class TrapWriter ( return maybeId } } + val variableLabelMapping: MutableMap> = mutableMapOf>() + fun getVariableLabelFor(v: IrVariable): Label { + val maybeId = variableLabelMapping.get(v) + if(maybeId == null) { + val id = getFreshLabel() + variableLabelMapping.put(v, id) + writeTrap("$id = *\n") + return id + } else { + return maybeId + } + } fun getFreshLabel(): Label { return Label(nextId++) } @@ -172,6 +175,13 @@ fun extractFile(logger: Logger, trapDir: File, srcDir: File, declaration: IrFile } } +fun fakeLabel(): Label { + val sw = StringWriter() + Exception().printStackTrace(PrintWriter(sw)) + println("Fake label from:\n$sw") + return Label(0) +} + class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { fun usePackage(pkg: String): Label { return extractPackage(pkg) @@ -208,7 +218,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { s.isLong() -> return primitiveType("long") s.isUByte() || s.isUShort() || s.isUInt() || s.isULong() -> { logger.warn("Unhandled unsigned type") - return Label(0) + return fakeLabel() } s.isDouble() -> return primitiveType("double") @@ -225,7 +235,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { } else -> { logger.warn("Unrecognised IrSimpleType: " + s.javaClass + ": " + s.render()) - return Label(0) + return fakeLabel() } } } @@ -271,7 +281,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { is IrClass -> return useClass(t) else -> { logger.warn("Unrecognised IrType: " + t.javaClass) - return Label(0) + return fakeLabel() } } } @@ -283,7 +293,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { is IrFunction -> return useFunction(dp) else -> { logger.warn("Unrecognised IrDeclarationParent: " + dp.javaClass) - return Label(0) + return fakeLabel() } } } @@ -368,8 +378,12 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { } } + fun useVariable(v: IrVariable): Label { + return tw.getVariableLabelFor(v) + } + fun extractVariable(v: IrVariable, callable: Label) { - val id = tw.getFreshIdLabel() + val id = useVariable(v) val locId = tw.getLocation(v.startOffset, v.endOffset) val typeId = useType(v.type) val decId = tw.getFreshIdLabel() @@ -402,9 +416,12 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { is IrValueParameter -> { return useValueParameter(d) } + is IrVariable -> { + return useVariable(d) + } else -> { logger.warn("Unrecognised IrValueDeclaration: " + d.javaClass) - return Label(0) + return fakeLabel() } } } @@ -552,6 +569,22 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { val vId = useValueDeclaration(e.symbol.owner) tw.writeVariableBinding(id, vId) } + is IrSetValue -> { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs_assignexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + + val lhsId = tw.getFreshIdLabel() + val lhsTypeId = useType(e.symbol.owner.type) + tw.writeExprs_varaccess(lhsId, lhsTypeId, id, 0) + tw.writeHasLocation(id, locId) + val vId = useValueDeclaration(e.symbol.owner) + tw.writeVariableBinding(lhsId, vId) + + extractExpression(e.value, callable, id, 1) + } is IrReturn -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e.startOffset, e.endOffset) diff --git a/java/ql/test/kotlin/library-tests/stmts/exprs.expected b/java/ql/test/kotlin/library-tests/stmts/exprs.expected index 3f5238be9ac..e9cb1d4e831 100644 --- a/java/ql/test/kotlin/library-tests/stmts/exprs.expected +++ b/java/ql/test/kotlin/library-tests/stmts/exprs.expected @@ -1,6 +1,10 @@ | file://:0:0:0:0 | q2 | | file://:0:0:0:0 | q3 | | file://:0:0:0:0 | z | +| file://:0:0:0:0 | z | +| file://:0:0:0:0 | z | +| file://:0:0:0:0 | z | +| file://:0:0:0:0 | z | | stmts.kt:3:5:6:5 | when ... | | stmts.kt:3:8:3:8 | x | | stmts.kt:3:8:3:12 | ... > ... | @@ -24,9 +28,17 @@ | stmts.kt:17:26:17:58 | true | | stmts.kt:17:26:17:58 | when ... | | stmts.kt:17:29:17:32 | true | +| stmts.kt:17:37:17:37 | ...=... | +| stmts.kt:17:41:17:41 | 4 | +| stmts.kt:17:52:17:52 | ...=... | +| stmts.kt:17:56:17:56 | 5 | | stmts.kt:18:26:18:56 | true | | stmts.kt:18:26:18:56 | when ... | | stmts.kt:18:29:18:32 | true | +| stmts.kt:18:37:18:37 | ...=... | +| stmts.kt:18:41:18:41 | 4 | +| stmts.kt:18:52:18:52 | ...=... | +| stmts.kt:18:56:18:56 | 5 | | stmts.kt:19:12:19:12 | x | | stmts.kt:19:12:19:16 | ... + ... | | stmts.kt:19:16:19:16 | y | From 94eefbff178cb19a71e1711787f0b120544da20c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 16 Aug 2021 16:01:14 +0100 Subject: [PATCH 0478/1618] Kotlin: Add IrContainerExpression --- .../src/main/kotlin/KotlinExtractorExtension.kt | 5 ++--- java/ql/test/kotlin/library-tests/stmts/exprs.expected | 1 + java/ql/test/kotlin/library-tests/stmts/stmts.expected | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 5a5aad18167..bfc8285d87b 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -591,7 +591,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { tw.writeStmts_returnstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) extractExpression(e.value, callable, id, 0) - } is IrBlock -> { + } is IrContainerExpression -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e.startOffset, e.endOffset) tw.writeStmts_block(id, parent, idx, callable) @@ -639,8 +639,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { tw.writeWhen_branch_else(bId) } } - } - else -> { + } else -> { logger.warn("Unrecognised IrExpression: " + e.javaClass) } } diff --git a/java/ql/test/kotlin/library-tests/stmts/exprs.expected b/java/ql/test/kotlin/library-tests/stmts/exprs.expected index e9cb1d4e831..1e80375369b 100644 --- a/java/ql/test/kotlin/library-tests/stmts/exprs.expected +++ b/java/ql/test/kotlin/library-tests/stmts/exprs.expected @@ -21,6 +21,7 @@ | stmts.kt:9:11:9:15 | ... < ... | | stmts.kt:9:15:9:15 | y | | stmts.kt:10:16:10:16 | y | +| stmts.kt:13:16:13:16 | y | | stmts.kt:14:13:14:13 | x | | stmts.kt:14:13:14:17 | ... < ... | | stmts.kt:14:17:14:17 | y | diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index e6d16b0deb7..a258bdd2c95 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -9,6 +9,8 @@ | stmts.kt:10:9:10:16 | return ... | | stmts.kt:12:5:14:18 | do ... while (...) | | stmts.kt:12:5:14:18 | { ... } | +| stmts.kt:12:8:14:5 | { ... } | +| stmts.kt:13:9:13:16 | return ... | | stmts.kt:17:35:17:43 | { ... } | | stmts.kt:17:50:17:58 | { ... } | | stmts.kt:19:5:19:16 | return ... | From ed2c6e68eab4befe4b0875a3655b5f154cad7d70 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 16 Aug 2021 17:48:40 +0100 Subject: [PATCH 0479/1618] Kotlin: Function calls --- .../main/kotlin/KotlinExtractorExtension.kt | 33 ++++++++++++++----- .../kotlin/library-tests/exprs/exprs.expected | 31 +++++++++++++++++ .../library-tests/methods/exprs.expected | 4 +++ .../kotlin/library-tests/methods/exprs.ql | 5 +++ .../library-tests/methods/methods.expected | 9 ++--- .../kotlin/library-tests/methods/methods.kt | 5 +++ 6 files changed, 74 insertions(+), 13 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/methods/exprs.expected create mode 100644 java/ql/test/kotlin/library-tests/methods/exprs.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index bfc8285d87b..5c22ea99b7a 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -499,8 +499,14 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { tw.writeHasLocation(id, locId) id } else -> { - logger.warn("Unrecognised IrCall: " + c.render()) - return + val id = tw.getFreshIdLabel() + val typeId = useType(c.type) + val locId = tw.getLocation(c.startOffset, c.endOffset) + val methodId = useFunction(c.symbol.owner) + tw.writeExprs_methodaccess(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeCallableBinding(id, methodId) + id } } val dr = c.dispatchReceiver @@ -560,14 +566,23 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { } } is IrGetValue -> { - val id = tw.getFreshIdLabel() - val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) - tw.writeExprs_varaccess(id, typeId, parent, idx) - tw.writeHasLocation(id, locId) + val owner = e.symbol.owner + if (owner is IrValueParameter && owner.index == -1) { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs_thisaccess(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + } else { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e.startOffset, e.endOffset) + tw.writeExprs_varaccess(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) - val vId = useValueDeclaration(e.symbol.owner) - tw.writeVariableBinding(id, vId) + val vId = useValueDeclaration(owner) + tw.writeVariableBinding(id, vId) + } } is IrSetValue -> { val id = tw.getFreshIdLabel() diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 2b3fd8527fb..c44c2c0d44e 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -11,6 +11,26 @@ | exprs.kt:7:14:7:14 | x | | exprs.kt:7:14:7:18 | ... % ... | | exprs.kt:7:18:7:18 | y | +| exprs.kt:8:14:8:14 | x | +| exprs.kt:8:14:8:20 | (no string representation) | +| exprs.kt:8:20:8:20 | y | +| exprs.kt:9:14:9:14 | x | +| exprs.kt:9:14:9:20 | (no string representation) | +| exprs.kt:9:20:9:20 | y | +| exprs.kt:10:14:10:14 | x | +| exprs.kt:10:14:10:21 | (no string representation) | +| exprs.kt:10:21:10:21 | y | +| exprs.kt:11:14:11:14 | x | +| exprs.kt:11:14:11:20 | (no string representation) | +| exprs.kt:11:20:11:20 | y | +| exprs.kt:12:15:12:15 | x | +| exprs.kt:12:15:12:20 | (no string representation) | +| exprs.kt:12:20:12:20 | y | +| exprs.kt:13:15:13:15 | x | +| exprs.kt:13:15:13:21 | (no string representation) | +| exprs.kt:13:21:13:21 | y | +| exprs.kt:14:15:14:15 | x | +| exprs.kt:14:17:14:21 | (no string representation) | | exprs.kt:15:15:15:15 | x | | exprs.kt:15:15:15:20 | ... == ... | | exprs.kt:15:20:15:20 | y | @@ -30,6 +50,17 @@ | exprs.kt:20:15:20:15 | x | | exprs.kt:20:15:20:20 | ... >= ... | | exprs.kt:20:20:20:20 | y | +| exprs.kt:21:15:21:15 | x | +| exprs.kt:21:15:21:25 | (no string representation) | +| exprs.kt:21:20:21:20 | x | +| exprs.kt:21:20:21:25 | (no string representation) | +| exprs.kt:21:25:21:25 | y | +| exprs.kt:22:15:22:15 | x | +| exprs.kt:22:15:22:26 | (no string representation) | +| exprs.kt:22:15:22:26 | (no string representation) | +| exprs.kt:22:21:22:21 | x | +| exprs.kt:22:21:22:26 | (no string representation) | +| exprs.kt:22:26:22:26 | y | | exprs.kt:23:14:23:17 | true | | exprs.kt:24:14:24:18 | false | | exprs.kt:31:13:31:15 | x | diff --git a/java/ql/test/kotlin/library-tests/methods/exprs.expected b/java/ql/test/kotlin/library-tests/methods/exprs.expected new file mode 100644 index 00000000000..e018b958d51 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/methods/exprs.expected @@ -0,0 +1,4 @@ +| methods.kt:10:9:10:25 | classMethod(...) | +| methods.kt:10:9:10:25 | this | +| methods.kt:10:21:10:21 | a | +| methods.kt:10:24:10:24 | 3 | diff --git a/java/ql/test/kotlin/library-tests/methods/exprs.ql b/java/ql/test/kotlin/library-tests/methods/exprs.ql new file mode 100644 index 00000000000..ca00a557663 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/methods/exprs.ql @@ -0,0 +1,5 @@ +import java + +from Expr e +select e + diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index 6b96b784f23..67099da5276 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -17,8 +17,9 @@ | methods.kt:0:0:0:0 | hashCode | | methods.kt:0:0:0:0 | toString | | methods.kt:0:0:0:0 | toString | -| methods.kt:5:1:8:1 | | -| methods.kt:5:1:8:1 | equals | -| methods.kt:5:1:8:1 | hashCode | -| methods.kt:5:1:8:1 | toString | +| methods.kt:5:1:13:1 | | +| methods.kt:5:1:13:1 | equals | +| methods.kt:5:1:13:1 | hashCode | +| methods.kt:5:1:13:1 | toString | | methods.kt:6:5:7:5 | classMethod | +| methods.kt:9:5:12:5 | anotherClassMethod | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.kt b/java/ql/test/kotlin/library-tests/methods/methods.kt index 8be7e51d1ba..e1f3010fcf9 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.kt +++ b/java/ql/test/kotlin/library-tests/methods/methods.kt @@ -5,5 +5,10 @@ fun topLevelMethod(x: Int, y: Int) { class Class { fun classMethod(x: Int, y: Int) { } + + fun anotherClassMethod(a: Int, b: Int) { + classMethod(a, 3) + // TODO topLevelMethod(b, 4) + } } From f0e2de1fa990f910ff680c9ec1a427864ab27d65 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 17 Aug 2021 16:27:43 +0100 Subject: [PATCH 0480/1618] Kotlin: Add file classes Kotlin invents a class for each file that has a top-level functionp/property, so that Java can use them. --- .../main/kotlin/KotlinExtractorExtension.kt | 54 ++++++++++-- java/ql/lib/config/semmlecode.dbscheme | 2 +- .../library-tests/classes/classes.expected | 1 + .../kotlin/library-tests/exprs/exprs.expected | 82 +++++-------------- .../test/kotlin/library-tests/exprs/exprs.kt | 6 ++ .../library-tests/methods/methods.expected | 2 + .../multiple_files/classes.expected | 6 ++ .../library-tests/multiple_files/file3.kt | 7 ++ .../kotlin/library-tests/types/types.expected | 1 + 9 files changed, 91 insertions(+), 70 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/multiple_files/file3.kt diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 5c22ea99b7a..17c5db763aa 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -33,7 +33,7 @@ class KotlinExtractorExtension(private val tests: List) : IrGenerationEx trapDir.mkdirs() val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") srcDir.mkdirs() - moduleFragment.files.map { extractFile(logger, trapDir, srcDir, it) } + moduleFragment.files.map { doFile(logger, trapDir, srcDir, it) } logger.printLimitedWarningCounts() // We don't want the compiler to continue and generate class // files etc, so we just exit when we are finished extracting. @@ -149,7 +149,7 @@ class TrapWriter ( } } -fun extractFile(logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { +fun doFile(logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { val filePath = declaration.path val file = File(filePath) val fileLabel = "@\"$filePath;sourcefile\"" @@ -168,10 +168,7 @@ fun extractFile(logger: Logger, trapDir: File, srcDir: File, declaration: IrFile val id: Label = tw.getLabelFor(fileLabel) tw.writeFiles(id, filePath, basename, extension, 0) val fileExtractor = KotlinFileExtractor(logger, tw) - val pkg = declaration.fqName.asString() - val pkgId = fileExtractor.extractPackage(pkg) - tw.writeCupackage(id, pkgId) - declaration.declarations.map { fileExtractor.extractDeclaration(it, pkgId) } + fileExtractor.extractFile(id, declaration) } } @@ -183,6 +180,47 @@ fun fakeLabel(): Label { } class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { + fun extractFile(id: Label, f: IrFile) { + val pkg = f.fqName.asString() + val pkgId = extractPackage(pkg) + tw.writeCupackage(id, pkgId) + // TODO: This shouldn't really exist if there is nothing to go on it + val fileClass = extractFileClass(f) + f.declarations.map { extractDeclaration(it, fileClass) } + } + + fun extractFileClass(f: IrFile): Label { + val fileName = f.fileEntry.name + val pkg = f.fqName.asString() + val defaultName = fileName.replaceFirst(Regex(""".*[/\\]"""), "").replaceFirst(Regex("""\.kt$"""), "").replaceFirstChar({ it.uppercase() }) + "Kt" + var jvmName = defaultName + for(a: IrConstructorCall in f.annotations) { + val t = a.type + if(t is IrSimpleType && a.valueArgumentsCount == 1) { + val owner = t.classifier.owner + val v = a.getValueArgument(0) + if(owner is IrClass) { + val aPkg = owner.packageFqName?.asString() + val name = owner.name.asString() + if(aPkg == "kotlin.jvm" && name == "JvmName" && v is IrConst<*>) { + val value = v.value + if(value is String) { + jvmName = value + } + } + } + } + } + val qualClassName = if (pkg.isEmpty()) jvmName else "$pkg.$jvmName" + val label = "@\"class;$qualClassName\"" + val id: Label = tw.getLabelFor(label) + val locId = tw.getLocation(-1, -1) // TODO: This should be the whole file + val pkgId = extractPackage(pkg) + tw.writeClasses(id, jvmName, pkgId, id) + tw.writeHasLocation(id, locId) + return id + } + fun usePackage(pkg: String): Label { return extractPackage(pkg) } @@ -195,7 +233,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { return id } - fun extractDeclaration(declaration: IrDeclaration, parentid: Label) { + fun extractDeclaration(declaration: IrDeclaration, parentid: Label) { when (declaration) { is IrClass -> extractClass(declaration) is IrFunction -> extractFunction(declaration, parentid) @@ -325,7 +363,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { tw.writeParamName(id, vp.name.asString()) } - fun extractFunction(f: IrFunction, parentid: Label) { + fun extractFunction(f: IrFunction, parentid: Label) { val id = useFunction(f) val locId = tw.getLocation(f.startOffset, f.endOffset) val signature = "TODO" diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 357c588c301..ad4b64e2087 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -339,7 +339,7 @@ methods( string nodeName: string ref, string signature: string ref, int typeid: @type ref, - int parentid: @package_or_reftype ref, + int parentid: @reftype ref, int sourceid: @method ref ); diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index 10ef7cb6010..090fd2f532d 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -1,4 +1,5 @@ | classes.kt:0:0:0:0 | Any | +| classes.kt:0:0:0:0 | ClassesKt | | classes.kt:0:0:0:0 | Unit | | classes.kt:2:1:2:18 | ClassOne | | classes.kt:4:1:6:1 | ClassTwo | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index c44c2c0d44e..a46e34b4e93 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -11,64 +11,33 @@ | exprs.kt:7:14:7:14 | x | | exprs.kt:7:14:7:18 | ... % ... | | exprs.kt:7:18:7:18 | y | -| exprs.kt:8:14:8:14 | x | -| exprs.kt:8:14:8:20 | (no string representation) | -| exprs.kt:8:20:8:20 | y | -| exprs.kt:9:14:9:14 | x | -| exprs.kt:9:14:9:20 | (no string representation) | -| exprs.kt:9:20:9:20 | y | -| exprs.kt:10:14:10:14 | x | -| exprs.kt:10:14:10:21 | (no string representation) | -| exprs.kt:10:21:10:21 | y | -| exprs.kt:11:14:11:14 | x | -| exprs.kt:11:14:11:20 | (no string representation) | -| exprs.kt:11:20:11:20 | y | -| exprs.kt:12:15:12:15 | x | -| exprs.kt:12:15:12:20 | (no string representation) | -| exprs.kt:12:20:12:20 | y | -| exprs.kt:13:15:13:15 | x | -| exprs.kt:13:15:13:21 | (no string representation) | -| exprs.kt:13:21:13:21 | y | -| exprs.kt:14:15:14:15 | x | -| exprs.kt:14:17:14:21 | (no string representation) | -| exprs.kt:15:15:15:15 | x | -| exprs.kt:15:15:15:20 | ... == ... | -| exprs.kt:15:20:15:20 | y | -| exprs.kt:16:15:16:15 | x | -| exprs.kt:16:15:16:20 | ... != ... | -| exprs.kt:16:15:16:20 | ... != ... | -| exprs.kt:16:20:16:20 | y | -| exprs.kt:17:15:17:15 | x | -| exprs.kt:17:15:17:19 | ... < ... | -| exprs.kt:17:19:17:19 | y | | exprs.kt:18:15:18:15 | x | -| exprs.kt:18:15:18:20 | ... <= ... | +| exprs.kt:18:15:18:20 | ... == ... | | exprs.kt:18:20:18:20 | y | | exprs.kt:19:15:19:15 | x | -| exprs.kt:19:15:19:19 | ... > ... | -| exprs.kt:19:19:19:19 | y | +| exprs.kt:19:15:19:20 | ... != ... | +| exprs.kt:19:15:19:20 | ... != ... | +| exprs.kt:19:20:19:20 | y | | exprs.kt:20:15:20:15 | x | -| exprs.kt:20:15:20:20 | ... >= ... | -| exprs.kt:20:20:20:20 | y | +| exprs.kt:20:15:20:19 | ... < ... | +| exprs.kt:20:19:20:19 | y | | exprs.kt:21:15:21:15 | x | -| exprs.kt:21:15:21:25 | (no string representation) | -| exprs.kt:21:20:21:20 | x | -| exprs.kt:21:20:21:25 | (no string representation) | -| exprs.kt:21:25:21:25 | y | +| exprs.kt:21:15:21:20 | ... <= ... | +| exprs.kt:21:20:21:20 | y | | exprs.kt:22:15:22:15 | x | -| exprs.kt:22:15:22:26 | (no string representation) | -| exprs.kt:22:15:22:26 | (no string representation) | -| exprs.kt:22:21:22:21 | x | -| exprs.kt:22:21:22:26 | (no string representation) | -| exprs.kt:22:26:22:26 | y | -| exprs.kt:23:14:23:17 | true | -| exprs.kt:24:14:24:18 | false | -| exprs.kt:31:13:31:15 | x | -| exprs.kt:32:16:32:25 | string lit | -| exprs.kt:33:25:33:37 | string " lit | -| exprs.kt:37:12:37:14 | 123 | -| exprs.kt:37:12:37:20 | ... + ... | -| exprs.kt:37:18:37:20 | 456 | +| exprs.kt:22:15:22:19 | ... > ... | +| exprs.kt:22:19:22:19 | y | +| exprs.kt:23:15:23:15 | x | +| exprs.kt:23:15:23:20 | ... >= ... | +| exprs.kt:23:20:23:20 | y | +| exprs.kt:29:14:29:17 | true | +| exprs.kt:30:14:30:18 | false | +| exprs.kt:37:13:37:15 | x | +| exprs.kt:38:16:38:25 | string lit | +| exprs.kt:39:25:39:37 | string " lit | +| exprs.kt:43:12:43:14 | 123 | +| exprs.kt:43:12:43:20 | ... + ... | +| exprs.kt:43:18:43:20 | 456 | | file://:0:0:0:0 | b1 | | file://:0:0:0:0 | b2 | | file://:0:0:0:0 | b6 | @@ -80,20 +49,11 @@ | file://:0:0:0:0 | i3 | | file://:0:0:0:0 | i4 | | file://:0:0:0:0 | i5 | -| file://:0:0:0:0 | i6 | -| file://:0:0:0:0 | i7 | -| file://:0:0:0:0 | i8 | -| file://:0:0:0:0 | i9 | -| file://:0:0:0:0 | i10 | -| file://:0:0:0:0 | i11 | -| file://:0:0:0:0 | i12 | | file://:0:0:0:0 | i13 | | file://:0:0:0:0 | i14 | | file://:0:0:0:0 | i15 | | file://:0:0:0:0 | i16 | | file://:0:0:0:0 | i17 | | file://:0:0:0:0 | i18 | -| file://:0:0:0:0 | i20 | -| file://:0:0:0:0 | i21 | | file://:0:0:0:0 | str | | file://:0:0:0:0 | strWithQuote | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index 8da67703485..d5509e6c78f 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -5,6 +5,8 @@ fun topLevelMethod(x: Int, y: Int): Int { val i3 = x - y val i4 = x / y val i5 = x % y +/* +TODO val i6 = x shl y val i7 = x shr y val i8 = x ushr y @@ -12,14 +14,18 @@ fun topLevelMethod(x: Int, y: Int): Int { val i10 = x or y val i11 = x xor y val i12 = x.inv() +*/ val i13 = x == y val i14 = x != y val i15 = x < y val i16 = x <= y val i17 = x > y val i18 = x >= y +/* +TODO val i20 = x in x .. y val i21 = x !in x .. y +*/ val b1 = true val b2 = false /* diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index 67099da5276..b6ba71d83fa 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -5,6 +5,7 @@ | methods2.kt:0:0:0:0 | hashCode | | methods2.kt:0:0:0:0 | toString | | methods2.kt:0:0:0:0 | toString | +| methods2.kt:4:1:5:1 | fooBarTopLevelMethod | | methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | equals | | methods2.kt:7:1:10:1 | hashCode | @@ -17,6 +18,7 @@ | methods.kt:0:0:0:0 | hashCode | | methods.kt:0:0:0:0 | toString | | methods.kt:0:0:0:0 | toString | +| methods.kt:2:1:3:1 | topLevelMethod | | methods.kt:5:1:13:1 | | | methods.kt:5:1:13:1 | equals | | methods.kt:5:1:13:1 | hashCode | diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected index 3386fb2df40..045039e8b0d 100644 --- a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected @@ -1,4 +1,10 @@ | file1.kt:0:0:0:0 | Any | +| file1.kt:0:0:0:0 | File1Kt | | file1.kt:2:1:2:16 | Class1 | | file2.kt:0:0:0:0 | Any | +| file2.kt:0:0:0:0 | File2Kt | | file2.kt:2:1:2:16 | Class2 | +| file3.kt:0:0:0:0 | Any | +| file3.kt:0:0:0:0 | MyJvmName | +| file3.kt:0:0:0:0 | Unit | +| file3.kt:3:1:3:16 | Class3 | diff --git a/java/ql/test/kotlin/library-tests/multiple_files/file3.kt b/java/ql/test/kotlin/library-tests/multiple_files/file3.kt new file mode 100644 index 00000000000..489b18113f3 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/multiple_files/file3.kt @@ -0,0 +1,7 @@ +@file:JvmName("MyJvmName") + +class Class3 { } + +fun fun3() { +} + diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index 837c7ae9037..f320399dacc 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -8,4 +8,5 @@ | file://:0:0:0:0 | short | PrimitiveType | | file://:0:0:0:0 | string | ??? | | types.kt:0:0:0:0 | Any | Class | +| types.kt:0:0:0:0 | TypesKt | Class | | types.kt:2:1:33:1 | Foo | Class | From 4837e4e46af70a54e62ee845257f15b323cb7f14 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 17 Aug 2021 16:42:52 +0100 Subject: [PATCH 0481/1618] Kotlin: More top-level stuff --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- java/ql/lib/config/semmlecode.dbscheme | 4 +--- java/ql/test/kotlin/library-tests/methods/exprs.expected | 3 +++ java/ql/test/kotlin/library-tests/methods/methods.kt | 2 +- .../ql/test/kotlin/library-tests/variables/variables.expected | 1 + java/ql/test/kotlin/library-tests/variables/variables.kt | 2 +- 6 files changed, 8 insertions(+), 6 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 17c5db763aa..6ffd9c2c389 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -386,7 +386,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { return id } - fun extractProperty(p: IrProperty, parentid: Label) { + fun extractProperty(p: IrProperty, parentid: Label) { val bf = p.backingField if(bf == null) { logger.warn("IrProperty without backing field") diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index ad4b64e2087..988d257d6b3 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -319,7 +319,7 @@ fields( unique int id: @field, string nodeName: string ref, int typeid: @type ref, - int parentid: @package_or_reftype ref, + int parentid: @reftype ref, int sourceid: @field ref ); @@ -332,8 +332,6 @@ constrs( int sourceid: @constructor ref ); -@package_or_reftype = @package | @reftype - methods( unique int id: @method, string nodeName: string ref, diff --git a/java/ql/test/kotlin/library-tests/methods/exprs.expected b/java/ql/test/kotlin/library-tests/methods/exprs.expected index e018b958d51..11c538aee4c 100644 --- a/java/ql/test/kotlin/library-tests/methods/exprs.expected +++ b/java/ql/test/kotlin/library-tests/methods/exprs.expected @@ -2,3 +2,6 @@ | methods.kt:10:9:10:25 | this | | methods.kt:10:21:10:21 | a | | methods.kt:10:24:10:24 | 3 | +| methods.kt:11:9:11:28 | topLevelMethod(...) | +| methods.kt:11:24:11:24 | b | +| methods.kt:11:27:11:27 | 4 | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.kt b/java/ql/test/kotlin/library-tests/methods/methods.kt index e1f3010fcf9..aa8f0238e59 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.kt +++ b/java/ql/test/kotlin/library-tests/methods/methods.kt @@ -8,7 +8,7 @@ class Class { fun anotherClassMethod(a: Int, b: Int) { classMethod(a, 3) - // TODO topLevelMethod(b, 4) + topLevelMethod(b, 4) } } diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index 9ab4a75289d..ac48485b579 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -4,3 +4,4 @@ | variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | file://:0:0:0:0 | | | variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | file://:0:0:0:0 | | | variables.kt:6:9:6:25 | int local | file://:0:0:0:0 | int | variables.kt:6:21:6:25 | ... + ... | +| variables.kt:10:1:10:21 | topLevel | file://:0:0:0:0 | int | file://:0:0:0:0 | | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.kt b/java/ql/test/kotlin/library-tests/variables/variables.kt index 640fa076d63..939f460d7d7 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.kt +++ b/java/ql/test/kotlin/library-tests/variables/variables.kt @@ -7,5 +7,5 @@ class Foo { } } -// TODO: val topLevel: Int = 1 +val topLevel: Int = 1 From f29a45ea982824bb24f79f86ee9405e96578526f Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 19 Aug 2021 14:00:22 +0100 Subject: [PATCH 0482/1618] Kotlin: Add getAPrimaryQlClass.ql consistenty check --- java/ql/consistency-queries/getAPrimaryQlClass.ql | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 java/ql/consistency-queries/getAPrimaryQlClass.ql diff --git a/java/ql/consistency-queries/getAPrimaryQlClass.ql b/java/ql/consistency-queries/getAPrimaryQlClass.ql new file mode 100644 index 00000000000..7dd20b607cb --- /dev/null +++ b/java/ql/consistency-queries/getAPrimaryQlClass.ql @@ -0,0 +1,13 @@ +import java + +from Top t +where t.getAPrimaryQlClass() = "???" + // TypeBound doesn't extend Top (but probably should) + and not t instanceof TypeBound + // XMLLocatable doesn't extend Top (but probably should) + and not t instanceof XMLLocatable + // Kotlin bug: + and not t.(Type).toString() = "string" +select t, + concat(t.getAPrimaryQlClass(), ","), + concat(t.getAQlClass(), ",") From c6deabd6a3e1d23ba5d79db0bf9a0bba26c2cc47 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 26 Aug 2021 14:58:08 +0100 Subject: [PATCH 0483/1618] Update path to Java dbscheme This changed when the Java tree was restructured for packaging --- java/kotlin-extractor/generate_dbscheme.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/generate_dbscheme.py b/java/kotlin-extractor/generate_dbscheme.py index f0a5feaa946..ab60c88b010 100755 --- a/java/kotlin-extractor/generate_dbscheme.py +++ b/java/kotlin-extractor/generate_dbscheme.py @@ -6,7 +6,7 @@ import sys def upperFirst(string): return string[0].upper() + string[1:] -with open('../ql/src/config/semmlecode.dbscheme', 'r') as f: +with open('../ql/lib/config/semmlecode.dbscheme', 'r') as f: dbscheme = f.read() # Remove comments From d10024e7e9a0a39838c808470ff1f51c51e93c40 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 2 Sep 2021 12:38:36 +0100 Subject: [PATCH 0484/1618] Kotlin: Don't make a *Kt class unless we need one --- .../main/kotlin/KotlinExtractorExtension.kt | 27 ++++++++++--------- .../library-tests/classes/classes.expected | 1 - .../multiple_files/classes.expected | 2 -- .../kotlin/library-tests/types/types.expected | 1 - 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 6ffd9c2c389..dc59b971b2c 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -8,6 +8,7 @@ import java.nio.file.Files import java.nio.file.Paths import java.text.SimpleDateFormat import java.util.Date +import java.util.Optional import kotlin.system.exitProcess import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext @@ -167,8 +168,8 @@ fun doFile(logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { val tw = TrapWriter(fileLabel, trapFileBW, declaration.fileEntry) val id: Label = tw.getLabelFor(fileLabel) tw.writeFiles(id, filePath, basename, extension, 0) - val fileExtractor = KotlinFileExtractor(logger, tw) - fileExtractor.extractFile(id, declaration) + val fileExtractor = KotlinFileExtractor(logger, tw, declaration) + fileExtractor.extractFile(id) } } @@ -179,14 +180,16 @@ fun fakeLabel(): Label { return Label(0) } -class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { - fun extractFile(id: Label, f: IrFile) { - val pkg = f.fqName.asString() +class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFile) { + val fileClass by lazy { + extractFileClass(file) + } + + fun extractFile(id: Label) { + val pkg = file.fqName.asString() val pkgId = extractPackage(pkg) tw.writeCupackage(id, pkgId) - // TODO: This shouldn't really exist if there is nothing to go on it - val fileClass = extractFileClass(f) - f.declarations.map { extractDeclaration(it, fileClass) } + file.declarations.map { extractDeclaration(it, Optional.empty()) } } fun extractFileClass(f: IrFile): Label { @@ -233,11 +236,11 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { return id } - fun extractDeclaration(declaration: IrDeclaration, parentid: Label) { + fun extractDeclaration(declaration: IrDeclaration, optParentid: Optional>) { when (declaration) { is IrClass -> extractClass(declaration) - is IrFunction -> extractFunction(declaration, parentid) - is IrProperty -> extractProperty(declaration, parentid) + is IrFunction -> extractFunction(declaration, if (optParentid.isPresent()) optParentid.get() else fileClass) + is IrProperty -> extractProperty(declaration, if (optParentid.isPresent()) optParentid.get() else fileClass) else -> logger.warn("Unrecognised IrDeclaration: " + declaration.javaClass) } } @@ -309,7 +312,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter) { val pkgId = extractPackage(pkg) tw.writeClasses(id, cls, pkgId, id) tw.writeHasLocation(id, locId) - c.declarations.map { extractDeclaration(it, id) } + c.declarations.map { extractDeclaration(it, Optional.of(id)) } return id } diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index 090fd2f532d..10ef7cb6010 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -1,5 +1,4 @@ | classes.kt:0:0:0:0 | Any | -| classes.kt:0:0:0:0 | ClassesKt | | classes.kt:0:0:0:0 | Unit | | classes.kt:2:1:2:18 | ClassOne | | classes.kt:4:1:6:1 | ClassTwo | diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected index 045039e8b0d..54a8027e78b 100644 --- a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected @@ -1,8 +1,6 @@ | file1.kt:0:0:0:0 | Any | -| file1.kt:0:0:0:0 | File1Kt | | file1.kt:2:1:2:16 | Class1 | | file2.kt:0:0:0:0 | Any | -| file2.kt:0:0:0:0 | File2Kt | | file2.kt:2:1:2:16 | Class2 | | file3.kt:0:0:0:0 | Any | | file3.kt:0:0:0:0 | MyJvmName | diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index f320399dacc..837c7ae9037 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -8,5 +8,4 @@ | file://:0:0:0:0 | short | PrimitiveType | | file://:0:0:0:0 | string | ??? | | types.kt:0:0:0:0 | Any | Class | -| types.kt:0:0:0:0 | TypesKt | Class | | types.kt:2:1:33:1 | Foo | Class | From a40ebd252061963d8267d4b5f268b3456e9adc5c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 2 Sep 2021 13:20:50 +0100 Subject: [PATCH 0485/1618] Kotlin: Add support for supertypes --- .../main/kotlin/KotlinExtractorExtension.kt | 18 ++++++++++++++++++ .../library-tests/classes/classes.expected | 1 + .../kotlin/library-tests/classes/classes.kt | 5 ++++- .../library-tests/classes/superTypes.expected | 6 ++++++ .../kotlin/library-tests/classes/superTypes.ql | 5 +++++ 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 java/ql/test/kotlin/library-tests/classes/superTypes.expected create mode 100644 java/ql/test/kotlin/library-tests/classes/superTypes.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index dc59b971b2c..9a5937d86ee 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -312,6 +312,24 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi val pkgId = extractPackage(pkg) tw.writeClasses(id, cls, pkgId, id) tw.writeHasLocation(id, locId) + for(t in c.superTypes) { + when(t) { + is IrSimpleType -> { + when { + t.classifier.owner is IrClass -> { + val classifier: IrClassifierSymbol = t.classifier + val tcls: IrClass = classifier.owner as IrClass + val l = useClass(tcls) + tw.writeExtendsReftype(id, l) + } else -> { + logger.warn("Unexpected simple type supertype: " + t.javaClass + ": " + t.render()) + } + } + } else -> { + logger.warn("Unexpected supertype: " + t.javaClass + ": " + t.render()) + } + } + } c.declarations.map { extractDeclaration(it, Optional.of(id)) } return id } diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index 10ef7cb6010..a94381aed71 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -4,3 +4,4 @@ | classes.kt:4:1:6:1 | ClassTwo | | classes.kt:8:1:10:1 | ClassThree | | classes.kt:12:1:15:1 | ClassFour | +| classes.kt:17:1:18:1 | ClassFive | diff --git a/java/ql/test/kotlin/library-tests/classes/classes.kt b/java/ql/test/kotlin/library-tests/classes/classes.kt index d557fafe725..1284055c4c8 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.kt +++ b/java/ql/test/kotlin/library-tests/classes/classes.kt @@ -9,7 +9,10 @@ abstract class ClassThree { abstract fun foo(arg: Int) } -class ClassFour: ClassThree() { +open class ClassFour: ClassThree() { override fun foo(arg: Int) { } } + +class ClassFive: ClassFour() { +} diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.expected b/java/ql/test/kotlin/library-tests/classes/superTypes.expected new file mode 100644 index 00000000000..7d03080e852 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.expected @@ -0,0 +1,6 @@ +| classes.kt:0:0:0:0 | Unit | classes.kt:0:0:0:0 | Any | +| classes.kt:2:1:2:18 | ClassOne | classes.kt:0:0:0:0 | Any | +| classes.kt:4:1:6:1 | ClassTwo | classes.kt:0:0:0:0 | Any | +| classes.kt:8:1:10:1 | ClassThree | classes.kt:0:0:0:0 | Any | +| classes.kt:12:1:15:1 | ClassFour | classes.kt:8:1:10:1 | ClassThree | +| classes.kt:17:1:18:1 | ClassFive | classes.kt:12:1:15:1 | ClassFour | diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.ql b/java/ql/test/kotlin/library-tests/classes/superTypes.ql new file mode 100644 index 00000000000..b98771b0e8e --- /dev/null +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.ql @@ -0,0 +1,5 @@ +import java + +from Class c +select c, c.getASupertype() + From dbc3f29426197ba74f1b2dd13df19fb9404cc6d1 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 2 Sep 2021 15:22:43 +0100 Subject: [PATCH 0486/1618] Kotlin: Put diagnostics in a TRAP file Currently we just put everything in as severe with no location. --- .../main/kotlin/KotlinExtractorExtension.kt | 47 +++++++++++++------ java/ql/consistency-queries/locations.ql | 11 +++-- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 9a5937d86ee..511256d55fc 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -28,17 +28,21 @@ import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol class KotlinExtractorExtension(private val tests: List) : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { - val logger = Logger() - logger.info("Extraction started") val trapDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_TRAP_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/trap") - trapDir.mkdirs() - val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") - srcDir.mkdirs() - moduleFragment.files.map { doFile(logger, trapDir, srcDir, it) } - logger.printLimitedWarningCounts() - // We don't want the compiler to continue and generate class - // files etc, so we just exit when we are finished extracting. - logger.info("Extraction completed") + val invocationTrapDir = File("$trapDir/invocations") + invocationTrapDir.mkdirs() + val invocationTrapFile = File.createTempFile("kotlin.", ".trap", invocationTrapDir); + invocationTrapFile.bufferedWriter().use { invocationTrapFileBW -> + val logger = Logger(invocationTrapFileBW) + logger.info("Extraction started") + val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") + srcDir.mkdirs() + moduleFragment.files.map { doFile(logger, trapDir, srcDir, it) } + logger.printLimitedWarningCounts() + // We don't want the compiler to continue and generate class + // files etc, so we just exit when we are finished extracting. + logger.info("Extraction completed") + } exitProcess(0) } } @@ -49,7 +53,14 @@ class Label(val name: Int) { fun escapeTrapString(str: String) = str.replace("\"", "\"\"") -class Logger() { +class Logger(val invocationTrapFileBW: BufferedWriter) { + private val unknownLocation by lazy { + invocationTrapFileBW.write("#noFile = *\n") + invocationTrapFileBW.write("#unknownLocation = *\n") + invocationTrapFileBW.write("files(#noFile, \"\", \"\", \"\", 0)\n") + invocationTrapFileBW.write("locations_default(#unknownLocation, #noFile, 0, 0, 0, 0)\n") + "#unknownLocation" + } private val warningCounts = mutableMapOf() private val warningLimit: Int init { @@ -60,7 +71,9 @@ class Logger() { } fun info(msg: String) { - print("${timestamp()} $msg\n") + val fullMsg = "${timestamp()} $msg" + invocationTrapFileBW.write("// " + fullMsg.replace("\n", "\n//") + "\n") + println(fullMsg) } fun warn(msg: String) { val st = Exception().stackTrace @@ -78,12 +91,17 @@ class Logger() { else -> "" } } - print("${timestamp()} Warning: $msg\n$suffix") + val fullMsg = "${timestamp()} Warning: $msg\n$suffix" + val severity = 8 // Pessimistically: "Severe extractor errors likely to affect multiple source files" + invocationTrapFileBW.write("diagnostics(*, $severity, \"\", \"${escapeTrapString(msg)}\", \"${escapeTrapString(fullMsg)}\", $unknownLocation)\n") + print(fullMsg) } fun printLimitedWarningCounts() { for((caller, count) in warningCounts) { if(count >= warningLimit) { - println("Total of $count warnings from $caller.") + val msg = "Total of $count warnings from $caller.\n" + invocationTrapFileBW.write("// $msg") + print(msg) } } } @@ -152,6 +170,7 @@ class TrapWriter ( fun doFile(logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { val filePath = declaration.path + logger.info("Extracting file $filePath") val file = File(filePath) val fileLabel = "@\"$filePath;sourcefile\"" val basename = file.nameWithoutExtension diff --git a/java/ql/consistency-queries/locations.ql b/java/ql/consistency-queries/locations.ql index 883176396f2..35151d55df5 100644 --- a/java/ql/consistency-queries/locations.ql +++ b/java/ql/consistency-queries/locations.ql @@ -20,6 +20,7 @@ Location unusedLocation() { not exists(Top t | t.getLocation() = result) and not exists(XMLLocatable x | x.getLocation() = result) and not exists(ConfigLocatable c | c.getLocation() = result) and + not exists(@diagnostic d | diagnostics(d, _, _, _, _, result)) and not (result.getFile().getExtension() = "xml" and result.getStartLine() = 0 and result.getStartColumn() = 0 and @@ -27,9 +28,9 @@ Location unusedLocation() { result.getEndColumn() = 0) } -from Location l -where l = badLocation() - or l = backwardsLocation() - or l = unusedLocation() -select l +from string reason, Location l +where reason = "Bad location" and l = badLocation() + or reason = "Backwards location" and l = backwardsLocation() + or reason = "Unused location" and l = unusedLocation() +select reason, l From 14e970044a886bc74a9e7265a4bd43e34c2d539f Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 2 Sep 2021 15:27:29 +0100 Subject: [PATCH 0487/1618] Kotlin: Add some flushes This will make it easier to see where we are if we get crashes in the future. --- .../src/main/kotlin/KotlinExtractorExtension.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 511256d55fc..9b635bb0551 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -35,6 +35,7 @@ class KotlinExtractorExtension(private val tests: List) : IrGenerationEx invocationTrapFile.bufferedWriter().use { invocationTrapFileBW -> val logger = Logger(invocationTrapFileBW) logger.info("Extraction started") + logger.flush() val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") srcDir.mkdirs() moduleFragment.files.map { doFile(logger, trapDir, srcDir, it) } @@ -42,6 +43,7 @@ class KotlinExtractorExtension(private val tests: List) : IrGenerationEx // We don't want the compiler to continue and generate class // files etc, so we just exit when we are finished extracting. logger.info("Extraction completed") + logger.flush() } exitProcess(0) } @@ -70,6 +72,10 @@ class Logger(val invocationTrapFileBW: BufferedWriter) { return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" } + fun flush() { + invocationTrapFileBW.flush() + System.out.flush() + } fun info(msg: String) { val fullMsg = "${timestamp()} $msg" invocationTrapFileBW.write("// " + fullMsg.replace("\n", "\n//") + "\n") @@ -171,6 +177,7 @@ class TrapWriter ( fun doFile(logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { val filePath = declaration.path logger.info("Extracting file $filePath") + logger.flush() val file = File(filePath) val fileLabel = "@\"$filePath;sourcefile\"" val basename = file.nameWithoutExtension From 486cff5df158b30203d5e4f76ed5a3fa24ec6a0f Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 2 Sep 2021 16:12:28 +0100 Subject: [PATCH 0488/1618] Kotlin: Add support for interfaces --- .../main/kotlin/KotlinExtractorExtension.kt | 19 ++++++++++++++----- java/ql/lib/config/semmlecode.dbscheme | 4 ++-- .../library-tests/classes/classes.expected | 1 + .../kotlin/library-tests/classes/classes.kt | 12 ++++++++++++ .../library-tests/classes/interfaces.expected | 2 ++ .../library-tests/classes/interfaces.ql | 5 +++++ .../library-tests/classes/superTypes.expected | 3 +++ 7 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/classes/interfaces.expected create mode 100644 java/ql/test/kotlin/library-tests/classes/interfaces.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 9b635bb0551..833e2780269 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.* import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol +import org.jetbrains.kotlin.descriptors.ClassKind class KotlinExtractorExtension(private val tests: List) : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { @@ -315,13 +316,13 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi return label } - fun addClassLabel(c: IrClass): Label { + fun addClassLabel(c: IrClass): Label { val label = getClassLabel(c) - val id: Label = tw.getLabelFor(label) + val id: Label = tw.getLabelFor(label) return id } - fun useClass(c: IrClass): Label { + fun useClass(c: IrClass): Label { if(c.name.asString() == "Any" || c.name.asString() == "Unit") { if(tw.getExistingLabelFor(getClassLabel(c)) == null) { return extractClass(c) @@ -330,13 +331,21 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi return addClassLabel(c) } - fun extractClass(c: IrClass): Label { + fun extractClass(c: IrClass): Label { val id = addClassLabel(c) val locId = tw.getLocation(c.startOffset, c.endOffset) val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() val pkgId = extractPackage(pkg) - tw.writeClasses(id, cls, pkgId, id) + if(c.kind == ClassKind.INTERFACE) { + @Suppress("UNCHECKED_CAST") + val interfaceId = id as Label + tw.writeInterfaces(interfaceId, cls, pkgId, interfaceId) + } else { + @Suppress("UNCHECKED_CAST") + val classId = id as Label + tw.writeClasses(classId, cls, pkgId, classId) + } tw.writeHasLocation(id, locId) for(t in c.superTypes) { when(t) { diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 988d257d6b3..22e9ad20981 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -882,7 +882,7 @@ javadocText( @classorarray = @class | @array; @type = @primitive | @reftype; @callable = @method | @constructor; -@element = @file | @package | @primitive | @class | @interface | @method | @constructor | @modifier | @param | @exception | @field | +@element = @file | @package | @primitive | @classorinterface | @method | @constructor | @modifier | @param | @exception | @field | @annotation | @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl; @modifiable = @member_modifiable| @param | @localvar ; @@ -891,7 +891,7 @@ javadocText( @member = @method | @constructor | @field | @reftype ; -@locatable = @file | @class | @interface | @fielddecl | @field | @constructor | @method | @param | @exception +@locatable = @file | @classorinterface | @fielddecl | @field | @constructor | @method | @param | @exception | @boundedtype | @typebound | @array | @primitive | @import | @stmt | @expr | @whenbranch | @localvar | @javadoc | @javadocTag | @javadocText | @xmllocatable; diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index a94381aed71..bbe78b9434d 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -5,3 +5,4 @@ | classes.kt:8:1:10:1 | ClassThree | | classes.kt:12:1:15:1 | ClassFour | | classes.kt:17:1:18:1 | ClassFive | +| classes.kt:28:1:29:1 | ClassSix | diff --git a/java/ql/test/kotlin/library-tests/classes/classes.kt b/java/ql/test/kotlin/library-tests/classes/classes.kt index 1284055c4c8..13df8b8139a 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.kt +++ b/java/ql/test/kotlin/library-tests/classes/classes.kt @@ -16,3 +16,15 @@ open class ClassFour: ClassThree() { class ClassFive: ClassFour() { } + +interface IF1 { + fun funIF1() {} +} + +interface IF2 { + fun funIF2() {} +} + +class ClassSix: ClassFour(), IF1, IF2 { +} + diff --git a/java/ql/test/kotlin/library-tests/classes/interfaces.expected b/java/ql/test/kotlin/library-tests/classes/interfaces.expected new file mode 100644 index 00000000000..d62a8753dbf --- /dev/null +++ b/java/ql/test/kotlin/library-tests/classes/interfaces.expected @@ -0,0 +1,2 @@ +| classes.kt:20:1:22:1 | IF1 | +| classes.kt:24:1:26:1 | IF2 | diff --git a/java/ql/test/kotlin/library-tests/classes/interfaces.ql b/java/ql/test/kotlin/library-tests/classes/interfaces.ql new file mode 100644 index 00000000000..c19787d387b --- /dev/null +++ b/java/ql/test/kotlin/library-tests/classes/interfaces.ql @@ -0,0 +1,5 @@ +import java + +from Interface i +select i + diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.expected b/java/ql/test/kotlin/library-tests/classes/superTypes.expected index 7d03080e852..ccb5244800e 100644 --- a/java/ql/test/kotlin/library-tests/classes/superTypes.expected +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.expected @@ -4,3 +4,6 @@ | classes.kt:8:1:10:1 | ClassThree | classes.kt:0:0:0:0 | Any | | classes.kt:12:1:15:1 | ClassFour | classes.kt:8:1:10:1 | ClassThree | | classes.kt:17:1:18:1 | ClassFive | classes.kt:12:1:15:1 | ClassFour | +| classes.kt:28:1:29:1 | ClassSix | classes.kt:12:1:15:1 | ClassFour | +| classes.kt:28:1:29:1 | ClassSix | classes.kt:20:1:22:1 | IF1 | +| classes.kt:28:1:29:1 | ClassSix | classes.kt:24:1:26:1 | IF2 | From 330727678a2d7a0df520c58a30c0009b8cb6db9e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 2 Sep 2021 17:11:13 +0100 Subject: [PATCH 0489/1618] Kotlin: Add some location information to a warning --- .../main/kotlin/KotlinExtractorExtension.kt | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 833e2780269..257380d124a 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -116,12 +116,13 @@ class Logger(val invocationTrapFileBW: BufferedWriter) { class TrapWriter ( val fileLabel: String, - val file: BufferedWriter, - val fileEntry: IrFileEntry + val bw: BufferedWriter, + val file: IrFile ) { - var nextId: Int = 100 + private val fileEntry = file.fileEntry + private var nextId: Int = 100 fun writeTrap(trap: String) { - file.write(trap) + bw.write(trap) } fun getLocation(startOffset: Int, endOffset: Int): Label { val unknownLoc = startOffset == -1 && endOffset == -1 @@ -136,6 +137,18 @@ class TrapWriter ( writeLocations_default(id, fileId, startLine, startColumn, endLine, endColumn) return id } + fun getLocationString(e: IrElement): String { + val path = file.path + if (e.startOffset == -1 && e.endOffset == -1) { + return "unknown location, while processing $path" + } else { + val startLine = fileEntry.getLineNumber(e.startOffset) + 1 + val startColumn = fileEntry.getColumnNumber(e.startOffset) + 1 + val endLine = fileEntry.getLineNumber(e.endOffset) + 1 + val endColumn = fileEntry.getColumnNumber(e.endOffset) + return "file://$path:$startLine:$startColumn:$endLine:$endColumn" + } + } val labelMapping: MutableMap> = mutableMapOf>() fun getExistingLabelFor(label: String): Label? { @Suppress("UNCHECKED_CAST") @@ -192,7 +205,7 @@ fun doFile(logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { val trapFileDir = trapFile.getParentFile() trapFileDir.mkdirs() trapFile.bufferedWriter().use { trapFileBW -> - val tw = TrapWriter(fileLabel, trapFileBW, declaration.fileEntry) + val tw = TrapWriter(fileLabel, trapFileBW, declaration) val id: Label = tw.getLabelFor(fileLabel) tw.writeFiles(id, filePath, basename, extension, 0) val fileExtractor = KotlinFileExtractor(logger, tw, declaration) @@ -749,7 +762,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi } } } else -> { - logger.warn("Unrecognised IrExpression: " + e.javaClass) + logger.warn("Unrecognised IrExpression: " + e.javaClass + " at " + tw.getLocationString(e)) } } } From 71c3a64ff505b7018257a409f6a4938da60b6cb0 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 2 Sep 2021 17:15:50 +0100 Subject: [PATCH 0490/1618] Kotlin: Simplify location extraction --- .../main/kotlin/KotlinExtractorExtension.kt | 61 ++++++++++--------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 257380d124a..5dcce7e83c0 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -124,6 +124,9 @@ class TrapWriter ( fun writeTrap(trap: String) { bw.write(trap) } + fun getLocation(e: IrElement): Label { + return getLocation(e.startOffset, e.endOffset) + } fun getLocation(startOffset: Int, endOffset: Int): Label { val unknownLoc = startOffset == -1 && endOffset == -1 val startLine = if(unknownLoc) 0 else fileEntry.getLineNumber(startOffset) + 1 @@ -346,7 +349,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi fun extractClass(c: IrClass): Label { val id = addClassLabel(c) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() val pkgId = extractPackage(pkg) @@ -434,7 +437,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi fun extractFunction(f: IrFunction, parentid: Label) { val id = useFunction(f) - val locId = tw.getLocation(f.startOffset, f.endOffset) + val locId = tw.getLocation(f) val signature = "TODO" val returnTypeId = useType(f.returnType) tw.writeMethods(id, f.name.asString(), signature, returnTypeId, parentid, id) @@ -461,7 +464,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi logger.warn("IrProperty without backing field") } else { val id = useProperty(p) - val locId = tw.getLocation(p.startOffset, p.endOffset) + val locId = tw.getLocation(p) val typeId = useType(bf.type) tw.writeFields(id, p.name.asString(), typeId, parentid, id) tw.writeHasLocation(id, locId) @@ -477,7 +480,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi fun extractBlockBody(b: IrBlockBody, callable: Label, parent: Label, idx: Int) { val id = tw.getFreshIdLabel() - val locId = tw.getLocation(b.startOffset, b.endOffset) + val locId = tw.getLocation(b) tw.writeStmts_block(id, parent, idx, callable) tw.writeHasLocation(id, locId) for((sIdx, stmt) in b.statements.withIndex()) { @@ -491,7 +494,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi fun extractVariable(v: IrVariable, callable: Label) { val id = useVariable(v) - val locId = tw.getLocation(v.startOffset, v.endOffset) + val locId = tw.getLocation(v) val typeId = useType(v.type) val decId = tw.getFreshIdLabel() tw.writeLocalvars(id, v.name.asString(), typeId, decId) @@ -538,77 +541,77 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi c.origin == PLUS -> { val id = tw.getFreshIdLabel() val typeId = useType(c.type) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) tw.writeExprs_addexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == MINUS -> { val id = tw.getFreshIdLabel() val typeId = useType(c.type) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) tw.writeExprs_subexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == DIV -> { val id = tw.getFreshIdLabel() val typeId = useType(c.type) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) tw.writeExprs_divexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == PERC -> { val id = tw.getFreshIdLabel() val typeId = useType(c.type) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) tw.writeExprs_remexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == EQEQ -> { val id = tw.getFreshIdLabel() val typeId = useType(c.type) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) tw.writeExprs_eqexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == EXCLEQ -> { val id = tw.getFreshIdLabel() val typeId = useType(c.type) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) tw.writeExprs_neexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == LT -> { val id = tw.getFreshIdLabel() val typeId = useType(c.type) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) tw.writeExprs_ltexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == LTEQ -> { val id = tw.getFreshIdLabel() val typeId = useType(c.type) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) tw.writeExprs_leexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == GT -> { val id = tw.getFreshIdLabel() val typeId = useType(c.type) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) tw.writeExprs_gtexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == GTEQ -> { val id = tw.getFreshIdLabel() val typeId = useType(c.type) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) tw.writeExprs_geexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } else -> { val id = tw.getFreshIdLabel() val typeId = useType(c.type) - val locId = tw.getLocation(c.startOffset, c.endOffset) + val locId = tw.getLocation(c) val methodId = useFunction(c.symbol.owner) tw.writeExprs_methodaccess(id, typeId, parent, idx) tw.writeHasLocation(id, locId) @@ -638,28 +641,28 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi is Int -> { val id = tw.getFreshIdLabel() val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeExprs_integerliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is Boolean -> { val id = tw.getFreshIdLabel() val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeExprs_booleanliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is Char -> { val id = tw.getFreshIdLabel() val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeExprs_characterliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is String -> { val id = tw.getFreshIdLabel() val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeExprs_stringliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) @@ -677,13 +680,13 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi if (owner is IrValueParameter && owner.index == -1) { val id = tw.getFreshIdLabel() val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeExprs_thisaccess(id, typeId, parent, idx) tw.writeHasLocation(id, locId) } else { val id = tw.getFreshIdLabel() val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeExprs_varaccess(id, typeId, parent, idx) tw.writeHasLocation(id, locId) @@ -694,7 +697,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi is IrSetValue -> { val id = tw.getFreshIdLabel() val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeExprs_assignexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) @@ -709,13 +712,13 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi } is IrReturn -> { val id = tw.getFreshIdLabel() - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeStmts_returnstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) extractExpression(e.value, callable, id, 0) } is IrContainerExpression -> { val id = tw.getFreshIdLabel() - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeStmts_block(id, parent, idx, callable) tw.writeHasLocation(id, locId) e.statements.forEachIndexed { i, s -> @@ -723,7 +726,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi } } is IrWhileLoop -> { val id = tw.getFreshIdLabel() - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeStmts_whilestmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) extractExpression(e.condition, callable, id, 0) @@ -733,7 +736,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi } } is IrDoWhileLoop -> { val id = tw.getFreshIdLabel() - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeStmts_dostmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) extractExpression(e.condition, callable, id, 0) @@ -744,7 +747,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi } is IrWhen -> { val id = tw.getFreshIdLabel() val typeId = useType(e.type) - val locId = tw.getLocation(e.startOffset, e.endOffset) + val locId = tw.getLocation(e) tw.writeExprs_whenexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) if(e.origin == IF) { @@ -752,7 +755,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFi } e.branches.forEachIndexed { i, b -> val bId = tw.getFreshIdLabel() - val bLocId = tw.getLocation(b.startOffset, b.endOffset) + val bLocId = tw.getLocation(b) tw.writeWhen_branch(bId, id, i) tw.writeHasLocation(bId, bLocId) extractExpression(b.condition, callable, bId, 0) From 3e8f9f52a63f5f94f2fa15de7c108d6b7c15d1e2 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 3 Sep 2021 14:35:37 +0100 Subject: [PATCH 0491/1618] Kotlin: Start using invocation TRAP files --- .../kotlin/KotlinExtractorCommandLineProcessor.kt | 15 ++++++++------- .../kotlin/KotlinExtractorComponentRegistrar.kt | 7 +++++-- .../src/main/kotlin/KotlinExtractorExtension.kt | 13 ++++++++----- java/ql/lib/config/semmlecode.dbscheme | 4 ++++ 4 files changed, 25 insertions(+), 14 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt index ee7a1b6b17f..b3fd29a14fd 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt @@ -11,11 +11,11 @@ class KotlinExtractorCommandLineProcessor : CommandLineProcessor { override val pluginOptions = listOf( CliOption( - optionName = "testOption", - valueDescription = "A test option", - description = "For testing options", - required = false, - allowMultipleOccurrences = true + optionName = OPTION_INVOCATION_TRAP_FILE, + valueDescription = "Invocation TRAP file", + description = "Extractor will append invocation-related TRAP to this file", + required = true, + allowMultipleOccurrences = false ) ) @@ -24,9 +24,10 @@ class KotlinExtractorCommandLineProcessor : CommandLineProcessor { value: String, configuration: CompilerConfiguration ) = when (option.optionName) { - "testOption" -> configuration.appendList(KEY_TEST, value) + "invocationTrapFile" -> configuration.put(KEY_INVOCATION_TRAP_FILE, value) else -> error("kotlin extractor: Bad option: ${option.optionName}") } } -val KEY_TEST = CompilerConfigurationKey>("kotlin extractor test") +private val OPTION_INVOCATION_TRAP_FILE = "invocationTrapFile" +val KEY_INVOCATION_TRAP_FILE = CompilerConfigurationKey(OPTION_INVOCATION_TRAP_FILE) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt index 6254f39df7e..fc614ceeee3 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt @@ -10,7 +10,10 @@ class KotlinExtractorComponentRegistrar : ComponentRegistrar { project: MockProject, configuration: CompilerConfiguration ) { - val tests = configuration[KEY_TEST] ?: emptyList() - IrGenerationExtension.registerExtension(project, KotlinExtractorExtension(tests)) + val invocationTrapFile = configuration[KEY_INVOCATION_TRAP_FILE] + if(invocationTrapFile == null) { + throw Exception("Required argument for TRAP invocation file not given") + } + IrGenerationExtension.registerExtension(project, KotlinExtractorExtension(invocationTrapFile)) } } diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 5dcce7e83c0..e1df58b00fb 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -2,6 +2,7 @@ package com.github.codeql import java.io.BufferedWriter import java.io.File +import java.io.FileOutputStream import java.io.PrintWriter import java.io.StringWriter import java.nio.file.Files @@ -27,13 +28,13 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.descriptors.ClassKind -class KotlinExtractorExtension(private val tests: List) : IrGenerationExtension { +class KotlinExtractorExtension(private val invocationTrapFile: String) : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { + // This default should be kept in sync with language-packs/java/tools/kotlin-extractor val trapDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_TRAP_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/trap") - val invocationTrapDir = File("$trapDir/invocations") - invocationTrapDir.mkdirs() - val invocationTrapFile = File.createTempFile("kotlin.", ".trap", invocationTrapDir); - invocationTrapFile.bufferedWriter().use { invocationTrapFileBW -> + FileOutputStream(File(invocationTrapFile), true).bufferedWriter().use { invocationTrapFileBW -> + invocationTrapFileBW.write("compilation_started(#compilation)\n") + invocationTrapFileBW.flush() val logger = Logger(invocationTrapFileBW) logger.info("Extraction started") logger.flush() @@ -45,6 +46,8 @@ class KotlinExtractorExtension(private val tests: List) : IrGenerationEx // files etc, so we just exit when we are finished extracting. logger.info("Extraction completed") logger.flush() + invocationTrapFileBW.write("compilation_finished(#compilation, 0.0, 0.0)\n") + invocationTrapFileBW.flush() } exitProcess(0) } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 22e9ad20981..be92f1afb19 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -20,6 +20,10 @@ compilations( string cwd : string ref ); +compilation_started( + int id : @compilation ref +) + /** * The arguments that were passed to the extractor for a compiler * invocation. If `id` is for the compiler invocation From 4bc326ef82c7749450e23dc21420987816fd899a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 6 Sep 2021 12:03:49 +0100 Subject: [PATCH 0492/1618] Kotlin: Fix extraction when 2 invocations produce the same TRAP file The second invocation was failing with a "file already exists" error. I've also added a checkTrapIdentical flag, which is enabled for now. This means that if 2 invocations write the same TRAP file, we will awrn if they are not identical. It may be that this produces false positives, but we can look at that if it happens. --- .../KotlinExtractorCommandLineProcessor.kt | 15 +++++ .../KotlinExtractorComponentRegistrar.kt | 3 +- .../main/kotlin/KotlinExtractorExtension.kt | 56 ++++++++++++++++--- 3 files changed, 64 insertions(+), 10 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt index b3fd29a14fd..88e7bb682e8 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt @@ -16,6 +16,13 @@ class KotlinExtractorCommandLineProcessor : CommandLineProcessor { description = "Extractor will append invocation-related TRAP to this file", required = true, allowMultipleOccurrences = false + ), + CliOption( + optionName = OPTION_CHECK_TRAP_IDENTICAL, + valueDescription = "Check whether different invocations produce identical TRAP", + description = "Check whether different invocations produce identical TRAP", + required = false, + allowMultipleOccurrences = false ) ) @@ -25,9 +32,17 @@ class KotlinExtractorCommandLineProcessor : CommandLineProcessor { configuration: CompilerConfiguration ) = when (option.optionName) { "invocationTrapFile" -> configuration.put(KEY_INVOCATION_TRAP_FILE, value) + "checkTrapIdentical" -> + when (value) { + "true" -> configuration.put(KEY_CHECK_TRAP_IDENTICAL, true) + "fale" -> configuration.put(KEY_CHECK_TRAP_IDENTICAL, false) + else -> error("kotlin extractor: Bad argument $value for checkTrapIdentical") + } else -> error("kotlin extractor: Bad option: ${option.optionName}") } } private val OPTION_INVOCATION_TRAP_FILE = "invocationTrapFile" val KEY_INVOCATION_TRAP_FILE = CompilerConfigurationKey(OPTION_INVOCATION_TRAP_FILE) +private val OPTION_CHECK_TRAP_IDENTICAL = "checkTrapIdentical" +val KEY_CHECK_TRAP_IDENTICAL= CompilerConfigurationKey(OPTION_CHECK_TRAP_IDENTICAL) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt index fc614ceeee3..6514012a422 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt @@ -14,6 +14,7 @@ class KotlinExtractorComponentRegistrar : ComponentRegistrar { if(invocationTrapFile == null) { throw Exception("Required argument for TRAP invocation file not given") } - IrGenerationExtension.registerExtension(project, KotlinExtractorExtension(invocationTrapFile)) + val checkTrapIdentical = configuration[KEY_CHECK_TRAP_IDENTICAL] + IrGenerationExtension.registerExtension(project, KotlinExtractorExtension(invocationTrapFile, checkTrapIdentical ?: false)) } } diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index e1df58b00fb..85e5440e26a 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -6,6 +6,7 @@ import java.io.FileOutputStream import java.io.PrintWriter import java.io.StringWriter import java.nio.file.Files +import java.nio.file.Path import java.nio.file.Paths import java.text.SimpleDateFormat import java.util.Date @@ -28,7 +29,7 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.descriptors.ClassKind -class KotlinExtractorExtension(private val invocationTrapFile: String) : IrGenerationExtension { +class KotlinExtractorExtension(private val invocationTrapFile: String, private val checkTrapIdentical: Boolean) : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { // This default should be kept in sync with language-packs/java/tools/kotlin-extractor val trapDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_TRAP_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/trap") @@ -40,7 +41,7 @@ class KotlinExtractorExtension(private val invocationTrapFile: String) : IrGener logger.flush() val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") srcDir.mkdirs() - moduleFragment.files.map { doFile(logger, trapDir, srcDir, it) } + moduleFragment.files.map { doFile(checkTrapIdentical, logger, trapDir, srcDir, it) } logger.printLimitedWarningCounts() // We don't want the compiler to continue and generate class // files etc, so we just exit when we are finished extracting. @@ -194,7 +195,23 @@ class TrapWriter ( } } -fun doFile(logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { +private fun identical(f1: File, f2: File): Boolean { + f1.bufferedReader().use { bw1 -> + f2.bufferedReader().use { bw2 -> + while(true) { + val l1 = bw1.readLine() + val l2 = bw2.readLine() + if (l1 != l2) { + return false + } else if (l1 == null) { + return true + } + } + } + } +} + +fun doFile(checkTrapIdentical: Boolean, logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { val filePath = declaration.path logger.info("Extracting file $filePath") logger.flush() @@ -210,12 +227,33 @@ fun doFile(logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { val trapFile = File("$trapDir/$filePath.trap") val trapFileDir = trapFile.getParentFile() trapFileDir.mkdirs() - trapFile.bufferedWriter().use { trapFileBW -> - val tw = TrapWriter(fileLabel, trapFileBW, declaration) - val id: Label = tw.getLabelFor(fileLabel) - tw.writeFiles(id, filePath, basename, extension, 0) - val fileExtractor = KotlinFileExtractor(logger, tw, declaration) - fileExtractor.extractFile(id) + if (checkTrapIdentical || !trapFile.exists()) { + val trapTmpFile = File.createTempFile("$filePath.", ".trap.tmp", trapDir) + trapTmpFile.bufferedWriter().use { trapFileBW -> + val tw = TrapWriter(fileLabel, trapFileBW, declaration) + val id: Label = tw.getLabelFor(fileLabel) + tw.writeFiles(id, filePath, basename, extension, 0) + val fileExtractor = KotlinFileExtractor(logger, tw, declaration) + fileExtractor.extractFile(id) + } + if (checkTrapIdentical && trapFile.exists()) { + if(identical(trapTmpFile, trapFile)) { + if(!trapTmpFile.delete()) { + logger.warn("Failed to delete $trapTmpFile") + } + } else { + val trapDifferentFile = File.createTempFile("$filePath.", ".trap.different", trapDir) + if(trapTmpFile.renameTo(trapDifferentFile)) { + logger.warn("TRAP difference: $trapFile vs $trapDifferentFile") + } else { + logger.warn("Failed to rename $trapTmpFile to $trapFile") + } + } + } else { + if(!trapTmpFile.renameTo(trapFile)) { + logger.warn("Failed to rename $trapTmpFile to $trapFile") + } + } } } From 19ff50d0a6b75559affcc0c5db4b60ad197db7fe Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 6 Sep 2021 12:19:34 +0100 Subject: [PATCH 0493/1618] Kotlin: Add a comment to each TRAP file linking to its invocation TRAP file --- .../src/main/kotlin/KotlinExtractorExtension.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 85e5440e26a..71669c9a232 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -41,7 +41,7 @@ class KotlinExtractorExtension(private val invocationTrapFile: String, private v logger.flush() val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") srcDir.mkdirs() - moduleFragment.files.map { doFile(checkTrapIdentical, logger, trapDir, srcDir, it) } + moduleFragment.files.map { doFile(invocationTrapFile, checkTrapIdentical, logger, trapDir, srcDir, it) } logger.printLimitedWarningCounts() // We don't want the compiler to continue and generate class // files etc, so we just exit when we are finished extracting. @@ -211,7 +211,7 @@ private fun identical(f1: File, f2: File): Boolean { } } -fun doFile(checkTrapIdentical: Boolean, logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { +fun doFile(invocationTrapFile: String, checkTrapIdentical: Boolean, logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { val filePath = declaration.path logger.info("Extracting file $filePath") logger.flush() @@ -230,6 +230,7 @@ fun doFile(checkTrapIdentical: Boolean, logger: Logger, trapDir: File, srcDir: F if (checkTrapIdentical || !trapFile.exists()) { val trapTmpFile = File.createTempFile("$filePath.", ".trap.tmp", trapDir) trapTmpFile.bufferedWriter().use { trapFileBW -> + trapFileBW.write("// Generated by invocation ${invocationTrapFile.replace("\n", "\n// ")}\n") val tw = TrapWriter(fileLabel, trapFileBW, declaration) val id: Label = tw.getLabelFor(fileLabel) tw.writeFiles(id, filePath, basename, extension, 0) From 9bd0391c040effa8e08486a426edc62b77e61f78 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 6 Sep 2021 13:54:03 +0100 Subject: [PATCH 0494/1618] Kotlin: Don't fail if a file already exists in the source archive --- .../src/main/kotlin/KotlinExtractorExtension.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 71669c9a232..c9f7afe65ff 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -222,7 +222,11 @@ fun doFile(invocationTrapFile: String, checkTrapIdentical: Boolean, logger: Logg val dest = Paths.get("$srcDir/${declaration.path}") val destDir = dest.getParent() Files.createDirectories(destDir) - Files.copy(Paths.get(declaration.path), dest) + val srcTmpFile = File.createTempFile(dest.getFileName().toString() + ".", ".src.tmp", destDir.toFile()) + val srcTmpOS = FileOutputStream(srcTmpFile) + Files.copy(Paths.get(declaration.path), srcTmpOS) + srcTmpOS.close() + srcTmpFile.renameTo(dest.toFile()) val trapFile = File("$trapDir/$filePath.trap") val trapFileDir = trapFile.getParentFile() From 774616450b6947c11890835e824c8a4c3ac446e5 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 6 Sep 2021 13:54:29 +0100 Subject: [PATCH 0495/1618] Kotlin: Don't give stack traces for fake labels There might be a significant performance hit for it. --- .../src/main/kotlin/KotlinExtractorExtension.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index c9f7afe65ff..71c8b1bcf99 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -263,9 +263,13 @@ fun doFile(invocationTrapFile: String, checkTrapIdentical: Boolean, logger: Logg } fun fakeLabel(): Label { - val sw = StringWriter() - Exception().printStackTrace(PrintWriter(sw)) - println("Fake label from:\n$sw") + if (true) { + println("Fake label") + } else { + val sw = StringWriter() + Exception().printStackTrace(PrintWriter(sw)) + println("Fake label from:\n$sw") + } return Label(0) } From c3dd35d98b06656709470ac8646bd3d34d794a9a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 6 Sep 2021 14:19:46 +0100 Subject: [PATCH 0496/1618] Kotlin: Put temporary TRAP files in the correct directory --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 71c8b1bcf99..352442d20b1 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -232,7 +232,7 @@ fun doFile(invocationTrapFile: String, checkTrapIdentical: Boolean, logger: Logg val trapFileDir = trapFile.getParentFile() trapFileDir.mkdirs() if (checkTrapIdentical || !trapFile.exists()) { - val trapTmpFile = File.createTempFile("$filePath.", ".trap.tmp", trapDir) + val trapTmpFile = File.createTempFile("$filePath.", ".trap.tmp", trapFileDir) trapTmpFile.bufferedWriter().use { trapFileBW -> trapFileBW.write("// Generated by invocation ${invocationTrapFile.replace("\n", "\n// ")}\n") val tw = TrapWriter(fileLabel, trapFileBW, declaration) From 059d6798bbef7a25a16a2eff0e5e874a77a8e72c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 6 Sep 2021 14:25:08 +0100 Subject: [PATCH 0497/1618] Kotlin: Tweak the definition of "eqwuivalent TRAP file" TRAP files that only differ in their comments are equivalent --- .../src/main/kotlin/KotlinExtractorExtension.kt | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 352442d20b1..bec7caf1f8a 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -195,16 +195,20 @@ class TrapWriter ( } } -private fun identical(f1: File, f2: File): Boolean { +private fun equivalentTrap(f1: File, f2: File): Boolean { f1.bufferedReader().use { bw1 -> f2.bufferedReader().use { bw2 -> while(true) { val l1 = bw1.readLine() val l2 = bw2.readLine() - if (l1 != l2) { - return false - } else if (l1 == null) { + if (l1 == null && l2 == null) { return true + } else if (l1 == null || l2 == null) { + return false + } else if (l1 != l2) { + if (!l1.startsWith("//") || !l2.startsWith("//")) { + return false + } } } } @@ -242,7 +246,7 @@ fun doFile(invocationTrapFile: String, checkTrapIdentical: Boolean, logger: Logg fileExtractor.extractFile(id) } if (checkTrapIdentical && trapFile.exists()) { - if(identical(trapTmpFile, trapFile)) { + if(equivalentTrap(trapTmpFile, trapFile)) { if(!trapTmpFile.delete()) { logger.warn("Failed to delete $trapTmpFile") } From 9e4614e574d4158dd2f37ee931ac9a4fd434e41b Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 7 Sep 2021 14:49:19 +0200 Subject: [PATCH 0498/1618] Add gitignore --- java/kotlin-extractor/.gitignore | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 java/kotlin-extractor/.gitignore diff --git a/java/kotlin-extractor/.gitignore b/java/kotlin-extractor/.gitignore new file mode 100644 index 00000000000..da88a859698 --- /dev/null +++ b/java/kotlin-extractor/.gitignore @@ -0,0 +1,12 @@ +.classpath +.gradle +.idea +.project +.settings +bin/ +build/ +gradle/ +gradlew +gradlew.bat + +src/main/kotlin/KotlinExtractorDbScheme.kt \ No newline at end of file From 651847d202e159e8ca3f4ba94c82145f858cef82 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 8 Sep 2021 11:48:31 +0100 Subject: [PATCH 0499/1618] Java/Kotlin: Enhance 'compilations' support --- java/ql/lib/config/semmlecode.dbscheme | 9 +- java/ql/lib/java.qll | 1 + java/ql/lib/semmle/code/java/Compilation.qll | 106 +++++++++++++++++++ 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 java/ql/lib/semmle/code/java/Compilation.qll diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index be92f1afb19..243b21e9d78 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -17,9 +17,16 @@ compilations( * javac A.java B.java C.java */ unique int id : @compilation, - string cwd : string ref + int kind: int ref, + string cwd : string ref, + string name : string ref ); +case @compilation.kind of + 1 = @javacompilation +| 2 = @kotlincompilation +; + compilation_started( int id : @compilation ref ) diff --git a/java/ql/lib/java.qll b/java/ql/lib/java.qll index 9c52e1696ad..13640eb5723 100644 --- a/java/ql/lib/java.qll +++ b/java/ql/lib/java.qll @@ -5,6 +5,7 @@ import semmle.code.FileSystem import semmle.code.Location import semmle.code.Unit import semmle.code.java.Annotation +import semmle.code.java.Compilation import semmle.code.java.CompilationUnit import semmle.code.java.ControlFlowGraph import semmle.code.java.Dependency diff --git a/java/ql/lib/semmle/code/java/Compilation.qll b/java/ql/lib/semmle/code/java/Compilation.qll new file mode 100644 index 00000000000..d81f3954b7e --- /dev/null +++ b/java/ql/lib/semmle/code/java/Compilation.qll @@ -0,0 +1,106 @@ +/** + * Provides a class representing individual compiler invocations that occurred during the build. + */ + +import semmle.code.FileSystem + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * javac Foo.java Bar.java Baz.java + * + * Two things happen to each file during a compilation: + * + * 1. The file is compiled by a real compiler, such as javac or kotlinc. + * 2. The file is parsed by the CodeQL front-end. + * 3. The parsed representation is converted to database tables by + * the CodeQL extractor. + * + * This class provides CPU and elapsed time information for steps 2 and 3, + * but not for step 1. + */ +class Compilation extends @compilation { + /** Gets a textual representation of this element. */ + string toString() { + exists(string name | + compilations(this, _, _, name) and + result = "" + ) + } + + /** Gets a file compiled during this invocation. */ + File getAFileCompiled() { result = getFileCompiled(_) } + + /** Gets the `i`th file compiled during this invocation */ + File getFileCompiled(int i) { compilation_compiling_files(this, i, result) } + + /** + * Gets the amount of CPU time spent processing file number `i` in the + * front-end. + */ + float getFrontendCpuSeconds(int i) { compilation_time(this, i, 1, result) } + + /** + * Gets the amount of elapsed time while processing file number `i` in the + * front-end. + */ + float getFrontendElapsedSeconds(int i) { compilation_time(this, i, 2, result) } + + /** + * Gets the amount of CPU time spent processing file number `i` in the + * extractor. + */ + float getExtractorCpuSeconds(int i) { compilation_time(this, i, 3, result) } + + /** + * Gets the amount of elapsed time while processing file number `i` in the + * extractor. + */ + float getExtractorElapsedSeconds(int i) { compilation_time(this, i, 4, result) } + + /** + * Gets an argument passed to the extractor on this invocation. + */ + string getAnArgument() { result = getArgument(_) } + + /** + * Gets the `i`th argument passed to the extractor on this invocation. + */ + string getArgument(int i) { compilation_args(this, i, result) } + + /** + * Gets the total amount of CPU time spent processing all the files in the + * front-end and extractor. + */ + float getTotalCpuSeconds() { compilation_finished(this, result, _) } + + /** + * Gets the total amount of elapsed time while processing all the files in + * the front-end and extractor. + */ + float getTotalElapsedSeconds() { compilation_finished(this, _, result) } + + /** + * Holds if this is a compilation of Java code. + */ + predicate isJava() { this instanceof @javacompilation } + + /** + * Holds if this is a compilation of Kotlin code. + */ + predicate isKotlin() { this instanceof @kotlincompilation } + + /** + * Holds if extraction for the compilation started. + */ + predicate extractionStarted() { compilation_started(this) } + + /** + * Holds if the extractor terminated normally. Terminating with an exit + * code indicating that an error occurred is considered normal + * termination, but crashing due to something like a segfault is not. + */ + predicate normalTermination() { compilation_finished(this, _, _) } +} From 5c06ffae69a57b8737136880582230d4b6f66398 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 9 Sep 2021 10:11:05 +0100 Subject: [PATCH 0500/1618] Kotlin: Use a TrapWriter for the invocation TRAP We'll probably want to shuffle some more stuff from FileTrapWriter to TrapWriter, but for now at least we are using the generated TRAP-writing functions rather than writing raw TRAP. --- .../main/kotlin/KotlinExtractorExtension.kt | 78 ++++++++++++------- 1 file changed, 50 insertions(+), 28 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index bec7caf1f8a..4c450219994 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -34,9 +34,12 @@ class KotlinExtractorExtension(private val invocationTrapFile: String, private v // This default should be kept in sync with language-packs/java/tools/kotlin-extractor val trapDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_TRAP_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/trap") FileOutputStream(File(invocationTrapFile), true).bufferedWriter().use { invocationTrapFileBW -> - invocationTrapFileBW.write("compilation_started(#compilation)\n") - invocationTrapFileBW.flush() - val logger = Logger(invocationTrapFileBW) + val tw = TrapWriter(invocationTrapFileBW) + // The python wrapper has already defined #compilation = * + val compilation: Label = StringLabel("compilation") + tw.writeCompilation_started(compilation) + tw.flush() + val logger = Logger(tw) logger.info("Extraction started") logger.flush() val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") @@ -47,26 +50,38 @@ class KotlinExtractorExtension(private val invocationTrapFile: String, private v // files etc, so we just exit when we are finished extracting. logger.info("Extraction completed") logger.flush() - invocationTrapFileBW.write("compilation_finished(#compilation, 0.0, 0.0)\n") - invocationTrapFileBW.flush() + tw.writeCompilation_finished(compilation, 0.0, 0.0) + tw.flush() } exitProcess(0) } } -class Label(val name: Int) { +interface Label + +class IntLabel(val name: Int): Label { override fun toString(): String = "#$name" } +class StringLabel(val name: String): Label { + override fun toString(): String = "#$name" +} + +class StarLabel(): Label { + override fun toString(): String = "*" +} + fun escapeTrapString(str: String) = str.replace("\"", "\"\"") -class Logger(val invocationTrapFileBW: BufferedWriter) { +class Logger(val tw: TrapWriter) { private val unknownLocation by lazy { - invocationTrapFileBW.write("#noFile = *\n") - invocationTrapFileBW.write("#unknownLocation = *\n") - invocationTrapFileBW.write("files(#noFile, \"\", \"\", \"\", 0)\n") - invocationTrapFileBW.write("locations_default(#unknownLocation, #noFile, 0, 0, 0, 0)\n") - "#unknownLocation" + val noFile: Label = StringLabel("noFile") + val loc: Label = StringLabel("unknownLocation") + tw.writeTrap("$noFile = *\n") + tw.writeTrap("$loc = *\n") + tw.writeFiles(noFile, "", "", "", 0) + tw.writeLocations_default(loc, noFile, 0, 0, 0, 0) + loc } private val warningCounts = mutableMapOf() private val warningLimit: Int @@ -78,12 +93,12 @@ class Logger(val invocationTrapFileBW: BufferedWriter) { } fun flush() { - invocationTrapFileBW.flush() + tw.flush() System.out.flush() } fun info(msg: String) { val fullMsg = "${timestamp()} $msg" - invocationTrapFileBW.write("// " + fullMsg.replace("\n", "\n//") + "\n") + tw.writeTrap("// " + fullMsg.replace("\n", "\n//") + "\n") println(fullMsg) } fun warn(msg: String) { @@ -104,30 +119,37 @@ class Logger(val invocationTrapFileBW: BufferedWriter) { } val fullMsg = "${timestamp()} Warning: $msg\n$suffix" val severity = 8 // Pessimistically: "Severe extractor errors likely to affect multiple source files" - invocationTrapFileBW.write("diagnostics(*, $severity, \"\", \"${escapeTrapString(msg)}\", \"${escapeTrapString(fullMsg)}\", $unknownLocation)\n") + tw.writeDiagnostics(StarLabel(), severity, "", msg, fullMsg, unknownLocation) print(fullMsg) } fun printLimitedWarningCounts() { for((caller, count) in warningCounts) { if(count >= warningLimit) { val msg = "Total of $count warnings from $caller.\n" - invocationTrapFileBW.write("// $msg") + tw.writeTrap("// $msg") print(msg) } } } } -class TrapWriter ( - val fileLabel: String, - val bw: BufferedWriter, - val file: IrFile -) { - private val fileEntry = file.fileEntry - private var nextId: Int = 100 +open class TrapWriter (val bw: BufferedWriter) { fun writeTrap(trap: String) { bw.write(trap) } + fun flush() { + bw.flush() + } +} + +class FileTrapWriter ( + bw: BufferedWriter, + val fileLabel: String, + val file: IrFile +): TrapWriter (bw) { + private var nextId: Int = 100 + private val fileEntry = file.fileEntry + fun getLocation(e: IrElement): Label { return getLocation(e.startOffset, e.endOffset) } @@ -186,10 +208,10 @@ class TrapWriter ( } } fun getFreshLabel(): Label { - return Label(nextId++) + return IntLabel(nextId++) } fun getFreshIdLabel(): Label { - val label = Label(nextId++) + val label = IntLabel(nextId++) writeTrap("$label = *\n") return label } @@ -239,7 +261,7 @@ fun doFile(invocationTrapFile: String, checkTrapIdentical: Boolean, logger: Logg val trapTmpFile = File.createTempFile("$filePath.", ".trap.tmp", trapFileDir) trapTmpFile.bufferedWriter().use { trapFileBW -> trapFileBW.write("// Generated by invocation ${invocationTrapFile.replace("\n", "\n// ")}\n") - val tw = TrapWriter(fileLabel, trapFileBW, declaration) + val tw = FileTrapWriter(trapFileBW, fileLabel, declaration) val id: Label = tw.getLabelFor(fileLabel) tw.writeFiles(id, filePath, basename, extension, 0) val fileExtractor = KotlinFileExtractor(logger, tw, declaration) @@ -274,10 +296,10 @@ fun fakeLabel(): Label { Exception().printStackTrace(PrintWriter(sw)) println("Fake label from:\n$sw") } - return Label(0) + return IntLabel(0) } -class KotlinFileExtractor(val logger: Logger, val tw: TrapWriter, val file: IrFile) { +class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: IrFile) { val fileClass by lazy { extractFileClass(file) } From 90eccc634b0f4224c2622fe7db6350ee5d0a4eb2 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 9 Sep 2021 11:27:50 +0100 Subject: [PATCH 0501/1618] Kotlin: Refactor locations Amongst other tidyups, we now generate correct "unknown location"s --- .../main/kotlin/KotlinExtractorExtension.kt | 117 ++++++++++-------- .../library-tests/classes/classes.expected | 4 +- .../library-tests/classes/superTypes.expected | 8 +- .../library-tests/methods/methods.expected | 21 ++-- .../multiple_files/classes.expected | 8 +- .../kotlin/library-tests/types/types.expected | 2 +- .../variables/variables.expected | 6 +- 7 files changed, 82 insertions(+), 84 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 4c450219994..ee181383bec 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -74,15 +74,6 @@ class StarLabel(): Label { fun escapeTrapString(str: String) = str.replace("\"", "\"\"") class Logger(val tw: TrapWriter) { - private val unknownLocation by lazy { - val noFile: Label = StringLabel("noFile") - val loc: Label = StringLabel("unknownLocation") - tw.writeTrap("$noFile = *\n") - tw.writeTrap("$loc = *\n") - tw.writeFiles(noFile, "", "", "", 0) - tw.writeLocations_default(loc, noFile, 0, 0, 0, 0) - loc - } private val warningCounts = mutableMapOf() private val warningLimit: Int init { @@ -119,7 +110,7 @@ class Logger(val tw: TrapWriter) { } val fullMsg = "${timestamp()} Warning: $msg\n$suffix" val severity = 8 // Pessimistically: "Severe extractor errors likely to affect multiple source files" - tw.writeDiagnostics(StarLabel(), severity, "", msg, fullMsg, unknownLocation) + tw.writeDiagnostics(StarLabel(), severity, "", msg, fullMsg, tw.unknownLocation) print(fullMsg) } fun printLimitedWarningCounts() { @@ -134,50 +125,12 @@ class Logger(val tw: TrapWriter) { } open class TrapWriter (val bw: BufferedWriter) { - fun writeTrap(trap: String) { - bw.write(trap) - } - fun flush() { - bw.flush() - } -} + protected var nextId: Int = 100 -class FileTrapWriter ( - bw: BufferedWriter, - val fileLabel: String, - val file: IrFile -): TrapWriter (bw) { - private var nextId: Int = 100 - private val fileEntry = file.fileEntry + fun getFreshLabel(): Label { + return IntLabel(nextId++) + } - fun getLocation(e: IrElement): Label { - return getLocation(e.startOffset, e.endOffset) - } - fun getLocation(startOffset: Int, endOffset: Int): Label { - val unknownLoc = startOffset == -1 && endOffset == -1 - val startLine = if(unknownLoc) 0 else fileEntry.getLineNumber(startOffset) + 1 - val startColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(startOffset) + 1 - val endLine = if(unknownLoc) 0 else fileEntry.getLineNumber(endOffset) + 1 - val endColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(endOffset) - val id: Label = getFreshLabel() - // TODO: This isn't right for UnknownLocation - val fileId: Label = getLabelFor(fileLabel) - writeTrap("$id = @\"loc,{$fileId},$startLine,$startColumn,$endLine,$endColumn\"\n") - writeLocations_default(id, fileId, startLine, startColumn, endLine, endColumn) - return id - } - fun getLocationString(e: IrElement): String { - val path = file.path - if (e.startOffset == -1 && e.endOffset == -1) { - return "unknown location, while processing $path" - } else { - val startLine = fileEntry.getLineNumber(e.startOffset) + 1 - val startColumn = fileEntry.getColumnNumber(e.startOffset) + 1 - val endLine = fileEntry.getLineNumber(e.endOffset) + 1 - val endColumn = fileEntry.getColumnNumber(e.endOffset) - return "file://$path:$startLine:$startColumn:$endLine:$endColumn" - } - } val labelMapping: MutableMap> = mutableMapOf>() fun getExistingLabelFor(label: String): Label? { @Suppress("UNCHECKED_CAST") @@ -195,6 +148,63 @@ class FileTrapWriter ( return maybeId } } + + fun getLocation(fileId: Label, startLine: Int, startColumn: Int, endLine: Int, endColumn: Int): Label { + return getLabelFor("@\"loc,{$fileId},$startLine,$startColumn,$endLine,$endColumn\"") { + writeLocations_default(it, fileId, startLine, startColumn, endLine, endColumn) + } + } + + protected val unknownFileId: Label by lazy { + val unknownFileLabel = "@\";sourcefile\"" + getLabelFor(unknownFileLabel, { + writeFiles(it, "", "", "", 0) + }) + } + + val unknownLocation: Label by lazy { + getLocation(unknownFileId, 0, 0, 0, 0) + } + + fun writeTrap(trap: String) { + bw.write(trap) + } + fun flush() { + bw.flush() + } +} + +class FileTrapWriter ( + bw: BufferedWriter, + val fileLabel: String, + val file: IrFile +): TrapWriter (bw) { + private val fileEntry = file.fileEntry + + fun getLocation(e: IrElement): Label { + return getLocation(e.startOffset, e.endOffset) + } + fun getLocation(startOffset: Int, endOffset: Int): Label { + val unknownLoc = startOffset == -1 && endOffset == -1 + val startLine = if(unknownLoc) 0 else fileEntry.getLineNumber(startOffset) + 1 + val startColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(startOffset) + 1 + val endLine = if(unknownLoc) 0 else fileEntry.getLineNumber(endOffset) + 1 + val endColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(endOffset) + val fileId: Label = if (unknownLoc) unknownFileId else getLabelFor(fileLabel) + return getLocation(fileId, startLine, startColumn, endLine, endColumn) + } + fun getLocationString(e: IrElement): String { + val path = file.path + if (e.startOffset == -1 && e.endOffset == -1) { + return "unknown location, while processing $path" + } else { + val startLine = fileEntry.getLineNumber(e.startOffset) + 1 + val startColumn = fileEntry.getColumnNumber(e.startOffset) + 1 + val endLine = fileEntry.getLineNumber(e.endOffset) + 1 + val endColumn = fileEntry.getColumnNumber(e.endOffset) + return "file://$path:$startLine:$startColumn:$endLine:$endColumn" + } + } val variableLabelMapping: MutableMap> = mutableMapOf>() fun getVariableLabelFor(v: IrVariable): Label { val maybeId = variableLabelMapping.get(v) @@ -207,9 +217,6 @@ class FileTrapWriter ( return maybeId } } - fun getFreshLabel(): Label { - return IntLabel(nextId++) - } fun getFreshIdLabel(): Label { val label = IntLabel(nextId++) writeTrap("$label = *\n") diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index bbe78b9434d..8dbb9390f26 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -1,8 +1,8 @@ -| classes.kt:0:0:0:0 | Any | -| classes.kt:0:0:0:0 | Unit | | classes.kt:2:1:2:18 | ClassOne | | classes.kt:4:1:6:1 | ClassTwo | | classes.kt:8:1:10:1 | ClassThree | | classes.kt:12:1:15:1 | ClassFour | | classes.kt:17:1:18:1 | ClassFive | | classes.kt:28:1:29:1 | ClassSix | +| file://:0:0:0:0 | Any | +| file://:0:0:0:0 | Unit | diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.expected b/java/ql/test/kotlin/library-tests/classes/superTypes.expected index ccb5244800e..1b22f9329db 100644 --- a/java/ql/test/kotlin/library-tests/classes/superTypes.expected +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.expected @@ -1,9 +1,9 @@ -| classes.kt:0:0:0:0 | Unit | classes.kt:0:0:0:0 | Any | -| classes.kt:2:1:2:18 | ClassOne | classes.kt:0:0:0:0 | Any | -| classes.kt:4:1:6:1 | ClassTwo | classes.kt:0:0:0:0 | Any | -| classes.kt:8:1:10:1 | ClassThree | classes.kt:0:0:0:0 | Any | +| classes.kt:2:1:2:18 | ClassOne | file://:0:0:0:0 | Any | +| classes.kt:4:1:6:1 | ClassTwo | file://:0:0:0:0 | Any | +| classes.kt:8:1:10:1 | ClassThree | file://:0:0:0:0 | Any | | classes.kt:12:1:15:1 | ClassFour | classes.kt:8:1:10:1 | ClassThree | | classes.kt:17:1:18:1 | ClassFive | classes.kt:12:1:15:1 | ClassFour | | classes.kt:28:1:29:1 | ClassSix | classes.kt:12:1:15:1 | ClassFour | | classes.kt:28:1:29:1 | ClassSix | classes.kt:20:1:22:1 | IF1 | | classes.kt:28:1:29:1 | ClassSix | classes.kt:24:1:26:1 | IF2 | +| file://:0:0:0:0 | Unit | file://:0:0:0:0 | Any | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index b6ba71d83fa..2f311e042a9 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -1,23 +1,16 @@ -| methods2.kt:0:0:0:0 | | -| methods2.kt:0:0:0:0 | equals | -| methods2.kt:0:0:0:0 | equals | -| methods2.kt:0:0:0:0 | hashCode | -| methods2.kt:0:0:0:0 | hashCode | -| methods2.kt:0:0:0:0 | toString | -| methods2.kt:0:0:0:0 | toString | +| file://:0:0:0:0 | | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | | methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | equals | | methods2.kt:7:1:10:1 | hashCode | | methods2.kt:7:1:10:1 | toString | | methods2.kt:8:5:9:5 | fooBarClassMethod | -| methods.kt:0:0:0:0 | | -| methods.kt:0:0:0:0 | equals | -| methods.kt:0:0:0:0 | equals | -| methods.kt:0:0:0:0 | hashCode | -| methods.kt:0:0:0:0 | hashCode | -| methods.kt:0:0:0:0 | toString | -| methods.kt:0:0:0:0 | toString | | methods.kt:2:1:3:1 | topLevelMethod | | methods.kt:5:1:13:1 | | | methods.kt:5:1:13:1 | equals | diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected index 54a8027e78b..cb27f3012b8 100644 --- a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected @@ -1,8 +1,6 @@ -| file1.kt:0:0:0:0 | Any | | file1.kt:2:1:2:16 | Class1 | -| file2.kt:0:0:0:0 | Any | | file2.kt:2:1:2:16 | Class2 | -| file3.kt:0:0:0:0 | Any | -| file3.kt:0:0:0:0 | MyJvmName | -| file3.kt:0:0:0:0 | Unit | | file3.kt:3:1:3:16 | Class3 | +| file://:0:0:0:0 | Any | +| file://:0:0:0:0 | MyJvmName | +| file://:0:0:0:0 | Unit | diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index 837c7ae9037..91e3134db54 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -1,3 +1,4 @@ +| file://:0:0:0:0 | Any | Class | | file://:0:0:0:0 | boolean | PrimitiveType | | file://:0:0:0:0 | byte | PrimitiveType | | file://:0:0:0:0 | char | PrimitiveType | @@ -7,5 +8,4 @@ | file://:0:0:0:0 | long | PrimitiveType | | file://:0:0:0:0 | short | PrimitiveType | | file://:0:0:0:0 | string | ??? | -| types.kt:0:0:0:0 | Any | Class | | types.kt:2:1:33:1 | Foo | Class | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index ac48485b579..b2a655e8e2a 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -1,6 +1,6 @@ -| variables.kt:0:0:0:0 | other | variables.kt:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:0:0:0:0 | other | variables.kt:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:2:1:8:1 | other | variables.kt:0:0:0:0 | Any | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:2:1:8:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | file://:0:0:0:0 | | | variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | file://:0:0:0:0 | | | variables.kt:6:9:6:25 | int local | file://:0:0:0:0 | int | variables.kt:6:21:6:25 | ... + ... | From dc3cc0e72eebd65700dc7482ee14e5a8cabb87a0 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 9 Sep 2021 17:55:41 +0100 Subject: [PATCH 0502/1618] Kotlin: Refactoring: Give diagnostic messages locations and severities --- .../main/kotlin/KotlinExtractorExtension.kt | 135 +++++++++++------- 1 file changed, 87 insertions(+), 48 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index ee181383bec..f717e246cd4 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -34,17 +34,19 @@ class KotlinExtractorExtension(private val invocationTrapFile: String, private v // This default should be kept in sync with language-packs/java/tools/kotlin-extractor val trapDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_TRAP_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/trap") FileOutputStream(File(invocationTrapFile), true).bufferedWriter().use { invocationTrapFileBW -> - val tw = TrapWriter(invocationTrapFileBW) + val lm = TrapLabelManager() + val tw = TrapWriter(lm, invocationTrapFileBW) // The python wrapper has already defined #compilation = * val compilation: Label = StringLabel("compilation") tw.writeCompilation_started(compilation) tw.flush() - val logger = Logger(tw) + val logCounter = LogCounter() + val logger = Logger(logCounter, tw) logger.info("Extraction started") logger.flush() val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") srcDir.mkdirs() - moduleFragment.files.map { doFile(invocationTrapFile, checkTrapIdentical, logger, trapDir, srcDir, it) } + moduleFragment.files.map { doFile(invocationTrapFile, lm, invocationTrapFileBW, checkTrapIdentical, logCounter, trapDir, srcDir, it) } logger.printLimitedWarningCounts() // We don't want the compiler to continue and generate class // files etc, so we just exit when we are finished extracting. @@ -73,12 +75,31 @@ class StarLabel(): Label { fun escapeTrapString(str: String) = str.replace("\"", "\"\"") -class Logger(val tw: TrapWriter) { - private val warningCounts = mutableMapOf() - private val warningLimit: Int +class LogCounter() { + public val warningCounts = mutableMapOf() + public val warningLimit: Int init { warningLimit = System.getenv("CODEQL_EXTRACTOR_KOTLIN_WARNING_LIMIT")?.toIntOrNull() ?: 100 } +} + +enum class Severity(val sev: Int) { + WarnLow(1), + Warn(2), + WarnHigh(3), + /** Minor extractor errors, with minimal impact on analysis. */ + ErrorLow(4), + /** Most extractor errors, with local impact on analysis. */ + Error(5), + /** Javac errors. */ + ErrorHigh(6), + /** Severe extractor errors affecting a single source file. */ + ErrorSevere(7), + /** Severe extractor errors likely to affect multiple source files. */ + ErrorGlobal(8) +} + +open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { private fun timestamp(): String { return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" } @@ -92,30 +113,30 @@ class Logger(val tw: TrapWriter) { tw.writeTrap("// " + fullMsg.replace("\n", "\n//") + "\n") println(fullMsg) } - fun warn(msg: String) { + fun warn(severity: Severity, msg: String, locationString: String? = null, locationId: Label = tw.unknownLocation) { val st = Exception().stackTrace val suffix = if(st.size < 2) { " Missing caller information.\n" } else { val caller = st[1].toString() - val count = warningCounts.getOrDefault(caller, 0) + 1 - warningCounts[caller] = count + val count = logCounter.warningCounts.getOrDefault(caller, 0) + 1 + logCounter.warningCounts[caller] = count when { - warningLimit <= 0 -> "" - count == warningLimit -> " Limit reached for warnings from $caller.\n" - count > warningLimit -> return + logCounter.warningLimit <= 0 -> "" + count == logCounter.warningLimit -> " Limit reached for warnings from $caller.\n" + count > logCounter.warningLimit -> return else -> "" } } - val fullMsg = "${timestamp()} Warning: $msg\n$suffix" - val severity = 8 // Pessimistically: "Severe extractor errors likely to affect multiple source files" - tw.writeDiagnostics(StarLabel(), severity, "", msg, fullMsg, tw.unknownLocation) - print(fullMsg) + val ts = timestamp() + tw.writeDiagnostics(StarLabel(), severity.sev, "", msg, "$ts $msg\n$suffix", locationId) + val locStr = if (locationString == null) "" else "At " + locationString + print("$ts Warning: $locStr$msg\n$suffix") } fun printLimitedWarningCounts() { - for((caller, count) in warningCounts) { - if(count >= warningLimit) { + for((caller, count) in logCounter.warningCounts) { + if(count >= logCounter.warningLimit) { val msg = "Total of $count warnings from $caller.\n" tw.writeTrap("// $msg") print(msg) @@ -124,23 +145,38 @@ class Logger(val tw: TrapWriter) { } } -open class TrapWriter (val bw: BufferedWriter) { - protected var nextId: Int = 100 +class FileLogger(logCounter: LogCounter, override val tw: FileTrapWriter): Logger(logCounter, tw) { + private fun timestamp(): String { + return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" + } + + fun warnElement(severity: Severity, msg: String, element: IrElement) { + val locationString = tw.getLocationString(element) + val locationId = tw.getLocation(element) + warn(severity, msg, locationString, locationId) + } +} + +class TrapLabelManager { + public var nextId: Int = 100 fun getFreshLabel(): Label { return IntLabel(nextId++) } val labelMapping: MutableMap> = mutableMapOf>() +} + +open class TrapWriter (val lm: TrapLabelManager, val bw: BufferedWriter) { fun getExistingLabelFor(label: String): Label? { @Suppress("UNCHECKED_CAST") - return labelMapping.get(label) as Label? + return lm.labelMapping.get(label) as Label? } fun getLabelFor(label: String, initialise: (Label) -> Unit = {}): Label { val maybeId: Label? = getExistingLabelFor(label) if(maybeId == null) { - val id: Label = getFreshLabel() - labelMapping.put(label, id) + val id: Label = lm.getFreshLabel() + lm.labelMapping.put(label, id) writeTrap("$id = $label\n") initialise(id) return id @@ -175,10 +211,11 @@ open class TrapWriter (val bw: BufferedWriter) { } class FileTrapWriter ( + lm: TrapLabelManager, bw: BufferedWriter, val fileLabel: String, val file: IrFile -): TrapWriter (bw) { +): TrapWriter (lm, bw) { private val fileEntry = file.fileEntry fun getLocation(e: IrElement): Label { @@ -209,7 +246,7 @@ class FileTrapWriter ( fun getVariableLabelFor(v: IrVariable): Label { val maybeId = variableLabelMapping.get(v) if(maybeId == null) { - val id = getFreshLabel() + val id = lm.getFreshLabel() variableLabelMapping.put(v, id) writeTrap("$id = *\n") return id @@ -218,7 +255,7 @@ class FileTrapWriter ( } } fun getFreshIdLabel(): Label { - val label = IntLabel(nextId++) + val label = IntLabel(lm.nextId++) writeTrap("$label = *\n") return label } @@ -244,12 +281,14 @@ private fun equivalentTrap(f1: File, f2: File): Boolean { } } -fun doFile(invocationTrapFile: String, checkTrapIdentical: Boolean, logger: Logger, trapDir: File, srcDir: File, declaration: IrFile) { +fun doFile(invocationTrapFile: String, trapLabelManager: TrapLabelManager, invocationTrapFileBW: BufferedWriter, checkTrapIdentical: Boolean, logCounter: LogCounter, trapDir: File, srcDir: File, declaration: IrFile) { val filePath = declaration.path + val fileLabel = "@\"$filePath;sourcefile\"" + val fileTrapWriter = FileTrapWriter(trapLabelManager, invocationTrapFileBW, fileLabel, declaration) + val logger = FileLogger(logCounter, fileTrapWriter) logger.info("Extracting file $filePath") logger.flush() val file = File(filePath) - val fileLabel = "@\"$filePath;sourcefile\"" val basename = file.nameWithoutExtension val extension = file.extension val dest = Paths.get("$srcDir/${declaration.path}") @@ -268,7 +307,7 @@ fun doFile(invocationTrapFile: String, checkTrapIdentical: Boolean, logger: Logg val trapTmpFile = File.createTempFile("$filePath.", ".trap.tmp", trapFileDir) trapTmpFile.bufferedWriter().use { trapFileBW -> trapFileBW.write("// Generated by invocation ${invocationTrapFile.replace("\n", "\n// ")}\n") - val tw = FileTrapWriter(trapFileBW, fileLabel, declaration) + val tw = FileTrapWriter(TrapLabelManager(), trapFileBW, fileLabel, declaration) val id: Label = tw.getLabelFor(fileLabel) tw.writeFiles(id, filePath, basename, extension, 0) val fileExtractor = KotlinFileExtractor(logger, tw, declaration) @@ -277,19 +316,19 @@ fun doFile(invocationTrapFile: String, checkTrapIdentical: Boolean, logger: Logg if (checkTrapIdentical && trapFile.exists()) { if(equivalentTrap(trapTmpFile, trapFile)) { if(!trapTmpFile.delete()) { - logger.warn("Failed to delete $trapTmpFile") + logger.warn(Severity.WarnLow, "Failed to delete $trapTmpFile") } } else { val trapDifferentFile = File.createTempFile("$filePath.", ".trap.different", trapDir) if(trapTmpFile.renameTo(trapDifferentFile)) { - logger.warn("TRAP difference: $trapFile vs $trapDifferentFile") + logger.warn(Severity.Warn, "TRAP difference: $trapFile vs $trapDifferentFile") } else { - logger.warn("Failed to rename $trapTmpFile to $trapFile") + logger.warn(Severity.WarnLow, "Failed to rename $trapTmpFile to $trapFile") } } } else { if(!trapTmpFile.renameTo(trapFile)) { - logger.warn("Failed to rename $trapTmpFile to $trapFile") + logger.warn(Severity.WarnLow, "Failed to rename $trapTmpFile to $trapFile") } } } @@ -306,7 +345,7 @@ fun fakeLabel(): Label { return IntLabel(0) } -class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: IrFile) { +class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val file: IrFile) { val fileClass by lazy { extractFileClass(file) } @@ -367,7 +406,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: is IrClass -> extractClass(declaration) is IrFunction -> extractFunction(declaration, if (optParentid.isPresent()) optParentid.get() else fileClass) is IrProperty -> extractProperty(declaration, if (optParentid.isPresent()) optParentid.get() else fileClass) - else -> logger.warn("Unrecognised IrDeclaration: " + declaration.javaClass) + else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclaration: " + declaration.javaClass, declaration) } } @@ -384,7 +423,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: s.isInt() -> return primitiveType("int") s.isLong() -> return primitiveType("long") s.isUByte() || s.isUShort() || s.isUInt() || s.isULong() -> { - logger.warn("Unhandled unsigned type") + logger.warn(Severity.ErrorSevere, "Unhandled unsigned type") return fakeLabel() } @@ -401,7 +440,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: return useClass(cls) } else -> { - logger.warn("Unrecognised IrSimpleType: " + s.javaClass + ": " + s.render()) + logger.warn(Severity.ErrorSevere, "Unrecognised IrSimpleType: " + s.javaClass + ": " + s.render()) return fakeLabel() } } @@ -456,11 +495,11 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: val l = useClass(tcls) tw.writeExtendsReftype(id, l) } else -> { - logger.warn("Unexpected simple type supertype: " + t.javaClass + ": " + t.render()) + logger.warn(Severity.ErrorSevere, "Unexpected simple type supertype: " + t.javaClass + ": " + t.render()) } } } else -> { - logger.warn("Unexpected supertype: " + t.javaClass + ": " + t.render()) + logger.warn(Severity.ErrorSevere, "Unexpected supertype: " + t.javaClass + ": " + t.render()) } } } @@ -473,7 +512,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: is IrSimpleType -> return useSimpleType(t) is IrClass -> return useClass(t) else -> { - logger.warn("Unrecognised IrType: " + t.javaClass) + logger.warn(Severity.ErrorSevere, "Unrecognised IrType: " + t.javaClass) return fakeLabel() } } @@ -485,7 +524,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: is IrClass -> return useClass(dp) is IrFunction -> return useFunction(dp) else -> { - logger.warn("Unrecognised IrDeclarationParent: " + dp.javaClass) + logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclarationParent: " + dp.javaClass, dp) return fakeLabel() } } @@ -544,7 +583,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: fun extractProperty(p: IrProperty, parentid: Label) { val bf = p.backingField if(bf == null) { - logger.warn("IrProperty without backing field") + logger.warnElement(Severity.ErrorSevere, "IrProperty without backing field", p) } else { val id = useProperty(p) val locId = tw.getLocation(p) @@ -557,7 +596,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: fun extractBody(b: IrBody, callable: Label) { when(b) { is IrBlockBody -> extractBlockBody(b, callable, callable, 0) - else -> logger.warn("Unrecognised IrBody: " + b.javaClass) + else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrBody: " + b.javaClass, b) } } @@ -599,7 +638,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: extractVariable(s, callable) } else -> { - logger.warn("Unrecognised IrStatement: " + s.javaClass) + logger.warnElement(Severity.ErrorSevere, "Unrecognised IrStatement: " + s.javaClass, s) } } } @@ -613,7 +652,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: return useVariable(d) } else -> { - logger.warn("Unrecognised IrValueDeclaration: " + d.javaClass) + logger.warnElement(Severity.ErrorSevere, "Unrecognised IrValueDeclaration: " + d.javaClass, d) return fakeLabel() } } @@ -751,9 +790,9 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: tw.writeNamestrings(v.toString(), v.toString(), id) } else -> { if(v == null) { - logger.warn("Unrecognised IrConst: null value") + logger.warnElement(Severity.ErrorSevere, "Unrecognised IrConst: null value", e) } else { - logger.warn("Unrecognised IrConst: " + v.javaClass) + logger.warnElement(Severity.ErrorSevere, "Unrecognised IrConst: " + v.javaClass, e) } } } @@ -848,7 +887,7 @@ class KotlinFileExtractor(val logger: Logger, val tw: FileTrapWriter, val file: } } } else -> { - logger.warn("Unrecognised IrExpression: " + e.javaClass + " at " + tw.getLocationString(e)) + logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) } } } From 87204f1634564d4522c1a71f2594bcc14f2fed35 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 9 Sep 2021 19:39:53 +0100 Subject: [PATCH 0503/1618] Kotlin: Populate the compilation_compiling_files table --- .../main/kotlin/KotlinExtractorExtension.kt | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index f717e246cd4..773c57dcbad 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -46,7 +46,11 @@ class KotlinExtractorExtension(private val invocationTrapFile: String, private v logger.flush() val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") srcDir.mkdirs() - moduleFragment.files.map { doFile(invocationTrapFile, lm, invocationTrapFileBW, checkTrapIdentical, logCounter, trapDir, srcDir, it) } + moduleFragment.files.mapIndexed { index: Int, file: IrFile -> + val fileTrapWriter = FileTrapWriter(lm, invocationTrapFileBW, file) + fileTrapWriter.writeCompilation_compiling_files(compilation, index, fileTrapWriter.fileId) + doFile(invocationTrapFile, fileTrapWriter, checkTrapIdentical, logCounter, trapDir, srcDir, file) + } logger.printLimitedWarningCounts() // We don't want the compiler to continue and generate class // files etc, so we just exit when we are finished extracting. @@ -213,10 +217,19 @@ open class TrapWriter (val lm: TrapLabelManager, val bw: BufferedWriter) { class FileTrapWriter ( lm: TrapLabelManager, bw: BufferedWriter, - val fileLabel: String, - val file: IrFile + val irFile: IrFile ): TrapWriter (lm, bw) { - private val fileEntry = file.fileEntry + private val fileEntry = irFile.fileEntry + val fileId = { + val filePath = irFile.path + val fileLabel = "@\"$filePath;sourcefile\"" + val file = File(filePath) + val basename = file.nameWithoutExtension + val extension = file.extension + val id: Label = getLabelFor(fileLabel) + writeFiles(id, filePath, basename, extension, 0) + id + }() fun getLocation(e: IrElement): Label { return getLocation(e.startOffset, e.endOffset) @@ -227,11 +240,11 @@ class FileTrapWriter ( val startColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(startOffset) + 1 val endLine = if(unknownLoc) 0 else fileEntry.getLineNumber(endOffset) + 1 val endColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(endOffset) - val fileId: Label = if (unknownLoc) unknownFileId else getLabelFor(fileLabel) - return getLocation(fileId, startLine, startColumn, endLine, endColumn) + val locFileId: Label = if (unknownLoc) unknownFileId else fileId + return getLocation(locFileId, startLine, startColumn, endLine, endColumn) } fun getLocationString(e: IrElement): String { - val path = file.path + val path = irFile.path if (e.startOffset == -1 && e.endOffset == -1) { return "unknown location, while processing $path" } else { @@ -281,22 +294,17 @@ private fun equivalentTrap(f1: File, f2: File): Boolean { } } -fun doFile(invocationTrapFile: String, trapLabelManager: TrapLabelManager, invocationTrapFileBW: BufferedWriter, checkTrapIdentical: Boolean, logCounter: LogCounter, trapDir: File, srcDir: File, declaration: IrFile) { - val filePath = declaration.path - val fileLabel = "@\"$filePath;sourcefile\"" - val fileTrapWriter = FileTrapWriter(trapLabelManager, invocationTrapFileBW, fileLabel, declaration) +fun doFile(invocationTrapFile: String, fileTrapWriter: FileTrapWriter, checkTrapIdentical: Boolean, logCounter: LogCounter, trapDir: File, srcDir: File, file: IrFile) { + val filePath = file.path val logger = FileLogger(logCounter, fileTrapWriter) logger.info("Extracting file $filePath") logger.flush() - val file = File(filePath) - val basename = file.nameWithoutExtension - val extension = file.extension - val dest = Paths.get("$srcDir/${declaration.path}") + val dest = Paths.get("$srcDir/${file.path}") val destDir = dest.getParent() Files.createDirectories(destDir) val srcTmpFile = File.createTempFile(dest.getFileName().toString() + ".", ".src.tmp", destDir.toFile()) val srcTmpOS = FileOutputStream(srcTmpFile) - Files.copy(Paths.get(declaration.path), srcTmpOS) + Files.copy(Paths.get(file.path), srcTmpOS) srcTmpOS.close() srcTmpFile.renameTo(dest.toFile()) @@ -307,11 +315,9 @@ fun doFile(invocationTrapFile: String, trapLabelManager: TrapLabelManager, invoc val trapTmpFile = File.createTempFile("$filePath.", ".trap.tmp", trapFileDir) trapTmpFile.bufferedWriter().use { trapFileBW -> trapFileBW.write("// Generated by invocation ${invocationTrapFile.replace("\n", "\n// ")}\n") - val tw = FileTrapWriter(TrapLabelManager(), trapFileBW, fileLabel, declaration) - val id: Label = tw.getLabelFor(fileLabel) - tw.writeFiles(id, filePath, basename, extension, 0) - val fileExtractor = KotlinFileExtractor(logger, tw, declaration) - fileExtractor.extractFile(id) + val tw = FileTrapWriter(TrapLabelManager(), trapFileBW, file) + val fileExtractor = KotlinFileExtractor(logger, tw, file) + fileExtractor.extractFileContents(tw.fileId) } if (checkTrapIdentical && trapFile.exists()) { if(equivalentTrap(trapTmpFile, trapFile)) { @@ -350,7 +356,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi extractFileClass(file) } - fun extractFile(id: Label) { + fun extractFileContents(id: Label) { val pkg = file.fqName.asString() val pkgId = extractPackage(pkg) tw.writeCupackage(id, pkgId) From b5a8442e50e03613342ca5618b0e875a4306246b Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 3 Sep 2021 16:18:28 +0100 Subject: [PATCH 0504/1618] Extract type variable references Also erase the types used to name methods; otherwise type-var labels and method labels are mutually recursive. --- .../main/kotlin/KotlinExtractorExtension.kt | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 773c57dcbad..fd196bf3660 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -445,6 +445,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val cls: IrClass = classifier.owner as IrClass return useClass(cls) } + s.classifier.owner is IrTypeParameter -> { + return useTypeParameter(s.classifier.owner as IrTypeParameter) + } else -> { logger.warn(Severity.ErrorSevere, "Unrecognised IrSimpleType: " + s.javaClass + ": " + s.render()) return fakeLabel() @@ -452,6 +455,15 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } + fun getTypeParameterLabel(param: IrTypeParameter): String { + val parentLabel = useDeclarationParent(param.parent) + return "@\"typevar;{$parentLabel};${param.name}\"" + } + + fun useTypeParameter(param: IrTypeParameter): Label { + return tw.getLabelFor(getTypeParameterLabel(param)) + } + fun getClassLabel(c: IrClass): String { val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() @@ -536,9 +548,18 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } + fun erase (t: IrType): IrType { + if(t is IrSimpleType) { + if(t.classifier.owner is IrTypeParameter) { + return erase((t.classifier.owner as IrTypeParameter).superTypes.get(0)) + } + } + return t + } + fun useFunction(f: IrFunction): Label { - val paramTypeIds = f.valueParameters.joinToString() { "{${useType(it.type).toString()}}" } - val returnTypeId = useType(f.returnType) + val paramTypeIds = f.valueParameters.joinToString() { "{${useType(erase(it.type)).toString()}}" } + val returnTypeId = useType(erase(f.returnType)) val parentId = useDeclarationParent(f.parent) val label = "@\"callable;{$parentId}.${f.name.asString()}($paramTypeIds){$returnTypeId}\"" val id: Label = tw.getLabelFor(label) From e8d3125b409bf340633f5ee73bc6130b7f1d7002 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 9 Sep 2021 19:49:22 +0100 Subject: [PATCH 0505/1618] Kotlin: Tweak a string --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index fd196bf3660..479ca1a453e 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -135,7 +135,7 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { } val ts = timestamp() tw.writeDiagnostics(StarLabel(), severity.sev, "", msg, "$ts $msg\n$suffix", locationId) - val locStr = if (locationString == null) "" else "At " + locationString + val locStr = if (locationString == null) "" else "At " + locationString + ": " print("$ts Warning: $locStr$msg\n$suffix") } fun printLimitedWarningCounts() { From 2721f6aabfb85675913b76833860ffaf8297fc22 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 9 Sep 2021 20:25:39 +0100 Subject: [PATCH 0506/1618] Kotlin: Pull Logger out into its own file --- .../main/kotlin/KotlinExtractorExtension.kt | 84 ------------------ .../src/main/kotlin/Logger.kt | 87 +++++++++++++++++++ 2 files changed, 87 insertions(+), 84 deletions(-) create mode 100644 java/kotlin-extractor/src/main/kotlin/Logger.kt diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 479ca1a453e..2eaba89ec1a 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -8,8 +8,6 @@ import java.io.StringWriter import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths -import java.text.SimpleDateFormat -import java.util.Date import java.util.Optional import kotlin.system.exitProcess import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension @@ -79,88 +77,6 @@ class StarLabel(): Label { fun escapeTrapString(str: String) = str.replace("\"", "\"\"") -class LogCounter() { - public val warningCounts = mutableMapOf() - public val warningLimit: Int - init { - warningLimit = System.getenv("CODEQL_EXTRACTOR_KOTLIN_WARNING_LIMIT")?.toIntOrNull() ?: 100 - } -} - -enum class Severity(val sev: Int) { - WarnLow(1), - Warn(2), - WarnHigh(3), - /** Minor extractor errors, with minimal impact on analysis. */ - ErrorLow(4), - /** Most extractor errors, with local impact on analysis. */ - Error(5), - /** Javac errors. */ - ErrorHigh(6), - /** Severe extractor errors affecting a single source file. */ - ErrorSevere(7), - /** Severe extractor errors likely to affect multiple source files. */ - ErrorGlobal(8) -} - -open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { - private fun timestamp(): String { - return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" - } - - fun flush() { - tw.flush() - System.out.flush() - } - fun info(msg: String) { - val fullMsg = "${timestamp()} $msg" - tw.writeTrap("// " + fullMsg.replace("\n", "\n//") + "\n") - println(fullMsg) - } - fun warn(severity: Severity, msg: String, locationString: String? = null, locationId: Label = tw.unknownLocation) { - val st = Exception().stackTrace - val suffix = - if(st.size < 2) { - " Missing caller information.\n" - } else { - val caller = st[1].toString() - val count = logCounter.warningCounts.getOrDefault(caller, 0) + 1 - logCounter.warningCounts[caller] = count - when { - logCounter.warningLimit <= 0 -> "" - count == logCounter.warningLimit -> " Limit reached for warnings from $caller.\n" - count > logCounter.warningLimit -> return - else -> "" - } - } - val ts = timestamp() - tw.writeDiagnostics(StarLabel(), severity.sev, "", msg, "$ts $msg\n$suffix", locationId) - val locStr = if (locationString == null) "" else "At " + locationString + ": " - print("$ts Warning: $locStr$msg\n$suffix") - } - fun printLimitedWarningCounts() { - for((caller, count) in logCounter.warningCounts) { - if(count >= logCounter.warningLimit) { - val msg = "Total of $count warnings from $caller.\n" - tw.writeTrap("// $msg") - print(msg) - } - } - } -} - -class FileLogger(logCounter: LogCounter, override val tw: FileTrapWriter): Logger(logCounter, tw) { - private fun timestamp(): String { - return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" - } - - fun warnElement(severity: Severity, msg: String, element: IrElement) { - val locationString = tw.getLocationString(element) - val locationId = tw.getLocation(element) - warn(severity, msg, locationString, locationId) - } -} - class TrapLabelManager { public var nextId: Int = 100 diff --git a/java/kotlin-extractor/src/main/kotlin/Logger.kt b/java/kotlin-extractor/src/main/kotlin/Logger.kt new file mode 100644 index 00000000000..627d3d5da29 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/Logger.kt @@ -0,0 +1,87 @@ +package com.github.codeql + +import java.text.SimpleDateFormat +import java.util.Date +import org.jetbrains.kotlin.ir.IrElement + +class LogCounter() { + public val warningCounts = mutableMapOf() + public val warningLimit: Int + init { + warningLimit = System.getenv("CODEQL_EXTRACTOR_KOTLIN_WARNING_LIMIT")?.toIntOrNull() ?: 100 + } +} + +enum class Severity(val sev: Int) { + WarnLow(1), + Warn(2), + WarnHigh(3), + /** Minor extractor errors, with minimal impact on analysis. */ + ErrorLow(4), + /** Most extractor errors, with local impact on analysis. */ + Error(5), + /** Javac errors. */ + ErrorHigh(6), + /** Severe extractor errors affecting a single source file. */ + ErrorSevere(7), + /** Severe extractor errors likely to affect multiple source files. */ + ErrorGlobal(8) +} + +open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { + private fun timestamp(): String { + return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" + } + + fun flush() { + tw.flush() + System.out.flush() + } + fun info(msg: String) { + val fullMsg = "${timestamp()} $msg" + tw.writeTrap("// " + fullMsg.replace("\n", "\n//") + "\n") + println(fullMsg) + } + fun warn(severity: Severity, msg: String, locationString: String? = null, locationId: Label = tw.unknownLocation) { + val st = Exception().stackTrace + val suffix = + if(st.size < 2) { + " Missing caller information.\n" + } else { + val caller = st[1].toString() + val count = logCounter.warningCounts.getOrDefault(caller, 0) + 1 + logCounter.warningCounts[caller] = count + when { + logCounter.warningLimit <= 0 -> "" + count == logCounter.warningLimit -> " Limit reached for warnings from $caller.\n" + count > logCounter.warningLimit -> return + else -> "" + } + } + val ts = timestamp() + tw.writeDiagnostics(StarLabel(), severity.sev, "", msg, "$ts $msg\n$suffix", locationId) + val locStr = if (locationString == null) "" else "At " + locationString + ": " + print("$ts Warning: $locStr$msg\n$suffix") + } + fun printLimitedWarningCounts() { + for((caller, count) in logCounter.warningCounts) { + if(count >= logCounter.warningLimit) { + val msg = "Total of $count warnings from $caller.\n" + tw.writeTrap("// $msg") + print(msg) + } + } + } +} + +class FileLogger(logCounter: LogCounter, override val tw: FileTrapWriter): Logger(logCounter, tw) { + private fun timestamp(): String { + return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" + } + + fun warnElement(severity: Severity, msg: String, element: IrElement) { + val locationString = tw.getLocationString(element) + val locationId = tw.getLocation(element) + warn(severity, msg, locationString, locationId) + } +} From 79e3cb38a864541f5a053ad56edce6c085dce56d Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 9 Sep 2021 20:43:07 +0100 Subject: [PATCH 0507/1618] Kotlin: Pull TrapWriter out into its own file --- .../main/kotlin/KotlinExtractorExtension.kt | 115 ----------------- .../src/main/kotlin/TrapWriter.kt | 121 ++++++++++++++++++ 2 files changed, 121 insertions(+), 115 deletions(-) create mode 100644 java/kotlin-extractor/src/main/kotlin/TrapWriter.kt diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 2eaba89ec1a..e356d1d6395 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1,6 +1,5 @@ package com.github.codeql -import java.io.BufferedWriter import java.io.File import java.io.FileOutputStream import java.io.PrintWriter @@ -12,7 +11,6 @@ import java.util.Optional import kotlin.system.exitProcess import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext -import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.ir.util.IdSignature @@ -77,119 +75,6 @@ class StarLabel(): Label { fun escapeTrapString(str: String) = str.replace("\"", "\"\"") -class TrapLabelManager { - public var nextId: Int = 100 - - fun getFreshLabel(): Label { - return IntLabel(nextId++) - } - - val labelMapping: MutableMap> = mutableMapOf>() -} - -open class TrapWriter (val lm: TrapLabelManager, val bw: BufferedWriter) { - fun getExistingLabelFor(label: String): Label? { - @Suppress("UNCHECKED_CAST") - return lm.labelMapping.get(label) as Label? - } - fun getLabelFor(label: String, initialise: (Label) -> Unit = {}): Label { - val maybeId: Label? = getExistingLabelFor(label) - if(maybeId == null) { - val id: Label = lm.getFreshLabel() - lm.labelMapping.put(label, id) - writeTrap("$id = $label\n") - initialise(id) - return id - } else { - return maybeId - } - } - - fun getLocation(fileId: Label, startLine: Int, startColumn: Int, endLine: Int, endColumn: Int): Label { - return getLabelFor("@\"loc,{$fileId},$startLine,$startColumn,$endLine,$endColumn\"") { - writeLocations_default(it, fileId, startLine, startColumn, endLine, endColumn) - } - } - - protected val unknownFileId: Label by lazy { - val unknownFileLabel = "@\";sourcefile\"" - getLabelFor(unknownFileLabel, { - writeFiles(it, "", "", "", 0) - }) - } - - val unknownLocation: Label by lazy { - getLocation(unknownFileId, 0, 0, 0, 0) - } - - fun writeTrap(trap: String) { - bw.write(trap) - } - fun flush() { - bw.flush() - } -} - -class FileTrapWriter ( - lm: TrapLabelManager, - bw: BufferedWriter, - val irFile: IrFile -): TrapWriter (lm, bw) { - private val fileEntry = irFile.fileEntry - val fileId = { - val filePath = irFile.path - val fileLabel = "@\"$filePath;sourcefile\"" - val file = File(filePath) - val basename = file.nameWithoutExtension - val extension = file.extension - val id: Label = getLabelFor(fileLabel) - writeFiles(id, filePath, basename, extension, 0) - id - }() - - fun getLocation(e: IrElement): Label { - return getLocation(e.startOffset, e.endOffset) - } - fun getLocation(startOffset: Int, endOffset: Int): Label { - val unknownLoc = startOffset == -1 && endOffset == -1 - val startLine = if(unknownLoc) 0 else fileEntry.getLineNumber(startOffset) + 1 - val startColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(startOffset) + 1 - val endLine = if(unknownLoc) 0 else fileEntry.getLineNumber(endOffset) + 1 - val endColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(endOffset) - val locFileId: Label = if (unknownLoc) unknownFileId else fileId - return getLocation(locFileId, startLine, startColumn, endLine, endColumn) - } - fun getLocationString(e: IrElement): String { - val path = irFile.path - if (e.startOffset == -1 && e.endOffset == -1) { - return "unknown location, while processing $path" - } else { - val startLine = fileEntry.getLineNumber(e.startOffset) + 1 - val startColumn = fileEntry.getColumnNumber(e.startOffset) + 1 - val endLine = fileEntry.getLineNumber(e.endOffset) + 1 - val endColumn = fileEntry.getColumnNumber(e.endOffset) - return "file://$path:$startLine:$startColumn:$endLine:$endColumn" - } - } - val variableLabelMapping: MutableMap> = mutableMapOf>() - fun getVariableLabelFor(v: IrVariable): Label { - val maybeId = variableLabelMapping.get(v) - if(maybeId == null) { - val id = lm.getFreshLabel() - variableLabelMapping.put(v, id) - writeTrap("$id = *\n") - return id - } else { - return maybeId - } - } - fun getFreshIdLabel(): Label { - val label = IntLabel(lm.nextId++) - writeTrap("$label = *\n") - return label - } -} - private fun equivalentTrap(f1: File, f2: File): Boolean { f1.bufferedReader().use { bw1 -> f2.bufferedReader().use { bw2 -> diff --git a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt new file mode 100644 index 00000000000..2d29e89c440 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt @@ -0,0 +1,121 @@ +package com.github.codeql + +import java.io.BufferedWriter +import java.io.File +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.path +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.IrVariable + +class TrapLabelManager { + public var nextId: Int = 100 + + fun getFreshLabel(): Label { + return IntLabel(nextId++) + } + + val labelMapping: MutableMap> = mutableMapOf>() +} + +open class TrapWriter (val lm: TrapLabelManager, val bw: BufferedWriter) { + fun getExistingLabelFor(label: String): Label? { + @Suppress("UNCHECKED_CAST") + return lm.labelMapping.get(label) as Label? + } + fun getLabelFor(label: String, initialise: (Label) -> Unit = {}): Label { + val maybeId: Label? = getExistingLabelFor(label) + if(maybeId == null) { + val id: Label = lm.getFreshLabel() + lm.labelMapping.put(label, id) + writeTrap("$id = $label\n") + initialise(id) + return id + } else { + return maybeId + } + } + + fun getLocation(fileId: Label, startLine: Int, startColumn: Int, endLine: Int, endColumn: Int): Label { + return getLabelFor("@\"loc,{$fileId},$startLine,$startColumn,$endLine,$endColumn\"") { + writeLocations_default(it, fileId, startLine, startColumn, endLine, endColumn) + } + } + + protected val unknownFileId: Label by lazy { + val unknownFileLabel = "@\";sourcefile\"" + getLabelFor(unknownFileLabel, { + writeFiles(it, "", "", "", 0) + }) + } + + val unknownLocation: Label by lazy { + getLocation(unknownFileId, 0, 0, 0, 0) + } + + fun writeTrap(trap: String) { + bw.write(trap) + } + fun flush() { + bw.flush() + } +} + +class FileTrapWriter ( + lm: TrapLabelManager, + bw: BufferedWriter, + val irFile: IrFile +): TrapWriter (lm, bw) { + private val fileEntry = irFile.fileEntry + val fileId = { + val filePath = irFile.path + val fileLabel = "@\"$filePath;sourcefile\"" + val file = File(filePath) + val basename = file.nameWithoutExtension + val extension = file.extension + val id: Label = getLabelFor(fileLabel) + writeFiles(id, filePath, basename, extension, 0) + id + }() + + fun getLocation(e: IrElement): Label { + return getLocation(e.startOffset, e.endOffset) + } + fun getLocation(startOffset: Int, endOffset: Int): Label { + val unknownLoc = startOffset == -1 && endOffset == -1 + val startLine = if(unknownLoc) 0 else fileEntry.getLineNumber(startOffset) + 1 + val startColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(startOffset) + 1 + val endLine = if(unknownLoc) 0 else fileEntry.getLineNumber(endOffset) + 1 + val endColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(endOffset) + val locFileId: Label = if (unknownLoc) unknownFileId else fileId + return getLocation(locFileId, startLine, startColumn, endLine, endColumn) + } + fun getLocationString(e: IrElement): String { + val path = irFile.path + if (e.startOffset == -1 && e.endOffset == -1) { + return "unknown location, while processing $path" + } else { + val startLine = fileEntry.getLineNumber(e.startOffset) + 1 + val startColumn = fileEntry.getColumnNumber(e.startOffset) + 1 + val endLine = fileEntry.getLineNumber(e.endOffset) + 1 + val endColumn = fileEntry.getColumnNumber(e.endOffset) + return "file://$path:$startLine:$startColumn:$endLine:$endColumn" + } + } + val variableLabelMapping: MutableMap> = mutableMapOf>() + fun getVariableLabelFor(v: IrVariable): Label { + val maybeId = variableLabelMapping.get(v) + if(maybeId == null) { + val id = lm.getFreshLabel() + variableLabelMapping.put(v, id) + writeTrap("$id = *\n") + return id + } else { + return maybeId + } + } + fun getFreshIdLabel(): Label { + val label = IntLabel(lm.nextId++) + writeTrap("$label = *\n") + return label + } +} From 396b5882ef47cb37b21deaba8b3ab68b4865a3bc Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 9 Sep 2021 21:41:08 +0100 Subject: [PATCH 0508/1618] Kotlin: Add a compilations consistency query --- java/ql/consistency-queries/compilations.ql | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 java/ql/consistency-queries/compilations.ql diff --git a/java/ql/consistency-queries/compilations.ql b/java/ql/consistency-queries/compilations.ql new file mode 100644 index 00000000000..c4751c4095c --- /dev/null +++ b/java/ql/consistency-queries/compilations.ql @@ -0,0 +1,17 @@ +import java + +predicate goodCompilation(Compilation c) { + forex(int i | + exists(c.getFileCompiled(i)) | + exists(c.getFileCompiled(i - 1)) or i = 0) and + forex(int i | + exists(c.getArgument(i)) | + exists(c.getArgument(i - 1)) or i = 0) and + c.extractionStarted() and + c.normalTermination() +} + +from Compilation c +where c.isKotlin() + and not goodCompilation(c) +select c From 598a2f8cb0fee6227ab99c96921c05fb0b0feaa9 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 13 Sep 2021 14:31:47 +0100 Subject: [PATCH 0509/1618] Kotlin: Record compilation and extraction times --- .../src/main/kotlin/KotlinExtractorExtension.kt | 4 +++- java/ql/lib/config/semmlecode.dbscheme | 11 +++++++++++ java/ql/lib/semmle/code/java/Compilation.qll | 12 ++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index e356d1d6395..fcf779bda81 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind class KotlinExtractorExtension(private val invocationTrapFile: String, private val checkTrapIdentical: Boolean) : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { + val startTimeMs = System.currentTimeMillis() // This default should be kept in sync with language-packs/java/tools/kotlin-extractor val trapDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_TRAP_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/trap") FileOutputStream(File(invocationTrapFile), true).bufferedWriter().use { invocationTrapFileBW -> @@ -52,7 +53,8 @@ class KotlinExtractorExtension(private val invocationTrapFile: String, private v // files etc, so we just exit when we are finished extracting. logger.info("Extraction completed") logger.flush() - tw.writeCompilation_finished(compilation, 0.0, 0.0) + val compilationTimeMs = System.currentTimeMillis() - startTimeMs + tw.writeCompilation_finished(compilation, -1.0, compilationTimeMs.toDouble() / 1000) tw.flush() } exitProcess(0) diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 243b21e9d78..396b8f72fa1 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -116,6 +116,17 @@ diagnostic_for( int file_number_diagnostic_number : int ref ); +/** + * The `cpu_seconds` and `elapsed_seconds` are the CPU time and elapsed + * time (respectively) that the original compilation (not the extraction) + * took for compiler invocation `id`. + */ +compilation_compiler_times( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + /** * If extraction was successful, then `cpu_seconds` and * `elapsed_seconds` are the CPU time and elapsed time (respectively) diff --git a/java/ql/lib/semmle/code/java/Compilation.qll b/java/ql/lib/semmle/code/java/Compilation.qll index d81f3954b7e..f692f9182d1 100644 --- a/java/ql/lib/semmle/code/java/Compilation.qll +++ b/java/ql/lib/semmle/code/java/Compilation.qll @@ -70,6 +70,18 @@ class Compilation extends @compilation { */ string getArgument(int i) { compilation_args(this, i, result) } + /** + * Gets the total amount of CPU time spent processing all the files in the + * compiler. + */ + float getCompilerCpuSeconds() { compilation_compiler_times(this, result, _) } + + /** + * Gets the total amount of elapsed time while processing all the files in + * the compiler. + */ + float getCompilerElapsedSeconds() { compilation_compiler_times(this, _, result) } + /** * Gets the total amount of CPU time spent processing all the files in the * front-end and extractor. From fd8dd21f7574aa090d537ffa32e9e3f82609d541 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 16 Sep 2021 15:29:24 +0100 Subject: [PATCH 0510/1618] Kotlin: Follow change in files(...) table --- java/kotlin-extractor/src/main/kotlin/TrapWriter.kt | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt index 2d29e89c440..6f6d8ba0130 100644 --- a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt +++ b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt @@ -44,7 +44,7 @@ open class TrapWriter (val lm: TrapLabelManager, val bw: BufferedWriter) { protected val unknownFileId: Label by lazy { val unknownFileLabel = "@\";sourcefile\"" getLabelFor(unknownFileLabel, { - writeFiles(it, "", "", "", 0) + writeFiles(it, "") }) } @@ -69,11 +69,8 @@ class FileTrapWriter ( val fileId = { val filePath = irFile.path val fileLabel = "@\"$filePath;sourcefile\"" - val file = File(filePath) - val basename = file.nameWithoutExtension - val extension = file.extension val id: Label = getLabelFor(fileLabel) - writeFiles(id, filePath, basename, extension, 0) + writeFiles(id, filePath) id }() From 1c8be155c91e4af94ae35e0e76db1bb881c6805b Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 7 Sep 2021 14:44:06 +0200 Subject: [PATCH 0511/1618] Extract comments (based on C# comments extraction with element stack) --- .../main/kotlin/KotlinExtractorExtension.kt | 43 +++-- .../src/main/kotlin/Location.kt | 14 ++ .../src/main/kotlin/comments/Comment.kt | 13 ++ .../main/kotlin/comments/CommentBinding.kt | 8 + .../main/kotlin/comments/CommentExtractor.kt | 176 ++++++++++++++++++ .../src/main/kotlin/comments/CommentType.kt | 5 + .../src/main/kotlin/comments/ElementStack.kt | 47 +++++ 7 files changed, 289 insertions(+), 17 deletions(-) create mode 100644 java/kotlin-extractor/src/main/kotlin/Location.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/comments/Comment.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/comments/CommentBinding.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/comments/CommentType.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/comments/ElementStack.kt diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index fcf779bda81..9147db243bf 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1,29 +1,26 @@ package com.github.codeql +import com.github.codeql.comments.CommentExtractor +import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension +import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext +import org.jetbrains.kotlin.descriptors.ClassKind +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrStatement +import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.expressions.* +import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.* +import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol +import org.jetbrains.kotlin.ir.types.* +import org.jetbrains.kotlin.ir.util.packageFqName +import org.jetbrains.kotlin.ir.util.render import java.io.File import java.io.FileOutputStream import java.io.PrintWriter import java.io.StringWriter import java.nio.file.Files -import java.nio.file.Path import java.nio.file.Paths -import java.util.Optional +import java.util.* import kotlin.system.exitProcess -import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension -import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext -import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.util.dump -import org.jetbrains.kotlin.ir.util.IdSignature -import org.jetbrains.kotlin.ir.util.packageFqName -import org.jetbrains.kotlin.ir.util.render -import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -import org.jetbrains.kotlin.ir.IrFileEntry -import org.jetbrains.kotlin.ir.types.* -import org.jetbrains.kotlin.ir.expressions.* -import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.* -import org.jetbrains.kotlin.ir.IrStatement -import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol -import org.jetbrains.kotlin.descriptors.ClassKind class KotlinExtractorExtension(private val invocationTrapFile: String, private val checkTrapIdentical: Boolean) : IrGenerationExtension { override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) { @@ -155,6 +152,9 @@ fun fakeLabel(): Label { } class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val file: IrFile) { + + private val commentExtractor: CommentExtractor = CommentExtractor(logger, tw, file) + val fileClass by lazy { extractFileClass(file) } @@ -164,8 +164,11 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val pkgId = extractPackage(pkg) tw.writeCupackage(id, pkgId) file.declarations.map { extractDeclaration(it, Optional.empty()) } + commentExtractor.extract() + commentExtractor.bindCommentsToElement() } + fun extractFileClass(f: IrFile): Label { val fileName = f.fileEntry.name val pkg = f.fqName.asString() @@ -291,6 +294,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractClass(c: IrClass): Label { + commentExtractor.addPossibleCommentOwner(c) val id = addClassLabel(c) val locId = tw.getLocation(c) val pkg = c.packageFqName?.asString() ?: "" @@ -388,6 +392,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractFunction(f: IrFunction, parentid: Label) { + commentExtractor.addPossibleCommentOwner(f) val id = useFunction(f) val locId = tw.getLocation(f) val signature = "TODO" @@ -411,6 +416,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractProperty(p: IrProperty, parentid: Label) { + commentExtractor.addPossibleCommentOwner(p) val bf = p.backingField if(bf == null) { logger.warnElement(Severity.ErrorSevere, "IrProperty without backing field", p) @@ -424,6 +430,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractBody(b: IrBody, callable: Label) { + commentExtractor.addPossibleCommentOwner(b) when(b) { is IrBlockBody -> extractBlockBody(b, callable, callable, 0) else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrBody: " + b.javaClass, b) @@ -460,6 +467,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractStatement(s: IrStatement, callable: Label, parent: Label, idx: Int) { + commentExtractor.addPossibleCommentOwner(s) when(s) { is IrExpression -> { extractExpression(s, callable, parent, idx) @@ -585,6 +593,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractExpression(e: IrExpression, callable: Label, parent: Label, idx: Int) { + commentExtractor.addPossibleCommentOwner(e) when(e) { is IrCall -> extractCall(e, callable, parent, idx) is IrConst<*> -> { diff --git a/java/kotlin-extractor/src/main/kotlin/Location.kt b/java/kotlin-extractor/src/main/kotlin/Location.kt new file mode 100644 index 00000000000..eeedf43e023 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/Location.kt @@ -0,0 +1,14 @@ +package com.github.codeql + +import org.jetbrains.kotlin.ir.IrElement + +data class Location(val startOffset: Int, val endOffset: Int){ + fun contains(location: Location) : Boolean { + return this.startOffset <= location.startOffset && + this.endOffset >= location.endOffset + } +} + +fun IrElement.getLocation() : Location { + return Location(this.startOffset, this.endOffset) +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/comments/Comment.kt b/java/kotlin-extractor/src/main/kotlin/comments/Comment.kt new file mode 100644 index 00000000000..1f45f6f455d --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/comments/Comment.kt @@ -0,0 +1,13 @@ +package com.github.codeql.comments + +import com.github.codeql.Location + +data class Comment(val rawText: String, val startOffset: Int, val endOffset: Int, val type: CommentType){ + fun getLocation() : Location { + return Location(this.startOffset, this.endOffset) + } + + override fun toString(): String { + return "Comment: $rawText [$startOffset-$endOffset]" + } +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/comments/CommentBinding.kt b/java/kotlin-extractor/src/main/kotlin/comments/CommentBinding.kt new file mode 100644 index 00000000000..dec7b97e5bf --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/comments/CommentBinding.kt @@ -0,0 +1,8 @@ +package com.github.codeql.comments + +enum class CommentBinding { // from C# + Parent, // The parent element of a comment + Best, // The most likely element associated with a comment + Before, // The element before the comment + After // The element after the comment +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt new file mode 100644 index 00000000000..0648dff0642 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt @@ -0,0 +1,176 @@ +package com.github.codeql.comments + +import com.github.codeql.FileLogger +import com.github.codeql.Logger +import com.github.codeql.Severity +import com.github.codeql.TrapWriter +import com.intellij.psi.PsiComment +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.backend.common.psi.PsiSourceManager +import org.jetbrains.kotlin.backend.jvm.ir.getKtFile +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.declarations.path +import org.jetbrains.kotlin.ir.util.dump +import org.jetbrains.kotlin.kdoc.psi.api.KDoc +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.psi.KtVisitor +import org.jetbrains.kotlin.psi.findDocComment.findDocComment +import org.jetbrains.kotlin.psi.psiUtil.endOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.utils.addToStdlib.cast + +class CommentExtractor(private val logger: FileLogger, private val tw: TrapWriter, private val file: IrFile) { + private val ktFile = file.getKtFile() + + private val comments = mutableListOf() + private val elements = mutableListOf() + + init { + if (ktFile == null) { + logger.warn(Severity.Warn, "Comments are not being processed in ${file.path}.") + } + } + + fun addPossibleCommentOwner(elem: IrElement) { + if (ktFile == null) { + return + } + + if (elem.startOffset == -1 || elem.endOffset == -1) { + logger.info("Skipping element with negative offsets: ${elem.dump()}") + return + } + + + val psiElement = PsiSourceManager.findPsiElement(elem, file) + if (psiElement != null) { + println("PSI: $psiElement for ${elem.dump()}") + if (psiElement is KtDeclaration) { + val docComment = findDocComment(psiElement) + if (docComment != null) { + println("doc comment: ${docComment.text}") + } + } + } + + elements.add(elem) + } + + /** + * Match comments to program elements. + */ + fun bindCommentsToElement() { + if (comments.isEmpty()) { + return + } + + comments.sortBy { it.startOffset } + elements.sortBy { it.startOffset } + + var commentIndex: Int = 0 + var elementIndex: Int = 0 + val elementStack: ElementStack = ElementStack() + + while (elementIndex < elements.size) { + val nextElement = elements[elementIndex] + val commentsForElement = mutableListOf() + while (commentIndex < comments.size && + comments[commentIndex].endOffset < nextElement.startOffset) { + + commentsForElement.add(comments[commentIndex]) + commentIndex++ + } + + bindCommentsToElements(commentsForElement, elementStack, nextElement) + + elementStack.push(nextElement) + + elementIndex++ + } + + // Comments after last element + val commentsForElement = mutableListOf() + while (commentIndex < comments.size) { + + commentsForElement.add(comments[commentIndex]) + commentIndex++ + } + + bindCommentsToElements(commentsForElement, elementStack, null) + } + + /** + * Bind selected comments to elements. Elements are selected from the element stack or from the next element. + */ + private fun bindCommentsToElements( + commentsForElement: Collection, + elementStack: ElementStack, + nextElement: IrElement? + ) { + if (commentsForElement.any()) { + for (comment in commentsForElement) { + println("Comment: $comment") + val parent = elementStack.findParent(comment.getLocation()) + println("parent: ${parent?.dump()}") + val before = elementStack.findBefore(comment.getLocation()) + println("before: ${before?.dump()}") + val after = elementStack.findAfter(comment.getLocation(), nextElement) + println("after: ${after?.dump()}") + // todo: best match + } + } + + // todo write matches to DB: tw.writeHasJavadoc() + } + + fun extract() { + ktFile?.accept( + object : KtVisitor() { + override fun visitElement(element: PsiElement) { + element.acceptChildren(this) + + // Slightly hacky, but `visitComment` doesn't seem to visit comments with `tokenType` `KtTokens.DOC_COMMENT` + if (element is PsiComment){ + visitCommentElement(element) + } + } + + private fun visitCommentElement(comment: PsiComment) { + // val loc = tw.getLocation(comment.startOffset, comment.endOffset) + // val id: Label = tw.getLabelFor(";comment") + // tw.writeJavadoc(id) + + val type: CommentType = when (comment.tokenType) { + KtTokens.EOL_COMMENT -> { + CommentType.SingleLine + } + KtTokens.BLOCK_COMMENT -> { + CommentType.Block + } + KtTokens.DOC_COMMENT -> { + CommentType.Doc + } + else -> { + logger.warn(Severity.Warn, "Unhandled comment token type: ${comment.tokenType}") + return + } + } + + if (comment.tokenType == KtTokens.DOC_COMMENT) + { + val kdoc = comment.cast() + for (sec in kdoc.getAllSections()) + println("section content: ${sec.getContent()}") + + } + + comments.add(Comment(comment.text, comment.startOffset, comment.endOffset, type)) + // todo: + // - store each comment in the DB + // - do further processing on Doc comments (extract @tag text, @tag name text, @tag[name] text) + } + }) + } +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/comments/CommentType.kt b/java/kotlin-extractor/src/main/kotlin/comments/CommentType.kt new file mode 100644 index 00000000000..b9b1b2794eb --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/comments/CommentType.kt @@ -0,0 +1,5 @@ +package com.github.codeql.comments + +enum class CommentType { + SingleLine, Block, Doc +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/comments/ElementStack.kt b/java/kotlin-extractor/src/main/kotlin/comments/ElementStack.kt new file mode 100644 index 00000000000..f8f147a0e4f --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/comments/ElementStack.kt @@ -0,0 +1,47 @@ +package com.github.codeql.comments + +import com.github.codeql.Location +import com.github.codeql.getLocation +import org.jetbrains.kotlin.ir.IrElement +import java.util.ArrayDeque + +/** + * Stack of elements, where each element in the stack fully contains the elements above it. + */ +class ElementStack { + private val stack = ArrayDeque() + + /** + * Pops all elements from the stack that don't fully contain the new element. And then pushes the element onto the + * stack. + */ + fun push(element: IrElement) { + while (!stack.isEmpty() && !stack.peek().getLocation().contains(element.getLocation())) { + stack.pop(); + } + + stack.push(element); + } + + fun findBefore(location: Location) : IrElement? { + return stack.lastOrNull { it.getLocation().endOffset < location.startOffset } + } + + fun findAfter(location: Location, next: IrElement?) : IrElement? { + if (next == null) { + return null + } + + val parent = findParent(location) ?: return next; + + if (parent.getLocation().contains(next.getLocation())) { + return next + } + + return null + } + + fun findParent(location: Location) : IrElement? { + return stack.firstOrNull { it.getLocation().contains(location) } + } +} \ No newline at end of file From c23472d736c952b9f5480121bb8a523d7c77d590 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 15 Sep 2021 13:25:38 +0200 Subject: [PATCH 0512/1618] Rework and simplify comment extraction --- .../main/kotlin/KotlinExtractorExtension.kt | 54 ++++-- .../src/main/kotlin/Location.kt | 14 -- .../src/main/kotlin/comments/Comment.kt | 3 +- .../main/kotlin/comments/CommentBinding.kt | 8 - .../main/kotlin/comments/CommentExtractor.kt | 179 ++++++------------ .../src/main/kotlin/comments/CommentType.kt | 4 +- .../src/main/kotlin/comments/ElementStack.kt | 47 ----- .../src/main/kotlin/utils/IrVisitorLookup.kt | 31 +++ .../src/main/kotlin/utils/Location.kt | 24 +++ .../src/main/kotlin/{ => utils}/Logger.kt | 0 10 files changed, 161 insertions(+), 203 deletions(-) delete mode 100644 java/kotlin-extractor/src/main/kotlin/Location.kt delete mode 100644 java/kotlin-extractor/src/main/kotlin/comments/CommentBinding.kt delete mode 100644 java/kotlin-extractor/src/main/kotlin/comments/ElementStack.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/IrVisitorLookup.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/Location.kt rename java/kotlin-extractor/src/main/kotlin/{ => utils}/Logger.kt (100%) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 9147db243bf..ce5a83262f0 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -153,7 +153,7 @@ fun fakeLabel(): Label { class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val file: IrFile) { - private val commentExtractor: CommentExtractor = CommentExtractor(logger, tw, file) + private val commentExtractor: CommentExtractor = CommentExtractor(logger, tw, file, this) val fileClass by lazy { extractFileClass(file) @@ -165,7 +165,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeCupackage(id, pkgId) file.declarations.map { extractDeclaration(it, Optional.empty()) } commentExtractor.extract() - commentExtractor.bindCommentsToElement() } @@ -261,7 +260,27 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - fun getTypeParameterLabel(param: IrTypeParameter): String { + fun getLabel(element: IrElement) : String? { + when (element) { + is IrFile -> return "@\"${element.path};sourcefile\"" // todo: remove copy-pasted code + is IrClass -> return getClassLabel(element) + is IrTypeParameter -> return getTypeParameterLabel(element) + is IrFunction -> return getFunctionLabel(element) + is IrValueParameter -> return getValueParameterLabel(element) + is IrProperty -> return getPropertyLabel(element) + + // Fresh entities: + is IrBody -> return "*" + is IrExpression -> return "*" + + // todo: + is IrField -> return null + // todo add others: + else -> return null + } + } + + private fun getTypeParameterLabel(param: IrTypeParameter): String { val parentLabel = useDeclarationParent(param.parent) return "@\"typevar;{$parentLabel};${param.name}\"" } @@ -270,7 +289,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return tw.getLabelFor(getTypeParameterLabel(param)) } - fun getClassLabel(c: IrClass): String { + private fun getClassLabel(c: IrClass): String { val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() val qualClassName = if (pkg.isEmpty()) cls else "$pkg.$cls" @@ -294,7 +313,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractClass(c: IrClass): Label { - commentExtractor.addPossibleCommentOwner(c) val id = addClassLabel(c) val locId = tw.getLocation(c) val pkg = c.packageFqName?.asString() ?: "" @@ -364,20 +382,30 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return t } - fun useFunction(f: IrFunction): Label { + private fun getFunctionLabel(f: IrFunction) : String { val paramTypeIds = f.valueParameters.joinToString() { "{${useType(erase(it.type)).toString()}}" } val returnTypeId = useType(erase(f.returnType)) val parentId = useDeclarationParent(f.parent) val label = "@\"callable;{$parentId}.${f.name.asString()}($paramTypeIds){$returnTypeId}\"" + return label + } + + fun useFunction(f: IrFunction): Label { + val label = getFunctionLabel(f) val id: Label = tw.getLabelFor(label) return id } - fun useValueParameter(vp: IrValueParameter): Label { + private fun getValueParameterLabel(vp: IrValueParameter) : String { @Suppress("UNCHECKED_CAST") val parentId: Label = useDeclarationParent(vp.parent) as Label val idx = vp.index val label = "@\"params;{$parentId};$idx\"" + return label + } + + fun useValueParameter(vp: IrValueParameter): Label { + val label = getValueParameterLabel(vp) val id = tw.getLabelFor(label) return id } @@ -392,7 +420,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractFunction(f: IrFunction, parentid: Label) { - commentExtractor.addPossibleCommentOwner(f) val id = useFunction(f) val locId = tw.getLocation(f) val signature = "TODO" @@ -408,15 +435,19 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - fun useProperty(p: IrProperty): Label { + private fun getPropertyLabel(p: IrProperty) : String { val parentId = useDeclarationParent(p.parent) val label = "@\"field;{$parentId};${p.name.asString()}\"" + return label + } + + fun useProperty(p: IrProperty): Label { + var label = getPropertyLabel(p) val id: Label = tw.getLabelFor(label) return id } fun extractProperty(p: IrProperty, parentid: Label) { - commentExtractor.addPossibleCommentOwner(p) val bf = p.backingField if(bf == null) { logger.warnElement(Severity.ErrorSevere, "IrProperty without backing field", p) @@ -430,7 +461,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractBody(b: IrBody, callable: Label) { - commentExtractor.addPossibleCommentOwner(b) when(b) { is IrBlockBody -> extractBlockBody(b, callable, callable, 0) else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrBody: " + b.javaClass, b) @@ -467,7 +497,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractStatement(s: IrStatement, callable: Label, parent: Label, idx: Int) { - commentExtractor.addPossibleCommentOwner(s) when(s) { is IrExpression -> { extractExpression(s, callable, parent, idx) @@ -593,7 +622,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractExpression(e: IrExpression, callable: Label, parent: Label, idx: Int) { - commentExtractor.addPossibleCommentOwner(e) when(e) { is IrCall -> extractCall(e, callable, parent, idx) is IrConst<*> -> { diff --git a/java/kotlin-extractor/src/main/kotlin/Location.kt b/java/kotlin-extractor/src/main/kotlin/Location.kt deleted file mode 100644 index eeedf43e023..00000000000 --- a/java/kotlin-extractor/src/main/kotlin/Location.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.github.codeql - -import org.jetbrains.kotlin.ir.IrElement - -data class Location(val startOffset: Int, val endOffset: Int){ - fun contains(location: Location) : Boolean { - return this.startOffset <= location.startOffset && - this.endOffset >= location.endOffset - } -} - -fun IrElement.getLocation() : Location { - return Location(this.startOffset, this.endOffset) -} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/comments/Comment.kt b/java/kotlin-extractor/src/main/kotlin/comments/Comment.kt index 1f45f6f455d..7a6edc176b3 100644 --- a/java/kotlin-extractor/src/main/kotlin/comments/Comment.kt +++ b/java/kotlin-extractor/src/main/kotlin/comments/Comment.kt @@ -1,6 +1,7 @@ package com.github.codeql.comments -import com.github.codeql.Location +import utils.Location + data class Comment(val rawText: String, val startOffset: Int, val endOffset: Int, val type: CommentType){ fun getLocation() : Location { diff --git a/java/kotlin-extractor/src/main/kotlin/comments/CommentBinding.kt b/java/kotlin-extractor/src/main/kotlin/comments/CommentBinding.kt deleted file mode 100644 index dec7b97e5bf..00000000000 --- a/java/kotlin-extractor/src/main/kotlin/comments/CommentBinding.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.github.codeql.comments - -enum class CommentBinding { // from C# - Parent, // The parent element of a comment - Best, // The most likely element associated with a comment - Before, // The element before the comment - After // The element after the comment -} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt index 0648dff0642..d7f3cf84d6f 100644 --- a/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt @@ -1,130 +1,29 @@ package com.github.codeql.comments -import com.github.codeql.FileLogger -import com.github.codeql.Logger -import com.github.codeql.Severity -import com.github.codeql.TrapWriter +import com.github.codeql.* +import com.github.codeql.utils.IrVisitorLookup import com.intellij.psi.PsiComment import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.backend.common.psi.PsiSourceManager import org.jetbrains.kotlin.backend.jvm.ir.getKtFile import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.path -import org.jetbrains.kotlin.ir.util.dump import org.jetbrains.kotlin.kdoc.psi.api.KDoc import org.jetbrains.kotlin.lexer.KtTokens -import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtVisitor -import org.jetbrains.kotlin.psi.findDocComment.findDocComment import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.utils.addToStdlib.cast -class CommentExtractor(private val logger: FileLogger, private val tw: TrapWriter, private val file: IrFile) { +class CommentExtractor(private val logger: FileLogger, private val tw: FileTrapWriter, private val file: IrFile, private val fileExtractor: KotlinFileExtractor) { private val ktFile = file.getKtFile() - private val comments = mutableListOf() - private val elements = mutableListOf() - init { if (ktFile == null) { logger.warn(Severity.Warn, "Comments are not being processed in ${file.path}.") } } - fun addPossibleCommentOwner(elem: IrElement) { - if (ktFile == null) { - return - } - - if (elem.startOffset == -1 || elem.endOffset == -1) { - logger.info("Skipping element with negative offsets: ${elem.dump()}") - return - } - - - val psiElement = PsiSourceManager.findPsiElement(elem, file) - if (psiElement != null) { - println("PSI: $psiElement for ${elem.dump()}") - if (psiElement is KtDeclaration) { - val docComment = findDocComment(psiElement) - if (docComment != null) { - println("doc comment: ${docComment.text}") - } - } - } - - elements.add(elem) - } - - /** - * Match comments to program elements. - */ - fun bindCommentsToElement() { - if (comments.isEmpty()) { - return - } - - comments.sortBy { it.startOffset } - elements.sortBy { it.startOffset } - - var commentIndex: Int = 0 - var elementIndex: Int = 0 - val elementStack: ElementStack = ElementStack() - - while (elementIndex < elements.size) { - val nextElement = elements[elementIndex] - val commentsForElement = mutableListOf() - while (commentIndex < comments.size && - comments[commentIndex].endOffset < nextElement.startOffset) { - - commentsForElement.add(comments[commentIndex]) - commentIndex++ - } - - bindCommentsToElements(commentsForElement, elementStack, nextElement) - - elementStack.push(nextElement) - - elementIndex++ - } - - // Comments after last element - val commentsForElement = mutableListOf() - while (commentIndex < comments.size) { - - commentsForElement.add(comments[commentIndex]) - commentIndex++ - } - - bindCommentsToElements(commentsForElement, elementStack, null) - } - - /** - * Bind selected comments to elements. Elements are selected from the element stack or from the next element. - */ - private fun bindCommentsToElements( - commentsForElement: Collection, - elementStack: ElementStack, - nextElement: IrElement? - ) { - if (commentsForElement.any()) { - for (comment in commentsForElement) { - println("Comment: $comment") - val parent = elementStack.findParent(comment.getLocation()) - println("parent: ${parent?.dump()}") - val before = elementStack.findBefore(comment.getLocation()) - println("before: ${before?.dump()}") - val after = elementStack.findAfter(comment.getLocation(), nextElement) - println("after: ${after?.dump()}") - // todo: best match - } - } - - // todo write matches to DB: tw.writeHasJavadoc() - } - fun extract() { ktFile?.accept( object : KtVisitor() { @@ -138,10 +37,6 @@ class CommentExtractor(private val logger: FileLogger, private val tw: TrapWrite } private fun visitCommentElement(comment: PsiComment) { - // val loc = tw.getLocation(comment.startOffset, comment.endOffset) - // val id: Label = tw.getLabelFor(";comment") - // tw.writeJavadoc(id) - val type: CommentType = when (comment.tokenType) { KtTokens.EOL_COMMENT -> { CommentType.SingleLine @@ -158,19 +53,67 @@ class CommentExtractor(private val logger: FileLogger, private val tw: TrapWrite } } - if (comment.tokenType == KtTokens.DOC_COMMENT) - { - val kdoc = comment.cast() - for (sec in kdoc.getAllSections()) - println("section content: ${sec.getContent()}") + val commentLabel = tw.getFreshIdLabel>() + tw.writeTrap("// kt_comment($commentLabel,${type.value},${escapeTrapString(comment.text)})\n") + val locId = tw.getLocation(comment.startOffset, comment.endOffset) + tw.writeHasLocation(commentLabel as Label, locId) + if (comment.tokenType == KtTokens.DOC_COMMENT) { + val kdoc = comment.cast() + for (sec in kdoc.getAllSections()) { + val commentSectionLabel = tw.getFreshIdLabel>() + tw.writeTrap("// kt_comment_section($commentSectionLabel,$commentLabel,${escapeTrapString(sec.getContent())})\n") + if (sec.name != null) { + tw.writeTrap("// kt_comment_section_name($commentSectionLabel,${sec.name}})\n") + } + if (sec.getSubjectName() != null) { + tw.writeTrap("// kt_comment_section_subject_name($commentSectionLabel,${sec.getSubjectName()}})\n") + } + } } - comments.add(Comment(comment.text, comment.startOffset, comment.endOffset, type)) - // todo: - // - store each comment in the DB - // - do further processing on Doc comments (extract @tag text, @tag name text, @tag[name] text) + val owner = getCommentOwner(comment) + val elements = mutableListOf() + file.accept(IrVisitorLookup(owner, file), elements) + + for (owner in elements) { + val label = fileExtractor.getLabel(owner) + if (label == null) { + logger.warn(Severity.Warn, "Couldn't get label for element: $owner") + continue + } + if (label == "*") { + logger.info("Skipping fresh entity label for element: $owner") + continue + } + val existingLabel = tw.getExistingLabelFor>(label) + if (existingLabel == null) { + logger.warn(Severity.Warn, "Couldn't get existing label for $label") + continue + } + + tw.writeTrap("// kt_comment_owner($commentLabel,$existingLabel)\n") + } + } + + private fun getCommentOwner(comment: PsiComment) : PsiElement { + if (comment.tokenType == KtTokens.DOC_COMMENT) { + if (comment is KDoc) { + if (comment.owner == null) { + logger.warn(Severity.Warn, "Couldn't get owner of KDoc, using parent instead") + return comment.parent + } else { + return comment.owner!! + } + } else { + logger.warn(Severity.Warn, "Unexpected comment type with DocComment token type") + return comment.parent + } + } else { + return comment.parent + } } }) } -} \ No newline at end of file +} + diff --git a/java/kotlin-extractor/src/main/kotlin/comments/CommentType.kt b/java/kotlin-extractor/src/main/kotlin/comments/CommentType.kt index b9b1b2794eb..00a1caf492e 100644 --- a/java/kotlin-extractor/src/main/kotlin/comments/CommentType.kt +++ b/java/kotlin-extractor/src/main/kotlin/comments/CommentType.kt @@ -1,5 +1,5 @@ package com.github.codeql.comments -enum class CommentType { - SingleLine, Block, Doc +enum class CommentType(val value: Int) { + SingleLine(1), Block(2), Doc(3) } \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/comments/ElementStack.kt b/java/kotlin-extractor/src/main/kotlin/comments/ElementStack.kt deleted file mode 100644 index f8f147a0e4f..00000000000 --- a/java/kotlin-extractor/src/main/kotlin/comments/ElementStack.kt +++ /dev/null @@ -1,47 +0,0 @@ -package com.github.codeql.comments - -import com.github.codeql.Location -import com.github.codeql.getLocation -import org.jetbrains.kotlin.ir.IrElement -import java.util.ArrayDeque - -/** - * Stack of elements, where each element in the stack fully contains the elements above it. - */ -class ElementStack { - private val stack = ArrayDeque() - - /** - * Pops all elements from the stack that don't fully contain the new element. And then pushes the element onto the - * stack. - */ - fun push(element: IrElement) { - while (!stack.isEmpty() && !stack.peek().getLocation().contains(element.getLocation())) { - stack.pop(); - } - - stack.push(element); - } - - fun findBefore(location: Location) : IrElement? { - return stack.lastOrNull { it.getLocation().endOffset < location.startOffset } - } - - fun findAfter(location: Location, next: IrElement?) : IrElement? { - if (next == null) { - return null - } - - val parent = findParent(location) ?: return next; - - if (parent.getLocation().contains(next.getLocation())) { - return next - } - - return null - } - - fun findParent(location: Location) : IrElement? { - return stack.firstOrNull { it.getLocation().contains(location) } - } -} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/utils/IrVisitorLookup.kt b/java/kotlin-extractor/src/main/kotlin/utils/IrVisitorLookup.kt new file mode 100644 index 00000000000..3df4d67157d --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/IrVisitorLookup.kt @@ -0,0 +1,31 @@ +package com.github.codeql.utils + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.backend.common.psi.PsiSourceManager +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.IrFile +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor +import utils.getLocation + +class IrVisitorLookup(private val psi: PsiElement, private val file: IrFile) : + IrElementVisitor> { + private val location = psi.getLocation() + + override fun visitElement(element: IrElement, data: MutableCollection): Unit { + val elementLocation = element.getLocation() + + if (!location.intersects(elementLocation)) { + // No need to visit children. + return + } + + if (location.contains(elementLocation)) { + val psiElement = PsiSourceManager.findPsiElement(element, file) + if (psiElement == psi) { + // There can be multiple IrElements that match the same PSI element. + data.add(element) + } + } + element.acceptChildren(this, data) + } +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Location.kt b/java/kotlin-extractor/src/main/kotlin/utils/Location.kt new file mode 100644 index 00000000000..d0f7734dfc3 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/Location.kt @@ -0,0 +1,24 @@ +package utils + +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.psi.psiUtil.endOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffset + +data class Location(val startOffset: Int, val endOffset: Int){ + fun contains(location: Location) : Boolean { + return this.startOffset <= location.startOffset && this.endOffset >= location.endOffset + } + + fun intersects(location: Location): Boolean { + return this.endOffset >= location.startOffset && this.startOffset <= location.endOffset + } +} + +fun IrElement.getLocation() : Location { + return Location(this.startOffset, this.endOffset) +} + +fun PsiElement.getLocation() : Location { + return Location(this.startOffset, this.endOffset) +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt similarity index 100% rename from java/kotlin-extractor/src/main/kotlin/Logger.kt rename to java/kotlin-extractor/src/main/kotlin/utils/Logger.kt From 48d019ebbe536e771750acde142166317b02aff4 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 16 Sep 2021 14:31:19 +0200 Subject: [PATCH 0513/1618] Fix review findings, add DB scheme for comments --- .../main/kotlin/KotlinExtractorExtension.kt | 6 +- .../main/kotlin/comments/CommentExtractor.kt | 83 ++++++++++--------- java/ql/lib/config/semmlecode.dbscheme | 30 ++++++- 3 files changed, 72 insertions(+), 47 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index ce5a83262f0..9770e8619be 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -152,9 +152,6 @@ fun fakeLabel(): Label { } class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val file: IrFile) { - - private val commentExtractor: CommentExtractor = CommentExtractor(logger, tw, file, this) - val fileClass by lazy { extractFileClass(file) } @@ -164,10 +161,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val pkgId = extractPackage(pkg) tw.writeCupackage(id, pkgId) file.declarations.map { extractDeclaration(it, Optional.empty()) } - commentExtractor.extract() + CommentExtractor(this).extract() } - fun extractFileClass(f: IrFile): Label { val fileName = f.fileEntry.name val pkg = f.fqName.asString() diff --git a/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt index d7f3cf84d6f..68ab03a63f3 100644 --- a/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt @@ -6,16 +6,17 @@ import com.intellij.psi.PsiComment import com.intellij.psi.PsiElement import org.jetbrains.kotlin.backend.jvm.ir.getKtFile import org.jetbrains.kotlin.ir.IrElement -import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.path import org.jetbrains.kotlin.kdoc.psi.api.KDoc import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtVisitor import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset -import org.jetbrains.kotlin.utils.addToStdlib.cast -class CommentExtractor(private val logger: FileLogger, private val tw: FileTrapWriter, private val file: IrFile, private val fileExtractor: KotlinFileExtractor) { +class CommentExtractor(private val fileExtractor: KotlinFileExtractor) { + private val file = fileExtractor.file + private val tw = fileExtractor.tw + private val logger = fileExtractor.logger private val ktFile = file.getKtFile() init { @@ -53,65 +54,65 @@ class CommentExtractor(private val logger: FileLogger, private val tw: FileTrapW } } - val commentLabel = tw.getFreshIdLabel>() - tw.writeTrap("// kt_comment($commentLabel,${type.value},${escapeTrapString(comment.text)})\n") + val commentLabel = tw.getFreshIdLabel() + tw.writeKtComments(commentLabel, type.value, escapeTrapString(comment.text)) val locId = tw.getLocation(comment.startOffset, comment.endOffset) - tw.writeHasLocation(commentLabel as Label, locId) + tw.writeHasLocation(commentLabel, locId) - if (comment.tokenType == KtTokens.DOC_COMMENT) { - val kdoc = comment.cast() - for (sec in kdoc.getAllSections()) { - val commentSectionLabel = tw.getFreshIdLabel>() - tw.writeTrap("// kt_comment_section($commentSectionLabel,$commentLabel,${escapeTrapString(sec.getContent())})\n") - if (sec.name != null) { - tw.writeTrap("// kt_comment_section_name($commentSectionLabel,${sec.name}})\n") - } - if (sec.getSubjectName() != null) { - tw.writeTrap("// kt_comment_section_subject_name($commentSectionLabel,${sec.getSubjectName()}})\n") - } + if (comment.tokenType != KtTokens.DOC_COMMENT) { + return + } + + if (comment !is KDoc) { + logger.warn(Severity.Warn, "Unexpected comment type with DocComment token type.") + return + } + + for (sec in comment.getAllSections()) { + val commentSectionLabel = tw.getFreshIdLabel() + tw.writeKtCommentSections(commentSectionLabel, commentLabel, escapeTrapString(sec.getContent())) + val name = sec.name + if (name != null) { + tw.writeKtCommentSectionNames(commentSectionLabel, escapeTrapString(name)) + } + val subjectName = sec.getSubjectName() + if (subjectName != null) { + tw.writeKtCommentSectionSubjectNames(commentSectionLabel, escapeTrapString(subjectName)) } } - val owner = getCommentOwner(comment) - val elements = mutableListOf() - file.accept(IrVisitorLookup(owner, file), elements) + // Only storing the owner of doc comments: + val ownerPsi = getKDocOwner(comment) ?: return - for (owner in elements) { - val label = fileExtractor.getLabel(owner) + val owners = mutableListOf() + file.accept(IrVisitorLookup(ownerPsi, file), owners) + + for (ownerIr in owners) { + val label = fileExtractor.getLabel(ownerIr) if (label == null) { - logger.warn(Severity.Warn, "Couldn't get label for element: $owner") + logger.warn(Severity.Warn, "Couldn't get label for element: $ownerIr") continue } if (label == "*") { - logger.info("Skipping fresh entity label for element: $owner") + logger.info("Skipping fresh entity label for element: $ownerIr") continue } - val existingLabel = tw.getExistingLabelFor>(label) + val existingLabel = tw.getExistingLabelFor(label) if (existingLabel == null) { logger.warn(Severity.Warn, "Couldn't get existing label for $label") continue } - tw.writeTrap("// kt_comment_owner($commentLabel,$existingLabel)\n") + tw.writeKtCommentOwner(commentLabel, existingLabel) } } - private fun getCommentOwner(comment: PsiComment) : PsiElement { - if (comment.tokenType == KtTokens.DOC_COMMENT) { - if (comment is KDoc) { - if (comment.owner == null) { - logger.warn(Severity.Warn, "Couldn't get owner of KDoc, using parent instead") - return comment.parent - } else { - return comment.owner!! - } - } else { - logger.warn(Severity.Warn, "Unexpected comment type with DocComment token type") - return comment.parent - } - } else { - return comment.parent + private fun getKDocOwner(comment: KDoc) : PsiElement? { + if (comment.owner == null) { + logger.warn(Severity.Warn, "Couldn't get owner of KDoc.") + return null } + return comment.owner!! } }) } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 396b8f72fa1..b95e910d371 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -916,7 +916,7 @@ javadocText( @locatable = @file | @classorinterface | @fielddecl | @field | @constructor | @method | @param | @exception | @boundedtype | @typebound | @array | @primitive | @import | @stmt | @expr | @whenbranch | @localvar | @javadoc | @javadocTag | @javadocText - | @xmllocatable; + | @xmllocatable | @ktcomment; @top = @element | @locatable | @folder; @@ -1019,3 +1019,31 @@ configLocations( ); @configLocatable = @config | @configName | @configValue; + +ktComments( + unique int id: @ktcomment, + int kind: int ref, + string text : string ref +) + +ktCommentSections( + unique int id: @ktcommentsection, + int comment: @ktcomment ref, + string content : string ref +) + +ktCommentSectionNames( + unique int id: @ktcommentsection ref, + string name : string ref +) + +ktCommentSectionSubjectNames( + unique int id: @ktcommentsection ref, + string subjectname : string ref +) + +#keyset[id, owner] +ktCommentOwner( + int id: @ktcomment ref, + int owner: @top ref +) \ No newline at end of file From 7ecb3650cbee62a486265a973d3facfa8fe43c69 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 16 Sep 2021 15:03:55 +0200 Subject: [PATCH 0514/1618] Cleanup getLabel --- .../src/main/kotlin/KotlinExtractorExtension.kt | 13 ++++++++----- .../src/main/kotlin/comments/CommentExtractor.kt | 10 +--------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 9770e8619be..77f6a0b86f0 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -256,6 +256,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } + + fun getLabel(element: IrElement) : String? { when (element) { is IrFile -> return "@\"${element.path};sourcefile\"" // todo: remove copy-pasted code @@ -266,13 +268,14 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi is IrProperty -> return getPropertyLabel(element) // Fresh entities: - is IrBody -> return "*" - is IrExpression -> return "*" + is IrBody -> return null + is IrExpression -> return null - // todo: - is IrField -> return null // todo add others: - else -> return null + else -> { + logger.warnElement(Severity.ErrorSevere, "Unhandled element type: ${element::class}", element) + return null + } } } diff --git a/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt index 68ab03a63f3..8867e73b813 100644 --- a/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt @@ -88,15 +88,7 @@ class CommentExtractor(private val fileExtractor: KotlinFileExtractor) { file.accept(IrVisitorLookup(ownerPsi, file), owners) for (ownerIr in owners) { - val label = fileExtractor.getLabel(ownerIr) - if (label == null) { - logger.warn(Severity.Warn, "Couldn't get label for element: $ownerIr") - continue - } - if (label == "*") { - logger.info("Skipping fresh entity label for element: $ownerIr") - continue - } + val label = fileExtractor.getLabel(ownerIr) ?: continue val existingLabel = tw.getExistingLabelFor(label) if (existingLabel == null) { logger.warn(Severity.Warn, "Couldn't get existing label for $label") From c64c950d9ac69a37663ff0fae9dec70684bcb62f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 20 Sep 2021 09:33:02 +0200 Subject: [PATCH 0515/1618] Remove leftover comment class --- .../src/main/kotlin/comments/Comment.kt | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 java/kotlin-extractor/src/main/kotlin/comments/Comment.kt diff --git a/java/kotlin-extractor/src/main/kotlin/comments/Comment.kt b/java/kotlin-extractor/src/main/kotlin/comments/Comment.kt deleted file mode 100644 index 7a6edc176b3..00000000000 --- a/java/kotlin-extractor/src/main/kotlin/comments/Comment.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.github.codeql.comments - -import utils.Location - - -data class Comment(val rawText: String, val startOffset: Int, val endOffset: Int, val type: CommentType){ - fun getLocation() : Location { - return Location(this.startOffset, this.endOffset) - } - - override fun toString(): String { - return "Comment: $rawText [$startOffset-$endOffset]" - } -} \ No newline at end of file From bb3ebd732580a224f1e9b6a70e313b892edefd3a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 20 Sep 2021 15:36:48 +0100 Subject: [PATCH 0516/1618] Kotlin: Fix warnElement counting We were counting calls of warnElement, whereas we want to count its callers. --- java/kotlin-extractor/src/main/kotlin/utils/Logger.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt index 627d3d5da29..f56b63c2ee4 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt @@ -42,13 +42,13 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { tw.writeTrap("// " + fullMsg.replace("\n", "\n//") + "\n") println(fullMsg) } - fun warn(severity: Severity, msg: String, locationString: String? = null, locationId: Label = tw.unknownLocation) { + fun warn(severity: Severity, msg: String, locationString: String? = null, locationId: Label = tw.unknownLocation, stackIndex: Int = 1) { val st = Exception().stackTrace val suffix = - if(st.size < 2) { + if(st.size < stackIndex + 1) { " Missing caller information.\n" } else { - val caller = st[1].toString() + val caller = st[stackIndex].toString() val count = logCounter.warningCounts.getOrDefault(caller, 0) + 1 logCounter.warningCounts[caller] = count when { @@ -79,9 +79,9 @@ class FileLogger(logCounter: LogCounter, override val tw: FileTrapWriter): Logge return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" } - fun warnElement(severity: Severity, msg: String, element: IrElement) { + fun warnElement(severity: Severity, msg: String, element: IrElement, stackIndex: Int = 2) { val locationString = tw.getLocationString(element) val locationId = tw.getLocation(element) - warn(severity, msg, locationString, locationId) + warn(severity, msg, locationString, locationId, stackIndex) } } From f222fc6d427862d48c1756d34c3fec9de4ea1ae1 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 20 Sep 2021 17:03:33 +0200 Subject: [PATCH 0517/1618] Extract null literal --- .../src/main/kotlin/KotlinExtractorExtension.kt | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 77f6a0b86f0..d7a763acf61 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -654,12 +654,16 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeExprs_stringliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) - } else -> { - if(v == null) { - logger.warnElement(Severity.ErrorSevere, "Unrecognised IrConst: null value", e) - } else { - logger.warnElement(Severity.ErrorSevere, "Unrecognised IrConst: " + v.javaClass, e) - } + } + null -> { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) // class;kotlin.Nothing + val locId = tw.getLocation(e) + tw.writeExprs_nullliteral(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + } + else -> { + logger.warnElement(Severity.ErrorSevere, "Unrecognised IrConst: " + v.javaClass, e) } } } From fb44f1326fbb7d0a4171fea83f43c301854ecfee Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 21 Sep 2021 10:10:48 +0200 Subject: [PATCH 0518/1618] Extract Nothing as null --- .../src/main/kotlin/KotlinExtractorExtension.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index d7a763acf61..54513ef6aa8 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -241,6 +241,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi s.isChar() -> return primitiveType("char") s.isString() -> return primitiveType("string") // TODO: Wrong + + s.isNothing() -> return primitiveType("") + s.classifier.owner is IrClass -> { val classifier: IrClassifierSymbol = s.classifier val cls: IrClass = classifier.owner as IrClass From f97c6af117bb043e00c057d9771a7c7f7e71663a Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 21 Sep 2021 10:11:43 +0200 Subject: [PATCH 0519/1618] Extract nullable types as non-nullable --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 54513ef6aa8..326aebdfdee 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -242,6 +242,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi s.isChar() -> return primitiveType("char") s.isString() -> return primitiveType("string") // TODO: Wrong + s.isNullable() -> return useType(s.makeNotNull()) // TODO: Wrong + s.isNothing() -> return primitiveType("") s.classifier.owner is IrClass -> { From 9d76acad5c765e5580a720d8cc8595c65d32911f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 21 Sep 2021 10:12:43 +0200 Subject: [PATCH 0520/1618] Add null extraction test --- .../test/kotlin/library-tests/exprs/exprs.expected | 12 +++++++++--- java/ql/test/kotlin/library-tests/exprs/exprs.kt | 3 +++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index a46e34b4e93..99705a2fc8d 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -35,9 +35,12 @@ | exprs.kt:37:13:37:15 | x | | exprs.kt:38:16:38:25 | string lit | | exprs.kt:39:25:39:37 | string " lit | -| exprs.kt:43:12:43:14 | 123 | -| exprs.kt:43:12:43:20 | ... + ... | -| exprs.kt:43:18:43:20 | 456 | +| exprs.kt:43:25:43:34 | string lit | +| exprs.kt:44:26:44:35 | string lit | +| exprs.kt:45:25:45:28 | null | +| exprs.kt:46:12:46:14 | 123 | +| exprs.kt:46:12:46:20 | ... + ... | +| exprs.kt:46:18:46:20 | 456 | | file://:0:0:0:0 | b1 | | file://:0:0:0:0 | b2 | | file://:0:0:0:0 | b6 | @@ -56,4 +59,7 @@ | file://:0:0:0:0 | i17 | | file://:0:0:0:0 | i18 | | file://:0:0:0:0 | str | +| file://:0:0:0:0 | str1 | +| file://:0:0:0:0 | str2 | +| file://:0:0:0:0 | str3 | | file://:0:0:0:0 | strWithQuote | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index d5509e6c78f..b5ec67c4d45 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -40,6 +40,9 @@ TODO val b6 = i1 is Int val b7 = i1 !is Int val b8 = b7 as Boolean + val str1: String = "string lit" + val str2: String? = "string lit" + val str3: String? = null return 123 + 456 } From 28afa19bf5d0839e0d2f92d476382c51320d1b9f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 21 Sep 2021 10:16:35 +0200 Subject: [PATCH 0521/1618] Change tests to select QL class name too --- .../kotlin/library-tests/exprs/exprs.expected | 130 +++++++++--------- .../test/kotlin/library-tests/exprs/exprs.ql | 3 +- .../library-tests/methods/exprs.expected | 14 +- .../kotlin/library-tests/methods/exprs.ql | 3 +- .../kotlin/library-tests/stmts/exprs.expected | 90 ++++++------ .../test/kotlin/library-tests/stmts/exprs.ql | 3 +- .../kotlin/library-tests/stmts/stmts.expected | 32 ++--- .../test/kotlin/library-tests/stmts/stmts.ql | 3 +- 8 files changed, 137 insertions(+), 141 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 99705a2fc8d..eb2d8453fda 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -1,65 +1,65 @@ -| exprs.kt:3:14:3:14 | 1 | -| exprs.kt:4:14:4:14 | x | -| exprs.kt:4:14:4:18 | ... + ... | -| exprs.kt:4:18:4:18 | y | -| exprs.kt:5:14:5:14 | x | -| exprs.kt:5:14:5:18 | ... - ... | -| exprs.kt:5:18:5:18 | y | -| exprs.kt:6:14:6:14 | x | -| exprs.kt:6:14:6:18 | ... / ... | -| exprs.kt:6:18:6:18 | y | -| exprs.kt:7:14:7:14 | x | -| exprs.kt:7:14:7:18 | ... % ... | -| exprs.kt:7:18:7:18 | y | -| exprs.kt:18:15:18:15 | x | -| exprs.kt:18:15:18:20 | ... == ... | -| exprs.kt:18:20:18:20 | y | -| exprs.kt:19:15:19:15 | x | -| exprs.kt:19:15:19:20 | ... != ... | -| exprs.kt:19:15:19:20 | ... != ... | -| exprs.kt:19:20:19:20 | y | -| exprs.kt:20:15:20:15 | x | -| exprs.kt:20:15:20:19 | ... < ... | -| exprs.kt:20:19:20:19 | y | -| exprs.kt:21:15:21:15 | x | -| exprs.kt:21:15:21:20 | ... <= ... | -| exprs.kt:21:20:21:20 | y | -| exprs.kt:22:15:22:15 | x | -| exprs.kt:22:15:22:19 | ... > ... | -| exprs.kt:22:19:22:19 | y | -| exprs.kt:23:15:23:15 | x | -| exprs.kt:23:15:23:20 | ... >= ... | -| exprs.kt:23:20:23:20 | y | -| exprs.kt:29:14:29:17 | true | -| exprs.kt:30:14:30:18 | false | -| exprs.kt:37:13:37:15 | x | -| exprs.kt:38:16:38:25 | string lit | -| exprs.kt:39:25:39:37 | string " lit | -| exprs.kt:43:25:43:34 | string lit | -| exprs.kt:44:26:44:35 | string lit | -| exprs.kt:45:25:45:28 | null | -| exprs.kt:46:12:46:14 | 123 | -| exprs.kt:46:12:46:20 | ... + ... | -| exprs.kt:46:18:46:20 | 456 | -| file://:0:0:0:0 | b1 | -| file://:0:0:0:0 | b2 | -| file://:0:0:0:0 | b6 | -| file://:0:0:0:0 | b7 | -| file://:0:0:0:0 | b8 | -| file://:0:0:0:0 | c | -| file://:0:0:0:0 | i1 | -| file://:0:0:0:0 | i2 | -| file://:0:0:0:0 | i3 | -| file://:0:0:0:0 | i4 | -| file://:0:0:0:0 | i5 | -| file://:0:0:0:0 | i13 | -| file://:0:0:0:0 | i14 | -| file://:0:0:0:0 | i15 | -| file://:0:0:0:0 | i16 | -| file://:0:0:0:0 | i17 | -| file://:0:0:0:0 | i18 | -| file://:0:0:0:0 | str | -| file://:0:0:0:0 | str1 | -| file://:0:0:0:0 | str2 | -| file://:0:0:0:0 | str3 | -| file://:0:0:0:0 | strWithQuote | +| exprs.kt:3:14:3:14 | 1 | IntegerLiteral | +| exprs.kt:4:14:4:14 | x | VarAccess | +| exprs.kt:4:14:4:18 | ... + ... | AddExpr | +| exprs.kt:4:18:4:18 | y | VarAccess | +| exprs.kt:5:14:5:14 | x | VarAccess | +| exprs.kt:5:14:5:18 | ... - ... | SubExpr | +| exprs.kt:5:18:5:18 | y | VarAccess | +| exprs.kt:6:14:6:14 | x | VarAccess | +| exprs.kt:6:14:6:18 | ... / ... | DivExpr | +| exprs.kt:6:18:6:18 | y | VarAccess | +| exprs.kt:7:14:7:14 | x | VarAccess | +| exprs.kt:7:14:7:18 | ... % ... | RemExpr | +| exprs.kt:7:18:7:18 | y | VarAccess | +| exprs.kt:18:15:18:15 | x | VarAccess | +| exprs.kt:18:15:18:20 | ... == ... | EQExpr | +| exprs.kt:18:20:18:20 | y | VarAccess | +| exprs.kt:19:15:19:15 | x | VarAccess | +| exprs.kt:19:15:19:20 | ... != ... | NEExpr | +| exprs.kt:19:15:19:20 | ... != ... | NEExpr | +| exprs.kt:19:20:19:20 | y | VarAccess | +| exprs.kt:20:15:20:15 | x | VarAccess | +| exprs.kt:20:15:20:19 | ... < ... | LTExpr | +| exprs.kt:20:19:20:19 | y | VarAccess | +| exprs.kt:21:15:21:15 | x | VarAccess | +| exprs.kt:21:15:21:20 | ... <= ... | LEExpr | +| exprs.kt:21:20:21:20 | y | VarAccess | +| exprs.kt:22:15:22:15 | x | VarAccess | +| exprs.kt:22:15:22:19 | ... > ... | GTExpr | +| exprs.kt:22:19:22:19 | y | VarAccess | +| exprs.kt:23:15:23:15 | x | VarAccess | +| exprs.kt:23:15:23:20 | ... >= ... | GEExpr | +| exprs.kt:23:20:23:20 | y | VarAccess | +| exprs.kt:29:14:29:17 | true | BooleanLiteral | +| exprs.kt:30:14:30:18 | false | BooleanLiteral | +| exprs.kt:37:13:37:15 | x | CharacterLiteral | +| exprs.kt:38:16:38:25 | string lit | StringLiteral | +| exprs.kt:39:25:39:37 | string " lit | StringLiteral | +| exprs.kt:43:25:43:34 | string lit | StringLiteral | +| exprs.kt:44:26:44:35 | string lit | StringLiteral | +| exprs.kt:45:25:45:28 | null | NullLiteral | +| exprs.kt:46:12:46:14 | 123 | IntegerLiteral | +| exprs.kt:46:12:46:20 | ... + ... | AddExpr | +| exprs.kt:46:18:46:20 | 456 | IntegerLiteral | +| file://:0:0:0:0 | b1 | LocalVariableDeclExpr | +| file://:0:0:0:0 | b2 | LocalVariableDeclExpr | +| file://:0:0:0:0 | b6 | LocalVariableDeclExpr | +| file://:0:0:0:0 | b7 | LocalVariableDeclExpr | +| file://:0:0:0:0 | b8 | LocalVariableDeclExpr | +| file://:0:0:0:0 | c | LocalVariableDeclExpr | +| file://:0:0:0:0 | i1 | LocalVariableDeclExpr | +| file://:0:0:0:0 | i2 | LocalVariableDeclExpr | +| file://:0:0:0:0 | i3 | LocalVariableDeclExpr | +| file://:0:0:0:0 | i4 | LocalVariableDeclExpr | +| file://:0:0:0:0 | i5 | LocalVariableDeclExpr | +| file://:0:0:0:0 | i13 | LocalVariableDeclExpr | +| file://:0:0:0:0 | i14 | LocalVariableDeclExpr | +| file://:0:0:0:0 | i15 | LocalVariableDeclExpr | +| file://:0:0:0:0 | i16 | LocalVariableDeclExpr | +| file://:0:0:0:0 | i17 | LocalVariableDeclExpr | +| file://:0:0:0:0 | i18 | LocalVariableDeclExpr | +| file://:0:0:0:0 | str | LocalVariableDeclExpr | +| file://:0:0:0:0 | str1 | LocalVariableDeclExpr | +| file://:0:0:0:0 | str2 | LocalVariableDeclExpr | +| file://:0:0:0:0 | str3 | LocalVariableDeclExpr | +| file://:0:0:0:0 | strWithQuote | LocalVariableDeclExpr | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.ql b/java/ql/test/kotlin/library-tests/exprs/exprs.ql index ca00a557663..6ded7c0026d 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.ql +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.ql @@ -1,5 +1,4 @@ import java from Expr e -select e - +select e, e.getPrimaryQlClasses() diff --git a/java/ql/test/kotlin/library-tests/methods/exprs.expected b/java/ql/test/kotlin/library-tests/methods/exprs.expected index 11c538aee4c..318f99088f3 100644 --- a/java/ql/test/kotlin/library-tests/methods/exprs.expected +++ b/java/ql/test/kotlin/library-tests/methods/exprs.expected @@ -1,7 +1,7 @@ -| methods.kt:10:9:10:25 | classMethod(...) | -| methods.kt:10:9:10:25 | this | -| methods.kt:10:21:10:21 | a | -| methods.kt:10:24:10:24 | 3 | -| methods.kt:11:9:11:28 | topLevelMethod(...) | -| methods.kt:11:24:11:24 | b | -| methods.kt:11:27:11:27 | 4 | +| methods.kt:10:9:10:25 | classMethod(...) | MethodAccess | +| methods.kt:10:9:10:25 | this | ThisAccess | +| methods.kt:10:21:10:21 | a | VarAccess | +| methods.kt:10:24:10:24 | 3 | IntegerLiteral | +| methods.kt:11:9:11:28 | topLevelMethod(...) | MethodAccess | +| methods.kt:11:24:11:24 | b | VarAccess | +| methods.kt:11:27:11:27 | 4 | IntegerLiteral | diff --git a/java/ql/test/kotlin/library-tests/methods/exprs.ql b/java/ql/test/kotlin/library-tests/methods/exprs.ql index ca00a557663..6ded7c0026d 100644 --- a/java/ql/test/kotlin/library-tests/methods/exprs.ql +++ b/java/ql/test/kotlin/library-tests/methods/exprs.ql @@ -1,5 +1,4 @@ import java from Expr e -select e - +select e, e.getPrimaryQlClasses() diff --git a/java/ql/test/kotlin/library-tests/stmts/exprs.expected b/java/ql/test/kotlin/library-tests/stmts/exprs.expected index 1e80375369b..59d147937ed 100644 --- a/java/ql/test/kotlin/library-tests/stmts/exprs.expected +++ b/java/ql/test/kotlin/library-tests/stmts/exprs.expected @@ -1,45 +1,45 @@ -| file://:0:0:0:0 | q2 | -| file://:0:0:0:0 | q3 | -| file://:0:0:0:0 | z | -| file://:0:0:0:0 | z | -| file://:0:0:0:0 | z | -| file://:0:0:0:0 | z | -| file://:0:0:0:0 | z | -| stmts.kt:3:5:6:5 | when ... | -| stmts.kt:3:8:3:8 | x | -| stmts.kt:3:8:3:12 | ... > ... | -| stmts.kt:3:12:3:12 | y | -| stmts.kt:4:15:4:15 | x | -| stmts.kt:4:15:4:19 | ... < ... | -| stmts.kt:4:19:4:19 | y | -| stmts.kt:5:12:6:5 | true | -| stmts.kt:7:11:7:11 | x | -| stmts.kt:7:11:7:15 | ... > ... | -| stmts.kt:7:15:7:15 | y | -| stmts.kt:8:16:8:16 | x | -| stmts.kt:9:11:9:11 | x | -| stmts.kt:9:11:9:15 | ... < ... | -| stmts.kt:9:15:9:15 | y | -| stmts.kt:10:16:10:16 | y | -| stmts.kt:13:16:13:16 | y | -| stmts.kt:14:13:14:13 | x | -| stmts.kt:14:13:14:17 | ... < ... | -| stmts.kt:14:17:14:17 | y | -| stmts.kt:15:13:15:13 | 3 | -| stmts.kt:17:26:17:58 | true | -| stmts.kt:17:26:17:58 | when ... | -| stmts.kt:17:29:17:32 | true | -| stmts.kt:17:37:17:37 | ...=... | -| stmts.kt:17:41:17:41 | 4 | -| stmts.kt:17:52:17:52 | ...=... | -| stmts.kt:17:56:17:56 | 5 | -| stmts.kt:18:26:18:56 | true | -| stmts.kt:18:26:18:56 | when ... | -| stmts.kt:18:29:18:32 | true | -| stmts.kt:18:37:18:37 | ...=... | -| stmts.kt:18:41:18:41 | 4 | -| stmts.kt:18:52:18:52 | ...=... | -| stmts.kt:18:56:18:56 | 5 | -| stmts.kt:19:12:19:12 | x | -| stmts.kt:19:12:19:16 | ... + ... | -| stmts.kt:19:16:19:16 | y | +| file://:0:0:0:0 | q2 | LocalVariableDeclExpr | +| file://:0:0:0:0 | q3 | LocalVariableDeclExpr | +| file://:0:0:0:0 | z | LocalVariableDeclExpr | +| file://:0:0:0:0 | z | VarAccess | +| file://:0:0:0:0 | z | VarAccess | +| file://:0:0:0:0 | z | VarAccess | +| file://:0:0:0:0 | z | VarAccess | +| stmts.kt:3:5:6:5 | when ... | WhenExpr | +| stmts.kt:3:8:3:8 | x | VarAccess | +| stmts.kt:3:8:3:12 | ... > ... | GTExpr | +| stmts.kt:3:12:3:12 | y | VarAccess | +| stmts.kt:4:15:4:15 | x | VarAccess | +| stmts.kt:4:15:4:19 | ... < ... | LTExpr | +| stmts.kt:4:19:4:19 | y | VarAccess | +| stmts.kt:5:12:6:5 | true | BooleanLiteral | +| stmts.kt:7:11:7:11 | x | VarAccess | +| stmts.kt:7:11:7:15 | ... > ... | GTExpr | +| stmts.kt:7:15:7:15 | y | VarAccess | +| stmts.kt:8:16:8:16 | x | VarAccess | +| stmts.kt:9:11:9:11 | x | VarAccess | +| stmts.kt:9:11:9:15 | ... < ... | LTExpr | +| stmts.kt:9:15:9:15 | y | VarAccess | +| stmts.kt:10:16:10:16 | y | VarAccess | +| stmts.kt:13:16:13:16 | y | VarAccess | +| stmts.kt:14:13:14:13 | x | VarAccess | +| stmts.kt:14:13:14:17 | ... < ... | LTExpr | +| stmts.kt:14:17:14:17 | y | VarAccess | +| stmts.kt:15:13:15:13 | 3 | IntegerLiteral | +| stmts.kt:17:26:17:58 | true | BooleanLiteral | +| stmts.kt:17:26:17:58 | when ... | WhenExpr | +| stmts.kt:17:29:17:32 | true | BooleanLiteral | +| stmts.kt:17:37:17:37 | ...=... | AssignExpr | +| stmts.kt:17:41:17:41 | 4 | IntegerLiteral | +| stmts.kt:17:52:17:52 | ...=... | AssignExpr | +| stmts.kt:17:56:17:56 | 5 | IntegerLiteral | +| stmts.kt:18:26:18:56 | true | BooleanLiteral | +| stmts.kt:18:26:18:56 | when ... | WhenExpr | +| stmts.kt:18:29:18:32 | true | BooleanLiteral | +| stmts.kt:18:37:18:37 | ...=... | AssignExpr | +| stmts.kt:18:41:18:41 | 4 | IntegerLiteral | +| stmts.kt:18:52:18:52 | ...=... | AssignExpr | +| stmts.kt:18:56:18:56 | 5 | IntegerLiteral | +| stmts.kt:19:12:19:12 | x | VarAccess | +| stmts.kt:19:12:19:16 | ... + ... | AddExpr | +| stmts.kt:19:16:19:16 | y | VarAccess | diff --git a/java/ql/test/kotlin/library-tests/stmts/exprs.ql b/java/ql/test/kotlin/library-tests/stmts/exprs.ql index ca00a557663..6ded7c0026d 100644 --- a/java/ql/test/kotlin/library-tests/stmts/exprs.ql +++ b/java/ql/test/kotlin/library-tests/stmts/exprs.ql @@ -1,5 +1,4 @@ import java from Expr e -select e - +select e, e.getPrimaryQlClasses() diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index a258bdd2c95..12238b95560 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -1,16 +1,16 @@ -| stmts.kt:2:41:20:1 | { ... } | -| stmts.kt:3:15:4:5 | { ... } | -| stmts.kt:4:22:5:5 | { ... } | -| stmts.kt:5:12:6:5 | { ... } | -| stmts.kt:7:5:8:16 | while (...) | -| stmts.kt:8:9:8:16 | return ... | -| stmts.kt:9:5:11:5 | while (...) | -| stmts.kt:9:18:11:5 | { ... } | -| stmts.kt:10:9:10:16 | return ... | -| stmts.kt:12:5:14:18 | do ... while (...) | -| stmts.kt:12:5:14:18 | { ... } | -| stmts.kt:12:8:14:5 | { ... } | -| stmts.kt:13:9:13:16 | return ... | -| stmts.kt:17:35:17:43 | { ... } | -| stmts.kt:17:50:17:58 | { ... } | -| stmts.kt:19:5:19:16 | return ... | +| stmts.kt:2:41:20:1 | { ... } | BlockStmt | +| stmts.kt:3:15:4:5 | { ... } | BlockStmt | +| stmts.kt:4:22:5:5 | { ... } | BlockStmt | +| stmts.kt:5:12:6:5 | { ... } | BlockStmt | +| stmts.kt:7:5:8:16 | while (...) | WhileStmt | +| stmts.kt:8:9:8:16 | return ... | ReturnStmt | +| stmts.kt:9:5:11:5 | while (...) | WhileStmt | +| stmts.kt:9:18:11:5 | { ... } | BlockStmt | +| stmts.kt:10:9:10:16 | return ... | ReturnStmt | +| stmts.kt:12:5:14:18 | do ... while (...) | DoStmt | +| stmts.kt:12:5:14:18 | { ... } | BlockStmt | +| stmts.kt:12:8:14:5 | { ... } | BlockStmt | +| stmts.kt:13:9:13:16 | return ... | ReturnStmt | +| stmts.kt:17:35:17:43 | { ... } | BlockStmt | +| stmts.kt:17:50:17:58 | { ... } | BlockStmt | +| stmts.kt:19:5:19:16 | return ... | ReturnStmt | diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.ql b/java/ql/test/kotlin/library-tests/stmts/stmts.ql index 56dd54b1bbf..1c06d34e391 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.ql +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.ql @@ -1,5 +1,4 @@ import java from Stmt s -select s - +select s, s.getPrimaryQlClasses() From f04eb6b1fa43f57604209bc8562e72b6b11d3b08 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 21 Sep 2021 10:21:37 +0200 Subject: [PATCH 0522/1618] Add Nothing type test --- java/ql/test/kotlin/library-tests/types/types.expected | 3 ++- java/ql/test/kotlin/library-tests/types/types.kt | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index 91e3134db54..97973c3a68d 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -1,3 +1,4 @@ +| file://:0:0:0:0 | | NullType | | file://:0:0:0:0 | Any | Class | | file://:0:0:0:0 | boolean | PrimitiveType | | file://:0:0:0:0 | byte | PrimitiveType | @@ -8,4 +9,4 @@ | file://:0:0:0:0 | long | PrimitiveType | | file://:0:0:0:0 | short | PrimitiveType | | file://:0:0:0:0 | string | ??? | -| types.kt:2:1:33:1 | Foo | Class | +| types.kt:2:1:37:1 | Foo | Class | diff --git a/java/ql/test/kotlin/library-tests/types/types.kt b/java/ql/test/kotlin/library-tests/types/types.kt index 8364629bd07..ef429e2cb1c 100644 --- a/java/ql/test/kotlin/library-tests/types/types.kt +++ b/java/ql/test/kotlin/library-tests/types/types.kt @@ -21,6 +21,10 @@ TODO val propChar: Char = 'c' val propString: String = "str" + val propNullableString: String? = "str" + + val propNullableNothing: Nothing? = null + /* TODO val propArray: Array = arrayOf(1, 2, 3) From 3e60841774ca040527c16f37ac6fa8cd16ec78c1 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 20 Sep 2021 11:18:34 +0200 Subject: [PATCH 0523/1618] Extract ::class expressions --- .../src/main/kotlin/KotlinExtractorExtension.kt | 11 ++++++++++- java/ql/lib/config/semmlecode.dbscheme | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 326aebdfdee..792ae3211b7 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -761,7 +761,16 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeWhen_branch_else(bId) } } - } else -> { + } + is IrGetClass -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + val typeId = useType(e.type) + tw.writeExprs_getclassexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + extractExpression(e.argument, callable, id, 0) + } + else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) } } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index b95e910d371..4e8eda4b4df 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -654,6 +654,7 @@ case @expr.kind of | 73 = @switchexpr | 74 = @errorexpr | 75 = @whenexpr +| 76 = @getclassexpr ; /** Holds if this `when` expression was written as an `if` expression. */ @@ -1046,4 +1047,4 @@ ktCommentSectionSubjectNames( ktCommentOwner( int id: @ktcomment ref, int owner: @top ref -) \ No newline at end of file +) From 1cc1daa88b5b682fc8f6756b77dab5c68a83edcd Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 21 Sep 2021 10:57:20 +0200 Subject: [PATCH 0524/1618] Extract externally declared classes --- .../src/main/kotlin/KotlinExtractorExtension.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 792ae3211b7..a245c674b89 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -308,7 +308,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun useClass(c: IrClass): Label { - if(c.name.asString() == "Any" || c.name.asString() == "Unit") { + // todo: fix this + if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB) { if(tw.getExistingLabelFor(getClassLabel(c)) == null) { return extractClass(c) } From e8a079b56a3f24843f2542c762eccd14072962ca Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 21 Sep 2021 11:19:19 +0200 Subject: [PATCH 0525/1618] Extract all external class declarations (without members) --- .../src/main/kotlin/KotlinExtractorExtension.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index a245c674b89..9c751f67486 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -309,17 +309,19 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun useClass(c: IrClass): Label { // todo: fix this - if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB) { + if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || + c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { if(tw.getExistingLabelFor(getClassLabel(c)) == null) { - return extractClass(c) + return extractExternalClass(c) } } return addClassLabel(c) } - fun extractClass(c: IrClass): Label { + fun extractExternalClass(c: IrClass): Label { + // todo: fix this. + // temporarily only extract the class or interface without any members. val id = addClassLabel(c) - val locId = tw.getLocation(c) val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() val pkgId = extractPackage(pkg) @@ -332,6 +334,12 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val classId = id as Label tw.writeClasses(classId, cls, pkgId, classId) } + return id + } + + fun extractClass(c: IrClass): Label { + val id = extractExternalClass(c) + val locId = tw.getLocation(c) tw.writeHasLocation(id, locId) for(t in c.superTypes) { when(t) { From 9889f49560cc2e60b54176abf47db7a7fe5da757 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 21 Sep 2021 11:25:22 +0200 Subject: [PATCH 0526/1618] Add QL for ::class expression, and add test --- java/ql/lib/semmle/code/java/Expr.qll | 14 +++++++++++--- .../test/kotlin/library-tests/exprs/exprs.expected | 3 +++ java/ql/test/kotlin/library-tests/exprs/exprs.kt | 3 +++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index d4fa3323b3d..a4716e62d7d 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2143,9 +2143,7 @@ class WhenExpr extends Expr, @whenexpr { override string getAPrimaryQlClass() { result = "WhenExpr" } /** Gets the `i`th branch. */ - WhenBranch getBranch(int i) { - when_branch(result, this, i) - } + WhenBranch getBranch(int i) { when_branch(result, this, i) } } /** A Kotlin `when` branch. */ @@ -2163,3 +2161,13 @@ class WhenBranch extends Top, @whenbranch { override string getAPrimaryQlClass() { result = "WhenBranch" } } + +/** A Kotlin `::class` expression. */ +class ClassExpr extends Expr, @getclassexpr { + /** Gets the expression whose class is being returned. */ + Expr getExpr() { result.isNthChildOf(this, 0) } + + override string toString() { result = "::class" } + + override string getAPrimaryQlClass() { result = "ClassExpr" } +} diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index eb2d8453fda..4fd7528f37a 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -41,12 +41,15 @@ | exprs.kt:46:12:46:14 | 123 | IntegerLiteral | | exprs.kt:46:12:46:20 | ... + ... | AddExpr | | exprs.kt:46:18:46:20 | 456 | IntegerLiteral | +| exprs.kt:50:13:50:16 | true | BooleanLiteral | +| exprs.kt:50:13:50:23 | ::class | ClassExpr | | file://:0:0:0:0 | b1 | LocalVariableDeclExpr | | file://:0:0:0:0 | b2 | LocalVariableDeclExpr | | file://:0:0:0:0 | b6 | LocalVariableDeclExpr | | file://:0:0:0:0 | b7 | LocalVariableDeclExpr | | file://:0:0:0:0 | b8 | LocalVariableDeclExpr | | file://:0:0:0:0 | c | LocalVariableDeclExpr | +| file://:0:0:0:0 | d | LocalVariableDeclExpr | | file://:0:0:0:0 | i1 | LocalVariableDeclExpr | | file://:0:0:0:0 | i2 | LocalVariableDeclExpr | | file://:0:0:0:0 | i3 | LocalVariableDeclExpr | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index b5ec67c4d45..d41729bbe04 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -46,3 +46,6 @@ TODO return 123 + 456 } +fun getClass() { + val d = true::class +} \ No newline at end of file From 63c22ca5df8487055f16a001d15efcd5bc5a3577 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 22 Sep 2021 09:15:40 +0200 Subject: [PATCH 0527/1618] Fix failing tests after changing external type declaration extraction --- .../test/kotlin/library-tests/classes/superTypes.expected | 1 - java/ql/test/kotlin/library-tests/methods/methods.expected | 7 ------- .../test/kotlin/library-tests/variables/variables.expected | 2 -- 3 files changed, 10 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.expected b/java/ql/test/kotlin/library-tests/classes/superTypes.expected index 1b22f9329db..f91e96a07fa 100644 --- a/java/ql/test/kotlin/library-tests/classes/superTypes.expected +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.expected @@ -6,4 +6,3 @@ | classes.kt:28:1:29:1 | ClassSix | classes.kt:12:1:15:1 | ClassFour | | classes.kt:28:1:29:1 | ClassSix | classes.kt:20:1:22:1 | IF1 | | classes.kt:28:1:29:1 | ClassSix | classes.kt:24:1:26:1 | IF2 | -| file://:0:0:0:0 | Unit | file://:0:0:0:0 | Any | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index 2f311e042a9..708a12d3421 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -1,10 +1,3 @@ -| file://:0:0:0:0 | | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | | methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | equals | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index b2a655e8e2a..23135cce8d7 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -1,5 +1,3 @@ -| file://:0:0:0:0 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:2:1:8:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | file://:0:0:0:0 | | | variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | file://:0:0:0:0 | | From ae7aa30bda34f9c7436ce2ed81e6e6b6b61756cc Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 20 Sep 2021 11:02:37 +0200 Subject: [PATCH 0528/1618] Extract break/continue/throw --- .../main/kotlin/KotlinExtractorExtension.kt | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 9c751f67486..5cb2a95a2ca 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -716,13 +716,33 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi extractExpression(e.value, callable, id, 1) } + is IrThrow -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + tw.writeStmts_throwstmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + extractExpression(e.value, callable, id, 0) + } + is IrBreak -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + tw.writeStmts_breakstmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + } + is IrContinue -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + tw.writeStmts_continuestmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + } is IrReturn -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) tw.writeStmts_returnstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) extractExpression(e.value, callable, id, 0) - } is IrContainerExpression -> { + } + is IrContainerExpression -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) tw.writeStmts_block(id, parent, idx, callable) @@ -730,7 +750,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi e.statements.forEachIndexed { i, s -> extractStatement(s, callable, id, i) } - } is IrWhileLoop -> { + } + is IrWhileLoop -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) tw.writeStmts_whilestmt(id, parent, idx, callable) @@ -740,7 +761,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi if(body != null) { extractExpression(body, callable, id, 1) } - } is IrDoWhileLoop -> { + } + is IrDoWhileLoop -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) tw.writeStmts_dostmt(id, parent, idx, callable) @@ -750,7 +772,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi if(body != null) { extractExpression(body, callable, id, 1) } - } is IrWhen -> { + } + is IrWhen -> { val id = tw.getFreshIdLabel() val typeId = useType(e.type) val locId = tw.getLocation(e) From aa190f9d659891f6fa5ad3a050d0bed56f862ade Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 21 Sep 2021 15:46:45 +0200 Subject: [PATCH 0529/1618] Store break/continue targets --- .../main/kotlin/KotlinExtractorExtension.kt | 34 ++++++++++++++++--- java/ql/lib/config/semmlecode.dbscheme | 11 ++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 5cb2a95a2ca..ea82a4001fb 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -634,6 +634,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } + private val loopIdMap: MutableMap> = mutableMapOf() + fun extractExpression(e: IrExpression, callable: Label, parent: Label, idx: Int) { when(e) { is IrCall -> extractCall(e, callable, parent, idx) @@ -725,15 +727,13 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } is IrBreak -> { val id = tw.getFreshIdLabel() - val locId = tw.getLocation(e) tw.writeStmts_breakstmt(id, parent, idx, callable) - tw.writeHasLocation(id, locId) + extractBreakContinue(e, id) } is IrContinue -> { val id = tw.getFreshIdLabel() - val locId = tw.getLocation(e) tw.writeStmts_continuestmt(id, parent, idx, callable) - tw.writeHasLocation(id, locId) + extractBreakContinue(e, id) } is IrReturn -> { val id = tw.getFreshIdLabel() @@ -753,6 +753,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } is IrWhileLoop -> { val id = tw.getFreshIdLabel() + loopIdMap[e] = id val locId = tw.getLocation(e) tw.writeStmts_whilestmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) @@ -761,9 +762,11 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi if(body != null) { extractExpression(body, callable, id, 1) } + loopIdMap.remove(e) } is IrDoWhileLoop -> { val id = tw.getFreshIdLabel() + loopIdMap[e] = id val locId = tw.getLocation(e) tw.writeStmts_dostmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) @@ -772,6 +775,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi if(body != null) { extractExpression(body, callable, id, 1) } + loopIdMap.remove(e) } is IrWhen -> { val id = tw.getFreshIdLabel() @@ -807,5 +811,27 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } } + + private fun extractBreakContinue( + e: IrBreakContinue, + id: Label + ) { + val locId = tw.getLocation(e) + @Suppress("UNCHECKED_CAST") + tw.writeHasLocation(id as Label, locId) + val label = e.label + if (label != null) { + @Suppress("UNCHECKED_CAST") + tw.writeNamestrings(label, "", id as Label) + } + + val loopId = loopIdMap[e.loop] + if (loopId == null) { + logger.warnElement(Severity.ErrorSevere, "Missing break/continue target", e) + return + } + + tw.writeKtBreakContinueTarget(id, loopId) + } } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 4e8eda4b4df..f0b17a862f6 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -1048,3 +1048,14 @@ ktCommentOwner( int id: @ktcomment ref, int owner: @top ref ) + +@breakcontinuestmt = @breakstmt + | @continuestmt; + +@ktloopstmt = @whilestmt + | @dostmt; + +ktBreakContinueTarget( + unique int id: @breakcontinuestmt ref, + int target: @ktloopstmt ref +) From 32a61c16cb093927daa343a1ca8ce1ac2be3342a Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 21 Sep 2021 16:06:23 +0200 Subject: [PATCH 0530/1618] Add break/continue QL and tests --- java/ql/lib/semmle/code/java/Statement.qll | 24 +++++++++++++++++++ .../kotlin/library-tests/stmts/exprs.expected | 13 ++++++++++ .../kotlin/library-tests/stmts/loops.expected | 7 ++++++ .../test/kotlin/library-tests/stmts/loops.ql | 9 +++++++ .../kotlin/library-tests/stmts/stmts.expected | 9 +++++++ .../test/kotlin/library-tests/stmts/stmts.kt | 9 +++++++ 6 files changed, 71 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/stmts/loops.expected create mode 100644 java/ql/test/kotlin/library-tests/stmts/loops.ql diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index d068aa718c7..ae28292e684 100755 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -887,3 +887,27 @@ class SuperConstructorInvocationStmt extends Stmt, ConstructorCall, @superconstr override string getAPrimaryQlClass() { result = "SuperConstructorInvocationStmt" } } + +/** A Kotlin loop statement. */ +class KtLoopStmt extends Stmt, @ktloopstmt { + KtLoopStmt() { + this instanceof WhileStmt or + this instanceof DoStmt + } +} + +/** A Kotlin `break` or `continue` statement. */ +abstract class KtBreakContinueStmt extends Stmt, @breakcontinuestmt { + KtLoopStmt loop; + + KtBreakContinueStmt() { ktBreakContinueTarget(this, loop) } + + /** Gets the target loop statement of this `break`. */ + KtLoopStmt getLoopStmt() { result = loop } +} + +/** A Kotlin `break` statement. */ +class KtBreakStmt extends BreakStmt, KtBreakContinueStmt { } + +/** A Kotlin `continue` statement. */ +class KtContinueStmt extends ContinueStmt, KtBreakContinueStmt { } diff --git a/java/ql/test/kotlin/library-tests/stmts/exprs.expected b/java/ql/test/kotlin/library-tests/stmts/exprs.expected index 59d147937ed..3b5f104f139 100644 --- a/java/ql/test/kotlin/library-tests/stmts/exprs.expected +++ b/java/ql/test/kotlin/library-tests/stmts/exprs.expected @@ -43,3 +43,16 @@ | stmts.kt:19:12:19:12 | x | VarAccess | | stmts.kt:19:12:19:16 | ... + ... | AddExpr | | stmts.kt:19:16:19:16 | y | VarAccess | +| stmts.kt:23:18:23:18 | x | VarAccess | +| stmts.kt:23:18:23:24 | ... < ... | LTExpr | +| stmts.kt:23:22:23:24 | 100 | IntegerLiteral | +| stmts.kt:25:13:25:33 | when ... | WhenExpr | +| stmts.kt:25:17:25:17 | x | VarAccess | +| stmts.kt:25:17:25:21 | ... > ... | GTExpr | +| stmts.kt:25:21:25:21 | y | VarAccess | +| stmts.kt:26:18:26:18 | y | VarAccess | +| stmts.kt:26:18:26:24 | ... > ... | GTExpr | +| stmts.kt:26:22:26:24 | 100 | IntegerLiteral | +| stmts.kt:28:11:28:11 | x | VarAccess | +| stmts.kt:28:11:28:15 | ... > ... | GTExpr | +| stmts.kt:28:15:28:15 | y | VarAccess | diff --git a/java/ql/test/kotlin/library-tests/stmts/loops.expected b/java/ql/test/kotlin/library-tests/stmts/loops.expected new file mode 100644 index 00000000000..57c59b35d3a --- /dev/null +++ b/java/ql/test/kotlin/library-tests/stmts/loops.expected @@ -0,0 +1,7 @@ +breakLabel +| stmts.kt:25:24:25:33 | break | loop | +continueLabel +breakTarget +| stmts.kt:25:24:25:33 | break | stmts.kt:23:11:27:5 | while (...) | +continueTarget +| stmts.kt:29:9:29:16 | continue | stmts.kt:28:5:29:16 | while (...) | diff --git a/java/ql/test/kotlin/library-tests/stmts/loops.ql b/java/ql/test/kotlin/library-tests/stmts/loops.ql new file mode 100644 index 00000000000..87b88738125 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/stmts/loops.ql @@ -0,0 +1,9 @@ +import java + +query predicate breakLabel(BreakStmt s, string label) { s.getLabel() = label } + +query predicate continueLabel(ContinueStmt s, string label) { s.getLabel() = label } + +query predicate breakTarget(KtBreakStmt s, KtLoopStmt l) { s.getLoopStmt() = l } + +query predicate continueTarget(KtContinueStmt s, KtLoopStmt l) { s.getLoopStmt() = l } diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index 12238b95560..19965c0759c 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -14,3 +14,12 @@ | stmts.kt:17:35:17:43 | { ... } | BlockStmt | | stmts.kt:17:50:17:58 | { ... } | BlockStmt | | stmts.kt:19:5:19:16 | return ... | ReturnStmt | +| stmts.kt:22:27:30:1 | { ... } | BlockStmt | +| stmts.kt:23:11:27:5 | while (...) | WhileStmt | +| stmts.kt:23:27:27:5 | { ... } | BlockStmt | +| stmts.kt:24:9:26:25 | do ... while (...) | DoStmt | +| stmts.kt:24:9:26:25 | { ... } | BlockStmt | +| stmts.kt:24:13:26:9 | { ... } | BlockStmt | +| stmts.kt:25:24:25:33 | break | BreakStmt | +| stmts.kt:28:5:29:16 | while (...) | WhileStmt | +| stmts.kt:29:9:29:16 | continue | ContinueStmt | diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.kt b/java/ql/test/kotlin/library-tests/stmts/stmts.kt index 8d429dd2963..5ce050f4871 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.kt +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.kt @@ -19,3 +19,12 @@ fun topLevelMethod(x: Int, y: Int): Int { return x + y } +fun loops(x: Int, y: Int) { + loop@ while (x < 100) { + do { + if (x > y) break@loop + } while (y > 100) + } + while(x > y) + continue +} From ebee830a01881cf93f59655a80e892be50569ead Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 22 Sep 2021 16:21:28 +0200 Subject: [PATCH 0531/1618] Handle type parameters which are nullable without question mark --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index ea82a4001fb..978d75f79dc 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -242,7 +242,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi s.isChar() -> return primitiveType("char") s.isString() -> return primitiveType("string") // TODO: Wrong - s.isNullable() -> return useType(s.makeNotNull()) // TODO: Wrong + s.isNullable() && s.hasQuestionMark -> return useType(s.makeNotNull()) // TODO: Wrong s.isNothing() -> return primitiveType("") From 575e5134bbb84eb6066b22d0f63d04f65aa4129f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 16 Sep 2021 15:37:24 +0200 Subject: [PATCH 0532/1618] Extract 'this'-like value parameters --- .../src/main/kotlin/KotlinExtractorExtension.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 978d75f79dc..91f097d994c 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -360,6 +360,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } c.declarations.map { extractDeclaration(it, Optional.of(id)) } + if (c.thisReceiver != null) { + logger.warnElement(Severity.ErrorSevere, "'thisReceiver' is not extracted", c) + } return id } @@ -446,6 +449,14 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi f.valueParameters.forEachIndexed { i, vp -> extractValueParameter(vp, id, i) } + + if (f.dispatchReceiverParameter != null) { + extractValueParameter(f.dispatchReceiverParameter!!, id, -1) + } + + if (f.extensionReceiverParameter != null) { + extractValueParameter(f.extensionReceiverParameter!!, id, -1) + } } private fun getPropertyLabel(p: IrProperty) : String { From 7d8b6bac067e8f36e5d5710005e3d0a890767c63 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 23 Sep 2021 09:24:03 +0200 Subject: [PATCH 0533/1618] Fix this and qualified this parameter extraction --- .../main/kotlin/KotlinExtractorExtension.kt | 31 ++++++++++++++----- .../library-tests/methods/methods.expected | 6 ++++ .../kotlin/library-tests/methods/methods3.kt | 7 +++++ .../library-tests/methods/parameters.expected | 30 ++++++++++++++++++ .../library-tests/methods/parameters.ql | 5 +++ .../variables/variableAccesses.expected | 11 +++++++ .../variables/variableAccesses.ql | 7 +++++ .../variables/variables.expected | 21 +++++++++++++ .../library-tests/variables/variables.kt | 23 ++++++++++++++ 9 files changed, 133 insertions(+), 8 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/methods/methods3.kt create mode 100644 java/ql/test/kotlin/library-tests/methods/parameters.expected create mode 100644 java/ql/test/kotlin/library-tests/methods/parameters.ql create mode 100644 java/ql/test/kotlin/library-tests/variables/variableAccesses.expected create mode 100644 java/ql/test/kotlin/library-tests/variables/variableAccesses.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 91f097d994c..f61f81e1e5e 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -360,9 +360,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } c.declarations.map { extractDeclaration(it, Optional.of(id)) } - if (c.thisReceiver != null) { - logger.warnElement(Severity.ErrorSevere, "'thisReceiver' is not extracted", c) - } return id } @@ -415,11 +412,22 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi private fun getValueParameterLabel(vp: IrValueParameter) : String { @Suppress("UNCHECKED_CAST") val parentId: Label = useDeclarationParent(vp.parent) as Label - val idx = vp.index + var idx = vp.index + if (isQualifiedThis(vp)) { + idx = -2 + } val label = "@\"params;{$parentId};$idx\"" return label } + private fun isQualifiedThis(vp: IrValueParameter) : Boolean { + val parent = vp.parent + return vp.index == -1 && + parent is IrFunction && + parent.dispatchReceiverParameter == vp && + parent.extensionReceiverParameter != null + } + fun useValueParameter(vp: IrValueParameter): Label { val label = getValueParameterLabel(vp) val id = tw.getLabelFor(label) @@ -450,12 +458,15 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi extractValueParameter(vp, id, i) } - if (f.dispatchReceiverParameter != null) { - extractValueParameter(f.dispatchReceiverParameter!!, id, -1) + var index = -1 + val extReceiver = f.extensionReceiverParameter + if (extReceiver != null) { + extractValueParameter(extReceiver, id, index--) } - if (f.extensionReceiverParameter != null) { - extractValueParameter(f.extensionReceiverParameter!!, id, -1) + val dispReceiver = f.dispatchReceiverParameter + if (dispReceiver != null) { + extractValueParameter(dispReceiver, id, index) } } @@ -701,6 +712,10 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val typeId = useType(e.type) val locId = tw.getLocation(e) tw.writeExprs_thisaccess(id, typeId, parent, idx) + if (isQualifiedThis(owner)) { + // todo: add type access as child of 'id' at index 0 + logger.warnElement(Severity.ErrorSevere, "TODO: Qualified this access found.", e) + } tw.writeHasLocation(id, locId) } else { val id = tw.getFreshIdLabel() diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index 708a12d3421..f38e78f99fd 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -4,6 +4,12 @@ | methods2.kt:7:1:10:1 | hashCode | | methods2.kt:7:1:10:1 | toString | | methods2.kt:8:5:9:5 | fooBarClassMethod | +| methods3.kt:3:1:3:39 | fooBarTopLevelMethod | +| methods3.kt:5:1:7:1 | | +| methods3.kt:5:1:7:1 | equals | +| methods3.kt:5:1:7:1 | hashCode | +| methods3.kt:5:1:7:1 | toString | +| methods3.kt:6:5:6:43 | fooBarTopLevelMethod | | methods.kt:2:1:3:1 | topLevelMethod | | methods.kt:5:1:13:1 | | | methods.kt:5:1:13:1 | equals | diff --git a/java/ql/test/kotlin/library-tests/methods/methods3.kt b/java/ql/test/kotlin/library-tests/methods/methods3.kt new file mode 100644 index 00000000000..fcb681e6b48 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/methods/methods3.kt @@ -0,0 +1,7 @@ +package foo.bar + +fun Int.fooBarTopLevelMethod(x: Int) {} + +class Class3 { + fun Int.fooBarTopLevelMethod(x: Int) {} +} diff --git a/java/ql/test/kotlin/library-tests/methods/parameters.expected b/java/ql/test/kotlin/library-tests/methods/parameters.expected new file mode 100644 index 00000000000..c79362156e8 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/methods/parameters.expected @@ -0,0 +1,30 @@ +| methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:26:4:31 | x | 0 | +| methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:34:4:39 | y | 1 | +| methods2.kt:7:1:10:1 | equals | methods2.kt:7:1:10:1 | | -1 | +| methods2.kt:7:1:10:1 | equals | methods2.kt:7:1:10:1 | other | 0 | +| methods2.kt:7:1:10:1 | hashCode | methods2.kt:7:1:10:1 | | -1 | +| methods2.kt:7:1:10:1 | toString | methods2.kt:7:1:10:1 | | -1 | +| methods2.kt:8:5:9:5 | fooBarClassMethod | methods2.kt:8:5:9:5 | | -1 | +| methods2.kt:8:5:9:5 | fooBarClassMethod | methods2.kt:8:27:8:32 | x | 0 | +| methods2.kt:8:5:9:5 | fooBarClassMethod | methods2.kt:8:35:8:40 | y | 1 | +| methods3.kt:3:1:3:39 | fooBarTopLevelMethod | methods3.kt:3:5:3:7 | | -1 | +| methods3.kt:3:1:3:39 | fooBarTopLevelMethod | methods3.kt:3:30:3:35 | x | 0 | +| methods3.kt:5:1:7:1 | equals | methods3.kt:5:1:7:1 | | -1 | +| methods3.kt:5:1:7:1 | equals | methods3.kt:5:1:7:1 | other | 0 | +| methods3.kt:5:1:7:1 | hashCode | methods3.kt:5:1:7:1 | | -1 | +| methods3.kt:5:1:7:1 | toString | methods3.kt:5:1:7:1 | | -1 | +| methods3.kt:6:5:6:43 | fooBarTopLevelMethod | methods3.kt:6:5:6:43 | | -2 | +| methods3.kt:6:5:6:43 | fooBarTopLevelMethod | methods3.kt:6:9:6:11 | | -1 | +| methods3.kt:6:5:6:43 | fooBarTopLevelMethod | methods3.kt:6:34:6:39 | x | 0 | +| methods.kt:2:1:3:1 | topLevelMethod | methods.kt:2:20:2:25 | x | 0 | +| methods.kt:2:1:3:1 | topLevelMethod | methods.kt:2:28:2:33 | y | 1 | +| methods.kt:5:1:13:1 | equals | methods.kt:5:1:13:1 | | -1 | +| methods.kt:5:1:13:1 | equals | methods.kt:5:1:13:1 | other | 0 | +| methods.kt:5:1:13:1 | hashCode | methods.kt:5:1:13:1 | | -1 | +| methods.kt:5:1:13:1 | toString | methods.kt:5:1:13:1 | | -1 | +| methods.kt:6:5:7:5 | classMethod | methods.kt:6:5:7:5 | | -1 | +| methods.kt:6:5:7:5 | classMethod | methods.kt:6:21:6:26 | x | 0 | +| methods.kt:6:5:7:5 | classMethod | methods.kt:6:29:6:34 | y | 1 | +| methods.kt:9:5:12:5 | anotherClassMethod | methods.kt:9:5:12:5 | | -1 | +| methods.kt:9:5:12:5 | anotherClassMethod | methods.kt:9:28:9:33 | a | 0 | +| methods.kt:9:5:12:5 | anotherClassMethod | methods.kt:9:36:9:41 | b | 1 | diff --git a/java/ql/test/kotlin/library-tests/methods/parameters.ql b/java/ql/test/kotlin/library-tests/methods/parameters.ql new file mode 100644 index 00000000000..63c2a1ca0b7 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/methods/parameters.ql @@ -0,0 +1,5 @@ +import java + +from Method m, Parameter p, int i +where m.getParameter(i) = p +select m, p, i diff --git a/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected b/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected new file mode 100644 index 00000000000..1c243abceb6 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected @@ -0,0 +1,11 @@ +varAcc +instAcc +| variables.kt:21:11:21:15 | this | +| variables.kt:24:9:24:8 | this | +| variables.kt:25:9:25:8 | this | +| variables.kt:26:9:26:12 | this | +| variables.kt:27:9:27:12 | this | +| variables.kt:28:9:28:12 | this | +| variables.kt:31:9:31:15 | this | +| variables.kt:32:9:32:15 | this | +instAccQualifier diff --git a/java/ql/test/kotlin/library-tests/variables/variableAccesses.ql b/java/ql/test/kotlin/library-tests/variables/variableAccesses.ql new file mode 100644 index 00000000000..33d9068f178 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/variables/variableAccesses.ql @@ -0,0 +1,7 @@ +import java + +query predicate varAcc(VarAccess va) { any() } + +query predicate instAcc(InstanceAccess ia) { any() } + +query predicate instAccQualifier(InstanceAccess ia, Expr e) { ia.getQualifier() = e } diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index 23135cce8d7..28c001c9c94 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -1,5 +1,26 @@ +| variables.kt:2:1:8:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:2:1:8:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:2:1:8:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:2:1:8:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| variables.kt:5:5:7:5 | | variables.kt:2:1:8:1 | Foo | file://:0:0:0:0 | | | variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | file://:0:0:0:0 | | | variables.kt:6:9:6:25 | int local | file://:0:0:0:0 | int | variables.kt:6:21:6:25 | ... + ... | | variables.kt:10:1:10:21 | topLevel | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| variables.kt:12:1:15:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:12:1:15:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:12:1:15:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:12:1:15:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:13:5:13:15 | | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | +| variables.kt:14:5:14:15 | | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | +| variables.kt:16:1:34:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:16:1:34:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:16:1:34:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:16:1:34:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:16:11:16:18 | o | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | +| variables.kt:16:11:16:18 | o | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | +| variables.kt:17:5:17:15 | | variables.kt:16:1:34:1 | C2 | file://:0:0:0:0 | | +| variables.kt:18:5:18:15 | | variables.kt:16:1:34:1 | C2 | file://:0:0:0:0 | | +| variables.kt:20:5:22:5 | | variables.kt:16:1:34:1 | C2 | file://:0:0:0:0 | | +| variables.kt:23:5:33:5 | | variables.kt:16:1:34:1 | C2 | file://:0:0:0:0 | | +| variables.kt:23:9:23:10 | | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.kt b/java/ql/test/kotlin/library-tests/variables/variables.kt index 939f460d7d7..21be990c4b1 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.kt +++ b/java/ql/test/kotlin/library-tests/variables/variables.kt @@ -9,3 +9,26 @@ class Foo { val topLevel: Int = 1 +class C1 { + fun f1() {} + fun f2() {} +} +class C2 (val o:C1) { + fun f1() {} + fun f3() {} + + fun f4() { + o.ext(); + } + fun C1.ext() { + f1() // calls method defined in C1 class + f2() + f3() + this.f1() // extensionReceiverParameter + this.f2() // extensionReceiverParameter + + // calls method defined in C2 class + this@C2.f1() // dispatchReceiverParameter + this@C2.f3() // dispatchReceiverParameter + } +} \ No newline at end of file From 3bfc93daab0bef35495db3535f5abccce15ccf46 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 23 Sep 2021 10:11:28 +0200 Subject: [PATCH 0534/1618] Add ExtensionMethod class --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 ++ java/ql/lib/config/semmlecode.dbscheme | 4 ++++ java/ql/lib/semmle/code/java/Member.qll | 10 ++++++++++ .../test/kotlin/library-tests/methods/methods.expected | 4 ++++ java/ql/test/kotlin/library-tests/methods/methods.ql | 4 ++-- 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index f61f81e1e5e..39c0a4443fb 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -462,6 +462,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val extReceiver = f.extensionReceiverParameter if (extReceiver != null) { extractValueParameter(extReceiver, id, index--) + + tw.writeKtExtensionFunctions(id) } val dispReceiver = f.dispatchReceiverParameter diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index f0b17a862f6..9bcc9409b23 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -1059,3 +1059,7 @@ ktBreakContinueTarget( unique int id: @breakcontinuestmt ref, int target: @ktloopstmt ref ) + +ktExtensionFunctions( + unique int id: @method ref +) diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index a6877ebc17d..809ee3c5768 100755 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -670,3 +670,13 @@ class Field extends Member, ExprParent, @field, Variable { class InstanceField extends Field { InstanceField() { not this.isStatic() } } + +/** A Kotlin extension function. */ +class ExtensionMethod extends Method { + ExtensionMethod() { ktExtensionFunctions(this) } + + /** Gets the type being extended by this method. */ + Type getExtendedType() { result = getParameter(-1).getType() } + + override string getAPrimaryQlClass() { result = "ExtensionMethod" } +} diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index f38e78f99fd..48edce861bf 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -1,3 +1,4 @@ +methods | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | | methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | equals | @@ -17,3 +18,6 @@ | methods.kt:5:1:13:1 | toString | | methods.kt:6:5:7:5 | classMethod | | methods.kt:9:5:12:5 | anotherClassMethod | +extensions +| methods3.kt:3:1:3:39 | fooBarTopLevelMethod | file://:0:0:0:0 | int | +| methods3.kt:6:5:6:43 | fooBarTopLevelMethod | file://:0:0:0:0 | int | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.ql b/java/ql/test/kotlin/library-tests/methods/methods.ql index 8ae755f95d0..e10c6577b4e 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.ql +++ b/java/ql/test/kotlin/library-tests/methods/methods.ql @@ -1,5 +1,5 @@ import java -from Method m -select m +query predicate methods(Method m) { any() } +query predicate extensions(ExtensionMethod m, Type t) { m.getExtendedType() = t } From d6ec230e2f9485896de9a79cc8c2885e1b937c67 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 23 Sep 2021 10:52:37 +0200 Subject: [PATCH 0535/1618] Recognize qualified this access of outer class instance --- .../main/kotlin/KotlinExtractorExtension.kt | 22 ++++++++++++++----- .../variables/variableAccesses.expected | 2 ++ .../variables/variables.expected | 12 ++++++++++ .../library-tests/variables/variables.kt | 11 ++++++++++ 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 39c0a4443fb..2981ce4b433 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -413,19 +413,31 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi @Suppress("UNCHECKED_CAST") val parentId: Label = useDeclarationParent(vp.parent) as Label var idx = vp.index - if (isQualifiedThis(vp)) { + if (isQualifiedThisFunction(vp)) { idx = -2 } val label = "@\"params;{$parentId};$idx\"" return label } - private fun isQualifiedThis(vp: IrValueParameter) : Boolean { + private fun isQualifiedThis(vp: IrValueParameter): Boolean { + return isQualifiedThisFunction(vp) || + isQualifiedThisClass(vp) + } + + private fun isQualifiedThisFunction(vp: IrValueParameter): Boolean { val parent = vp.parent return vp.index == -1 && - parent is IrFunction && - parent.dispatchReceiverParameter == vp && - parent.extensionReceiverParameter != null + parent is IrFunction && + parent.dispatchReceiverParameter == vp && + parent.extensionReceiverParameter != null + } + + private fun isQualifiedThisClass(vp: IrValueParameter): Boolean { + val parent = vp.parent + return vp.index == -1 && + parent is IrClass && + parent.thisReceiver == vp } fun useValueParameter(vp: IrValueParameter): Label { diff --git a/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected b/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected index 1c243abceb6..7573a048394 100644 --- a/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected +++ b/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected @@ -8,4 +8,6 @@ instAcc | variables.kt:28:9:28:12 | this | | variables.kt:31:9:31:15 | this | | variables.kt:32:9:32:15 | this | +| variables.kt:41:13:41:16 | this | +| variables.kt:42:13:42:19 | this | instAccQualifier diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index 28c001c9c94..5505ae47274 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -24,3 +24,15 @@ | variables.kt:20:5:22:5 | | variables.kt:16:1:34:1 | C2 | file://:0:0:0:0 | | | variables.kt:23:5:33:5 | | variables.kt:16:1:34:1 | C2 | file://:0:0:0:0 | | | variables.kt:23:9:23:10 | | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | +| variables.kt:36:1:45:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:36:1:45:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:36:1:45:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:36:1:45:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:37:5:37:15 | | variables.kt:36:1:45:1 | C3 | file://:0:0:0:0 | | +| variables.kt:38:5:44:5 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:38:5:44:5 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:38:5:44:5 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:38:5:44:5 | | variables.kt:36:1:45:1 | C3 | file://:0:0:0:0 | | +| variables.kt:38:11:44:5 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:39:9:39:19 | | variables.kt:38:5:44:5 | C4 | file://:0:0:0:0 | | +| variables.kt:40:9:43:9 | | variables.kt:38:5:44:5 | C4 | file://:0:0:0:0 | | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.kt b/java/ql/test/kotlin/library-tests/variables/variables.kt index 21be990c4b1..32dddb26b47 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.kt +++ b/java/ql/test/kotlin/library-tests/variables/variables.kt @@ -31,4 +31,15 @@ class C2 (val o:C1) { this@C2.f1() // dispatchReceiverParameter this@C2.f3() // dispatchReceiverParameter } +} + +class C3 { + fun f0() {} + inner class C4 { + fun f0() {} + fun f1() { + this.f0() + this@C3.f0() + } + } } \ No newline at end of file From bf4fb13326e257d7b5421219873f3cc681f68e38 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 23 Sep 2021 11:14:27 +0200 Subject: [PATCH 0536/1618] Revert extracting this and this@TYPE parameters --- .../main/kotlin/KotlinExtractorExtension.kt | 16 ++++------- java/ql/lib/config/semmlecode.dbscheme | 3 ++- java/ql/lib/semmle/code/java/Member.qll | 6 +++-- .../library-tests/methods/parameters.expected | 15 ----------- .../variables/variables.expected | 27 ------------------- 5 files changed, 11 insertions(+), 56 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 2981ce4b433..5d5cb7dc400 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -413,8 +413,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi @Suppress("UNCHECKED_CAST") val parentId: Label = useDeclarationParent(vp.parent) as Label var idx = vp.index - if (isQualifiedThisFunction(vp)) { - idx = -2 + if (idx < 0) { + // We're not extracting this and this@TYPE parameters of functions: + logger.warnElement(Severity.ErrorSevere, "Unexpected negative index for parameter", vp) } val label = "@\"params;{$parentId};$idx\"" return label @@ -470,17 +471,10 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi extractValueParameter(vp, id, i) } - var index = -1 val extReceiver = f.extensionReceiverParameter if (extReceiver != null) { - extractValueParameter(extReceiver, id, index--) - - tw.writeKtExtensionFunctions(id) - } - - val dispReceiver = f.dispatchReceiverParameter - if (dispReceiver != null) { - extractValueParameter(dispReceiver, id, index) + val extendedType = useType(extReceiver.type) + tw.writeKtExtensionFunctions(id, extendedType) } } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 9bcc9409b23..37a351ef328 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -1061,5 +1061,6 @@ ktBreakContinueTarget( ) ktExtensionFunctions( - unique int id: @method ref + unique int id: @method ref, + int typeid: @type ref ) diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index 809ee3c5768..a8896e934c1 100755 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -673,10 +673,12 @@ class InstanceField extends Field { /** A Kotlin extension function. */ class ExtensionMethod extends Method { - ExtensionMethod() { ktExtensionFunctions(this) } + Type extendedType; + + ExtensionMethod() { ktExtensionFunctions(this, extendedType) } /** Gets the type being extended by this method. */ - Type getExtendedType() { result = getParameter(-1).getType() } + Type getExtendedType() { result = extendedType } override string getAPrimaryQlClass() { result = "ExtensionMethod" } } diff --git a/java/ql/test/kotlin/library-tests/methods/parameters.expected b/java/ql/test/kotlin/library-tests/methods/parameters.expected index c79362156e8..094784980bf 100644 --- a/java/ql/test/kotlin/library-tests/methods/parameters.expected +++ b/java/ql/test/kotlin/library-tests/methods/parameters.expected @@ -1,30 +1,15 @@ | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:26:4:31 | x | 0 | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:34:4:39 | y | 1 | -| methods2.kt:7:1:10:1 | equals | methods2.kt:7:1:10:1 | | -1 | | methods2.kt:7:1:10:1 | equals | methods2.kt:7:1:10:1 | other | 0 | -| methods2.kt:7:1:10:1 | hashCode | methods2.kt:7:1:10:1 | | -1 | -| methods2.kt:7:1:10:1 | toString | methods2.kt:7:1:10:1 | | -1 | -| methods2.kt:8:5:9:5 | fooBarClassMethod | methods2.kt:8:5:9:5 | | -1 | | methods2.kt:8:5:9:5 | fooBarClassMethod | methods2.kt:8:27:8:32 | x | 0 | | methods2.kt:8:5:9:5 | fooBarClassMethod | methods2.kt:8:35:8:40 | y | 1 | -| methods3.kt:3:1:3:39 | fooBarTopLevelMethod | methods3.kt:3:5:3:7 | | -1 | | methods3.kt:3:1:3:39 | fooBarTopLevelMethod | methods3.kt:3:30:3:35 | x | 0 | -| methods3.kt:5:1:7:1 | equals | methods3.kt:5:1:7:1 | | -1 | | methods3.kt:5:1:7:1 | equals | methods3.kt:5:1:7:1 | other | 0 | -| methods3.kt:5:1:7:1 | hashCode | methods3.kt:5:1:7:1 | | -1 | -| methods3.kt:5:1:7:1 | toString | methods3.kt:5:1:7:1 | | -1 | -| methods3.kt:6:5:6:43 | fooBarTopLevelMethod | methods3.kt:6:5:6:43 | | -2 | -| methods3.kt:6:5:6:43 | fooBarTopLevelMethod | methods3.kt:6:9:6:11 | | -1 | | methods3.kt:6:5:6:43 | fooBarTopLevelMethod | methods3.kt:6:34:6:39 | x | 0 | | methods.kt:2:1:3:1 | topLevelMethod | methods.kt:2:20:2:25 | x | 0 | | methods.kt:2:1:3:1 | topLevelMethod | methods.kt:2:28:2:33 | y | 1 | -| methods.kt:5:1:13:1 | equals | methods.kt:5:1:13:1 | | -1 | | methods.kt:5:1:13:1 | equals | methods.kt:5:1:13:1 | other | 0 | -| methods.kt:5:1:13:1 | hashCode | methods.kt:5:1:13:1 | | -1 | -| methods.kt:5:1:13:1 | toString | methods.kt:5:1:13:1 | | -1 | -| methods.kt:6:5:7:5 | classMethod | methods.kt:6:5:7:5 | | -1 | | methods.kt:6:5:7:5 | classMethod | methods.kt:6:21:6:26 | x | 0 | | methods.kt:6:5:7:5 | classMethod | methods.kt:6:29:6:34 | y | 1 | -| methods.kt:9:5:12:5 | anotherClassMethod | methods.kt:9:5:12:5 | | -1 | | methods.kt:9:5:12:5 | anotherClassMethod | methods.kt:9:28:9:33 | a | 0 | | methods.kt:9:5:12:5 | anotherClassMethod | methods.kt:9:36:9:41 | b | 1 | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index 5505ae47274..ccf63733f7c 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -1,38 +1,11 @@ -| variables.kt:2:1:8:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:2:1:8:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:2:1:8:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:2:1:8:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| variables.kt:5:5:7:5 | | variables.kt:2:1:8:1 | Foo | file://:0:0:0:0 | | | variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | file://:0:0:0:0 | | | variables.kt:6:9:6:25 | int local | file://:0:0:0:0 | int | variables.kt:6:21:6:25 | ... + ... | | variables.kt:10:1:10:21 | topLevel | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| variables.kt:12:1:15:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:12:1:15:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:12:1:15:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:12:1:15:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:13:5:13:15 | | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | -| variables.kt:14:5:14:15 | | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | -| variables.kt:16:1:34:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:16:1:34:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:16:1:34:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:16:1:34:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:16:11:16:18 | o | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | | variables.kt:16:11:16:18 | o | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | -| variables.kt:17:5:17:15 | | variables.kt:16:1:34:1 | C2 | file://:0:0:0:0 | | -| variables.kt:18:5:18:15 | | variables.kt:16:1:34:1 | C2 | file://:0:0:0:0 | | -| variables.kt:20:5:22:5 | | variables.kt:16:1:34:1 | C2 | file://:0:0:0:0 | | -| variables.kt:23:5:33:5 | | variables.kt:16:1:34:1 | C2 | file://:0:0:0:0 | | -| variables.kt:23:9:23:10 | | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | -| variables.kt:36:1:45:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:36:1:45:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:36:1:45:1 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:36:1:45:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:37:5:37:15 | | variables.kt:36:1:45:1 | C3 | file://:0:0:0:0 | | -| variables.kt:38:5:44:5 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:38:5:44:5 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:38:5:44:5 | | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:38:5:44:5 | | variables.kt:36:1:45:1 | C3 | file://:0:0:0:0 | | | variables.kt:38:11:44:5 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:39:9:39:19 | | variables.kt:38:5:44:5 | C4 | file://:0:0:0:0 | | -| variables.kt:40:9:43:9 | | variables.kt:38:5:44:5 | C4 | file://:0:0:0:0 | | From 5aac46f20f5b3d27b777b5f72abcb806d327191f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 23 Sep 2021 11:29:05 +0200 Subject: [PATCH 0537/1618] Fix DB relation names to use plurals --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- .../src/main/kotlin/comments/CommentExtractor.kt | 2 +- java/ql/lib/config/semmlecode.dbscheme | 4 ++-- java/ql/lib/semmle/code/java/Statement.qll | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 5d5cb7dc400..5f59ee3a63c 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -865,7 +865,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return } - tw.writeKtBreakContinueTarget(id, loopId) + tw.writeKtBreakContinueTargets(id, loopId) } } diff --git a/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt index 8867e73b813..6baf071077d 100644 --- a/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt @@ -95,7 +95,7 @@ class CommentExtractor(private val fileExtractor: KotlinFileExtractor) { continue } - tw.writeKtCommentOwner(commentLabel, existingLabel) + tw.writeKtCommentOwners(commentLabel, existingLabel) } } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 37a351ef328..334b953076b 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -1044,7 +1044,7 @@ ktCommentSectionSubjectNames( ) #keyset[id, owner] -ktCommentOwner( +ktCommentOwners( int id: @ktcomment ref, int owner: @top ref ) @@ -1055,7 +1055,7 @@ ktCommentOwner( @ktloopstmt = @whilestmt | @dostmt; -ktBreakContinueTarget( +ktBreakContinueTargets( unique int id: @breakcontinuestmt ref, int target: @ktloopstmt ref ) diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index ae28292e684..bbd2d15a47b 100755 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -900,7 +900,7 @@ class KtLoopStmt extends Stmt, @ktloopstmt { abstract class KtBreakContinueStmt extends Stmt, @breakcontinuestmt { KtLoopStmt loop; - KtBreakContinueStmt() { ktBreakContinueTarget(this, loop) } + KtBreakContinueStmt() { ktBreakContinueTargets(this, loop) } /** Gets the target loop statement of this `break`. */ KtLoopStmt getLoopStmt() { result = loop } From bcbcd612a3e14074e3dbbf870c67ffd2f909e8c2 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 23 Sep 2021 19:47:33 +0100 Subject: [PATCH 0538/1618] Kotlin: Improve the dbscheme generator We now work out the supertype relationships based on the sets of leaf types that are included, rather than simply following the hierarchy of declarations. This means that we know about more supertype relationships that exist, so there is less need to cast types. --- java/kotlin-extractor/generate_dbscheme.py | 192 +++++++++++++-------- 1 file changed, 122 insertions(+), 70 deletions(-) diff --git a/java/kotlin-extractor/generate_dbscheme.py b/java/kotlin-extractor/generate_dbscheme.py index ab60c88b010..c94a9a92665 100755 --- a/java/kotlin-extractor/generate_dbscheme.py +++ b/java/kotlin-extractor/generate_dbscheme.py @@ -3,35 +3,119 @@ import re import sys +enums = {} +unions = {} +tables = {} + +def parse_dbscheme(filename): + with open(filename, 'r') as f: + dbscheme = f.read() + + # Remove comments + dbscheme = re.sub(r'/\*.*?\*/', '', dbscheme, flags=re.DOTALL) + dbscheme = re.sub(r'//[^\r\n]*/', '', dbscheme) + + # kind enums + for name, kind, body in re.findall(r'case\s+@([^.\s]*)\.([^.\s]*)\s+of\b(.*?);', + dbscheme, + flags=re.DOTALL): + mapping = [] + for num, typ in re.findall(r'(\d+)\s*=\s*@(\S+)', body): + mapping.append((int(num), typ)) + enums[name] = (kind, mapping) + + # unions + for name, rhs in re.findall(r'@(\w+)\s*=\s*(@\w+(?:\s*\|\s*@\w+)*)', + dbscheme, + flags=re.DOTALL): + typs = re.findall(r'@(\w+)', rhs) + unions[name] = typs + + # tables + for relname, body in re.findall('\n([\w_]+)(\([^)]*\))', + dbscheme, + flags=re.DOTALL): + columns = list(re.findall('(\S+)\s*:\s*([^\s,]+)(?:\s+(ref)|)', body)) + tables[relname] = columns + +parse_dbscheme('../ql/lib/config/semmlecode.dbscheme') + +type_aliases = {} + +for alias, typs in unions.items(): + if len(typs) == 1: + real = typs[0] + if real in type_aliases: + real = type_aliases[real] + type_aliases[alias] = real + +def unalias(t): + return type_aliases.get(t, t) + +type_leaf = set() +type_union = {} + +for name, (kind, mapping) in enums.items(): + s = set() + for num, typ in mapping: + s.add(typ) + type_leaf.add(typ) + type_union[name] = s + +for name, typs in unions.items(): + if name not in type_aliases: + type_union[name] = set(map(unalias, typs)) + +for relname, columns in tables.items(): + for _, db_type, ref in columns: + if db_type[0] == '@' and ref == '': + db_type_name = db_type[1:] + if db_type_name not in enums: + type_leaf.add(db_type_name) + +type_union_of_leaves = {} + +def to_leaves(t): + if t not in type_union_of_leaves: + xs = type_union[t] + leaves = set() + for x in xs: + if x in type_leaf: + leaves.add(x) + else: + to_leaves(x) + leaves.update(type_union_of_leaves[x]) + type_union_of_leaves[t] = leaves + +for t in type_union: + to_leaves(t) + +supertypes = {} +for t in type_leaf: + supers = set() + for sup, s in type_union_of_leaves.items(): + if t in s: + supers.add(sup) + supertypes[t] = supers +for t, leaves in type_union_of_leaves.items(): + supers = set() + for sup, s in type_union_of_leaves.items(): + if t != sup and leaves.issubset(s): + supers.add(sup) + supertypes[t] = supers + def upperFirst(string): return string[0].upper() + string[1:] -with open('../ql/lib/config/semmlecode.dbscheme', 'r') as f: - dbscheme = f.read() - -# Remove comments -dbscheme = re.sub(r'/\*.*?\*/', '', dbscheme, flags=re.DOTALL) -dbscheme = re.sub(r'//[^\r\n]*/', '', dbscheme) - -enums = {} -type_aliases = {} -type_hierarchy = {} - -def unalias(t): - while t in type_aliases: - t = type_aliases[t] - return t - -def genTable(kt, relname, body, enum = None, kind = None, num = None, typ = None): +def genTable(kt, relname, columns, enum = None, kind = None, num = None, typ = None): kt.write('fun TrapWriter.write' + upperFirst(relname)) if kind is not None: kt.write('_' + typ) kt.write('(') - for colname, db_type in re.findall('(\S+)\s*:\s*([^\s,]+)', body): + for colname, db_type, _ in columns: if colname != kind: kt.write(colname + ': ') if db_type == 'int': - # TODO: Do something better if the column is a 'case' kt.write('Int') elif db_type == 'float': kt.write('Double') @@ -52,7 +136,7 @@ def genTable(kt, relname, body, enum = None, kind = None, num = None, typ = None kt.write(') {\n') kt.write(' this.writeTrap("' + relname + '(') comma = '' - for colname, db_type in re.findall('(\S+)\s*:\s*([^\s,]+)', body): + for colname, db_type, _ in columns: kt.write(comma) if colname == kind: kt.write(str(num)) @@ -70,59 +154,27 @@ with open('src/main/kotlin/KotlinExtractorDbScheme.kt', 'w') as kt: kt.write('/* Generated by ' + sys.argv[0] + ': Do not edit manually. */\n') kt.write('package com.github.codeql\n') - # kind enums - for name, kind, body in re.findall(r'case\s+@([^.\s]*)\.([^.\s]*)\s+of\b(.*?);', - dbscheme, - flags=re.DOTALL): - mapping = [] - for num, typ in re.findall(r'(\d+)\s*=\s*@(\S+)', body): - s = type_hierarchy.get(typ, set()) - s.add(name) - type_hierarchy[typ] = s - mapping.append((int(num), typ)) - enums[name] = (kind, mapping) - - # unions - for name, unions in re.findall(r'@(\w+)\s*=\s*(@\w+(?:\s*\|\s*@\w+)*)', - dbscheme, - flags=re.DOTALL): - type_hierarchy[name] = type_hierarchy.get(name, set()) - typs = re.findall(r'@(\w+)', unions) - if len(typs) == 1: - type_aliases[name] = typs[0] - else: - for typ in typs: - s = type_hierarchy.get(typ, set()) - s.add(name) - type_hierarchy[typ] = s - - # tables - for relname, body in re.findall('\n([\w_]+)(\([^)]*\))', - dbscheme, - flags=re.DOTALL): + for relname, columns in tables.items(): enum = None - for db_type in re.findall(':\s*@([^\s,]+)\s*(?:,|$)', body): - type_hierarchy[db_type] = type_hierarchy.get(db_type, set()) - if db_type in enums: - enum = db_type + for _, db_type, ref in columns: + if db_type[0] == '@' and ref == '': + db_type_name = db_type[1:] + if db_type_name in enums: + enum = db_type_name if enum is None: - genTable(kt, relname, body) + genTable(kt, relname, columns) else: (kind, mapping) = enums[enum] for num, typ in mapping: - genTable(kt, relname, body, enum, kind, num, typ) - - for typ in sorted(type_hierarchy): - if typ in type_aliases: - kt.write('typealias Db' + upperFirst(typ) + ' = Db' + upperFirst(type_aliases[typ]) + '\n') - else: - kt.write('sealed interface Db' + upperFirst(typ)) - # This map of unalias avoids duplicates when both T and an - # alias of T appear in the set. Sorting makes the output - # deterministic. - names = sorted(set(map(unalias, type_hierarchy[typ]))) - if names: - kt.write(': ') - kt.write(', '.join(map(lambda name: 'Db' + upperFirst(name), names))) - kt.write('\n') + genTable(kt, relname, columns, enum, kind, num, typ) + for typ in sorted(supertypes): + kt.write('sealed interface Db' + upperFirst(typ)) + # Sorting makes the output deterministic. + names = sorted(supertypes[typ]) + if names: + kt.write(': ') + kt.write(', '.join(map(lambda name: 'Db' + upperFirst(name), names))) + kt.write('\n') + for alias in sorted(type_aliases): + kt.write('typealias Db' + upperFirst(alias) + ' = Db' + upperFirst(type_aliases[alias]) + '\n') From 7eebf81ffce7543fc2b663398e4ae4ded331a586 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 24 Sep 2021 10:55:35 +0100 Subject: [PATCH 0539/1618] Kotlin: Remove some now-unnecessary casts --- .../src/main/kotlin/KotlinExtractorExtension.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 5f59ee3a63c..cef02f4d1ae 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -851,12 +851,10 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi id: Label ) { val locId = tw.getLocation(e) - @Suppress("UNCHECKED_CAST") - tw.writeHasLocation(id as Label, locId) + tw.writeHasLocation(id, locId) val label = e.label if (label != null) { - @Suppress("UNCHECKED_CAST") - tw.writeNamestrings(label, "", id as Label) + tw.writeNamestrings(label, "", id) } val loopId = loopIdMap[e.loop] From 93f6b23a9190b5013337f1466c76756a897baa28 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 24 Sep 2021 11:29:25 +0100 Subject: [PATCH 0540/1618] Kotlin: Revert some now-unnecessary changes to dbscheme --- java/ql/lib/config/semmlecode.dbscheme | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 334b953076b..de85b163030 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -905,7 +905,7 @@ javadocText( @classorarray = @class | @array; @type = @primitive | @reftype; @callable = @method | @constructor; -@element = @file | @package | @primitive | @classorinterface | @method | @constructor | @modifier | @param | @exception | @field | +@element = @file | @package | @primitive | @class | @interface | @method | @constructor | @modifier | @param | @exception | @field | @annotation | @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl; @modifiable = @member_modifiable| @param | @localvar ; @@ -914,7 +914,7 @@ javadocText( @member = @method | @constructor | @field | @reftype ; -@locatable = @file | @classorinterface | @fielddecl | @field | @constructor | @method | @param | @exception +@locatable = @file | @class | @interface | @fielddecl | @field | @constructor | @method | @param | @exception | @boundedtype | @typebound | @array | @primitive | @import | @stmt | @expr | @whenbranch | @localvar | @javadoc | @javadocTag | @javadocText | @xmllocatable | @ktcomment; From 7d479943dba0864714d4234bfc685aa437450130 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 24 Sep 2021 13:46:58 +0100 Subject: [PATCH 0541/1618] Kotlin: Remove a redundant warning suppression --- .../kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index cef02f4d1ae..6a732276c45 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -217,7 +217,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - @Suppress("UNUSED_PARAMETER") fun useSimpleType(s: IrSimpleType): Label { fun primitiveType(name: String): Label { return tw.getLabelFor("@\"type;$name\"", { From ab77ed085fc1d901f57933ffa777ae94d0ee11f9 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 27 Sep 2021 15:24:11 +0200 Subject: [PATCH 0542/1618] Add QL classes and tests for comments --- java/ql/lib/semmle/code/java/Javadoc.qll | 34 +++++++++++++++++++ .../library-tests/comments/comments.expected | 31 +++++++++++++++++ .../kotlin/library-tests/comments/comments.kt | 25 ++++++++++++++ .../kotlin/library-tests/comments/comments.ql | 13 +++++++ 4 files changed, 103 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/comments/comments.expected create mode 100644 java/ql/test/kotlin/library-tests/comments/comments.kt create mode 100644 java/ql/test/kotlin/library-tests/comments/comments.ql diff --git a/java/ql/lib/semmle/code/java/Javadoc.qll b/java/ql/lib/semmle/code/java/Javadoc.qll index 044ed17f476..7fb3e22dfb4 100755 --- a/java/ql/lib/semmle/code/java/Javadoc.qll +++ b/java/ql/lib/semmle/code/java/Javadoc.qll @@ -147,3 +147,37 @@ class JavadocText extends JavadocElement, @javadocText { override string getAPrimaryQlClass() { result = "JavadocText" } } + +/** A Kotlin comment. */ +class KtComment extends Top, @ktcomment { + /** Gets the full text of this comment. */ + string getText() { ktComments(this, _, result) } + + /** Gets the sections of this comment. */ + KtCommentSection getSections() { ktCommentSections(result, this, _) } + + /** Gets the owner of this comment, if any. */ + Top getOwner() { ktCommentOwners(this, result) } + + override string toString() { result = this.getText() } + + override string getAPrimaryQlClass() { result = "KtComment" } +} + +/** A Kotlin comment. */ +class KtCommentSection extends @ktcommentsection { + /** Gets the content text of this section. */ + string getContent() { ktCommentSections(this, _, result) } + + /** Gets the parent comment. */ + KtComment getParent() { ktCommentSections(this, result, _) } + + /** Gets the section name if any. */ + string getName() { ktCommentSectionNames(this, result) } + + /** Gets the section subject name if any. */ + string getSubjectName() { ktCommentSectionSubjectNames(this, result) } + + /** Gets the string representation of this section. */ + string toString() { result = this.getContent() } +} diff --git a/java/ql/test/kotlin/library-tests/comments/comments.expected b/java/ql/test/kotlin/library-tests/comments/comments.expected new file mode 100644 index 00000000000..24dbea28dff --- /dev/null +++ b/java/ql/test/kotlin/library-tests/comments/comments.expected @@ -0,0 +1,31 @@ +comments +| comments.kt:1:1:1:25 | /** Kdoc with no owner */ | /** Kdoc with no owner */ | +| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | +| comments.kt:13:5:16:7 | /**\n * Adds a [member] to this group.\n * @return the new size of the group.\n */ | /**\n * Adds a [member] to this group.\n * @return the new size of the group.\n */ | +| comments.kt:18:9:18:25 | // A line comment | // A line comment | +| comments.kt:22:5:24:6 | /*\n A block comment\n */ | /*\n A block comment\n */ | +commentOwners +| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:25:1 | | +| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:25:1 | Group | +| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:25:1 | equals | +| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:25:1 | hashCode | +| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:25:1 | other | +| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:25:1 | toString | +| comments.kt:13:5:16:7 | /**\n * Adds a [member] to this group.\n * @return the new size of the group.\n */ | comments.kt:17:5:20:5 | add | +commentSections +| comments.kt:1:1:1:25 | /** Kdoc with no owner */ | Kdoc with no owner | +| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | A group of *members*.\n\nThis class has no useful logic; it's just a documentation example.\n\n | +| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | Creates an empty group. | +| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | the name of this group. | +| comments.kt:13:5:16:7 | /**\n * Adds a [member] to this group.\n * @return the new size of the group.\n */ | Adds a [member] to this group.\n | +commentSectionContents +| A group of *members*.\n\nThis class has no useful logic; it's just a documentation example.\n\n | A group of *members*.\n\nThis class has no useful logic; it's just a documentation example.\n\n | +| Adds a [member] to this group.\n | Adds a [member] to this group.\n | +| Creates an empty group. | Creates an empty group. | +| Kdoc with no owner | Kdoc with no owner | +| the name of this group. | the name of this group. | +commentSectionNames +| Creates an empty group. | constructor | +| the name of this group. | property | +commentSectionSubjectNames +| the name of this group. | name | diff --git a/java/ql/test/kotlin/library-tests/comments/comments.kt b/java/ql/test/kotlin/library-tests/comments/comments.kt new file mode 100644 index 00000000000..d081aeaf95e --- /dev/null +++ b/java/ql/test/kotlin/library-tests/comments/comments.kt @@ -0,0 +1,25 @@ +/** Kdoc with no owner */ +package foo.bar + +/** + * A group of *members*. + * + * This class has no useful logic; it's just a documentation example. + * + * @property name the name of this group. + * @constructor Creates an empty group. + */ +class Group(val name: String) { + /** + * Adds a [member] to this group. + * @return the new size of the group. + */ + fun add(member: Int): Int { + // A line comment + return 42 + } + + /* + A block comment + */ +} diff --git a/java/ql/test/kotlin/library-tests/comments/comments.ql b/java/ql/test/kotlin/library-tests/comments/comments.ql new file mode 100644 index 00000000000..457ac5f5bf1 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/comments/comments.ql @@ -0,0 +1,13 @@ +import java + +query predicate comments(KtComment c, string s) { c.getText() = s } + +query predicate commentOwners(KtComment c, Top t) { c.getOwner() = t } + +query predicate commentSections(KtComment c, KtCommentSection s) { c.getSections() = s } + +query predicate commentSectionContents(KtCommentSection s, string c) { s.getContent() = c } + +query predicate commentSectionNames(KtCommentSection s, string c) { s.getName() = c } + +query predicate commentSectionSubjectNames(KtCommentSection s, string c) { s.getSubjectName() = c } From 5749dbf7d9baa2885d334c9dc9c772e5942f3d15 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 28 Sep 2021 12:26:58 +0200 Subject: [PATCH 0543/1618] Fix package of Location --- java/kotlin-extractor/src/main/kotlin/utils/IrVisitorLookup.kt | 1 - java/kotlin-extractor/src/main/kotlin/utils/Location.kt | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/utils/IrVisitorLookup.kt b/java/kotlin-extractor/src/main/kotlin/utils/IrVisitorLookup.kt index 3df4d67157d..6d059955ff9 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/IrVisitorLookup.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/IrVisitorLookup.kt @@ -5,7 +5,6 @@ import org.jetbrains.kotlin.backend.common.psi.PsiSourceManager import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -import utils.getLocation class IrVisitorLookup(private val psi: PsiElement, private val file: IrFile) : IrElementVisitor> { diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Location.kt b/java/kotlin-extractor/src/main/kotlin/utils/Location.kt index d0f7734dfc3..2218ab45b31 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Location.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Location.kt @@ -1,4 +1,4 @@ -package utils +package com.github.codeql.utils import com.intellij.psi.PsiElement import org.jetbrains.kotlin.ir.IrElement From 2c5a2910d209cdfd7adb44bdc43468332cbdb9ae Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 28 Sep 2021 11:32:06 +0100 Subject: [PATCH 0544/1618] Kotlin: Add explorer --- java/kotlin-explorer/README | 9 + java/kotlin-explorer/build.gradle | 28 +++ java/kotlin-explorer/gradle.properties | 7 + java/kotlin-explorer/settings.gradle | 8 + .../src/main/kotlin/Explorer.kt | 217 ++++++++++++++++++ 5 files changed, 269 insertions(+) create mode 100644 java/kotlin-explorer/README create mode 100644 java/kotlin-explorer/build.gradle create mode 100644 java/kotlin-explorer/gradle.properties create mode 100644 java/kotlin-explorer/settings.gradle create mode 100644 java/kotlin-explorer/src/main/kotlin/Explorer.kt diff --git a/java/kotlin-explorer/README b/java/kotlin-explorer/README new file mode 100644 index 00000000000..0f500d7c25b --- /dev/null +++ b/java/kotlin-explorer/README @@ -0,0 +1,9 @@ + +This shows what is encoded in the kotlin.Metadata section shown in the +output of `javap -v SomeKotlinClass`. + +It is not currently able to extract the information from .class files +itself; the values are hard coded in src/main/kotlin/Explorer.kt + +Run `gradle run` in this directory to run it. + diff --git a/java/kotlin-explorer/build.gradle b/java/kotlin-explorer/build.gradle new file mode 100644 index 00000000000..b122d811d4f --- /dev/null +++ b/java/kotlin-explorer/build.gradle @@ -0,0 +1,28 @@ +plugins { + id 'org.jetbrains.kotlin.jvm' version "${kotlinVersion}" + id 'org.jetbrains.dokka' version '1.4.32' + id "com.vanniktech.maven.publish" version '0.15.1' + id 'application' +} + +group 'com.github.codeql' +version '0.0.1' + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib" + implementation "org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.3.0" +} + +repositories { + mavenCentral() +} + +tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { + kotlinOptions { + jvmTarget = "1.8" + } +} + +application { + mainClass = 'com.github.codeql.ExplorerKt' +} diff --git a/java/kotlin-explorer/gradle.properties b/java/kotlin-explorer/gradle.properties new file mode 100644 index 00000000000..0854241bcda --- /dev/null +++ b/java/kotlin-explorer/gradle.properties @@ -0,0 +1,7 @@ +kotlin.code.style=official +kotlinVersion=1.5.21 + +GROUP=com.github.codeql +VERSION_NAME=0.0.1 +POM_DESCRIPTION=CodeQL Kotlin explorer + diff --git a/java/kotlin-explorer/settings.gradle b/java/kotlin-explorer/settings.gradle new file mode 100644 index 00000000000..18f679f7b75 --- /dev/null +++ b/java/kotlin-explorer/settings.gradle @@ -0,0 +1,8 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + } +} + +rootProject.name = 'codeql-kotlin-explorer' diff --git a/java/kotlin-explorer/src/main/kotlin/Explorer.kt b/java/kotlin-explorer/src/main/kotlin/Explorer.kt new file mode 100644 index 00000000000..31c3eb18dcb --- /dev/null +++ b/java/kotlin-explorer/src/main/kotlin/Explorer.kt @@ -0,0 +1,217 @@ +package com.github.codeql +import kotlinx.metadata.internal.metadata.jvm.deserialization.JvmMetadataVersion +import kotlinx.metadata.jvm.* +import kotlinx.metadata.* + +fun main(args : Array) { + /* + Values from `javap -v` on TestKt.class from: + + class MyClass {} + + class MyParamClass {} + + fun f(x: MyClass, y: MyClass?, + l1: MyParamClass, + l2: MyParamClass, + l3: MyParamClass?, + l4: MyParamClass?) { + } + */ + val kind = 2 + val metadataVersion = intArrayOf(1, 5, 1) + val data1 = arrayOf("\u0000\u0018\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0003\u001aX\u0010\u0000\u001a\u00020\u00012\u0006\u0010\u0002\u001a\u00020\u00032\b\u0010\u0004\u001a\u0004\u0018\u00010\u00032\u000c\u0010\u0005\u001a\b\u0012\u0004\u0012\u00020\u00030\u00062\u000e\u0010\u0007\u001a\n\u0012\u0006\u0012\u0004\u0018\u00010\u00030\u00062\u000e\u0010\b\u001a\n\u0012\u0004\u0012\u00020\u0003\u0018\u00010\u00062\u0010\u0010\t\u001a\u000c\u0012\u0006\u0012\u0004\u0018\u00010\u0003\u0018\u00010\u0006") + val data2 = arrayOf("f","","x","LMyClass;","y","l1","LMyParamClass;","l2","l3","l4") + val extraString = null + val packageName = null + val extraInt = 48 + val kch = KotlinClassHeader(kind, metadataVersion, data1, data2, extraString, packageName, extraInt) + + val md = KotlinClassMetadata.read(kch) + when (md) { + is KotlinClassMetadata.Class -> println("Metadata for Class not yet supported") + is KotlinClassMetadata.FileFacade -> { + println("Metadata for FileFacade:") + val kmp = md.toKmPackage() + kmp.accept(MyPackageVisitor(0)) + } + is KotlinClassMetadata.SyntheticClass -> println("Metadata for SyntheticClass not yet supported") + is KotlinClassMetadata.MultiFileClassFacade -> println("Metadata for MultiFileClassFacade not yet supported") + is KotlinClassMetadata.MultiFileClassPart -> println("Metadata for MultiFileClassPart not yet supported") + is KotlinClassMetadata.Unknown -> println("Unknown kind") + else -> println("Unexpected kind") + } +} + +fun pr(indent: Int, s: String) { + println(" ".repeat(indent) + s) +} + +class MyPackageVisitor(val indent: Int): KmPackageVisitor() { + override fun visitFunction(flags: Flags, name: String): KmFunctionVisitor? { + pr(indent, "=> Function; flags:$flags, name:$name") + return MyFunctionVisitor(indent + 1) + } + + override fun visitProperty(flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags): KmPropertyVisitor? { + pr(indent, "=> Properties not yet handled") + return null + } + + override fun visitTypeAlias(flags: Flags, name: String): KmTypeAliasVisitor? { + pr(indent, "=> Type aliases not yet handled") + return null + } + + override fun visitExtensions(type: KmExtensionType): KmPackageExtensionVisitor? { + pr(indent, "=> Package extensions; type:$type") + when (type) { + JvmPackageExtensionVisitor.TYPE -> return MyJvmPackageExtensionVisitor(indent + 1) + else -> { + pr(indent, "- Not yet handled") + return null + } + } + } +} + +class MyFunctionVisitor(val indent: Int): KmFunctionVisitor() { + override fun visitTypeParameter(flags: Flags, name: String, id: Int, variance: KmVariance): KmTypeParameterVisitor? { + pr(indent, "=> Type parameter; flags:$flags, name:$name, id:$id, variance:$variance") + pr(indent, " -> Not yet handled") + return null + } + override fun visitReceiverParameterType(flags: Flags): KmTypeVisitor? { + pr(indent, "=> Receiver parameter type; flags:$flags") + pr(indent, " -> Not yet handled") + return null + } + + override fun visitValueParameter(flags: Flags, name: String): KmValueParameterVisitor? { + pr(indent, "=> Value parameter; flags:$flags, name:$name") + return MyValueParameterVisitor(indent + 1) + } + + override fun visitReturnType(flags: Flags): KmTypeVisitor? { + pr(indent, "=> Return type; flags:$flags") + return MyTypeVisitor(indent + 1) + } + + override fun visitVersionRequirement(): KmVersionRequirementVisitor? { + pr(indent, "=> VersionRequirement not yet handled") + return null + } + + override fun visitContract(): KmContractVisitor? { + pr(indent, "=> Contract not yet handled") + return null + } + + override fun visitExtensions(type: KmExtensionType): KmFunctionExtensionVisitor? { + pr(indent, "=> Function extensions; type:$type") + when (type) { + JvmFunctionExtensionVisitor.TYPE -> return MyJvmFunctionExtensionVisitor(indent + 1) + else -> { + pr(indent, "- Not yet handled") + return null + } + } + } +} + +class MyValueParameterVisitor(val indent: Int): KmValueParameterVisitor() { + override fun visitType(flags: Flags): KmTypeVisitor? { + pr(indent, "=> Type; flags:$flags") + return MyTypeVisitor(indent + 1) + } + + override fun visitVarargElementType(flags: Flags): KmTypeVisitor? { + pr(indent, "=> VarargElementType not yet handled") + return null + } + + override fun visitExtensions(type: KmExtensionType): KmValueParameterExtensionVisitor? { + pr(indent, "=> Value parameter extensions; type:$type; not yet handled") + return null + } +} + +class MyTypeVisitor(val indent: Int): KmTypeVisitor() { + override fun visitClass(name: ClassName) { + pr(indent, "=> Class; name:$name") + } + + override fun visitTypeAlias(name: ClassName) { + pr(indent, "=> Type alias; name:$name") + } + + override fun visitTypeParameter(id: Int) { + pr(indent, "=> Type parameter; id:$id") + } + + override fun visitArgument(flags: Flags, variance: KmVariance): KmTypeVisitor? { + pr(indent, "=> Argument; flags:$flags, variance:$variance") + return MyTypeVisitor(indent + 1) + } + + override fun visitStarProjection() { + pr(indent, "=> Star projection") + } + + override fun visitAbbreviatedType(flags: Flags): KmTypeVisitor? { + pr(indent, "=> AbbreviatedType not yet handled") + return null + } + + override fun visitOuterType(flags: Flags): KmTypeVisitor? { + pr(indent, "=> OuterType not yet handled") + return null + } + + override fun visitFlexibleTypeUpperBound(flags: Flags, typeFlexibilityId: String?): KmTypeVisitor? { + pr(indent, "=> FlexibleTypeUpperBound not yet handled") + return null + } + + override fun visitExtensions(type: KmExtensionType): KmTypeExtensionVisitor? { + pr(indent, "=> Type extensions; type:$type") + when (type) { + JvmTypeExtensionVisitor.TYPE -> return MyJvmTypeExtensionVisitor(indent + 1) + else -> { + pr(indent, "- Not yet handled") + return null + } + } + } +} + +class MyJvmTypeExtensionVisitor(val indent: Int): JvmTypeExtensionVisitor() { + override fun visit(isRaw: Boolean) { + pr(indent, "=> isRaw:$isRaw") + } + + override fun visitAnnotation(annotation: KmAnnotation) { + pr(indent, "=> Annotation; annotation:$annotation") + } +} + +class MyJvmPackageExtensionVisitor(val indent: Int): JvmPackageExtensionVisitor() { + override fun visitLocalDelegatedProperty(flags: Flags, name: String, getterFlags: Flags, setterFlags: Flags): KmPropertyVisitor? { + pr(indent, "=> Local delegate not yet handled") + return null + } + + override fun visitModuleName(name: String) { + pr(indent, "=> Module name; name:$name") + } +} + +class MyJvmFunctionExtensionVisitor(val indent: Int): JvmFunctionExtensionVisitor() { + override fun visit(signature: JvmMethodSignature?) { + pr(indent, "=> signature:$signature") + } + + override fun visitLambdaClassOriginName(internalName: String) { + pr(indent, "=> LambdaClassOriginName; internalName:$internalName") + } +} From 661958488c13f4bc7c830c6782bd4c4ea155e3ef Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 20 Sep 2021 12:24:09 +0200 Subject: [PATCH 0545/1618] Extract constructor calls --- .../main/kotlin/KotlinExtractorExtension.kt | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 6a732276c45..5cb34754311 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -653,7 +653,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val dr = c.dispatchReceiver val offset = if(dr == null) 0 else 1 if(dr != null) { - extractExpression(dr, callable, exprId, 0) + extractExpression(dr, callable, exprId, 0) // todo: should this be at index -1 instead? } for(i in 0 until c.valueArgumentsCount) { val arg = c.getValueArgument(i) @@ -661,12 +661,35 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi extractExpression(arg, callable, exprId, i + offset) } } + + // todo: type arguments at index -2, -3, ... } private val loopIdMap: MutableMap> = mutableMapOf() fun extractExpression(e: IrExpression, callable: Label, parent: Label, idx: Int) { when(e) { + is IrConstructorCall -> { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e) + val methodId = useFunction(e.symbol.owner) + tw.writeExprs_newexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeCallableBinding(id, methodId) + for (i in 0 until e.valueArgumentsCount) { + val arg = e.getValueArgument(i) + if (arg != null) { + extractExpression(arg, callable, id, i) + } + } + val dr = e.dispatchReceiver + if (dr != null) { + extractExpression(dr, callable, id, -3) + } + + // todo: type arguments at index -4, -5, ... + } is IrCall -> extractCall(e, callable, parent, idx) is IrConst<*> -> { val v = e.value From 91eafafcc3fb256b8386612ce924a5d120ed0236 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 20 Sep 2021 14:43:16 +0200 Subject: [PATCH 0546/1618] Extract delegating constructor calls --- .../main/kotlin/KotlinExtractorExtension.kt | 88 +++++++++++++------ 1 file changed, 60 insertions(+), 28 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 5cb34754311..dad0f60d141 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -464,7 +464,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeHasLocation(id, locId) val body = f.body if(body != null) { - extractBody(body, id) + extractBody(body, id, f) } f.valueParameters.forEachIndexed { i, vp -> extractValueParameter(vp, id, i) @@ -502,20 +502,20 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - fun extractBody(b: IrBody, callable: Label) { + fun extractBody(b: IrBody, callable: Label, irCallable: IrFunction) { when(b) { - is IrBlockBody -> extractBlockBody(b, callable, callable, 0) + is IrBlockBody -> extractBlockBody(b, callable, irCallable, callable, 0) else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrBody: " + b.javaClass, b) } } - fun extractBlockBody(b: IrBlockBody, callable: Label, parent: Label, idx: Int) { + fun extractBlockBody(b: IrBlockBody, callable: Label, irCallable: IrFunction, parent: Label, idx: Int) { val id = tw.getFreshIdLabel() val locId = tw.getLocation(b) tw.writeStmts_block(id, parent, idx, callable) tw.writeHasLocation(id, locId) for((sIdx, stmt) in b.statements.withIndex()) { - extractStatement(stmt, callable, id, sIdx) + extractStatement(stmt, callable, irCallable, id, sIdx) } } @@ -523,7 +523,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return tw.getVariableLabelFor(v) } - fun extractVariable(v: IrVariable, callable: Label) { + fun extractVariable(v: IrVariable, callable: Label, irCallable: IrFunction) { val id = useVariable(v) val locId = tw.getLocation(v) val typeId = useType(v.type) @@ -534,17 +534,17 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeHasLocation(id, locId) val i = v.initializer if(i != null) { - extractExpression(i, callable, decId, 0) + extractExpression(i, callable, irCallable, decId, 0) } } - fun extractStatement(s: IrStatement, callable: Label, parent: Label, idx: Int) { + fun extractStatement(s: IrStatement, callable: Label, irCallable: IrFunction, parent: Label, idx: Int) { when(s) { is IrExpression -> { - extractExpression(s, callable, parent, idx) + extractExpression(s, callable, irCallable, parent, idx) } is IrVariable -> { - extractVariable(s, callable) + extractVariable(s, callable, irCallable) } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrStatement: " + s.javaClass, s) @@ -567,7 +567,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - fun extractCall(c: IrCall, callable: Label, parent: Label, idx: Int) { + fun extractCall(c: IrCall, callable: Label, irCallable: IrFunction, parent: Label, idx: Int) { val exprId: Label = when { c.origin == PLUS -> { val id = tw.getFreshIdLabel() @@ -653,12 +653,12 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val dr = c.dispatchReceiver val offset = if(dr == null) 0 else 1 if(dr != null) { - extractExpression(dr, callable, exprId, 0) // todo: should this be at index -1 instead? + extractExpression(dr, callable, irCallable, exprId, 0) // todo: should this be at index -1 instead? } for(i in 0 until c.valueArgumentsCount) { val arg = c.getValueArgument(i) if(arg != null) { - extractExpression(arg, callable, exprId, i + offset) + extractExpression(arg, callable, irCallable, exprId, i + offset) } } @@ -667,8 +667,40 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi private val loopIdMap: MutableMap> = mutableMapOf() - fun extractExpression(e: IrExpression, callable: Label, parent: Label, idx: Int) { + fun extractExpression(e: IrExpression, callable: Label, irCallable: IrFunction, parent: Label, idx: Int) { when(e) { + is IrDelegatingConstructorCall -> { + val delegatingClass = e.symbol.owner.parent as IrClass + val currentClass = (irCallable as IrDeclaration).parent as IrClass + + val id: Label + if (delegatingClass != currentClass) { + id = tw.getFreshIdLabel() + tw.writeStmts_superconstructorinvocationstmt(id, parent, idx, callable) + } else { + id = tw.getFreshIdLabel() + tw.writeStmts_constructorinvocationstmt(id, parent, idx, callable) + } + + val locId = tw.getLocation(e) + val methodId = useFunction(e.symbol.owner) + + tw.writeHasLocation(id, locId) + @Suppress("UNCHECKED_CAST") + tw.writeCallableBinding(id as Label, methodId) + for (i in 0 until e.valueArgumentsCount) { + val arg = e.getValueArgument(i) + if (arg != null) { + extractExpression(arg, callable, irCallable, id, i) + } + } + val dr = e.dispatchReceiver + if (dr != null) { + extractExpression(dr, callable, irCallable, id, -1) + } + + // todo: type arguments at index -2, -3, ... + } is IrConstructorCall -> { val id = tw.getFreshIdLabel() val typeId = useType(e.type) @@ -680,17 +712,17 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi for (i in 0 until e.valueArgumentsCount) { val arg = e.getValueArgument(i) if (arg != null) { - extractExpression(arg, callable, id, i) + extractExpression(arg, callable, irCallable, id, i) } } val dr = e.dispatchReceiver if (dr != null) { - extractExpression(dr, callable, id, -3) + extractExpression(dr, callable, irCallable, id, -3) } // todo: type arguments at index -4, -5, ... } - is IrCall -> extractCall(e, callable, parent, idx) + is IrCall -> extractCall(e, callable, irCallable, parent, idx) is IrConst<*> -> { val v = e.value when(v) { @@ -772,14 +804,14 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val vId = useValueDeclaration(e.symbol.owner) tw.writeVariableBinding(lhsId, vId) - extractExpression(e.value, callable, id, 1) + extractExpression(e.value, callable, irCallable, id, 1) } is IrThrow -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) tw.writeStmts_throwstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) - extractExpression(e.value, callable, id, 0) + extractExpression(e.value, callable, irCallable, id, 0) } is IrBreak -> { val id = tw.getFreshIdLabel() @@ -796,7 +828,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val locId = tw.getLocation(e) tw.writeStmts_returnstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) - extractExpression(e.value, callable, id, 0) + extractExpression(e.value, callable, irCallable, id, 0) } is IrContainerExpression -> { val id = tw.getFreshIdLabel() @@ -804,7 +836,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeStmts_block(id, parent, idx, callable) tw.writeHasLocation(id, locId) e.statements.forEachIndexed { i, s -> - extractStatement(s, callable, id, i) + extractStatement(s, callable, irCallable, id, i) } } is IrWhileLoop -> { @@ -813,10 +845,10 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val locId = tw.getLocation(e) tw.writeStmts_whilestmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) - extractExpression(e.condition, callable, id, 0) + extractExpression(e.condition, callable, irCallable, id, 0) val body = e.body if(body != null) { - extractExpression(body, callable, id, 1) + extractExpression(body, callable, irCallable, id, 1) } loopIdMap.remove(e) } @@ -826,10 +858,10 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val locId = tw.getLocation(e) tw.writeStmts_dostmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) - extractExpression(e.condition, callable, id, 0) + extractExpression(e.condition, callable, irCallable, id, 0) val body = e.body if(body != null) { - extractExpression(body, callable, id, 1) + extractExpression(body, callable, irCallable, id, 1) } loopIdMap.remove(e) } @@ -847,8 +879,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val bLocId = tw.getLocation(b) tw.writeWhen_branch(bId, id, i) tw.writeHasLocation(bId, bLocId) - extractExpression(b.condition, callable, bId, 0) - extractExpression(b.result, callable, bId, 1) + extractExpression(b.condition, callable, irCallable, bId, 0) + extractExpression(b.result, callable, irCallable, bId, 1) if(b is IrElseBranch) { tw.writeWhen_branch_else(bId) } @@ -860,7 +892,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val typeId = useType(e.type) tw.writeExprs_getclassexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) - extractExpression(e.argument, callable, id, 0) + extractExpression(e.argument, callable, irCallable, id, 0) } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) From 9587e91f7158e85e9e854c6d835e7bfe58f02718 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 20 Sep 2021 16:17:26 +0200 Subject: [PATCH 0547/1618] WIP: IrAnonymousInitializer/IrInstanceInitializerCall --- .../src/main/kotlin/KotlinExtractorExtension.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index dad0f60d141..445d0c8cfe9 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -212,6 +212,13 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi when (declaration) { is IrClass -> extractClass(declaration) is IrFunction -> extractFunction(declaration, if (optParentid.isPresent()) optParentid.get() else fileClass) + is IrAnonymousInitializer -> { + // todo: how do we want to represent this? + // there could be multiple 'init' blocks inside a declaration. + // We could add a generated 'init' method, with all the statements inside the blocks. + // In Kotlin/JVM, the statements inside 'init' blocks get copied to the default constructor, or if there's no default then to all of them. + logger.warnElement(Severity.ErrorSevere, "Todo: handle IrAnonymousInitializer", declaration) + } is IrProperty -> extractProperty(declaration, if (optParentid.isPresent()) optParentid.get() else fileClass) else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclaration: " + declaration.javaClass, declaration) } @@ -669,6 +676,13 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun extractExpression(e: IrExpression, callable: Label, irCallable: IrFunction, parent: Label, idx: Int) { when(e) { + is IrInstanceInitializerCall -> { + // todo: how do we want to handle this? + // In Kotlin/JVM, this seems like a no-op. + if (e.classSymbol.owner.declarations.any { it is IrAnonymousInitializer }) { + // we could add a call to a generated 'init' function. + } + } is IrDelegatingConstructorCall -> { val delegatingClass = e.symbol.owner.parent as IrClass val currentClass = (irCallable as IrDeclaration).parent as IrClass From 5c72b52b9734f7c968741a07e454347aa37e5bd3 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 20 Sep 2021 16:42:49 +0200 Subject: [PATCH 0548/1618] Extract IrEnumConstructorCall --- .../main/kotlin/KotlinExtractorExtension.kt | 51 ++++++++++++------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 445d0c8cfe9..a7b0a1ff8c6 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -138,6 +138,34 @@ fun doFile(invocationTrapFile: String, fileTrapWriter: FileTrapWriter, checkTrap } } } + + private fun extractConstructorCall( + e: IrFunctionAccessExpression, + parent: Label, + idx: Int, + callable: Label, + irCallable: IrFunction + ) { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e) + val methodId = useFunction(e.symbol.owner) + tw.writeExprs_newexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeCallableBinding(id, methodId) + for (i in 0 until e.valueArgumentsCount) { + val arg = e.getValueArgument(i) + if (arg != null) { + extractExpression(arg, callable, irCallable, id, i) + } + } + val dr = e.dispatchReceiver + if (dr != null) { + extractExpression(dr, callable, irCallable, id, -3) + } + + // todo: type arguments at index -4, -5, ... + } } fun fakeLabel(): Label { @@ -716,25 +744,10 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi // todo: type arguments at index -2, -3, ... } is IrConstructorCall -> { - val id = tw.getFreshIdLabel() - val typeId = useType(e.type) - val locId = tw.getLocation(e) - val methodId = useFunction(e.symbol.owner) - tw.writeExprs_newexpr(id, typeId, parent, idx) - tw.writeHasLocation(id, locId) - tw.writeCallableBinding(id, methodId) - for (i in 0 until e.valueArgumentsCount) { - val arg = e.getValueArgument(i) - if (arg != null) { - extractExpression(arg, callable, irCallable, id, i) - } - } - val dr = e.dispatchReceiver - if (dr != null) { - extractExpression(dr, callable, irCallable, id, -3) - } - - // todo: type arguments at index -4, -5, ... + extractConstructorCall(e, parent, idx, callable, irCallable) + } + is IrEnumConstructorCall -> { + extractConstructorCall(e, parent, idx, callable, irCallable) } is IrCall -> extractCall(e, callable, irCallable, parent, idx) is IrConst<*> -> { From a46a9b579ebd35be627649120af807adce9d7767 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 20 Sep 2021 16:45:37 +0200 Subject: [PATCH 0549/1618] Extract 'IsEnumType' --- .../src/main/kotlin/KotlinExtractorExtension.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index a7b0a1ff8c6..5bb96071724 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -367,6 +367,10 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi @Suppress("UNCHECKED_CAST") val classId = id as Label tw.writeClasses(classId, cls, pkgId, classId) + + if (c.kind == ClassKind.ENUM_CLASS) { + tw.writeIsEnumType(classId) + } } return id } From 481c53a44d9277889c7ca59f160d3b777e453c03 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 23 Sep 2021 11:43:22 +0200 Subject: [PATCH 0550/1618] Fix merge conflict --- .../main/kotlin/KotlinExtractorExtension.kt | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 5bb96071724..34edfe583a1 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -138,34 +138,6 @@ fun doFile(invocationTrapFile: String, fileTrapWriter: FileTrapWriter, checkTrap } } } - - private fun extractConstructorCall( - e: IrFunctionAccessExpression, - parent: Label, - idx: Int, - callable: Label, - irCallable: IrFunction - ) { - val id = tw.getFreshIdLabel() - val typeId = useType(e.type) - val locId = tw.getLocation(e) - val methodId = useFunction(e.symbol.owner) - tw.writeExprs_newexpr(id, typeId, parent, idx) - tw.writeHasLocation(id, locId) - tw.writeCallableBinding(id, methodId) - for (i in 0 until e.valueArgumentsCount) { - val arg = e.getValueArgument(i) - if (arg != null) { - extractExpression(arg, callable, irCallable, id, i) - } - } - val dr = e.dispatchReceiver - if (dr != null) { - extractExpression(dr, callable, irCallable, id, -3) - } - - // todo: type arguments at index -4, -5, ... - } } fun fakeLabel(): Label { @@ -704,6 +676,34 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi // todo: type arguments at index -2, -3, ... } + private fun extractConstructorCall( + e: IrFunctionAccessExpression, + parent: Label, + idx: Int, + callable: Label, + irCallable: IrFunction + ) { + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e) + val methodId = useFunction(e.symbol.owner) + tw.writeExprs_newexpr(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeCallableBinding(id, methodId) + for (i in 0 until e.valueArgumentsCount) { + val arg = e.getValueArgument(i) + if (arg != null) { + extractExpression(arg, callable, irCallable, id, i) + } + } + val dr = e.dispatchReceiver + if (dr != null) { + extractExpression(dr, callable, irCallable, id, -3) + } + + // todo: type arguments at index -4, -5, ... + } + private val loopIdMap: MutableMap> = mutableMapOf() fun extractExpression(e: IrExpression, callable: Label, irCallable: IrFunction, parent: Label, idx: Int) { From 84e9fd8dbd11f6f2219a41465f8c217c5097f662 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 23 Sep 2021 14:43:37 +0200 Subject: [PATCH 0551/1618] Extract external types with members, so that tests don't produce DB constraint violations The constructor of `Any` was missing. Also, previously members of external types were not extracted to not end up with DB constraint violations, but these I can't reproduce currently in tests. --- .../src/main/kotlin/KotlinExtractorExtension.kt | 11 ++--------- .../kotlin/library-tests/classes/superTypes.expected | 1 + .../kotlin/library-tests/methods/methods.expected | 7 +++++++ .../kotlin/library-tests/methods/parameters.expected | 2 ++ .../kotlin/library-tests/variables/variables.expected | 2 ++ 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 34edfe583a1..e0a23111d48 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -318,15 +318,13 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { if(tw.getExistingLabelFor(getClassLabel(c)) == null) { - return extractExternalClass(c) + return extractClass(c) } } return addClassLabel(c) } - fun extractExternalClass(c: IrClass): Label { - // todo: fix this. - // temporarily only extract the class or interface without any members. + fun extractClass(c: IrClass): Label { val id = addClassLabel(c) val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() @@ -344,11 +342,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeIsEnumType(classId) } } - return id - } - - fun extractClass(c: IrClass): Label { - val id = extractExternalClass(c) val locId = tw.getLocation(c) tw.writeHasLocation(id, locId) for(t in c.superTypes) { diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.expected b/java/ql/test/kotlin/library-tests/classes/superTypes.expected index f91e96a07fa..1b22f9329db 100644 --- a/java/ql/test/kotlin/library-tests/classes/superTypes.expected +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.expected @@ -6,3 +6,4 @@ | classes.kt:28:1:29:1 | ClassSix | classes.kt:12:1:15:1 | ClassFour | | classes.kt:28:1:29:1 | ClassSix | classes.kt:20:1:22:1 | IF1 | | classes.kt:28:1:29:1 | ClassSix | classes.kt:24:1:26:1 | IF2 | +| file://:0:0:0:0 | Unit | file://:0:0:0:0 | Any | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index 48edce861bf..5a38d3a8386 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -1,4 +1,11 @@ methods +| file://:0:0:0:0 | | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | | methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | equals | diff --git a/java/ql/test/kotlin/library-tests/methods/parameters.expected b/java/ql/test/kotlin/library-tests/methods/parameters.expected index 094784980bf..0262fa8c97b 100644 --- a/java/ql/test/kotlin/library-tests/methods/parameters.expected +++ b/java/ql/test/kotlin/library-tests/methods/parameters.expected @@ -1,3 +1,5 @@ +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:26:4:31 | x | 0 | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:34:4:39 | y | 1 | | methods2.kt:7:1:10:1 | equals | methods2.kt:7:1:10:1 | other | 0 | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index ccf63733f7c..d0cc3d39645 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -1,3 +1,5 @@ +| file://:0:0:0:0 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:2:1:8:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | file://:0:0:0:0 | | | variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | file://:0:0:0:0 | | From 13048392afbe75a51ebdd36126a4450e5c75fa07 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 23 Sep 2021 15:37:44 +0200 Subject: [PATCH 0552/1618] Add constructor tests --- .../test/kotlin/library-tests/classes/classes.expected | 2 +- java/ql/test/kotlin/library-tests/classes/classes.kt | 3 ++- .../test/kotlin/library-tests/classes/ctorCalls.expected | 9 +++++++++ java/ql/test/kotlin/library-tests/classes/ctorCalls.ql | 5 +++++ .../kotlin/library-tests/classes/superTypes.expected | 6 +++--- java/ql/test/kotlin/library-tests/exprs/exprs.expected | 2 ++ java/ql/test/kotlin/library-tests/exprs/exprs.kt | 6 +++++- 7 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/classes/ctorCalls.expected create mode 100644 java/ql/test/kotlin/library-tests/classes/ctorCalls.ql diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index 8dbb9390f26..8b7d714d35f 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -3,6 +3,6 @@ | classes.kt:8:1:10:1 | ClassThree | | classes.kt:12:1:15:1 | ClassFour | | classes.kt:17:1:18:1 | ClassFive | -| classes.kt:28:1:29:1 | ClassSix | +| classes.kt:28:1:30:1 | ClassSix | | file://:0:0:0:0 | Any | | file://:0:0:0:0 | Unit | diff --git a/java/ql/test/kotlin/library-tests/classes/classes.kt b/java/ql/test/kotlin/library-tests/classes/classes.kt index 13df8b8139a..12426dcab27 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.kt +++ b/java/ql/test/kotlin/library-tests/classes/classes.kt @@ -25,6 +25,7 @@ interface IF2 { fun funIF2() {} } -class ClassSix: ClassFour(), IF1, IF2 { +class ClassSix(): ClassFour(), IF1, IF2 { + constructor(i: Int): this(){ } } diff --git a/java/ql/test/kotlin/library-tests/classes/ctorCalls.expected b/java/ql/test/kotlin/library-tests/classes/ctorCalls.expected new file mode 100644 index 00000000000..861a6d869a8 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/classes/ctorCalls.expected @@ -0,0 +1,9 @@ +thisCall +| classes.kt:29:26:29:31 | this(...) | +superCall +| classes.kt:2:1:2:18 | super(...) | +| classes.kt:4:1:6:1 | super(...) | +| classes.kt:8:1:10:1 | super(...) | +| classes.kt:12:23:12:34 | super(...) | +| classes.kt:17:18:17:28 | super(...) | +| classes.kt:28:19:28:29 | super(...) | diff --git a/java/ql/test/kotlin/library-tests/classes/ctorCalls.ql b/java/ql/test/kotlin/library-tests/classes/ctorCalls.ql new file mode 100644 index 00000000000..288c3787b8e --- /dev/null +++ b/java/ql/test/kotlin/library-tests/classes/ctorCalls.ql @@ -0,0 +1,5 @@ +import java + +query predicate thisCall(ThisConstructorInvocationStmt stmt) { any() } + +query predicate superCall(SuperConstructorInvocationStmt stmt) { any() } diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.expected b/java/ql/test/kotlin/library-tests/classes/superTypes.expected index 1b22f9329db..38a196c5aed 100644 --- a/java/ql/test/kotlin/library-tests/classes/superTypes.expected +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.expected @@ -3,7 +3,7 @@ | classes.kt:8:1:10:1 | ClassThree | file://:0:0:0:0 | Any | | classes.kt:12:1:15:1 | ClassFour | classes.kt:8:1:10:1 | ClassThree | | classes.kt:17:1:18:1 | ClassFive | classes.kt:12:1:15:1 | ClassFour | -| classes.kt:28:1:29:1 | ClassSix | classes.kt:12:1:15:1 | ClassFour | -| classes.kt:28:1:29:1 | ClassSix | classes.kt:20:1:22:1 | IF1 | -| classes.kt:28:1:29:1 | ClassSix | classes.kt:24:1:26:1 | IF2 | +| classes.kt:28:1:30:1 | ClassSix | classes.kt:12:1:15:1 | ClassFour | +| classes.kt:28:1:30:1 | ClassSix | classes.kt:20:1:22:1 | IF1 | +| classes.kt:28:1:30:1 | ClassSix | classes.kt:24:1:26:1 | IF2 | | file://:0:0:0:0 | Unit | file://:0:0:0:0 | Any | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 4fd7528f37a..a4a3abd2d11 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -43,6 +43,8 @@ | exprs.kt:46:18:46:20 | 456 | IntegerLiteral | | exprs.kt:50:13:50:16 | true | BooleanLiteral | | exprs.kt:50:13:50:23 | ::class | ClassExpr | +| exprs.kt:54:27:54:31 | (no string representation) | ClassInstanceExpr | +| exprs.kt:54:29:54:30 | 42 | IntegerLiteral | | file://:0:0:0:0 | b1 | LocalVariableDeclExpr | | file://:0:0:0:0 | b2 | LocalVariableDeclExpr | | file://:0:0:0:0 | b6 | LocalVariableDeclExpr | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index d41729bbe04..98fe83e6125 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -48,4 +48,8 @@ TODO fun getClass() { val d = true::class -} \ No newline at end of file +} + +class C(val n: Int) { + fun foo(): C { return C(42) } +} From f18ab2e91359f1dacf64a46b01e8078de541b014 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 24 Sep 2021 13:34:05 +0200 Subject: [PATCH 0553/1618] Reduce parameter passing, and compute label for enclosing callable on the fly --- .../main/kotlin/KotlinExtractorExtension.kt | 73 ++++++++++--------- 1 file changed, 37 insertions(+), 36 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index e0a23111d48..06f5c01c4cd 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -519,7 +519,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeStmts_block(id, parent, idx, callable) tw.writeHasLocation(id, locId) for((sIdx, stmt) in b.statements.withIndex()) { - extractStatement(stmt, callable, irCallable, id, sIdx) + extractStatement(stmt, irCallable, id, sIdx) } } @@ -527,7 +527,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return tw.getVariableLabelFor(v) } - fun extractVariable(v: IrVariable, callable: Label, irCallable: IrFunction) { + fun extractVariable(v: IrVariable, irCallable: IrFunction) { val id = useVariable(v) val locId = tw.getLocation(v) val typeId = useType(v.type) @@ -538,17 +538,17 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeHasLocation(id, locId) val i = v.initializer if(i != null) { - extractExpression(i, callable, irCallable, decId, 0) + extractExpression(i, irCallable, decId, 0) } } - fun extractStatement(s: IrStatement, callable: Label, irCallable: IrFunction, parent: Label, idx: Int) { + fun extractStatement(s: IrStatement, irCallable: IrFunction, parent: Label, idx: Int) { when(s) { is IrExpression -> { - extractExpression(s, callable, irCallable, parent, idx) + extractExpression(s, irCallable, parent, idx) } is IrVariable -> { - extractVariable(s, callable, irCallable) + extractVariable(s, irCallable) } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrStatement: " + s.javaClass, s) @@ -571,7 +571,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - fun extractCall(c: IrCall, callable: Label, irCallable: IrFunction, parent: Label, idx: Int) { + fun extractCall(c: IrCall, irCallable: IrFunction, parent: Label, idx: Int) { val exprId: Label = when { c.origin == PLUS -> { val id = tw.getFreshIdLabel() @@ -657,12 +657,12 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val dr = c.dispatchReceiver val offset = if(dr == null) 0 else 1 if(dr != null) { - extractExpression(dr, callable, irCallable, exprId, 0) // todo: should this be at index -1 instead? + extractExpression(dr, irCallable, exprId, 0) // todo: should this be at index -1 instead? } for(i in 0 until c.valueArgumentsCount) { val arg = c.getValueArgument(i) if(arg != null) { - extractExpression(arg, callable, irCallable, exprId, i + offset) + extractExpression(arg, irCallable, exprId, i + offset) } } @@ -673,7 +673,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi e: IrFunctionAccessExpression, parent: Label, idx: Int, - callable: Label, irCallable: IrFunction ) { val id = tw.getFreshIdLabel() @@ -686,12 +685,12 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi for (i in 0 until e.valueArgumentsCount) { val arg = e.getValueArgument(i) if (arg != null) { - extractExpression(arg, callable, irCallable, id, i) + extractExpression(arg, irCallable, id, i) } } val dr = e.dispatchReceiver if (dr != null) { - extractExpression(dr, callable, irCallable, id, -3) + extractExpression(dr, irCallable, id, -3) } // todo: type arguments at index -4, -5, ... @@ -699,7 +698,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi private val loopIdMap: MutableMap> = mutableMapOf() - fun extractExpression(e: IrExpression, callable: Label, irCallable: IrFunction, parent: Label, idx: Int) { + fun extractExpression(e: IrExpression, irCallable: IrFunction, parent: Label, idx: Int) { + val callableLabel = useFunction(irCallable) when(e) { is IrInstanceInitializerCall -> { // todo: how do we want to handle this? @@ -713,6 +713,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val currentClass = (irCallable as IrDeclaration).parent as IrClass val id: Label + val callable = useFunction(irCallable) if (delegatingClass != currentClass) { id = tw.getFreshIdLabel() tw.writeStmts_superconstructorinvocationstmt(id, parent, idx, callable) @@ -730,23 +731,23 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi for (i in 0 until e.valueArgumentsCount) { val arg = e.getValueArgument(i) if (arg != null) { - extractExpression(arg, callable, irCallable, id, i) + extractExpression(arg, irCallable, id, i) } } val dr = e.dispatchReceiver if (dr != null) { - extractExpression(dr, callable, irCallable, id, -1) + extractExpression(dr, irCallable, id, -1) } // todo: type arguments at index -2, -3, ... } is IrConstructorCall -> { - extractConstructorCall(e, parent, idx, callable, irCallable) + extractConstructorCall(e, parent, idx, irCallable) } is IrEnumConstructorCall -> { - extractConstructorCall(e, parent, idx, callable, irCallable) + extractConstructorCall(e, parent, idx, irCallable) } - is IrCall -> extractCall(e, callable, irCallable, parent, idx) + is IrCall -> extractCall(e, irCallable, parent, idx) is IrConst<*> -> { val v = e.value when(v) { @@ -828,51 +829,51 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val vId = useValueDeclaration(e.symbol.owner) tw.writeVariableBinding(lhsId, vId) - extractExpression(e.value, callable, irCallable, id, 1) + extractExpression(e.value, irCallable, id, 1) } is IrThrow -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) - tw.writeStmts_throwstmt(id, parent, idx, callable) + tw.writeStmts_throwstmt(id, parent, idx, callableLabel) tw.writeHasLocation(id, locId) - extractExpression(e.value, callable, irCallable, id, 0) + extractExpression(e.value, irCallable, id, 0) } is IrBreak -> { val id = tw.getFreshIdLabel() - tw.writeStmts_breakstmt(id, parent, idx, callable) + tw.writeStmts_breakstmt(id, parent, idx, callableLabel) extractBreakContinue(e, id) } is IrContinue -> { val id = tw.getFreshIdLabel() - tw.writeStmts_continuestmt(id, parent, idx, callable) + tw.writeStmts_continuestmt(id, parent, idx, callableLabel) extractBreakContinue(e, id) } is IrReturn -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) - tw.writeStmts_returnstmt(id, parent, idx, callable) + tw.writeStmts_returnstmt(id, parent, idx, callableLabel) tw.writeHasLocation(id, locId) - extractExpression(e.value, callable, irCallable, id, 0) + extractExpression(e.value, irCallable, id, 0) } is IrContainerExpression -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) - tw.writeStmts_block(id, parent, idx, callable) + tw.writeStmts_block(id, parent, idx, callableLabel) tw.writeHasLocation(id, locId) e.statements.forEachIndexed { i, s -> - extractStatement(s, callable, irCallable, id, i) + extractStatement(s, irCallable, id, i) } } is IrWhileLoop -> { val id = tw.getFreshIdLabel() loopIdMap[e] = id val locId = tw.getLocation(e) - tw.writeStmts_whilestmt(id, parent, idx, callable) + tw.writeStmts_whilestmt(id, parent, idx, callableLabel) tw.writeHasLocation(id, locId) - extractExpression(e.condition, callable, irCallable, id, 0) + extractExpression(e.condition, irCallable, id, 0) val body = e.body if(body != null) { - extractExpression(body, callable, irCallable, id, 1) + extractExpression(body, irCallable, id, 1) } loopIdMap.remove(e) } @@ -880,12 +881,12 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val id = tw.getFreshIdLabel() loopIdMap[e] = id val locId = tw.getLocation(e) - tw.writeStmts_dostmt(id, parent, idx, callable) + tw.writeStmts_dostmt(id, parent, idx, callableLabel) tw.writeHasLocation(id, locId) - extractExpression(e.condition, callable, irCallable, id, 0) + extractExpression(e.condition, irCallable, id, 0) val body = e.body if(body != null) { - extractExpression(body, callable, irCallable, id, 1) + extractExpression(body, irCallable, id, 1) } loopIdMap.remove(e) } @@ -903,8 +904,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val bLocId = tw.getLocation(b) tw.writeWhen_branch(bId, id, i) tw.writeHasLocation(bId, bLocId) - extractExpression(b.condition, callable, irCallable, bId, 0) - extractExpression(b.result, callable, irCallable, bId, 1) + extractExpression(b.condition, irCallable, bId, 0) + extractExpression(b.result, irCallable, bId, 1) if(b is IrElseBranch) { tw.writeWhen_branch_else(bId) } @@ -916,7 +917,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val typeId = useType(e.type) tw.writeExprs_getclassexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) - extractExpression(e.argument, callable, irCallable, id, 0) + extractExpression(e.argument, irCallable, id, 0) } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) From e31c573fb5389f9a48c13fa3006644ed002db91f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 24 Sep 2021 13:36:34 +0200 Subject: [PATCH 0554/1618] Remove redundant cast --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 06f5c01c4cd..7823d8fbd6c 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -710,7 +710,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } is IrDelegatingConstructorCall -> { val delegatingClass = e.symbol.owner.parent as IrClass - val currentClass = (irCallable as IrDeclaration).parent as IrClass + val currentClass = irCallable.parent as IrClass val id: Label val callable = useFunction(irCallable) From b87c8e25299922a69cff2ab54d5ec01747dac82f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 24 Sep 2021 15:31:14 +0200 Subject: [PATCH 0555/1618] Extract generated method, and calls to it --- .../main/kotlin/KotlinExtractorExtension.kt | 65 ++++++++++++++----- .../kotlin/library-tests/exprs/exprs.expected | 1 + .../library-tests/methods/exprs.expected | 3 + .../library-tests/methods/methods.expected | 5 ++ .../kotlin/library-tests/types/types.expected | 1 + 5 files changed, 58 insertions(+), 17 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 7823d8fbd6c..618ebd6d290 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -43,7 +43,7 @@ class KotlinExtractorExtension(private val invocationTrapFile: String, private v moduleFragment.files.mapIndexed { index: Int, file: IrFile -> val fileTrapWriter = FileTrapWriter(lm, invocationTrapFileBW, file) fileTrapWriter.writeCompilation_compiling_files(compilation, index, fileTrapWriter.fileId) - doFile(invocationTrapFile, fileTrapWriter, checkTrapIdentical, logCounter, trapDir, srcDir, file) + doFile(invocationTrapFile, fileTrapWriter, checkTrapIdentical, logCounter, trapDir, srcDir, file, pluginContext) } logger.printLimitedWarningCounts() // We don't want the compiler to continue and generate class @@ -94,7 +94,14 @@ private fun equivalentTrap(f1: File, f2: File): Boolean { } } -fun doFile(invocationTrapFile: String, fileTrapWriter: FileTrapWriter, checkTrapIdentical: Boolean, logCounter: LogCounter, trapDir: File, srcDir: File, file: IrFile) { +fun doFile(invocationTrapFile: String, + fileTrapWriter: FileTrapWriter, + checkTrapIdentical: Boolean, + logCounter: LogCounter, + trapDir: File, + srcDir: File, + file: IrFile, + pluginContext: IrPluginContext) { val filePath = file.path val logger = FileLogger(logCounter, fileTrapWriter) logger.info("Extracting file $filePath") @@ -116,7 +123,7 @@ fun doFile(invocationTrapFile: String, fileTrapWriter: FileTrapWriter, checkTrap trapTmpFile.bufferedWriter().use { trapFileBW -> trapFileBW.write("// Generated by invocation ${invocationTrapFile.replace("\n", "\n// ")}\n") val tw = FileTrapWriter(TrapLabelManager(), trapFileBW, file) - val fileExtractor = KotlinFileExtractor(logger, tw, file) + val fileExtractor = KotlinFileExtractor(logger, tw, file, pluginContext) fileExtractor.extractFileContents(tw.fileId) } if (checkTrapIdentical && trapFile.exists()) { @@ -151,7 +158,7 @@ fun fakeLabel(): Label { return IntLabel(0) } -class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val file: IrFile) { +class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val file: IrFile, val pluginContext: IrPluginContext) { val fileClass by lazy { extractFileClass(file) } @@ -213,11 +220,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi is IrClass -> extractClass(declaration) is IrFunction -> extractFunction(declaration, if (optParentid.isPresent()) optParentid.get() else fileClass) is IrAnonymousInitializer -> { - // todo: how do we want to represent this? - // there could be multiple 'init' blocks inside a declaration. - // We could add a generated 'init' method, with all the statements inside the blocks. - // In Kotlin/JVM, the statements inside 'init' blocks get copied to the default constructor, or if there's no default then to all of them. - logger.warnElement(Severity.ErrorSevere, "Todo: handle IrAnonymousInitializer", declaration) + // Leaving this intentionally empty. init blocks are extracted during class extraction. } is IrProperty -> extractProperty(declaration, if (optParentid.isPresent()) optParentid.get() else fileClass) else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclaration: " + declaration.javaClass, declaration) @@ -363,6 +366,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } c.declarations.map { extractDeclaration(it, Optional.of(id)) } + + extractObjectInitializerFunction(c, id) + return id } @@ -399,10 +405,14 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } private fun getFunctionLabel(f: IrFunction) : String { - val paramTypeIds = f.valueParameters.joinToString() { "{${useType(erase(it.type)).toString()}}" } - val returnTypeId = useType(erase(f.returnType)) - val parentId = useDeclarationParent(f.parent) - val label = "@\"callable;{$parentId}.${f.name.asString()}($paramTypeIds){$returnTypeId}\"" + return getFunctionLabel(f.parent, f.name.asString(), f.valueParameters, f.returnType) + } + + private fun getFunctionLabel(parent: IrDeclarationParent, name: String, parameters: List, returnType: IrType) : String { + val paramTypeIds = parameters.joinToString() { "{${useType(erase(it.type)).toString()}}" } + val returnTypeId = useType(erase(returnType)) + val parentId = useDeclarationParent(parent) + val label = "@\"callable;{$parentId}.$name($paramTypeIds){$returnTypeId}\"" return label } @@ -459,6 +469,19 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeParamName(id, vp.name.asString()) } + private fun extractObjectInitializerFunction(c: IrClass, parentid: Label) { + var methodLabel = getFunctionLabel(c, "", listOf(), pluginContext.irBuiltIns.unitType) + val methodId = tw.getLabelFor(methodLabel) + val signature = "TODO" + val returnTypeId = useType(pluginContext.irBuiltIns.unitType) + tw.writeMethods(methodId, "", signature, returnTypeId, parentid, methodId) + + val locId = tw.getLocation(c) + tw.writeHasLocation(methodId, locId) + + // todo add body with non-static field initializers, and init blocks + } + fun extractFunction(f: IrFunction, parentid: Label) { val id = useFunction(f) val locId = tw.getLocation(f) @@ -702,11 +725,19 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val callableLabel = useFunction(irCallable) when(e) { is IrInstanceInitializerCall -> { - // todo: how do we want to handle this? - // In Kotlin/JVM, this seems like a no-op. - if (e.classSymbol.owner.declarations.any { it is IrAnonymousInitializer }) { - // we could add a call to a generated 'init' function. + if (irCallable is IrConstructor && irCallable.isPrimary) { + // Todo add parameter to field assignments } + + // Add call to : + val id = tw.getFreshIdLabel() + val typeId = useType(e.type) + val locId = tw.getLocation(e) + var methodLabel = getFunctionLabel(irCallable.parent, "", listOf(), e.type) + val methodId = tw.getLabelFor(methodLabel) + tw.writeExprs_methodaccess(id, typeId, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeCallableBinding(id, methodId) } is IrDelegatingConstructorCall -> { val delegatingClass = e.symbol.owner.parent as IrClass diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index a4a3abd2d11..d069b71428e 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -43,6 +43,7 @@ | exprs.kt:46:18:46:20 | 456 | IntegerLiteral | | exprs.kt:50:13:50:16 | true | BooleanLiteral | | exprs.kt:50:13:50:23 | ::class | ClassExpr | +| exprs.kt:53:1:55:1 | (...) | MethodAccess | | exprs.kt:54:27:54:31 | (no string representation) | ClassInstanceExpr | | exprs.kt:54:29:54:30 | 42 | IntegerLiteral | | file://:0:0:0:0 | b1 | LocalVariableDeclExpr | diff --git a/java/ql/test/kotlin/library-tests/methods/exprs.expected b/java/ql/test/kotlin/library-tests/methods/exprs.expected index 318f99088f3..161483d6537 100644 --- a/java/ql/test/kotlin/library-tests/methods/exprs.expected +++ b/java/ql/test/kotlin/library-tests/methods/exprs.expected @@ -1,3 +1,6 @@ +| methods2.kt:7:1:10:1 | (...) | MethodAccess | +| methods3.kt:5:1:7:1 | (...) | MethodAccess | +| methods.kt:5:1:13:1 | (...) | MethodAccess | | methods.kt:10:9:10:25 | classMethod(...) | MethodAccess | | methods.kt:10:9:10:25 | this | ThisAccess | | methods.kt:10:21:10:21 | a | VarAccess | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index 5a38d3a8386..2bec451312f 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -1,5 +1,7 @@ methods | file://:0:0:0:0 | | +| file://:0:0:0:0 | | +| file://:0:0:0:0 | | | file://:0:0:0:0 | equals | | file://:0:0:0:0 | equals | | file://:0:0:0:0 | hashCode | @@ -8,18 +10,21 @@ methods | file://:0:0:0:0 | toString | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | | methods2.kt:7:1:10:1 | | +| methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | equals | | methods2.kt:7:1:10:1 | hashCode | | methods2.kt:7:1:10:1 | toString | | methods2.kt:8:5:9:5 | fooBarClassMethod | | methods3.kt:3:1:3:39 | fooBarTopLevelMethod | | methods3.kt:5:1:7:1 | | +| methods3.kt:5:1:7:1 | | | methods3.kt:5:1:7:1 | equals | | methods3.kt:5:1:7:1 | hashCode | | methods3.kt:5:1:7:1 | toString | | methods3.kt:6:5:6:43 | fooBarTopLevelMethod | | methods.kt:2:1:3:1 | topLevelMethod | | methods.kt:5:1:13:1 | | +| methods.kt:5:1:13:1 | | | methods.kt:5:1:13:1 | equals | | methods.kt:5:1:13:1 | hashCode | | methods.kt:5:1:13:1 | toString | diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index 97973c3a68d..3b16c46fd69 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -1,5 +1,6 @@ | file://:0:0:0:0 | | NullType | | file://:0:0:0:0 | Any | Class | +| file://:0:0:0:0 | Unit | Class | | file://:0:0:0:0 | boolean | PrimitiveType | | file://:0:0:0:0 | byte | PrimitiveType | | file://:0:0:0:0 | char | PrimitiveType | From 76fd386055ff01ef8e27e7e40de9c5ee36dbbee3 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 24 Sep 2021 15:31:44 +0200 Subject: [PATCH 0556/1618] Extract content of methods --- .../main/kotlin/KotlinExtractorExtension.kt | 159 ++++++++++++------ .../library-tests/classes/classes.expected | 2 + .../kotlin/library-tests/classes/classes.kt | 17 ++ .../library-tests/classes/ctorCalls.expected | 1 + .../library-tests/classes/initBlocks.expected | 24 +++ .../library-tests/classes/initBlocks.ql | 9 + .../library-tests/classes/superTypes.expected | 1 + .../kotlin/library-tests/exprs/exprs.expected | 3 + .../library-tests/methods/methods.expected | 2 - .../variables/variableAccesses.expected | 3 + 10 files changed, 171 insertions(+), 50 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/classes/initBlocks.expected create mode 100644 java/ql/test/kotlin/library-tests/classes/initBlocks.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 618ebd6d290..3a55d347437 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -469,20 +469,70 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeParamName(id, vp.name.asString()) } - private fun extractObjectInitializerFunction(c: IrClass, parentid: Label) { - var methodLabel = getFunctionLabel(c, "", listOf(), pluginContext.irBuiltIns.unitType) - val methodId = tw.getLabelFor(methodLabel) + private fun extractObjectInitializerFunction(c: IrClass, parentId: Label) { + if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || + c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { + return + } + + // add method: + var obinitLabel = getFunctionLabel(c, "", listOf(), pluginContext.irBuiltIns.unitType) + val obinitId = tw.getLabelFor(obinitLabel) val signature = "TODO" val returnTypeId = useType(pluginContext.irBuiltIns.unitType) - tw.writeMethods(methodId, "", signature, returnTypeId, parentid, methodId) + tw.writeMethods(obinitId, "", signature, returnTypeId, parentId, obinitId) val locId = tw.getLocation(c) - tw.writeHasLocation(methodId, locId) + tw.writeHasLocation(obinitId, locId) - // todo add body with non-static field initializers, and init blocks + // add body: + val blockId = tw.getFreshIdLabel() + tw.writeStmts_block(blockId, obinitId, 0, obinitId) + tw.writeHasLocation(blockId, locId) + + // body content with field initializers and init blocks + var idx = 0 + for (decl in c.declarations) { + when (decl) { + is IrProperty -> { + val backingField = decl.backingField + val initializer = backingField?.initializer + + if (backingField == null || backingField.isStatic || initializer == null) { + continue + } + + val assignmentId = tw.getFreshIdLabel() + val typeId = useType(initializer.expression.type) + val locId = tw.getLocation(decl) + tw.writeExprs_assignexpr(assignmentId, typeId, blockId, idx++) + tw.writeHasLocation(assignmentId, locId) + + val lhsId = tw.getFreshIdLabel() + val lhsTypeId = useType(backingField.type) + tw.writeExprs_varaccess(lhsId, lhsTypeId, assignmentId, 0) + tw.writeHasLocation(lhsId, locId) + val vId = useProperty(decl) // todo: fix this. We should be assigning the field, and not the property + tw.writeVariableBinding(lhsId, vId) + + extractExpression(initializer.expression, obinitId, assignmentId, 1) + } + is IrAnonymousInitializer -> { + if (decl.isStatic) { + continue + } + + for (stmt in decl.body.statements) { + extractStatement(stmt, obinitId, blockId, idx++) + } + } + else -> continue + } + } } fun extractFunction(f: IrFunction, parentid: Label) { + currentFunction = f val id = useFunction(f) val locId = tw.getLocation(f) val signature = "TODO" @@ -491,7 +541,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeHasLocation(id, locId) val body = f.body if(body != null) { - extractBody(body, id, f) + extractBody(body, id) } f.valueParameters.forEachIndexed { i, vp -> extractValueParameter(vp, id, i) @@ -502,6 +552,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val extendedType = useType(extReceiver.type) tw.writeKtExtensionFunctions(id, extendedType) } + currentFunction = null } private fun getPropertyLabel(p: IrProperty) : String { @@ -529,20 +580,20 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - fun extractBody(b: IrBody, callable: Label, irCallable: IrFunction) { + fun extractBody(b: IrBody, callable: Label) { when(b) { - is IrBlockBody -> extractBlockBody(b, callable, irCallable, callable, 0) + is IrBlockBody -> extractBlockBody(b, callable, callable, 0) else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrBody: " + b.javaClass, b) } } - fun extractBlockBody(b: IrBlockBody, callable: Label, irCallable: IrFunction, parent: Label, idx: Int) { + fun extractBlockBody(b: IrBlockBody, callable: Label, parent: Label, idx: Int) { val id = tw.getFreshIdLabel() val locId = tw.getLocation(b) tw.writeStmts_block(id, parent, idx, callable) tw.writeHasLocation(id, locId) for((sIdx, stmt) in b.statements.withIndex()) { - extractStatement(stmt, irCallable, id, sIdx) + extractStatement(stmt, callable, id, sIdx) } } @@ -550,7 +601,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return tw.getVariableLabelFor(v) } - fun extractVariable(v: IrVariable, irCallable: IrFunction) { + fun extractVariable(v: IrVariable, callable: Label) { val id = useVariable(v) val locId = tw.getLocation(v) val typeId = useType(v.type) @@ -561,17 +612,17 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeHasLocation(id, locId) val i = v.initializer if(i != null) { - extractExpression(i, irCallable, decId, 0) + extractExpression(i, callable, decId, 0) } } - fun extractStatement(s: IrStatement, irCallable: IrFunction, parent: Label, idx: Int) { + fun extractStatement(s: IrStatement, callable: Label, parent: Label, idx: Int) { when(s) { is IrExpression -> { - extractExpression(s, irCallable, parent, idx) + extractExpression(s, callable, parent, idx) } is IrVariable -> { - extractVariable(s, irCallable) + extractVariable(s, callable) } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrStatement: " + s.javaClass, s) @@ -594,7 +645,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - fun extractCall(c: IrCall, irCallable: IrFunction, parent: Label, idx: Int) { + fun extractCall(c: IrCall, callable: Label, parent: Label, idx: Int) { val exprId: Label = when { c.origin == PLUS -> { val id = tw.getFreshIdLabel() @@ -680,12 +731,12 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val dr = c.dispatchReceiver val offset = if(dr == null) 0 else 1 if(dr != null) { - extractExpression(dr, irCallable, exprId, 0) // todo: should this be at index -1 instead? + extractExpression(dr, callable, exprId, 0) // todo: should this be at index -1 instead? } for(i in 0 until c.valueArgumentsCount) { val arg = c.getValueArgument(i) if(arg != null) { - extractExpression(arg, irCallable, exprId, i + offset) + extractExpression(arg, callable, exprId, i + offset) } } @@ -696,7 +747,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi e: IrFunctionAccessExpression, parent: Label, idx: Int, - irCallable: IrFunction + callable: Label ) { val id = tw.getFreshIdLabel() val typeId = useType(e.type) @@ -708,12 +759,12 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi for (i in 0 until e.valueArgumentsCount) { val arg = e.getValueArgument(i) if (arg != null) { - extractExpression(arg, irCallable, id, i) + extractExpression(arg, callable, id, i) } } val dr = e.dispatchReceiver if (dr != null) { - extractExpression(dr, irCallable, id, -3) + extractExpression(dr, callable, id, -3) } // todo: type arguments at index -4, -5, ... @@ -721,10 +772,17 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi private val loopIdMap: MutableMap> = mutableMapOf() - fun extractExpression(e: IrExpression, irCallable: IrFunction, parent: Label, idx: Int) { - val callableLabel = useFunction(irCallable) + private var currentFunction: IrFunction? = null + + fun extractExpression(e: IrExpression, callable: Label, parent: Label, idx: Int) { when(e) { is IrInstanceInitializerCall -> { + val irCallable = currentFunction + if (irCallable == null) { + logger.warnElement(Severity.ErrorSevere, "Current function is not set", e) + return + } + if (irCallable is IrConstructor && irCallable.isPrimary) { // Todo add parameter to field assignments } @@ -740,11 +798,16 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeCallableBinding(id, methodId) } is IrDelegatingConstructorCall -> { + val irCallable = currentFunction + if (irCallable == null) { + logger.warnElement(Severity.ErrorSevere, "Current function is not set", e) + return + } + val delegatingClass = e.symbol.owner.parent as IrClass val currentClass = irCallable.parent as IrClass val id: Label - val callable = useFunction(irCallable) if (delegatingClass != currentClass) { id = tw.getFreshIdLabel() tw.writeStmts_superconstructorinvocationstmt(id, parent, idx, callable) @@ -762,23 +825,23 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi for (i in 0 until e.valueArgumentsCount) { val arg = e.getValueArgument(i) if (arg != null) { - extractExpression(arg, irCallable, id, i) + extractExpression(arg, callable, id, i) } } val dr = e.dispatchReceiver if (dr != null) { - extractExpression(dr, irCallable, id, -1) + extractExpression(dr, callable, id, -1) } // todo: type arguments at index -2, -3, ... } is IrConstructorCall -> { - extractConstructorCall(e, parent, idx, irCallable) + extractConstructorCall(e, parent, idx, callable) } is IrEnumConstructorCall -> { - extractConstructorCall(e, parent, idx, irCallable) + extractConstructorCall(e, parent, idx, callable) } - is IrCall -> extractCall(e, irCallable, parent, idx) + is IrCall -> extractCall(e, callable, parent, idx) is IrConst<*> -> { val v = e.value when(v) { @@ -860,51 +923,51 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val vId = useValueDeclaration(e.symbol.owner) tw.writeVariableBinding(lhsId, vId) - extractExpression(e.value, irCallable, id, 1) + extractExpression(e.value, callable, id, 1) } is IrThrow -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) - tw.writeStmts_throwstmt(id, parent, idx, callableLabel) + tw.writeStmts_throwstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) - extractExpression(e.value, irCallable, id, 0) + extractExpression(e.value, callable, id, 0) } is IrBreak -> { val id = tw.getFreshIdLabel() - tw.writeStmts_breakstmt(id, parent, idx, callableLabel) + tw.writeStmts_breakstmt(id, parent, idx, callable) extractBreakContinue(e, id) } is IrContinue -> { val id = tw.getFreshIdLabel() - tw.writeStmts_continuestmt(id, parent, idx, callableLabel) + tw.writeStmts_continuestmt(id, parent, idx, callable) extractBreakContinue(e, id) } is IrReturn -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) - tw.writeStmts_returnstmt(id, parent, idx, callableLabel) + tw.writeStmts_returnstmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) - extractExpression(e.value, irCallable, id, 0) + extractExpression(e.value, callable, id, 0) } is IrContainerExpression -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) - tw.writeStmts_block(id, parent, idx, callableLabel) + tw.writeStmts_block(id, parent, idx, callable) tw.writeHasLocation(id, locId) e.statements.forEachIndexed { i, s -> - extractStatement(s, irCallable, id, i) + extractStatement(s, callable, id, i) } } is IrWhileLoop -> { val id = tw.getFreshIdLabel() loopIdMap[e] = id val locId = tw.getLocation(e) - tw.writeStmts_whilestmt(id, parent, idx, callableLabel) + tw.writeStmts_whilestmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) - extractExpression(e.condition, irCallable, id, 0) + extractExpression(e.condition, callable, id, 0) val body = e.body if(body != null) { - extractExpression(body, irCallable, id, 1) + extractExpression(body, callable, id, 1) } loopIdMap.remove(e) } @@ -912,12 +975,12 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val id = tw.getFreshIdLabel() loopIdMap[e] = id val locId = tw.getLocation(e) - tw.writeStmts_dostmt(id, parent, idx, callableLabel) + tw.writeStmts_dostmt(id, parent, idx, callable) tw.writeHasLocation(id, locId) - extractExpression(e.condition, irCallable, id, 0) + extractExpression(e.condition, callable, id, 0) val body = e.body if(body != null) { - extractExpression(body, irCallable, id, 1) + extractExpression(body, callable, id, 1) } loopIdMap.remove(e) } @@ -935,8 +998,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val bLocId = tw.getLocation(b) tw.writeWhen_branch(bId, id, i) tw.writeHasLocation(bId, bLocId) - extractExpression(b.condition, irCallable, bId, 0) - extractExpression(b.result, irCallable, bId, 1) + extractExpression(b.condition, callable, bId, 0) + extractExpression(b.result, callable, bId, 1) if(b is IrElseBranch) { tw.writeWhen_branch_else(bId) } @@ -948,7 +1011,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val typeId = useType(e.type) tw.writeExprs_getclassexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) - extractExpression(e.argument, irCallable, id, 0) + extractExpression(e.argument, callable, id, 0) } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index 8b7d714d35f..f114e3d1c7a 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -4,5 +4,7 @@ | classes.kt:12:1:15:1 | ClassFour | | classes.kt:17:1:18:1 | ClassFive | | classes.kt:28:1:30:1 | ClassSix | +| classes.kt:34:1:47:1 | ClassSeven | | file://:0:0:0:0 | Any | +| file://:0:0:0:0 | ClassesKt | | file://:0:0:0:0 | Unit | diff --git a/java/ql/test/kotlin/library-tests/classes/classes.kt b/java/ql/test/kotlin/library-tests/classes/classes.kt index 12426dcab27..e7804278409 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.kt +++ b/java/ql/test/kotlin/library-tests/classes/classes.kt @@ -29,3 +29,20 @@ class ClassSix(): ClassFour(), IF1, IF2 { constructor(i: Int): this(){ } } +fun f(s: String) {} + +class ClassSeven { + constructor(i: String) { + f(i) + } + init { + f("init1") + } + + val x: Int = 3 + + init { + f("init2") + } +} + diff --git a/java/ql/test/kotlin/library-tests/classes/ctorCalls.expected b/java/ql/test/kotlin/library-tests/classes/ctorCalls.expected index 861a6d869a8..741be08112c 100644 --- a/java/ql/test/kotlin/library-tests/classes/ctorCalls.expected +++ b/java/ql/test/kotlin/library-tests/classes/ctorCalls.expected @@ -7,3 +7,4 @@ superCall | classes.kt:12:23:12:34 | super(...) | | classes.kt:17:18:17:28 | super(...) | | classes.kt:28:19:28:29 | super(...) | +| classes.kt:35:27:35:26 | super(...) | diff --git a/java/ql/test/kotlin/library-tests/classes/initBlocks.expected b/java/ql/test/kotlin/library-tests/classes/initBlocks.expected new file mode 100644 index 00000000000..5919df9a283 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/classes/initBlocks.expected @@ -0,0 +1,24 @@ +initBlocks +| classes.kt:2:1:2:18 | | +| classes.kt:4:1:6:1 | | +| classes.kt:8:1:10:1 | | +| classes.kt:12:1:15:1 | | +| classes.kt:17:1:18:1 | | +| classes.kt:20:1:22:1 | | +| classes.kt:24:1:26:1 | | +| classes.kt:28:1:30:1 | | +| classes.kt:34:1:47:1 | | +initCall +| classes.kt:2:1:2:18 | (...) | +| classes.kt:4:1:6:1 | (...) | +| classes.kt:8:1:10:1 | (...) | +| classes.kt:12:1:15:1 | (...) | +| classes.kt:17:1:18:1 | (...) | +| classes.kt:28:1:30:1 | (...) | +| classes.kt:35:5:37:5 | (...) | +initExpressions +| classes.kt:4:17:4:28 | ...=... | 0 | +| classes.kt:5:5:5:18 | ...=... | 1 | +| classes.kt:39:9:39:18 | f(...) | 0 | +| classes.kt:42:5:42:18 | ...=... | 1 | +| classes.kt:45:9:45:18 | f(...) | 2 | diff --git a/java/ql/test/kotlin/library-tests/classes/initBlocks.ql b/java/ql/test/kotlin/library-tests/classes/initBlocks.ql new file mode 100644 index 00000000000..c5be602f1c2 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/classes/initBlocks.ql @@ -0,0 +1,9 @@ +import java + +query predicate initBlocks(Method m) { m.hasName("") } + +query predicate initCall(MethodAccess ma) { ma.getMethod().hasName("") } + +query predicate initExpressions(Expr e, int i) { + exists(Method m | m.hasName("") | e.getParent() = m.getBody() and i = e.getIndex()) +} diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.expected b/java/ql/test/kotlin/library-tests/classes/superTypes.expected index 38a196c5aed..836d713758b 100644 --- a/java/ql/test/kotlin/library-tests/classes/superTypes.expected +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.expected @@ -6,4 +6,5 @@ | classes.kt:28:1:30:1 | ClassSix | classes.kt:12:1:15:1 | ClassFour | | classes.kt:28:1:30:1 | ClassSix | classes.kt:20:1:22:1 | IF1 | | classes.kt:28:1:30:1 | ClassSix | classes.kt:24:1:26:1 | IF2 | +| classes.kt:34:1:47:1 | ClassSeven | file://:0:0:0:0 | Any | | file://:0:0:0:0 | Unit | file://:0:0:0:0 | Any | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index d069b71428e..4b6fa4fab68 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -44,6 +44,9 @@ | exprs.kt:50:13:50:16 | true | BooleanLiteral | | exprs.kt:50:13:50:23 | ::class | ClassExpr | | exprs.kt:53:1:55:1 | (...) | MethodAccess | +| exprs.kt:53:9:53:18 | ...=... | AssignExpr | +| exprs.kt:53:9:53:18 | n | VarAccess | +| exprs.kt:53:9:53:18 | n | VarAccess | | exprs.kt:54:27:54:31 | (no string representation) | ClassInstanceExpr | | exprs.kt:54:29:54:30 | 42 | IntegerLiteral | | file://:0:0:0:0 | b1 | LocalVariableDeclExpr | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index 2bec451312f..9f002d86bf2 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -1,7 +1,5 @@ methods | file://:0:0:0:0 | | -| file://:0:0:0:0 | | -| file://:0:0:0:0 | | | file://:0:0:0:0 | equals | | file://:0:0:0:0 | equals | | file://:0:0:0:0 | hashCode | diff --git a/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected b/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected index 7573a048394..57e97ccca82 100644 --- a/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected +++ b/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected @@ -1,4 +1,7 @@ varAcc +| variables.kt:3:5:3:21 | prop | +| variables.kt:16:11:16:18 | o | +| variables.kt:16:11:16:18 | o | instAcc | variables.kt:21:11:21:15 | this | | variables.kt:24:9:24:8 | this | From 088e7adf8c99ec7f69a7d496ba4b56e29e6ecec6 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 30 Sep 2021 16:12:44 +0100 Subject: [PATCH 0557/1618] Kotlin: Handle zero-width locations for generated elements --- java/kotlin-extractor/src/main/kotlin/TrapWriter.kt | 8 +++++++- .../test/kotlin/library-tests/classes/ctorCalls.expected | 2 +- .../library-tests/variables/variableAccesses.expected | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt index 6f6d8ba0130..2a34ffb5afa 100644 --- a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt +++ b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt @@ -78,13 +78,19 @@ class FileTrapWriter ( return getLocation(e.startOffset, e.endOffset) } fun getLocation(startOffset: Int, endOffset: Int): Label { + // If the compiler doesn't have a location, then start and end are both -1 val unknownLoc = startOffset == -1 && endOffset == -1 + // If this is the location for a compiler-generated element, then it will + // be a zero-width location. QL doesn't support these, so we translate it + // into a one-width location. + val zeroWidthLoc = !unknownLoc && startOffset == endOffset val startLine = if(unknownLoc) 0 else fileEntry.getLineNumber(startOffset) + 1 val startColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(startOffset) + 1 val endLine = if(unknownLoc) 0 else fileEntry.getLineNumber(endOffset) + 1 val endColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(endOffset) + val endColumn2 = if(zeroWidthLoc) endColumn + 1 else endColumn val locFileId: Label = if (unknownLoc) unknownFileId else fileId - return getLocation(locFileId, startLine, startColumn, endLine, endColumn) + return getLocation(locFileId, startLine, startColumn, endLine, endColumn2) } fun getLocationString(e: IrElement): String { val path = irFile.path diff --git a/java/ql/test/kotlin/library-tests/classes/ctorCalls.expected b/java/ql/test/kotlin/library-tests/classes/ctorCalls.expected index 741be08112c..8b9a469ddc2 100644 --- a/java/ql/test/kotlin/library-tests/classes/ctorCalls.expected +++ b/java/ql/test/kotlin/library-tests/classes/ctorCalls.expected @@ -7,4 +7,4 @@ superCall | classes.kt:12:23:12:34 | super(...) | | classes.kt:17:18:17:28 | super(...) | | classes.kt:28:19:28:29 | super(...) | -| classes.kt:35:27:35:26 | super(...) | +| classes.kt:35:27:35:27 | super(...) | diff --git a/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected b/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected index 57e97ccca82..958fa5a8485 100644 --- a/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected +++ b/java/ql/test/kotlin/library-tests/variables/variableAccesses.expected @@ -4,8 +4,8 @@ varAcc | variables.kt:16:11:16:18 | o | instAcc | variables.kt:21:11:21:15 | this | -| variables.kt:24:9:24:8 | this | -| variables.kt:25:9:25:8 | this | +| variables.kt:24:9:24:9 | this | +| variables.kt:25:9:25:9 | this | | variables.kt:26:9:26:12 | this | | variables.kt:27:9:27:12 | this | | variables.kt:28:9:28:12 | this | From db5afe84b45db335aff018ca9e60c314d92d7630 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 4 Oct 2021 14:37:55 +0200 Subject: [PATCH 0558/1618] Code quality improvement (fix warning) --- .../src/main/kotlin/KotlinExtractorExtension.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 3a55d347437..047b07bb880 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -504,14 +504,14 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val assignmentId = tw.getFreshIdLabel() val typeId = useType(initializer.expression.type) - val locId = tw.getLocation(decl) + val declLocId = tw.getLocation(decl) tw.writeExprs_assignexpr(assignmentId, typeId, blockId, idx++) - tw.writeHasLocation(assignmentId, locId) + tw.writeHasLocation(assignmentId, declLocId) val lhsId = tw.getFreshIdLabel() val lhsTypeId = useType(backingField.type) tw.writeExprs_varaccess(lhsId, lhsTypeId, assignmentId, 0) - tw.writeHasLocation(lhsId, locId) + tw.writeHasLocation(lhsId, declLocId) val vId = useProperty(decl) // todo: fix this. We should be assigning the field, and not the property tw.writeVariableBinding(lhsId, vId) From 0c6e20928cba9560a683988c5d6f3436d2a166ae Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Mon, 4 Oct 2021 16:04:34 +0200 Subject: [PATCH 0559/1618] Kotlin: extract type parameters --- .../main/kotlin/KotlinExtractorExtension.kt | 21 +++++++++++++++++++ .../kotlin/library-tests/generics/generics.kt | 10 +++++++++ .../generics/typeParameters.expected | 5 +++++ .../library-tests/generics/typeParameters.ql | 5 +++++ 4 files changed, 41 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/generics/generics.kt create mode 100644 java/ql/test/kotlin/library-tests/generics/typeParameters.expected create mode 100644 java/ql/test/kotlin/library-tests/generics/typeParameters.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 047b07bb880..c3d2af5a4c1 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -302,6 +302,21 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return tw.getLabelFor(getTypeParameterLabel(param)) } + private fun extractTypeParameter(tp: IrTypeParameter, optParentid: Optional>) { + val id = useTypeParameter(tp) + + if (!optParentid.isPresent) { + logger.warnElement(Severity.ErrorSevere, "Couldn't find expected parent of type parameter.", tp) + return + } + + tw.writeTypeVars(id, tp.name.asString(), tp.index, 0, optParentid.get()) + val locId = tw.getLocation(tp) + tw.writeHasLocation(id, locId) + + // todo: add type bounds + } + private fun getClassLabel(c: IrClass): String { val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() @@ -365,6 +380,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } } + + c.typeParameters.map { extractTypeParameter(it, Optional.of(id)) } + c.declarations.map { extractDeclaration(it, Optional.of(id)) } extractObjectInitializerFunction(c, id) @@ -552,6 +570,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val extendedType = useType(extReceiver.type) tw.writeKtExtensionFunctions(id, extendedType) } + + f.typeParameters.map { extractTypeParameter(it, Optional.of(id)) } + currentFunction = null } diff --git a/java/ql/test/kotlin/library-tests/generics/generics.kt b/java/ql/test/kotlin/library-tests/generics/generics.kt new file mode 100644 index 00000000000..00e7e52782b --- /dev/null +++ b/java/ql/test/kotlin/library-tests/generics/generics.kt @@ -0,0 +1,10 @@ +package foo.bar + +fun Int.f(s: S): S { + return s +} + +class C1(val t: T) { + fun f1(t: T) {} + fun f2(u: U) {} +} diff --git a/java/ql/test/kotlin/library-tests/generics/typeParameters.expected b/java/ql/test/kotlin/library-tests/generics/typeParameters.expected new file mode 100644 index 00000000000..2ddfa5c5280 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/generics/typeParameters.expected @@ -0,0 +1,5 @@ +genericType +| generics.kt:7:10:7:10 | T | generics.kt:7:1:10:1 | C1 | +genericFunction +| generics.kt:3:6:3:6 | S | generics.kt:3:1:5:1 | f | +| generics.kt:9:10:9:10 | U | generics.kt:9:5:9:23 | f2 | diff --git a/java/ql/test/kotlin/library-tests/generics/typeParameters.ql b/java/ql/test/kotlin/library-tests/generics/typeParameters.ql new file mode 100644 index 00000000000..7965d1ec21d --- /dev/null +++ b/java/ql/test/kotlin/library-tests/generics/typeParameters.ql @@ -0,0 +1,5 @@ +import java + +query predicate genericType(TypeVariable tv, RefType rt) { tv.getGenericType() = rt } + +query predicate genericFunction(TypeVariable tv, GenericCallable c) { tv.getGenericCallable() = c } From 8dff527a0ea0b39cdf71000170498918cd55ad47 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 6 Oct 2021 17:27:19 +0200 Subject: [PATCH 0560/1618] WIP: type arg extraction --- .../main/kotlin/KotlinExtractorExtension.kt | 130 +++++++++++++----- java/ql/lib/semmle/code/java/Generics.qll | 6 +- .../library-tests/generics/DB-CHECK.expected | 30 ++++ .../library-tests/generics/generics.expected | 27 ++++ .../kotlin/library-tests/generics/generics.kt | 31 ++++- .../kotlin/library-tests/generics/generics.ql | 13 ++ .../generics/typeParameters.expected | 5 - .../library-tests/generics/typeParameters.ql | 5 - 8 files changed, 199 insertions(+), 48 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected create mode 100644 java/ql/test/kotlin/library-tests/generics/generics.expected create mode 100644 java/ql/test/kotlin/library-tests/generics/generics.ql delete mode 100644 java/ql/test/kotlin/library-tests/generics/typeParameters.expected delete mode 100644 java/ql/test/kotlin/library-tests/generics/typeParameters.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index c3d2af5a4c1..ed0a9a1f71d 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.* +import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.packageFqName @@ -217,7 +218,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun extractDeclaration(declaration: IrDeclaration, optParentid: Optional>) { when (declaration) { - is IrClass -> extractClass(declaration) + is IrClass -> useClass(declaration, listOf()) is IrFunction -> extractFunction(declaration, if (optParentid.isPresent()) optParentid.get() else fileClass) is IrAnonymousInitializer -> { // Leaving this intentionally empty. init blocks are extracted during class extraction. @@ -258,7 +259,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi s.classifier.owner is IrClass -> { val classifier: IrClassifierSymbol = s.classifier val cls: IrClass = classifier.owner as IrClass - return useClass(cls) + + return useClass(cls, s.arguments) } s.classifier.owner is IrTypeParameter -> { return useTypeParameter(s.classifier.owner as IrTypeParameter) @@ -275,7 +277,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun getLabel(element: IrElement) : String? { when (element) { is IrFile -> return "@\"${element.path};sourcefile\"" // todo: remove copy-pasted code - is IrClass -> return getClassLabel(element) + is IrClass -> return getClassLabel(element, listOf()) is IrTypeParameter -> return getTypeParameterLabel(element) is IrFunction -> return getFunctionLabel(element) is IrValueParameter -> return getValueParameterLabel(element) @@ -317,33 +319,78 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi // todo: add type bounds } - private fun getClassLabel(c: IrClass): String { + private fun getClassLabel(c: IrClass, typeArgs: List): String { val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() val qualClassName = if (pkg.isEmpty()) cls else "$pkg.$cls" - val label = "@\"class;$qualClassName\"" + var label = "@\"class;$qualClassName" + + if (typeArgs.isNotEmpty()) { + for (arg in typeArgs) { + val argId = getTypeArgumentLabel(arg, c) + label += ";{$argId}" + } + } + + label += "\"" return label } - fun addClassLabel(c: IrClass): Label { - val label = getClassLabel(c) + private fun getTypeArgumentLabel( + arg: IrTypeArgument, + reportOn: IrElement + ): Label { + when (arg) { + is IrStarProjection -> { + // todo handle this + logger.warnElement(Severity.ErrorSevere, "Star is not yet handled.", reportOn) + return fakeLabel() + } + is IrTypeProjection -> { + return useType(arg.type) as Label + } + else -> { + logger.warnElement(Severity.ErrorSevere, "Unexpected type argument.", reportOn) + return fakeLabel() + } + } + } + + fun addClassLabel(c: IrClass, typeArgs: List): Label { + var label = getClassLabel(c, typeArgs) val id: Label = tw.getLabelFor(label) return id } - fun useClass(c: IrClass): Label { - // todo: fix this - if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || - c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { - if(tw.getExistingLabelFor(getClassLabel(c)) == null) { - return extractClass(c) - } + fun useClass(c: IrClass, typeArgs: List): Label { + // todo: this feels a bit arbitrary: + // It is introduced because the return type of a constructor is the type with its + // type parameters passed as type arguments. + // todo: investigate if this can only happen with constructor-like calls? If so, we could handle these there. + // todo: what happens with nested generics? + val args = if (typeArgsMatchTypeParameters(typeArgs, c.typeParameters)) { + listOf() + } else { + typeArgs } - return addClassLabel(c) + + val classId = getClassLabel(c, args) + return tw.getExistingLabelFor(classId) ?: extractClass(c, args) } - fun extractClass(c: IrClass): Label { - val id = addClassLabel(c) + private fun typeArgsMatchTypeParameters(typeArgs: List, typeParameters: List): Boolean { + val args = typeArgs.map { if (it !is IrTypeProjection) null else it.type } + for ((idx, ta) in args.withIndex()){ + val tp = typeParameters.elementAtOrNull(idx) + if (tp?.symbol?.typeWith() != ta) { + return false + } + } + return true + } + + fun extractClass(c: IrClass, typeArgs: List): Label { + val id = addClassLabel(c, typeArgs) val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() val pkgId = extractPackage(pkg) @@ -369,7 +416,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi t.classifier.owner is IrClass -> { val classifier: IrClassifierSymbol = t.classifier val tcls: IrClass = classifier.owner as IrClass - val l = useClass(tcls) + val l = useClass(tcls, t.arguments) tw.writeExtendsReftype(id, l) } else -> { logger.warn(Severity.ErrorSevere, "Unexpected simple type supertype: " + t.javaClass + ": " + t.render()) @@ -381,11 +428,21 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - c.typeParameters.map { extractTypeParameter(it, Optional.of(id)) } + if (typeArgs.isNotEmpty()) { + for ((idx, arg) in typeArgs.withIndex()) { + val argId = getTypeArgumentLabel(arg, c) + tw.writeTypeArgs(argId, idx, id) + } + tw.writeIsParameterized(id) + val unbound = useClass(c, listOf()) + tw.writeErasure(id, unbound) + } else { + c.typeParameters.map { extractTypeParameter(it, Optional.of(id)) } - c.declarations.map { extractDeclaration(it, Optional.of(id)) } + c.declarations.map { extractDeclaration(it, Optional.of(id)) } - extractObjectInitializerFunction(c, id) + extractObjectInitializerFunction(c, id) + } return id } @@ -393,7 +450,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun useType(t: IrType): Label { when(t) { is IrSimpleType -> return useSimpleType(t) - is IrClass -> return useClass(t) + is IrClass -> return useClass(t, listOf()) else -> { logger.warn(Severity.ErrorSevere, "Unrecognised IrType: " + t.javaClass) return fakeLabel() @@ -404,7 +461,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun useDeclarationParent(dp: IrDeclarationParent): Label { when(dp) { is IrFile -> return usePackage(dp.fqName.asString()) - is IrClass -> return useClass(dp) + is IrClass -> return useClass(dp, listOf()) is IrFunction -> return useFunction(dp) else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclarationParent: " + dp.javaClass, dp) @@ -414,9 +471,15 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun erase (t: IrType): IrType { - if(t is IrSimpleType) { - if(t.classifier.owner is IrTypeParameter) { - return erase((t.classifier.owner as IrTypeParameter).superTypes.get(0)) + if (t is IrSimpleType) { + val classifier = t.classifier + val owner = classifier.owner + if(owner is IrTypeParameter) { + return erase(owner.superTypes.get(0)) + } + + if (owner is IrClass) { + return (classifier as IrClassSymbol).typeWith() } } return t @@ -746,22 +809,27 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeExprs_methodaccess(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeCallableBinding(id, methodId) + + // type arguments at index -2, -3, ... + for (argIdx in 0 until c.typeArgumentsCount) { + val arg = c.getTypeArgument(argIdx)!! + val argTypeId = useType(arg) + val argId = tw.getFreshIdLabel() + tw.writeExprs_unannotatedtypeaccess(argId, argTypeId, id,argIdx * -1 - 2) + } id } } val dr = c.dispatchReceiver - val offset = if(dr == null) 0 else 1 if(dr != null) { - extractExpression(dr, callable, exprId, 0) // todo: should this be at index -1 instead? + extractExpression(dr, callable, exprId, -1) } for(i in 0 until c.valueArgumentsCount) { val arg = c.getValueArgument(i) if(arg != null) { - extractExpression(arg, callable, exprId, i + offset) + extractExpression(arg, callable, exprId, i) } } - - // todo: type arguments at index -2, -3, ... } private fun extractConstructorCall( diff --git a/java/ql/lib/semmle/code/java/Generics.qll b/java/ql/lib/semmle/code/java/Generics.qll index 95471437988..d4c59ba5764 100755 --- a/java/ql/lib/semmle/code/java/Generics.qll +++ b/java/ql/lib/semmle/code/java/Generics.qll @@ -475,7 +475,7 @@ class GenericCall extends Call { result.(Wildcard).getUpperBound().getType() = v.getUpperBoundType() } - private RefType getAnExplicitTypeArgument(TypeVariable v) { + private Type getAnExplicitTypeArgument(TypeVariable v) { exists(GenericCallable gen, MethodAccess call, int i | this = call and gen = call.getCallee() and @@ -485,8 +485,8 @@ class GenericCall extends Call { } /** Gets a type argument of the call for the given `TypeVariable`. */ - RefType getATypeArgument(TypeVariable v) { - result = this.getAnExplicitTypeArgument(v) + Type getATypeArgument(TypeVariable v) { + result = getAnExplicitTypeArgument(v) or not exists(this.getAnExplicitTypeArgument(v)) and result = this.getAnInferredTypeArgument(v) diff --git a/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected b/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected new file mode 100644 index 00000000000..12c001ee283 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected @@ -0,0 +1,30 @@ +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 11 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (11,0,132) + Relevant element: argumentid=11 + Full ID for 11: @"type;int" + Relevant element: parentid=132 + Full ID for 132: @"class;foo.bar.C1;(11);(11)". The ID may expand to @"class;foo.bar.C1;{@"type;int"};{@"type;int"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 11 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (11,1,132) + Relevant element: argumentid=11 + Full ID for 11: @"type;int" + Relevant element: parentid=132 + Full ID for 132: @"class;foo.bar.C1;(11);(11)". The ID may expand to @"class;foo.bar.C1;{@"type;int"};{@"type;int"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 11 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (11,1,157) + Relevant element: argumentid=11 + Full ID for 11: @"type;int" + Relevant element: parentid=157 + Full ID for 157: @"class;foo.bar.C1;(13);(11)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;int"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 13 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (13,0,146) + Relevant element: argumentid=13 + Full ID for 13: @"type;string" + Relevant element: parentid=146 + Full ID for 146: @"class;foo.bar.C1;(13);(13)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;string"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 13 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (13,0,157) + Relevant element: argumentid=13 + Full ID for 13: @"type;string" + Relevant element: parentid=157 + Full ID for 157: @"class;foo.bar.C1;(13);(11)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;int"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 13 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (13,1,146) + Relevant element: argumentid=13 + Full ID for 13: @"type;string" + Relevant element: parentid=146 + Full ID for 146: @"class;foo.bar.C1;(13);(13)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;string"}" diff --git a/java/ql/test/kotlin/library-tests/generics/generics.expected b/java/ql/test/kotlin/library-tests/generics/generics.expected new file mode 100644 index 00000000000..c7c572420f6 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/generics/generics.expected @@ -0,0 +1,27 @@ +genericType +| generics.kt:11:1:11:19 | C0 | generics.kt:11:15:11:15 | V | 0 | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:10:13:10 | T | 0 | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:13:13:13 | W | 1 | +parameterizedType +| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:7:6:7:6 | S | +| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:11:15:11:15 | V | +| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:13:13:13:13 | W | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | int | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | string | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | string | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | generics.kt:13:10:13:10 | T | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | generics.kt:15:10:15:10 | U | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | int | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | int | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | string | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | generics.kt:13:13:13:13 | W | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | generics.kt:15:10:15:10 | U | +genericFunction +| generics.kt:3:1:5:1 | f0 | generics.kt:3:6:3:6 | S | 0 | +| generics.kt:7:1:9:1 | f1 | generics.kt:7:6:7:6 | S | 0 | +| generics.kt:15:5:17:5 | f2 | generics.kt:15:10:15:10 | U | 0 | +| generics.kt:21:5:21:23 | f4 | generics.kt:21:10:21:10 | P | 0 | +genericCall +| generics.kt:27:17:27:22 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | string | +| generics.kt:30:17:30:21 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | int | +| generics.kt:32:8:32:12 | f4(...) | generics.kt:21:10:21:10 | P | file://:0:0:0:0 | int | diff --git a/java/ql/test/kotlin/library-tests/generics/generics.kt b/java/ql/test/kotlin/library-tests/generics/generics.kt index 00e7e52782b..bb06bd16223 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.kt +++ b/java/ql/test/kotlin/library-tests/generics/generics.kt @@ -1,10 +1,33 @@ package foo.bar -fun Int.f(s: S): S { +fun Int.f0(s: S): S { return s } -class C1(val t: T) { - fun f1(t: T) {} - fun f2(u: U) {} +fun Int.f1(s: S): C0? { + return null } + +open class C0 {} + +class C1(val t: T) : C0() { + fun f1(t: T) {} + fun f2(u: U): C1 { + return C1(u) + } +} + +class C2() { + fun

    f4(p: P) {} +} + +fun m() { + val c1 = C1(1) + c1.f1(2) + val x1 = c1.f2("") + val c2 = C1("") + c2.f1("a") + val x2 = c2.f2(3) + val c3 = C2() + c3.f4(5) +} \ No newline at end of file diff --git a/java/ql/test/kotlin/library-tests/generics/generics.ql b/java/ql/test/kotlin/library-tests/generics/generics.ql new file mode 100644 index 00000000000..7fbe90dfba8 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/generics/generics.ql @@ -0,0 +1,13 @@ +import java + +query predicate genericType(GenericType t, TypeVariable tv, int i) { t.getTypeParameter(i) = tv } + +query predicate parameterizedType(ParameterizedType t, GenericType gt, int i, RefType ta) { + t.getGenericType() = gt and t.getTypeArgument(i) = ta +} + +query predicate genericFunction(GenericCallable c, TypeVariable tv, int i) { + c.getTypeParameter(i) = tv +} + +query predicate genericCall(GenericCall c, TypeVariable tv, Type t) { c.getATypeArgument(tv) = t } diff --git a/java/ql/test/kotlin/library-tests/generics/typeParameters.expected b/java/ql/test/kotlin/library-tests/generics/typeParameters.expected deleted file mode 100644 index 2ddfa5c5280..00000000000 --- a/java/ql/test/kotlin/library-tests/generics/typeParameters.expected +++ /dev/null @@ -1,5 +0,0 @@ -genericType -| generics.kt:7:10:7:10 | T | generics.kt:7:1:10:1 | C1 | -genericFunction -| generics.kt:3:6:3:6 | S | generics.kt:3:1:5:1 | f | -| generics.kt:9:10:9:10 | U | generics.kt:9:5:9:23 | f2 | diff --git a/java/ql/test/kotlin/library-tests/generics/typeParameters.ql b/java/ql/test/kotlin/library-tests/generics/typeParameters.ql deleted file mode 100644 index 7965d1ec21d..00000000000 --- a/java/ql/test/kotlin/library-tests/generics/typeParameters.ql +++ /dev/null @@ -1,5 +0,0 @@ -import java - -query predicate genericType(TypeVariable tv, RefType rt) { tv.getGenericType() = rt } - -query predicate genericFunction(TypeVariable tv, GenericCallable c) { tv.getGenericCallable() = c } From 936c29b70ccca7207e68998b7cf906fe02111f86 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 7 Oct 2021 14:42:44 +0200 Subject: [PATCH 0561/1618] Handle star type argument --- .../src/main/kotlin/KotlinExtractorExtension.kt | 8 +++++--- .../kotlin/library-tests/generics/DB-CHECK.expected | 11 ++++++----- .../kotlin/library-tests/generics/generics.expected | 2 ++ .../ql/test/kotlin/library-tests/generics/generics.kt | 1 + .../ql/test/kotlin/library-tests/generics/generics.ql | 3 ++- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index ed0a9a1f71d..b5d1972f78a 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -342,9 +342,11 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi ): Label { when (arg) { is IrStarProjection -> { - // todo handle this - logger.warnElement(Severity.ErrorSevere, "Star is not yet handled.", reportOn) - return fakeLabel() + val wildcardLabel = "@\"wildcard;\"" + val wildcardId: Label = tw.getLabelFor(wildcardLabel) + tw.writeWildcards(wildcardId, "*", 1) + tw.writeHasLocation(wildcardId, tw.getLocation(-1, -1)) + return wildcardId } is IrTypeProjection -> { return useType(arg.type) as Label diff --git a/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected b/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected index 12c001ee283..aa5d61fb616 100644 --- a/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected +++ b/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected @@ -3,6 +3,11 @@ Full ID for 11: @"type;int" Relevant element: parentid=132 Full ID for 132: @"class;foo.bar.C1;(11);(11)". The ID may expand to @"class;foo.bar.C1;{@"type;int"};{@"type;int"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 11 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (11,0,197) + Relevant element: argumentid=11 + Full ID for 11: @"type;int" + Relevant element: parentid=197 + Full ID for 197: @"class;foo.bar.C0;(11)". The ID may expand to @"class;foo.bar.C0;{@"type;int"}" [VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 11 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (11,1,132) Relevant element: argumentid=11 Full ID for 11: @"type;int" @@ -23,8 +28,4 @@ Full ID for 13: @"type;string" Relevant element: parentid=157 Full ID for 157: @"class;foo.bar.C1;(13);(11)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;int"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 13 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (13,1,146) - Relevant element: argumentid=13 - Full ID for 13: @"type;string" - Relevant element: parentid=146 - Full ID for 146: @"class;foo.bar.C1;(13);(13)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;string"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): More errors, not displayed. There are 7 values of field argumentid that are not in type @reftype for a relation of size 12 diff --git a/java/ql/test/kotlin/library-tests/generics/generics.expected b/java/ql/test/kotlin/library-tests/generics/generics.expected index c7c572420f6..b9636bfea34 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.expected +++ b/java/ql/test/kotlin/library-tests/generics/generics.expected @@ -3,6 +3,8 @@ genericType | generics.kt:13:1:18:1 | C1 | generics.kt:13:10:13:10 | T | 0 | | generics.kt:13:1:18:1 | C1 | generics.kt:13:13:13:13 | W | 1 | parameterizedType +| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | * | +| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | int | | generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:7:6:7:6 | S | | generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:11:15:11:15 | V | | generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:13:13:13:13 | W | diff --git a/java/ql/test/kotlin/library-tests/generics/generics.kt b/java/ql/test/kotlin/library-tests/generics/generics.kt index bb06bd16223..6a76a9a02f0 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.kt +++ b/java/ql/test/kotlin/library-tests/generics/generics.kt @@ -30,4 +30,5 @@ fun m() { val x2 = c2.f2(3) val c3 = C2() c3.f4(5) + val c4: C0<*> = C0() } \ No newline at end of file diff --git a/java/ql/test/kotlin/library-tests/generics/generics.ql b/java/ql/test/kotlin/library-tests/generics/generics.ql index 7fbe90dfba8..c51ea108149 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.ql +++ b/java/ql/test/kotlin/library-tests/generics/generics.ql @@ -3,7 +3,8 @@ import java query predicate genericType(GenericType t, TypeVariable tv, int i) { t.getTypeParameter(i) = tv } query predicate parameterizedType(ParameterizedType t, GenericType gt, int i, RefType ta) { - t.getGenericType() = gt and t.getTypeArgument(i) = ta + t.getGenericType() = gt and + t.getTypeArgument(i) = ta } query predicate genericFunction(GenericCallable c, TypeVariable tv, int i) { From b542769fe963616e62a62b74edcae895d4cc8ede Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 7 Oct 2021 16:21:02 +0200 Subject: [PATCH 0562/1618] Fix constructor extraction and extract type arguments of constructor calls --- .../main/kotlin/KotlinExtractorExtension.kt | 69 +++++++++++++------ .../library-tests/comments/comments.expected | 2 +- .../library-tests/exprs/DB-CHECK.expected | 5 ++ .../kotlin/library-tests/exprs/exprs.expected | 2 +- .../library-tests/generics/DB-CHECK.expected | 60 ++++++++-------- .../library-tests/generics/generics.expected | 8 +++ .../kotlin/library-tests/generics/generics.ql | 4 ++ .../library-tests/methods/methods.expected | 9 +-- .../kotlin/library-tests/methods/methods.ql | 2 + 9 files changed, 103 insertions(+), 58 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/exprs/DB-CHECK.expected diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index b5d1972f78a..a8dfe9ee356 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -11,7 +11,9 @@ import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin.* import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol +import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.* +import org.jetbrains.kotlin.ir.util.dumpKotlinLike import org.jetbrains.kotlin.ir.util.packageFqName import org.jetbrains.kotlin.ir.util.render import java.io.File @@ -499,9 +501,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return label } - fun useFunction(f: IrFunction): Label { + fun useFunction(f: IrFunction): Label { val label = getFunctionLabel(f) - val id: Label = tw.getLabelFor(label) + val id: Label = tw.getLabelFor(label) return id } @@ -543,7 +545,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return id } - fun extractValueParameter(vp: IrValueParameter, parent: Label, idx: Int) { + fun extractValueParameter(vp: IrValueParameter, parent: Label, idx: Int) { val id = useValueParameter(vp) val typeId = useType(vp.type) val locId = tw.getLocation(vp.startOffset, vp.endOffset) @@ -616,11 +618,26 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun extractFunction(f: IrFunction, parentid: Label) { currentFunction = f - val id = useFunction(f) + val locId = tw.getLocation(f) val signature = "TODO" val returnTypeId = useType(f.returnType) - tw.writeMethods(id, f.name.asString(), signature, returnTypeId, parentid, id) + + val id: Label + if (f.symbol is IrConstructorSymbol) { + id = useFunction(f) + tw.writeConstrs(id, f.returnType.classFqName?.shortName()?.asString() ?: f.name.asString(), signature, returnTypeId, parentid, id) + } else { + id = useFunction(f) + tw.writeMethods(id, f.name.asString(), signature, returnTypeId, parentid, id) + + val extReceiver = f.extensionReceiverParameter + if (extReceiver != null) { + val extendedType = useType(extReceiver.type) + tw.writeKtExtensionFunctions(id, extendedType) + } + } + tw.writeHasLocation(id, locId) val body = f.body if(body != null) { @@ -630,12 +647,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi extractValueParameter(vp, id, i) } - val extReceiver = f.extensionReceiverParameter - if (extReceiver != null) { - val extendedType = useType(extReceiver.type) - tw.writeKtExtensionFunctions(id, extendedType) - } - f.typeParameters.map { extractTypeParameter(it, Optional.of(id)) } currentFunction = null @@ -807,18 +818,13 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val id = tw.getFreshIdLabel() val typeId = useType(c.type) val locId = tw.getLocation(c) - val methodId = useFunction(c.symbol.owner) + val methodId = useFunction(c.symbol.owner) tw.writeExprs_methodaccess(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeCallableBinding(id, methodId) // type arguments at index -2, -3, ... - for (argIdx in 0 until c.typeArgumentsCount) { - val arg = c.getTypeArgument(argIdx)!! - val argTypeId = useType(arg) - val argId = tw.getFreshIdLabel() - tw.writeExprs_unannotatedtypeaccess(argId, argTypeId, id,argIdx * -1 - 2) - } + extractTypeArguments(c, id, -2, true) id } } @@ -834,6 +840,21 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } + private fun extractTypeArguments( + c: IrFunctionAccessExpression, + id: Label, + startIndex: Int = 0, + reverse: Boolean = false + ) { + for (argIdx in 0 until c.typeArgumentsCount) { + val arg = c.getTypeArgument(argIdx)!! + val argTypeId = useType(arg) + val argId = tw.getFreshIdLabel() + val mul = if (reverse) -1 else 1 + tw.writeExprs_unannotatedtypeaccess(argId, argTypeId, id, argIdx * mul + startIndex) + } + } + private fun extractConstructorCall( e: IrFunctionAccessExpression, parent: Label, @@ -843,7 +864,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val id = tw.getFreshIdLabel() val typeId = useType(e.type) val locId = tw.getLocation(e) - val methodId = useFunction(e.symbol.owner) + val methodId = useFunction(e.symbol.owner) tw.writeExprs_newexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeCallableBinding(id, methodId) @@ -855,10 +876,14 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } val dr = e.dispatchReceiver if (dr != null) { - extractExpression(dr, callable, id, -3) + extractExpression(dr, callable, id, -2) } - // todo: type arguments at index -4, -5, ... + if (e.typeArgumentsCount > 0) { + val typeAccessId = tw.getFreshIdLabel() + tw.writeExprs_unannotatedtypeaccess(typeAccessId, typeId, id, -3) + extractTypeArguments(e, typeAccessId) + } } private val loopIdMap: MutableMap> = mutableMapOf() @@ -908,7 +933,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } val locId = tw.getLocation(e) - val methodId = useFunction(e.symbol.owner) + val methodId = useFunction(e.symbol.owner) tw.writeHasLocation(id, locId) @Suppress("UNCHECKED_CAST") diff --git a/java/ql/test/kotlin/library-tests/comments/comments.expected b/java/ql/test/kotlin/library-tests/comments/comments.expected index 24dbea28dff..960efcee149 100644 --- a/java/ql/test/kotlin/library-tests/comments/comments.expected +++ b/java/ql/test/kotlin/library-tests/comments/comments.expected @@ -5,7 +5,7 @@ comments | comments.kt:18:9:18:25 | // A line comment | // A line comment | | comments.kt:22:5:24:6 | /*\n A block comment\n */ | /*\n A block comment\n */ | commentOwners -| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:25:1 | | +| comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:25:1 | Group | | comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:25:1 | Group | | comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:25:1 | equals | | comments.kt:4:1:11:3 | /**\n * A group of *members*.\n *\n * This class has no useful logic; it's just a documentation example.\n *\n * @property name the name of this group.\n * @constructor Creates an empty group.\n */ | comments.kt:12:1:25:1 | hashCode | diff --git a/java/ql/test/kotlin/library-tests/exprs/DB-CHECK.expected b/java/ql/test/kotlin/library-tests/exprs/DB-CHECK.expected new file mode 100644 index 00000000000..a60467f038d --- /dev/null +++ b/java/ql/test/kotlin/library-tests/exprs/DB-CHECK.expected @@ -0,0 +1,5 @@ +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 55 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (55,0,189) + Relevant element: argumentid=55 + Full ID for 55: @"type;boolean" + Relevant element: parentid=189 + Full ID for 189: @"class;kotlin.reflect.KClass;(55)". The ID may expand to @"class;kotlin.reflect.KClass;{@"type;boolean"}" diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 4b6fa4fab68..4cb7f2ba579 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -47,7 +47,7 @@ | exprs.kt:53:9:53:18 | ...=... | AssignExpr | | exprs.kt:53:9:53:18 | n | VarAccess | | exprs.kt:53:9:53:18 | n | VarAccess | -| exprs.kt:54:27:54:31 | (no string representation) | ClassInstanceExpr | +| exprs.kt:54:27:54:31 | new C(...) | ClassInstanceExpr | | exprs.kt:54:29:54:30 | 42 | IntegerLiteral | | file://:0:0:0:0 | b1 | LocalVariableDeclExpr | | file://:0:0:0:0 | b2 | LocalVariableDeclExpr | diff --git a/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected b/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected index aa5d61fb616..f82fc332711 100644 --- a/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected +++ b/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected @@ -1,31 +1,31 @@ -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 11 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (11,0,132) - Relevant element: argumentid=11 - Full ID for 11: @"type;int" - Relevant element: parentid=132 - Full ID for 132: @"class;foo.bar.C1;(11);(11)". The ID may expand to @"class;foo.bar.C1;{@"type;int"};{@"type;int"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 11 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (11,0,197) - Relevant element: argumentid=11 - Full ID for 11: @"type;int" - Relevant element: parentid=197 - Full ID for 197: @"class;foo.bar.C0;(11)". The ID may expand to @"class;foo.bar.C0;{@"type;int"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 11 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (11,1,132) - Relevant element: argumentid=11 - Full ID for 11: @"type;int" - Relevant element: parentid=132 - Full ID for 132: @"class;foo.bar.C1;(11);(11)". The ID may expand to @"class;foo.bar.C1;{@"type;int"};{@"type;int"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 11 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (11,1,157) - Relevant element: argumentid=11 - Full ID for 11: @"type;int" - Relevant element: parentid=157 - Full ID for 157: @"class;foo.bar.C1;(13);(11)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;int"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 13 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (13,0,146) - Relevant element: argumentid=13 - Full ID for 13: @"type;string" - Relevant element: parentid=146 - Full ID for 146: @"class;foo.bar.C1;(13);(13)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;string"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 13 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (13,0,157) - Relevant element: argumentid=13 - Full ID for 13: @"type;string" - Relevant element: parentid=157 - Full ID for 157: @"class;foo.bar.C1;(13);(11)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;int"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 12 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (12,0,135) + Relevant element: argumentid=12 + Full ID for 12: @"type;int" + Relevant element: parentid=135 + Full ID for 135: @"class;foo.bar.C1;(12);(12)". The ID may expand to @"class;foo.bar.C1;{@"type;int"};{@"type;int"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 12 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (12,0,206) + Relevant element: argumentid=12 + Full ID for 12: @"type;int" + Relevant element: parentid=206 + Full ID for 206: @"class;foo.bar.C0;(12)". The ID may expand to @"class;foo.bar.C0;{@"type;int"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 12 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (12,1,135) + Relevant element: argumentid=12 + Full ID for 12: @"type;int" + Relevant element: parentid=135 + Full ID for 135: @"class;foo.bar.C1;(12);(12)". The ID may expand to @"class;foo.bar.C1;{@"type;int"};{@"type;int"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 12 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (12,1,163) + Relevant element: argumentid=12 + Full ID for 12: @"type;int" + Relevant element: parentid=163 + Full ID for 163: @"class;foo.bar.C1;(14);(12)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;int"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 14 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (14,0,152) + Relevant element: argumentid=14 + Full ID for 14: @"type;string" + Relevant element: parentid=152 + Full ID for 152: @"class;foo.bar.C1;(14);(14)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;string"}" +[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 14 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (14,0,163) + Relevant element: argumentid=14 + Full ID for 14: @"type;string" + Relevant element: parentid=163 + Full ID for 163: @"class;foo.bar.C1;(14);(12)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;int"}" [VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): More errors, not displayed. There are 7 values of field argumentid that are not in type @reftype for a relation of size 12 diff --git a/java/ql/test/kotlin/library-tests/generics/generics.expected b/java/ql/test/kotlin/library-tests/generics/generics.expected index b9636bfea34..fc2eedf9c43 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.expected +++ b/java/ql/test/kotlin/library-tests/generics/generics.expected @@ -27,3 +27,11 @@ genericCall | generics.kt:27:17:27:22 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | string | | generics.kt:30:17:30:21 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | int | | generics.kt:32:8:32:12 | f4(...) | generics.kt:21:10:21:10 | P | file://:0:0:0:0 | int | +genericCtor +| generics.kt:16:16:16:26 | new C1(...) | 0 | generics.kt:15:10:15:10 | U | +| generics.kt:16:16:16:26 | new C1(...) | 1 | generics.kt:15:10:15:10 | U | +| generics.kt:25:14:25:28 | new C1(...) | 0 | file://:0:0:0:0 | int | +| generics.kt:25:14:25:28 | new C1(...) | 1 | file://:0:0:0:0 | int | +| generics.kt:28:14:28:32 | new C1(...) | 0 | file://:0:0:0:0 | string | +| generics.kt:28:14:28:32 | new C1(...) | 1 | file://:0:0:0:0 | int | +| generics.kt:33:21:33:29 | new C0(...) | 0 | file://:0:0:0:0 | int | diff --git a/java/ql/test/kotlin/library-tests/generics/generics.ql b/java/ql/test/kotlin/library-tests/generics/generics.ql index c51ea108149..ad75ebf66b6 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.ql +++ b/java/ql/test/kotlin/library-tests/generics/generics.ql @@ -12,3 +12,7 @@ query predicate genericFunction(GenericCallable c, TypeVariable tv, int i) { } query predicate genericCall(GenericCall c, TypeVariable tv, Type t) { c.getATypeArgument(tv) = t } + +query predicate genericCtor(ClassInstanceExpr c, int i, Type ta) { + c.getTypeArgument(i).getType() = ta +} diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index 9f002d86bf2..0542c17488c 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -1,5 +1,4 @@ methods -| file://:0:0:0:0 | | | file://:0:0:0:0 | equals | | file://:0:0:0:0 | equals | | file://:0:0:0:0 | hashCode | @@ -7,27 +6,29 @@ methods | file://:0:0:0:0 | toString | | file://:0:0:0:0 | toString | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | -| methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | equals | | methods2.kt:7:1:10:1 | hashCode | | methods2.kt:7:1:10:1 | toString | | methods2.kt:8:5:9:5 | fooBarClassMethod | | methods3.kt:3:1:3:39 | fooBarTopLevelMethod | -| methods3.kt:5:1:7:1 | | | methods3.kt:5:1:7:1 | | | methods3.kt:5:1:7:1 | equals | | methods3.kt:5:1:7:1 | hashCode | | methods3.kt:5:1:7:1 | toString | | methods3.kt:6:5:6:43 | fooBarTopLevelMethod | | methods.kt:2:1:3:1 | topLevelMethod | -| methods.kt:5:1:13:1 | | | methods.kt:5:1:13:1 | | | methods.kt:5:1:13:1 | equals | | methods.kt:5:1:13:1 | hashCode | | methods.kt:5:1:13:1 | toString | | methods.kt:6:5:7:5 | classMethod | | methods.kt:9:5:12:5 | anotherClassMethod | +constructors +| file://:0:0:0:0 | Any | +| methods2.kt:7:1:10:1 | Class2 | +| methods3.kt:5:1:7:1 | Class3 | +| methods.kt:5:1:13:1 | Class | extensions | methods3.kt:3:1:3:39 | fooBarTopLevelMethod | file://:0:0:0:0 | int | | methods3.kt:6:5:6:43 | fooBarTopLevelMethod | file://:0:0:0:0 | int | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.ql b/java/ql/test/kotlin/library-tests/methods/methods.ql index e10c6577b4e..3a169e71ebd 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.ql +++ b/java/ql/test/kotlin/library-tests/methods/methods.ql @@ -2,4 +2,6 @@ import java query predicate methods(Method m) { any() } +query predicate constructors(Constructor c) { any() } + query predicate extensions(ExtensionMethod m, Type t) { m.getExtendedType() = t } From 85e713fa315a645585ae82efdef86ca83169af58 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 8 Oct 2021 16:30:03 +0200 Subject: [PATCH 0563/1618] Extract generic type parameters as reference types even for primitive Kotlin types + add simplified array extraction --- .../main/kotlin/KotlinExtractorExtension.kt | 82 +++++++++++++------ .../library-tests/exprs/DB-CHECK.expected | 5 -- .../library-tests/generics/DB-CHECK.expected | 31 ------- .../library-tests/generics/generics.expected | 14 ++-- .../kotlin/library-tests/generics/generics.ql | 10 ++- 5 files changed, 72 insertions(+), 70 deletions(-) delete mode 100644 java/ql/test/kotlin/library-tests/exprs/DB-CHECK.expected delete mode 100644 java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index a8dfe9ee356..1ce918ceee1 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.dumpKotlinLike import org.jetbrains.kotlin.ir.util.packageFqName +import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.render import java.io.File import java.io.FileOutputStream @@ -170,7 +171,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val pkg = file.fqName.asString() val pkgId = extractPackage(pkg) tw.writeCupackage(id, pkgId) - file.declarations.map { extractDeclaration(it, Optional.empty()) } + file.declarations.map { extractDeclaration(it) } CommentExtractor(this).extract() } @@ -218,25 +219,33 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return id } - fun extractDeclaration(declaration: IrDeclaration, optParentid: Optional>) { + fun extractDeclaration(declaration: IrDeclaration) { when (declaration) { is IrClass -> useClass(declaration, listOf()) - is IrFunction -> extractFunction(declaration, if (optParentid.isPresent()) optParentid.get() else fileClass) + is IrFunction -> extractFunction(declaration) is IrAnonymousInitializer -> { // Leaving this intentionally empty. init blocks are extracted during class extraction. } - is IrProperty -> extractProperty(declaration, if (optParentid.isPresent()) optParentid.get() else fileClass) + is IrProperty -> extractProperty(declaration) else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclaration: " + declaration.javaClass, declaration) } } - fun useSimpleType(s: IrSimpleType): Label { + fun useSimpleType(s: IrSimpleType, canReturnPrimitiveTypes: Boolean): Label { fun primitiveType(name: String): Label { return tw.getLabelFor("@\"type;$name\"", { tw.writePrimitives(it, name) }) } when { + // temporary fix for type parameters types that would otherwise be primitive types + !canReturnPrimitiveTypes && (s.isPrimitiveType() || s.isUnsignedType() || s.isString()) -> { + val classifier: IrClassifierSymbol = s.classifier + val cls: IrClass = classifier.owner as IrClass + + return useClass(cls, s.arguments) + } + s.isByte() -> return primitiveType("byte") s.isShort() -> return primitiveType("short") s.isInt() -> return primitiveType("int") @@ -254,10 +263,18 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi s.isChar() -> return primitiveType("char") s.isString() -> return primitiveType("string") // TODO: Wrong - s.isNullable() && s.hasQuestionMark -> return useType(s.makeNotNull()) // TODO: Wrong + s.isNullable() && s.hasQuestionMark -> return useType(s.makeNotNull(), canReturnPrimitiveTypes) // TODO: Wrong s.isNothing() -> return primitiveType("") + s.isArray() && s.arguments.isNotEmpty() -> { + // todo: fix this, this is only a dummy implementation to let the tests pass + val elementType = useType(s.getArrayElementType(pluginContext.irBuiltIns)) + val id = tw.getLabelFor("@\"array;1;{$elementType}\"") + tw.writeArrays(id, "ARRAY", elementType, 1, elementType) + return id + } + s.classifier.owner is IrClass -> { val classifier: IrClassifierSymbol = s.classifier val cls: IrClass = classifier.owner as IrClass @@ -303,22 +320,29 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun useTypeParameter(param: IrTypeParameter): Label { - return tw.getLabelFor(getTypeParameterLabel(param)) + val l = getTypeParameterLabel(param) + return tw.getExistingLabelFor(l) ?: extractTypeParameter(param) } - private fun extractTypeParameter(tp: IrTypeParameter, optParentid: Optional>) { - val id = useTypeParameter(tp) + private fun extractTypeParameter(tp: IrTypeParameter): Label { + val id = tw.getLabelFor(getTypeParameterLabel(tp)) - if (!optParentid.isPresent) { - logger.warnElement(Severity.ErrorSevere, "Couldn't find expected parent of type parameter.", tp) - return + val parentId: Label = when (val parent = tp.parent) { + is IrFunction -> useFunction(parent) + is IrClass -> useClass(parent, listOf()) + else -> { + logger.warnElement(Severity.ErrorSevere, "Unexpected type parameter parent", tp) + fakeLabel() + } } - tw.writeTypeVars(id, tp.name.asString(), tp.index, 0, optParentid.get()) + tw.writeTypeVars(id, tp.name.asString(), tp.index, 0, parentId) val locId = tw.getLocation(tp) tw.writeHasLocation(id, locId) // todo: add type bounds + + return id } private fun getClassLabel(c: IrClass, typeArgs: List): String { @@ -351,7 +375,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return wildcardId } is IrTypeProjection -> { - return useType(arg.type) as Label + return useType(arg.type, false) as Label } else -> { logger.warnElement(Severity.ErrorSevere, "Unexpected type argument.", reportOn) @@ -441,9 +465,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val unbound = useClass(c, listOf()) tw.writeErasure(id, unbound) } else { - c.typeParameters.map { extractTypeParameter(it, Optional.of(id)) } + c.typeParameters.map { extractTypeParameter(it) } - c.declarations.map { extractDeclaration(it, Optional.of(id)) } + c.declarations.map { extractDeclaration(it) } extractObjectInitializerFunction(c, id) } @@ -451,9 +475,9 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return id } - fun useType(t: IrType): Label { + fun useType(t: IrType, canReturnPrimitiveTypes: Boolean = true): Label { when(t) { - is IrSimpleType -> return useSimpleType(t) + is IrSimpleType -> return useSimpleType(t, canReturnPrimitiveTypes) is IrClass -> return useClass(t, listOf()) else -> { logger.warn(Severity.ErrorSevere, "Unrecognised IrType: " + t.javaClass) @@ -482,6 +506,13 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return erase(owner.superTypes.get(0)) } + // todo: fix this: + if (t.makeNotNull().isArray()) { + val elementType = t.getArrayElementType(pluginContext.irBuiltIns) + val erasedElementType = erase(elementType) + return (classifier as IrClassSymbol).typeWith(erasedElementType) + } + if (owner is IrClass) { return (classifier as IrClassSymbol).typeWith() } @@ -616,20 +647,22 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - fun extractFunction(f: IrFunction, parentid: Label) { + fun extractFunction(f: IrFunction) { currentFunction = f val locId = tw.getLocation(f) val signature = "TODO" val returnTypeId = useType(f.returnType) + val parentId = if (f.parent is IrClass ) useClass(f.parent as IrClass, listOf()) else fileClass + val id: Label if (f.symbol is IrConstructorSymbol) { id = useFunction(f) - tw.writeConstrs(id, f.returnType.classFqName?.shortName()?.asString() ?: f.name.asString(), signature, returnTypeId, parentid, id) + tw.writeConstrs(id, f.returnType.classFqName?.shortName()?.asString() ?: f.name.asString(), signature, returnTypeId, parentId, id) } else { id = useFunction(f) - tw.writeMethods(id, f.name.asString(), signature, returnTypeId, parentid, id) + tw.writeMethods(id, f.name.asString(), signature, returnTypeId, parentId, id) val extReceiver = f.extensionReceiverParameter if (extReceiver != null) { @@ -647,7 +680,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi extractValueParameter(vp, id, i) } - f.typeParameters.map { extractTypeParameter(it, Optional.of(id)) } + f.typeParameters.map { extractTypeParameter(it) } currentFunction = null } @@ -664,7 +697,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return id } - fun extractProperty(p: IrProperty, parentid: Label) { + fun extractProperty(p: IrProperty) { val bf = p.backingField if(bf == null) { logger.warnElement(Severity.ErrorSevere, "IrProperty without backing field", p) @@ -672,7 +705,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val id = useProperty(p) val locId = tw.getLocation(p) val typeId = useType(bf.type) - tw.writeFields(id, p.name.asString(), typeId, parentid, id) + val parentId = if (p.parent is IrClass ) useClass(p.parent as IrClass, listOf()) else fileClass + tw.writeFields(id, p.name.asString(), typeId, parentId, id) tw.writeHasLocation(id, locId) } } diff --git a/java/ql/test/kotlin/library-tests/exprs/DB-CHECK.expected b/java/ql/test/kotlin/library-tests/exprs/DB-CHECK.expected deleted file mode 100644 index a60467f038d..00000000000 --- a/java/ql/test/kotlin/library-tests/exprs/DB-CHECK.expected +++ /dev/null @@ -1,5 +0,0 @@ -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 55 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (55,0,189) - Relevant element: argumentid=55 - Full ID for 55: @"type;boolean" - Relevant element: parentid=189 - Full ID for 189: @"class;kotlin.reflect.KClass;(55)". The ID may expand to @"class;kotlin.reflect.KClass;{@"type;boolean"}" diff --git a/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected b/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected deleted file mode 100644 index f82fc332711..00000000000 --- a/java/ql/test/kotlin/library-tests/generics/DB-CHECK.expected +++ /dev/null @@ -1,31 +0,0 @@ -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 12 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (12,0,135) - Relevant element: argumentid=12 - Full ID for 12: @"type;int" - Relevant element: parentid=135 - Full ID for 135: @"class;foo.bar.C1;(12);(12)". The ID may expand to @"class;foo.bar.C1;{@"type;int"};{@"type;int"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 12 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (12,0,206) - Relevant element: argumentid=12 - Full ID for 12: @"type;int" - Relevant element: parentid=206 - Full ID for 206: @"class;foo.bar.C0;(12)". The ID may expand to @"class;foo.bar.C0;{@"type;int"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 12 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (12,1,135) - Relevant element: argumentid=12 - Full ID for 12: @"type;int" - Relevant element: parentid=135 - Full ID for 135: @"class;foo.bar.C1;(12);(12)". The ID may expand to @"class;foo.bar.C1;{@"type;int"};{@"type;int"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 12 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (12,1,163) - Relevant element: argumentid=12 - Full ID for 12: @"type;int" - Relevant element: parentid=163 - Full ID for 163: @"class;foo.bar.C1;(14);(12)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;int"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 14 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (14,0,152) - Relevant element: argumentid=14 - Full ID for 14: @"type;string" - Relevant element: parentid=152 - Full ID for 152: @"class;foo.bar.C1;(14);(14)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;string"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): Value 14 of field argumentid is not in type @reftype. The value is however in the following types: @primitive. Appears in tuple (14,0,163) - Relevant element: argumentid=14 - Full ID for 14: @"type;string" - Relevant element: parentid=163 - Full ID for 163: @"class;foo.bar.C1;(14);(12)". The ID may expand to @"class;foo.bar.C1;{@"type;string"};{@"type;int"}" -[VALUE_NOT_IN_TYPE] predicate typeArgs(@reftype argumentid, int pos, @typeorcallable parentid): More errors, not displayed. There are 7 values of field argumentid that are not in type @reftype for a relation of size 12 diff --git a/java/ql/test/kotlin/library-tests/generics/generics.expected b/java/ql/test/kotlin/library-tests/generics/generics.expected index fc2eedf9c43..c7123b12827 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.expected +++ b/java/ql/test/kotlin/library-tests/generics/generics.expected @@ -4,18 +4,18 @@ genericType | generics.kt:13:1:18:1 | C1 | generics.kt:13:13:13:13 | W | 1 | parameterizedType | generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | * | -| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | int | +| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | Int | | generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:7:6:7:6 | S | | generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:11:15:11:15 | V | | generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:13:13:13:13 | W | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | int | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | string | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | string | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | Int | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | String | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | String | | generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | generics.kt:13:10:13:10 | T | | generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | generics.kt:15:10:15:10 | U | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | int | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | int | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | string | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | Int | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | Int | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | String | | generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | generics.kt:13:13:13:13 | W | | generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | generics.kt:15:10:15:10 | U | genericFunction diff --git a/java/ql/test/kotlin/library-tests/generics/generics.ql b/java/ql/test/kotlin/library-tests/generics/generics.ql index ad75ebf66b6..9822424dcf1 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.ql +++ b/java/ql/test/kotlin/library-tests/generics/generics.ql @@ -1,14 +1,18 @@ import java -query predicate genericType(GenericType t, TypeVariable tv, int i) { t.getTypeParameter(i) = tv } +query predicate genericType(GenericType t, TypeVariable tv, int i) { + t.getTypeParameter(i) = tv and t.getFile().getExtension() = "kt" +} query predicate parameterizedType(ParameterizedType t, GenericType gt, int i, RefType ta) { t.getGenericType() = gt and - t.getTypeArgument(i) = ta + t.getTypeArgument(i) = ta and + t.getFile().getExtension() = "kt" } query predicate genericFunction(GenericCallable c, TypeVariable tv, int i) { - c.getTypeParameter(i) = tv + c.getTypeParameter(i) = tv and + c.getFile().getExtension() = "kt" } query predicate genericCall(GenericCall c, TypeVariable tv, Type t) { c.getATypeArgument(tv) = t } From 1a6d69361871c805b2070ac555434a73117e61b0 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 12 Oct 2021 14:21:34 +0200 Subject: [PATCH 0564/1618] Implement review findings + fix ID of nested types --- .../main/kotlin/KotlinExtractorExtension.kt | 70 ++++++++++++++----- java/ql/lib/semmle/code/java/Generics.qll | 4 +- .../library-tests/generics/generics.expected | 16 ++--- 3 files changed, 63 insertions(+), 27 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 1ce918ceee1..1c18558b768 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -13,9 +13,7 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.* -import org.jetbrains.kotlin.ir.util.dumpKotlinLike import org.jetbrains.kotlin.ir.util.packageFqName -import org.jetbrains.kotlin.ir.util.parentAsClass import org.jetbrains.kotlin.ir.util.render import java.io.File import java.io.FileOutputStream @@ -221,7 +219,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun extractDeclaration(declaration: IrDeclaration) { when (declaration) { - is IrClass -> useClass(declaration, listOf()) + is IrClass -> extractClass(declaration, listOf()) is IrFunction -> extractFunction(declaration) is IrAnonymousInitializer -> { // Leaving this intentionally empty. init blocks are extracted during class extraction. @@ -321,7 +319,19 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun useTypeParameter(param: IrTypeParameter): Label { val l = getTypeParameterLabel(param) - return tw.getExistingLabelFor(l) ?: extractTypeParameter(param) + val label = tw.getExistingLabelFor(l) + if (label != null) { + return label + } + + // todo: fix this + if (param.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || + param.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB){ + return extractTypeParameter(param) + } + + logger.warnElement(Severity.ErrorSevere, "Missing type parameter label", param) + return tw.getLabelFor(l) } private fun extractTypeParameter(tp: IrTypeParameter): Label { @@ -348,14 +358,21 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi private fun getClassLabel(c: IrClass, typeArgs: List): String { val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() - val qualClassName = if (pkg.isEmpty()) cls else "$pkg.$cls" - var label = "@\"class;$qualClassName" + var label: String + val parent = c.parent + if (parent is IrClass) { + // todo: fix this. Ugly string concat to handle nested class IDs. + // todo: Can the containing class have type arguments? + val p = getClassLabel(parent, listOf()) + label = "${p.substring(0, p.length - 1)}\$$cls" + } else { + val qualClassName = if (pkg.isEmpty()) cls else "$pkg.$cls" + label = "@\"class;$qualClassName" + } - if (typeArgs.isNotEmpty()) { - for (arg in typeArgs) { - val argId = getTypeArgumentLabel(arg, c) - label += ";{$argId}" - } + for (arg in typeArgs) { + val argId = getTypeArgumentLabel(arg, c) + label += ";{$argId}" } label += "\"" @@ -403,7 +420,23 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } val classId = getClassLabel(c, args) - return tw.getExistingLabelFor(classId) ?: extractClass(c, args) + val label = tw.getExistingLabelFor(classId) + if (label != null) { + return label + } + + if (typeArgs.isNotEmpty()) { + return extractClass(c, typeArgs) + } + + // todo: fix this + if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || + c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB){ + return extractClass(c, listOf()) + } + + logger.warnElement(Severity.ErrorSevere, "Missing class label", c) + return tw.getLabelFor(classId) } private fun typeArgsMatchTypeParameters(typeArgs: List, typeParameters: List): Boolean { @@ -437,6 +470,11 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } val locId = tw.getLocation(c) tw.writeHasLocation(id, locId) + + if (typeArgs.isEmpty()) { + c.typeParameters.map { extractTypeParameter(it) } + } + for(t in c.superTypes) { when(t) { is IrSimpleType -> { @@ -465,8 +503,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val unbound = useClass(c, listOf()) tw.writeErasure(id, unbound) } else { - c.typeParameters.map { extractTypeParameter(it) } - c.declarations.map { extractDeclaration(it) } extractObjectInitializerFunction(c, id) @@ -650,6 +686,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun extractFunction(f: IrFunction) { currentFunction = f + f.typeParameters.map { extractTypeParameter(it) } + val locId = tw.getLocation(f) val signature = "TODO" val returnTypeId = useType(f.returnType) @@ -680,8 +718,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi extractValueParameter(vp, id, i) } - f.typeParameters.map { extractTypeParameter(it) } - currentFunction = null } @@ -882,7 +918,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi ) { for (argIdx in 0 until c.typeArgumentsCount) { val arg = c.getTypeArgument(argIdx)!! - val argTypeId = useType(arg) + val argTypeId = useType(arg, false) val argId = tw.getFreshIdLabel() val mul = if (reverse) -1 else 1 tw.writeExprs_unannotatedtypeaccess(argId, argTypeId, id, argIdx * mul + startIndex) diff --git a/java/ql/lib/semmle/code/java/Generics.qll b/java/ql/lib/semmle/code/java/Generics.qll index d4c59ba5764..ca2980751c0 100755 --- a/java/ql/lib/semmle/code/java/Generics.qll +++ b/java/ql/lib/semmle/code/java/Generics.qll @@ -475,7 +475,7 @@ class GenericCall extends Call { result.(Wildcard).getUpperBound().getType() = v.getUpperBoundType() } - private Type getAnExplicitTypeArgument(TypeVariable v) { + private RefType getAnExplicitTypeArgument(TypeVariable v) { exists(GenericCallable gen, MethodAccess call, int i | this = call and gen = call.getCallee() and @@ -485,7 +485,7 @@ class GenericCall extends Call { } /** Gets a type argument of the call for the given `TypeVariable`. */ - Type getATypeArgument(TypeVariable v) { + RefType getATypeArgument(TypeVariable v) { result = getAnExplicitTypeArgument(v) or not exists(this.getAnExplicitTypeArgument(v)) and diff --git a/java/ql/test/kotlin/library-tests/generics/generics.expected b/java/ql/test/kotlin/library-tests/generics/generics.expected index c7123b12827..1c001430ebe 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.expected +++ b/java/ql/test/kotlin/library-tests/generics/generics.expected @@ -24,14 +24,14 @@ genericFunction | generics.kt:15:5:17:5 | f2 | generics.kt:15:10:15:10 | U | 0 | | generics.kt:21:5:21:23 | f4 | generics.kt:21:10:21:10 | P | 0 | genericCall -| generics.kt:27:17:27:22 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | string | -| generics.kt:30:17:30:21 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | int | -| generics.kt:32:8:32:12 | f4(...) | generics.kt:21:10:21:10 | P | file://:0:0:0:0 | int | +| generics.kt:27:17:27:22 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | String | +| generics.kt:30:17:30:21 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | Int | +| generics.kt:32:8:32:12 | f4(...) | generics.kt:21:10:21:10 | P | file://:0:0:0:0 | Int | genericCtor | generics.kt:16:16:16:26 | new C1(...) | 0 | generics.kt:15:10:15:10 | U | | generics.kt:16:16:16:26 | new C1(...) | 1 | generics.kt:15:10:15:10 | U | -| generics.kt:25:14:25:28 | new C1(...) | 0 | file://:0:0:0:0 | int | -| generics.kt:25:14:25:28 | new C1(...) | 1 | file://:0:0:0:0 | int | -| generics.kt:28:14:28:32 | new C1(...) | 0 | file://:0:0:0:0 | string | -| generics.kt:28:14:28:32 | new C1(...) | 1 | file://:0:0:0:0 | int | -| generics.kt:33:21:33:29 | new C0(...) | 0 | file://:0:0:0:0 | int | +| generics.kt:25:14:25:28 | new C1(...) | 0 | file://:0:0:0:0 | Int | +| generics.kt:25:14:25:28 | new C1(...) | 1 | file://:0:0:0:0 | Int | +| generics.kt:28:14:28:32 | new C1(...) | 0 | file://:0:0:0:0 | String | +| generics.kt:28:14:28:32 | new C1(...) | 1 | file://:0:0:0:0 | Int | +| generics.kt:33:21:33:29 | new C0(...) | 0 | file://:0:0:0:0 | Int | From ec889f933fa6b7d7a1d2bb96a5cafd5f98b4ece4 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 12 Oct 2021 14:37:17 +0200 Subject: [PATCH 0565/1618] Remove unneeded extraction warning --- .../kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 1c18558b768..d88346d6810 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -435,7 +435,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return extractClass(c, listOf()) } - logger.warnElement(Severity.ErrorSevere, "Missing class label", c) return tw.getLabelFor(classId) } From 6f3ae8da476bbcba456a915d5930b53c6067de32 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 12 Oct 2021 14:59:15 +0200 Subject: [PATCH 0566/1618] Improve todo comment --- .../src/main/kotlin/KotlinExtractorExtension.kt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index d88346d6810..0717bf0924b 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -408,11 +408,10 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun useClass(c: IrClass, typeArgs: List): Label { - // todo: this feels a bit arbitrary: - // It is introduced because the return type of a constructor is the type with its - // type parameters passed as type arguments. - // todo: investigate if this can only happen with constructor-like calls? If so, we could handle these there. - // todo: what happens with nested generics? + // todo: find a better way of finding if we're dealing with the source type. + // The return type of a constructor in a generic class is a simple type with the class as the classifier, and + // the type parameters added as type arguments. The same constructed source type can show up as parameter types + // of functions inside the class. val args = if (typeArgsMatchTypeParameters(typeArgs, c.typeParameters)) { listOf() } else { From 490e803098bb98b5325aaed778aba89679e0ca60 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 13 Oct 2021 14:29:52 +0100 Subject: [PATCH 0567/1618] Kotlin: Be more specific about function parents --- .../src/main/kotlin/KotlinExtractorExtension.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 0717bf0924b..3d0e921fc19 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -690,7 +690,15 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val signature = "TODO" val returnTypeId = useType(f.returnType) - val parentId = if (f.parent is IrClass ) useClass(f.parent as IrClass, listOf()) else fileClass + val parent = f.parent + val parentId = when (parent) { + is IrClass -> useClass(parent, listOf()) + is IrFile -> fileClass + else -> { + logger.warnElement(Severity.ErrorSevere, "Unrecognised function parent: " + parent.javaClass, parent) + fakeLabel() + } + } val id: Label if (f.symbol is IrConstructorSymbol) { From 9eadbea5cd8b81e4d0ed63bf4785cd2b0f26fd0d Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 13 Oct 2021 16:19:59 +0100 Subject: [PATCH 0568/1618] Kotlin: Split useClass into useClassSource and useClassInstance --- .../main/kotlin/KotlinExtractorExtension.kt | 72 ++++++++----------- 1 file changed, 28 insertions(+), 44 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 3d0e921fc19..324e98a4264 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -241,7 +241,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val classifier: IrClassifierSymbol = s.classifier val cls: IrClass = classifier.owner as IrClass - return useClass(cls, s.arguments) + return useClassInstance(cls, s.arguments) } s.isByte() -> return primitiveType("byte") @@ -277,7 +277,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val classifier: IrClassifierSymbol = s.classifier val cls: IrClass = classifier.owner as IrClass - return useClass(cls, s.arguments) + return useClassInstance(cls, s.arguments) } s.classifier.owner is IrTypeParameter -> { return useTypeParameter(s.classifier.owner as IrTypeParameter) @@ -339,7 +339,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val parentId: Label = when (val parent = tp.parent) { is IrFunction -> useFunction(parent) - is IrClass -> useClass(parent, listOf()) + is IrClass -> useClassSource(parent) else -> { logger.warnElement(Severity.ErrorSevere, "Unexpected type parameter parent", tp) fakeLabel() @@ -392,6 +392,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return wildcardId } is IrTypeProjection -> { + @Suppress("UNCHECKED_CAST") return useType(arg.type, false) as Label } else -> { @@ -407,45 +408,28 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return id } - fun useClass(c: IrClass, typeArgs: List): Label { - // todo: find a better way of finding if we're dealing with the source type. - // The return type of a constructor in a generic class is a simple type with the class as the classifier, and - // the type parameters added as type arguments. The same constructed source type can show up as parameter types - // of functions inside the class. - val args = if (typeArgsMatchTypeParameters(typeArgs, c.typeParameters)) { - listOf() - } else { - typeArgs - } - + fun useClassSource(c: IrClass): Label { + // For source classes, the label doesn't include and type arguments + val args = listOf() val classId = getClassLabel(c, args) - val label = tw.getExistingLabelFor(classId) - if (label != null) { - return label - } - - if (typeArgs.isNotEmpty()) { - return extractClass(c, typeArgs) - } - - // todo: fix this - if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || - c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB){ - return extractClass(c, listOf()) - } - return tw.getLabelFor(classId) } - private fun typeArgsMatchTypeParameters(typeArgs: List, typeParameters: List): Boolean { - val args = typeArgs.map { if (it !is IrTypeProjection) null else it.type } - for ((idx, ta) in args.withIndex()){ - val tp = typeParameters.elementAtOrNull(idx) - if (tp?.symbol?.typeWith() != ta) { - return false + fun useClassInstance(c: IrClass, typeArgs: List): Label { + val classId = getClassLabel(c, typeArgs) + return tw.getLabelFor(classId, { + // If this is a generic type instantiation then it has no + // source entity, so we need to extract it here + if (typeArgs.isNotEmpty()) { + extractClass(c, typeArgs) } - } - return true + // we don't have an "external dependencies" extractor yet, + // so for now we extract thr source class for those too + if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || + c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { + extractClass(c, listOf()) + } + }) } fun extractClass(c: IrClass, typeArgs: List): Label { @@ -480,7 +464,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi t.classifier.owner is IrClass -> { val classifier: IrClassifierSymbol = t.classifier val tcls: IrClass = classifier.owner as IrClass - val l = useClass(tcls, t.arguments) + val l = useClassInstance(tcls, t.arguments) tw.writeExtendsReftype(id, l) } else -> { logger.warn(Severity.ErrorSevere, "Unexpected simple type supertype: " + t.javaClass + ": " + t.render()) @@ -498,7 +482,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeTypeArgs(argId, idx, id) } tw.writeIsParameterized(id) - val unbound = useClass(c, listOf()) + val unbound = useClassSource(c) tw.writeErasure(id, unbound) } else { c.declarations.map { extractDeclaration(it) } @@ -512,7 +496,6 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun useType(t: IrType, canReturnPrimitiveTypes: Boolean = true): Label { when(t) { is IrSimpleType -> return useSimpleType(t, canReturnPrimitiveTypes) - is IrClass -> return useClass(t, listOf()) else -> { logger.warn(Severity.ErrorSevere, "Unrecognised IrType: " + t.javaClass) return fakeLabel() @@ -523,7 +506,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun useDeclarationParent(dp: IrDeclarationParent): Label { when(dp) { is IrFile -> return usePackage(dp.fqName.asString()) - is IrClass -> return useClass(dp, listOf()) + is IrClass -> return useClassSource(dp) is IrFunction -> return useFunction(dp) else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclarationParent: " + dp.javaClass, dp) @@ -688,11 +671,10 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val locId = tw.getLocation(f) val signature = "TODO" - val returnTypeId = useType(f.returnType) val parent = f.parent val parentId = when (parent) { - is IrClass -> useClass(parent, listOf()) + is IrClass -> useClassSource(parent) is IrFile -> fileClass else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised function parent: " + parent.javaClass, parent) @@ -702,9 +684,11 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val id: Label if (f.symbol is IrConstructorSymbol) { + val returnTypeId = useType(erase(f.returnType)) id = useFunction(f) tw.writeConstrs(id, f.returnType.classFqName?.shortName()?.asString() ?: f.name.asString(), signature, returnTypeId, parentId, id) } else { + val returnTypeId = useType(f.returnType) id = useFunction(f) tw.writeMethods(id, f.name.asString(), signature, returnTypeId, parentId, id) @@ -747,7 +731,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val id = useProperty(p) val locId = tw.getLocation(p) val typeId = useType(bf.type) - val parentId = if (p.parent is IrClass ) useClass(p.parent as IrClass, listOf()) else fileClass + val parentId = if (p.parent is IrClass) useClassSource(p.parent as IrClass) else fileClass tw.writeFields(id, p.name.asString(), typeId, parentId, id) tw.writeHasLocation(id, locId) } From 636e15f4222924686a5ee32625831659ee519011 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 13 Oct 2021 16:51:19 +0100 Subject: [PATCH 0569/1618] Kotlin: Split extractClass into extractClassSource, extractClassInstance --- .../main/kotlin/KotlinExtractorExtension.kt | 99 ++++++++++++------- 1 file changed, 64 insertions(+), 35 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 324e98a4264..451a53a9fdd 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -219,7 +219,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun extractDeclaration(declaration: IrDeclaration) { when (declaration) { - is IrClass -> extractClass(declaration, listOf()) + is IrClass -> extractClassSource(declaration) is IrFunction -> extractFunction(declaration) is IrAnonymousInitializer -> { // Leaving this intentionally empty. init blocks are extracted during class extraction. @@ -421,42 +421,21 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi // If this is a generic type instantiation then it has no // source entity, so we need to extract it here if (typeArgs.isNotEmpty()) { - extractClass(c, typeArgs) + extractClassInstance(c, typeArgs) } // we don't have an "external dependencies" extractor yet, // so for now we extract thr source class for those too if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { - extractClass(c, listOf()) + extractClassSource(c) } }) } - fun extractClass(c: IrClass, typeArgs: List): Label { - val id = addClassLabel(c, typeArgs) - val pkg = c.packageFqName?.asString() ?: "" - val cls = c.name.asString() - val pkgId = extractPackage(pkg) - if(c.kind == ClassKind.INTERFACE) { - @Suppress("UNCHECKED_CAST") - val interfaceId = id as Label - tw.writeInterfaces(interfaceId, cls, pkgId, interfaceId) - } else { - @Suppress("UNCHECKED_CAST") - val classId = id as Label - tw.writeClasses(classId, cls, pkgId, classId) - - if (c.kind == ClassKind.ENUM_CLASS) { - tw.writeIsEnumType(classId) - } - } + fun extractClassCommon(c: IrClass, id: Label) { val locId = tw.getLocation(c) tw.writeHasLocation(id, locId) - if (typeArgs.isEmpty()) { - c.typeParameters.map { extractTypeParameter(it) } - } - for(t in c.superTypes) { when(t) { is IrSimpleType -> { @@ -475,21 +454,71 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } } + } - if (typeArgs.isNotEmpty()) { - for ((idx, arg) in typeArgs.withIndex()) { - val argId = getTypeArgumentLabel(arg, c) - tw.writeTypeArgs(argId, idx, id) - } - tw.writeIsParameterized(id) - val unbound = useClassSource(c) - tw.writeErasure(id, unbound) + fun extractClassSource(c: IrClass): Label { + val id = useClassSource(c) + val pkg = c.packageFqName?.asString() ?: "" + val cls = c.name.asString() + val pkgId = extractPackage(pkg) + if(c.kind == ClassKind.INTERFACE) { + @Suppress("UNCHECKED_CAST") + val interfaceId = id as Label + tw.writeInterfaces(interfaceId, cls, pkgId, interfaceId) } else { - c.declarations.map { extractDeclaration(it) } + @Suppress("UNCHECKED_CAST") + val classId = id as Label + tw.writeClasses(classId, cls, pkgId, classId) - extractObjectInitializerFunction(c, id) + if (c.kind == ClassKind.ENUM_CLASS) { + tw.writeIsEnumType(classId) + } } + extractClassCommon(c, id) + c.typeParameters.map { extractTypeParameter(it) } + c.declarations.map { extractDeclaration(it) } + extractObjectInitializerFunction(c, id) + + return id + } + + fun extractClassInstance(c: IrClass, typeArgs: List): Label { + if (typeArgs.isEmpty()) { + logger.warnElement(Severity.ErrorSevere, "Instance without type arguments: " + c.name.asString(), c) + } + + val id = addClassLabel(c, typeArgs) + val pkg = c.packageFqName?.asString() ?: "" + val cls = c.name.asString() + val pkgId = extractPackage(pkg) + if(c.kind == ClassKind.INTERFACE) { + @Suppress("UNCHECKED_CAST") + val interfaceId = id as Label + @Suppress("UNCHECKED_CAST") + val sourceInterfaceId = useClassSource(c) as Label + tw.writeInterfaces(interfaceId, cls, pkgId, sourceInterfaceId) + } else { + @Suppress("UNCHECKED_CAST") + val classId = id as Label + @Suppress("UNCHECKED_CAST") + val sourceClassId = useClassSource(c) as Label + tw.writeClasses(classId, cls, pkgId, sourceClassId) + + if (c.kind == ClassKind.ENUM_CLASS) { + tw.writeIsEnumType(classId) + } + } + extractClassCommon(c, id) + + for ((idx, arg) in typeArgs.withIndex()) { + val argId = getTypeArgumentLabel(arg, c) + tw.writeTypeArgs(argId, idx, id) + } + tw.writeIsParameterized(id) + val unbound = useClassSource(c) + tw.writeErasure(id, unbound) + return id } From ca96d5547611d29c0dfb39288d1df25396f74853 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 14 Oct 2021 12:01:19 +0100 Subject: [PATCH 0570/1618] Typo --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 451a53a9fdd..ef962be87b2 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -424,7 +424,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi extractClassInstance(c, typeArgs) } // we don't have an "external dependencies" extractor yet, - // so for now we extract thr source class for those too + // so for now we extract the source class for those too if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { extractClassSource(c) From 1bce9a131a1e9b3b7a90cd83e5a132d457a787e3 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 14 Oct 2021 13:32:43 +0100 Subject: [PATCH 0571/1618] Kotlin: Towards KotlinType support --- .../main/kotlin/KotlinExtractorExtension.kt | 233 +++++++++++++----- .../src/main/kotlin/utils/Logger.kt | 4 +- java/ql/lib/config/semmlecode.dbscheme | 14 +- java/ql/lib/java.qll | 1 + java/ql/lib/semmle/code/java/KotlinType.qll | 27 ++ 5 files changed, 211 insertions(+), 68 deletions(-) create mode 100755 java/ql/lib/semmle/code/java/KotlinType.qll diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index ef962be87b2..b164a504755 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -229,13 +229,55 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - fun useSimpleType(s: IrSimpleType, canReturnPrimitiveTypes: Boolean): Label { - fun primitiveType(name: String): Label { - return tw.getLabelFor("@\"type;$name\"", { - tw.writePrimitives(it, name) + data class TypeResult(val label: Label, val signature: String) + data class TypeResults(val javaResult: TypeResult, val kotlinResult: TypeResult) + + fun useSimpleType(s: IrSimpleType, canReturnPrimitiveTypes: Boolean): TypeResults { + // We use this when we don't actually have an IrClass for a class + // we want to refer to + fun makeClass(pkgName: String, className: String): Label { + val pkgId = extractPackage(pkgName) + val label = "@\"class;$pkgName.$className\"" + val classId: Label = tw.getLabelFor(label, { + tw.writeClasses(it, className, pkgId, it) }) + return classId } + fun primitiveType(primitiveName: String?, + javaPackageName: String, javaClassName: String, + kotlinPackageName: String, kotlinClassName: String): TypeResults { + val javaResult = if (canReturnPrimitiveTypes && !s.hasQuestionMark && primitiveName != null) { + val label: Label = tw.getLabelFor("@\"type;$primitiveName\"", { + tw.writePrimitives(it, primitiveName) + }) + TypeResult(label, primitiveName) + } else { + val label = makeClass(javaPackageName, javaClassName) + val signature = "$javaPackageName.$javaClassName" // TODO: Is this right? + TypeResult(label, signature) + } + val kotlinClassId = makeClass(kotlinPackageName, kotlinClassName) + val kotlinResult = if (s.hasQuestionMark) { + val kotlinSignature = "$kotlinPackageName.$kotlinClassName?" // TODO: Is this right? + val kotlinLabel = "@\"kt_type;nullable;$kotlinPackageName.$kotlinClassName\"" + val kotlinId: Label = tw.getLabelFor(kotlinLabel, { + tw.writeKt_nullable_types(it, kotlinClassId) + }) + TypeResult(kotlinId, kotlinSignature) + } else { + val kotlinSignature = "$kotlinPackageName.$kotlinClassName" // TODO: Is this right? + val kotlinLabel = "@\"kt_type;notnull;$kotlinPackageName.$kotlinClassName\"" + val kotlinId: Label = tw.getLabelFor(kotlinLabel, { + tw.writeKt_notnull_types(it, kotlinClassId) + }) + TypeResult(kotlinId, kotlinSignature) + } + return TypeResults(javaResult, kotlinResult) + } + when { +/* +XXX delete? // temporary fix for type parameters types that would otherwise be primitive types !canReturnPrimitiveTypes && (s.isPrimitiveType() || s.isUnsignedType() || s.isString()) -> { val classifier: IrClassifierSymbol = s.classifier @@ -244,47 +286,104 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return useClassInstance(cls, s.arguments) } - s.isByte() -> return primitiveType("byte") - s.isShort() -> return primitiveType("short") - s.isInt() -> return primitiveType("int") - s.isLong() -> return primitiveType("long") - s.isUByte() || s.isUShort() || s.isUInt() || s.isULong() -> { - logger.warn(Severity.ErrorSevere, "Unhandled unsigned type") - return fakeLabel() - } +*/ + s.isByte() -> return primitiveType("byte", "java.lang", "Byte", "kotlin", "Byte") + s.isShort() -> return primitiveType("short", "java.lang", "Short", "kotlin", "Short") + s.isInt() -> return primitiveType("int", "java.lang", "Integer", "kotlin", "Int") + s.isLong() -> return primitiveType("long", "java.lang", "Long", "kotlin", "Long") + s.isUByte() -> return primitiveType("byte", "kotlin", "UByte", "kotlin", "UByte") + s.isUShort() -> return primitiveType("short", "kotlin", "UShort", "kotlin", "UShort") + s.isUInt() -> return primitiveType("int", "kotlin", "UInt", "kotlin", "UInt") + s.isULong() -> return primitiveType("long", "kotlin", "ULong", "kotlin", "ULong") - s.isDouble() -> return primitiveType("double") - s.isFloat() -> return primitiveType("float") + s.isDouble() -> return primitiveType("double", "java.lang", "Double", "kotlin", "Double") + s.isFloat() -> return primitiveType("float", "java.lang", "Float", "kotlin", "Float") - s.isBoolean() -> return primitiveType("boolean") + s.isBoolean() -> return primitiveType("boolean", "java.lang", "Boolean", "kotlin", "Boolean") - s.isChar() -> return primitiveType("char") - s.isString() -> return primitiveType("string") // TODO: Wrong + s.isChar() -> return primitiveType("char", "java.lang", "Character", "kotlin", "Char") + s.isString() -> return primitiveType(null, "java.lang", "String", "kotlin", "String") - s.isNullable() && s.hasQuestionMark -> return useType(s.makeNotNull(), canReturnPrimitiveTypes) // TODO: Wrong - - s.isNothing() -> return primitiveType("") + s.isNothing() -> return primitiveType(null, "java.lang", "Void", "kotlin", "Nothing") // TODO: Is this right? s.isArray() && s.arguments.isNotEmpty() -> { - // todo: fix this, this is only a dummy implementation to let the tests pass - val elementType = useType(s.getArrayElementType(pluginContext.irBuiltIns)) + // TODO: fix this, this is only a dummy implementation to let the tests pass + val elementType = useTypeOld(s.getArrayElementType(pluginContext.irBuiltIns)) val id = tw.getLabelFor("@\"array;1;{$elementType}\"") tw.writeArrays(id, "ARRAY", elementType, 1, elementType) - return id + val javaSignature = "an array" // TODO: Wrong + val javaResult = TypeResult(id, javaSignature) + val aClassId = makeClass("kotlin", "Array") // TODO: Wrong + val kotlinResult = if (s.hasQuestionMark) { + val kotlinSignature = "$javaSignature?" // TODO: Wrong + val kotlinLabel = "@\"kt_type;nullable;array\"" // TODO: Wrong + val kotlinId: Label = tw.getLabelFor(kotlinLabel, { + tw.writeKt_nullable_types(it, aClassId) + }) + TypeResult(kotlinId, kotlinSignature) + } else { + val kotlinSignature = "$javaSignature" // TODO: Wrong + val kotlinLabel = "@\"kt_type;notnull;array\"" // TODO: Wrong + val kotlinId: Label = tw.getLabelFor(kotlinLabel, { + tw.writeKt_notnull_types(it, aClassId) + }) + TypeResult(kotlinId, kotlinSignature) + } + return TypeResults(javaResult, kotlinResult) } s.classifier.owner is IrClass -> { val classifier: IrClassifierSymbol = s.classifier val cls: IrClass = classifier.owner as IrClass - return useClassInstance(cls, s.arguments) + val classId = useClassInstance(cls, s.arguments) + val javaPackage = cls.packageFqName?.asString() + val javaName = cls.name.asString() + val qualClassName = if (javaPackage == null) javaName else "$javaPackage.$javaName" + val javaSignature = qualClassName // TODO: Is this right? + val javaResult = TypeResult(classId, javaSignature) + val kotlinResult = if (s.hasQuestionMark) { + val kotlinSignature = "$javaSignature?" // TODO: Is this right? + val kotlinLabel = "@\"kt_type;nullable;$qualClassName\"" + val kotlinId: Label = tw.getLabelFor(kotlinLabel, { + tw.writeKt_nullable_types(it, classId) + }) + TypeResult(kotlinId, kotlinSignature) + } else { + val kotlinSignature = javaSignature // TODO: Is this right? + val kotlinLabel = "@\"kt_type;notnull;$qualClassName\"" + val kotlinId: Label = tw.getLabelFor(kotlinLabel, { + tw.writeKt_notnull_types(it, classId) + }) + TypeResult(kotlinId, kotlinSignature) + } + return TypeResults(javaResult, kotlinResult) } s.classifier.owner is IrTypeParameter -> { - return useTypeParameter(s.classifier.owner as IrTypeParameter) + val javaId = useTypeParameter(s.classifier.owner as IrTypeParameter) + val javaSignature = "TODO" + val javaResult = TypeResult(javaId, javaSignature) + val aClassId = makeClass("kotlin", "TypeParam") // TODO: Wrong + val kotlinResult = if (s.hasQuestionMark) { + val kotlinSignature = "$javaSignature?" // TODO: Wrong + val kotlinLabel = "@\"kt_type;nullable;type_param\"" // TODO: Wrong + val kotlinId: Label = tw.getLabelFor(kotlinLabel, { + tw.writeKt_nullable_types(it, aClassId) + }) + TypeResult(kotlinId, kotlinSignature) + } else { + val kotlinSignature = "$javaSignature" // TODO: Wrong + val kotlinLabel = "@\"kt_type;notnull;type_param\"" // TODO: Wrong + val kotlinId: Label = tw.getLabelFor(kotlinLabel, { + tw.writeKt_notnull_types(it, aClassId) + }) + TypeResult(kotlinId, kotlinSignature) + } + return TypeResults(javaResult, kotlinResult) } else -> { logger.warn(Severity.ErrorSevere, "Unrecognised IrSimpleType: " + s.javaClass + ": " + s.render()) - return fakeLabel() + return TypeResults(TypeResult(fakeLabel(), "unknown"), TypeResult(fakeLabel(), "unknown")) } } } @@ -393,7 +492,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } is IrTypeProjection -> { @Suppress("UNCHECKED_CAST") - return useType(arg.type, false) as Label + return useTypeOld(arg.type, false) as Label } else -> { logger.warnElement(Severity.ErrorSevere, "Unexpected type argument.", reportOn) @@ -522,12 +621,16 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return id } - fun useType(t: IrType, canReturnPrimitiveTypes: Boolean = true): Label { + fun useTypeOld(t: IrType, canReturnPrimitiveTypes: Boolean = true): Label { + return useType(t, canReturnPrimitiveTypes).javaResult.label + } + + fun useType(t: IrType, canReturnPrimitiveTypes: Boolean = true): TypeResults { when(t) { is IrSimpleType -> return useSimpleType(t, canReturnPrimitiveTypes) else -> { logger.warn(Severity.ErrorSevere, "Unrecognised IrType: " + t.javaClass) - return fakeLabel() + return TypeResults(TypeResult(fakeLabel(), "unknown"), TypeResult(fakeLabel(), "unknown")) } } } @@ -571,8 +674,8 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } private fun getFunctionLabel(parent: IrDeclarationParent, name: String, parameters: List, returnType: IrType) : String { - val paramTypeIds = parameters.joinToString() { "{${useType(erase(it.type)).toString()}}" } - val returnTypeId = useType(erase(returnType)) + val paramTypeIds = parameters.joinToString() { "{${useTypeOld(erase(it.type)).toString()}}" } + val returnTypeId = useTypeOld(erase(returnType)) val parentId = useDeclarationParent(parent) val label = "@\"callable;{$parentId}.$name($paramTypeIds){$returnTypeId}\"" return label @@ -624,7 +727,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun extractValueParameter(vp: IrValueParameter, parent: Label, idx: Int) { val id = useValueParameter(vp) - val typeId = useType(vp.type) + val typeId = useTypeOld(vp.type) val locId = tw.getLocation(vp.startOffset, vp.endOffset) tw.writeParams(id, typeId, idx, parent, id) tw.writeHasLocation(id, locId) @@ -641,7 +744,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi var obinitLabel = getFunctionLabel(c, "", listOf(), pluginContext.irBuiltIns.unitType) val obinitId = tw.getLabelFor(obinitLabel) val signature = "TODO" - val returnTypeId = useType(pluginContext.irBuiltIns.unitType) + val returnTypeId = useTypeOld(pluginContext.irBuiltIns.unitType) tw.writeMethods(obinitId, "", signature, returnTypeId, parentId, obinitId) val locId = tw.getLocation(c) @@ -665,13 +768,13 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } val assignmentId = tw.getFreshIdLabel() - val typeId = useType(initializer.expression.type) + val typeId = useTypeOld(initializer.expression.type) val declLocId = tw.getLocation(decl) tw.writeExprs_assignexpr(assignmentId, typeId, blockId, idx++) tw.writeHasLocation(assignmentId, declLocId) val lhsId = tw.getFreshIdLabel() - val lhsTypeId = useType(backingField.type) + val lhsTypeId = useTypeOld(backingField.type) tw.writeExprs_varaccess(lhsId, lhsTypeId, assignmentId, 0) tw.writeHasLocation(lhsId, declLocId) val vId = useProperty(decl) // todo: fix this. We should be assigning the field, and not the property @@ -713,17 +816,17 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val id: Label if (f.symbol is IrConstructorSymbol) { - val returnTypeId = useType(erase(f.returnType)) + val returnTypeId = useTypeOld(erase(f.returnType)) id = useFunction(f) tw.writeConstrs(id, f.returnType.classFqName?.shortName()?.asString() ?: f.name.asString(), signature, returnTypeId, parentId, id) } else { - val returnTypeId = useType(f.returnType) + val returnTypeId = useTypeOld(f.returnType) id = useFunction(f) tw.writeMethods(id, f.name.asString(), signature, returnTypeId, parentId, id) val extReceiver = f.extensionReceiverParameter if (extReceiver != null) { - val extendedType = useType(extReceiver.type) + val extendedType = useTypeOld(extReceiver.type) tw.writeKtExtensionFunctions(id, extendedType) } } @@ -759,7 +862,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } else { val id = useProperty(p) val locId = tw.getLocation(p) - val typeId = useType(bf.type) + val typeId = useTypeOld(bf.type) val parentId = if (p.parent is IrClass) useClassSource(p.parent as IrClass) else fileClass tw.writeFields(id, p.name.asString(), typeId, parentId, id) tw.writeHasLocation(id, locId) @@ -790,7 +893,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi fun extractVariable(v: IrVariable, callable: Label) { val id = useVariable(v) val locId = tw.getLocation(v) - val typeId = useType(v.type) + val typeId = useTypeOld(v.type) val decId = tw.getFreshIdLabel() tw.writeLocalvars(id, v.name.asString(), typeId, decId) tw.writeHasLocation(id, locId) @@ -835,77 +938,77 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val exprId: Label = when { c.origin == PLUS -> { val id = tw.getFreshIdLabel() - val typeId = useType(c.type) + val typeId = useTypeOld(c.type) val locId = tw.getLocation(c) tw.writeExprs_addexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == MINUS -> { val id = tw.getFreshIdLabel() - val typeId = useType(c.type) + val typeId = useTypeOld(c.type) val locId = tw.getLocation(c) tw.writeExprs_subexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == DIV -> { val id = tw.getFreshIdLabel() - val typeId = useType(c.type) + val typeId = useTypeOld(c.type) val locId = tw.getLocation(c) tw.writeExprs_divexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == PERC -> { val id = tw.getFreshIdLabel() - val typeId = useType(c.type) + val typeId = useTypeOld(c.type) val locId = tw.getLocation(c) tw.writeExprs_remexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == EQEQ -> { val id = tw.getFreshIdLabel() - val typeId = useType(c.type) + val typeId = useTypeOld(c.type) val locId = tw.getLocation(c) tw.writeExprs_eqexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == EXCLEQ -> { val id = tw.getFreshIdLabel() - val typeId = useType(c.type) + val typeId = useTypeOld(c.type) val locId = tw.getLocation(c) tw.writeExprs_neexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == LT -> { val id = tw.getFreshIdLabel() - val typeId = useType(c.type) + val typeId = useTypeOld(c.type) val locId = tw.getLocation(c) tw.writeExprs_ltexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == LTEQ -> { val id = tw.getFreshIdLabel() - val typeId = useType(c.type) + val typeId = useTypeOld(c.type) val locId = tw.getLocation(c) tw.writeExprs_leexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == GT -> { val id = tw.getFreshIdLabel() - val typeId = useType(c.type) + val typeId = useTypeOld(c.type) val locId = tw.getLocation(c) tw.writeExprs_gtexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == GTEQ -> { val id = tw.getFreshIdLabel() - val typeId = useType(c.type) + val typeId = useTypeOld(c.type) val locId = tw.getLocation(c) tw.writeExprs_geexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) id } else -> { val id = tw.getFreshIdLabel() - val typeId = useType(c.type) + val typeId = useTypeOld(c.type) val locId = tw.getLocation(c) val methodId = useFunction(c.symbol.owner) tw.writeExprs_methodaccess(id, typeId, parent, idx) @@ -937,7 +1040,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi ) { for (argIdx in 0 until c.typeArgumentsCount) { val arg = c.getTypeArgument(argIdx)!! - val argTypeId = useType(arg, false) + val argTypeId = useTypeOld(arg, false) val argId = tw.getFreshIdLabel() val mul = if (reverse) -1 else 1 tw.writeExprs_unannotatedtypeaccess(argId, argTypeId, id, argIdx * mul + startIndex) @@ -951,7 +1054,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi callable: Label ) { val id = tw.getFreshIdLabel() - val typeId = useType(e.type) + val typeId = useTypeOld(e.type) val locId = tw.getLocation(e) val methodId = useFunction(e.symbol.owner) tw.writeExprs_newexpr(id, typeId, parent, idx) @@ -994,7 +1097,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi // Add call to : val id = tw.getFreshIdLabel() - val typeId = useType(e.type) + val typeId = useTypeOld(e.type) val locId = tw.getLocation(e) var methodLabel = getFunctionLabel(irCallable.parent, "", listOf(), e.type) val methodId = tw.getLabelFor(methodLabel) @@ -1052,28 +1155,28 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi when(v) { is Int -> { val id = tw.getFreshIdLabel() - val typeId = useType(e.type) + val typeId = useTypeOld(e.type) val locId = tw.getLocation(e) tw.writeExprs_integerliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is Boolean -> { val id = tw.getFreshIdLabel() - val typeId = useType(e.type) + val typeId = useTypeOld(e.type) val locId = tw.getLocation(e) tw.writeExprs_booleanliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is Char -> { val id = tw.getFreshIdLabel() - val typeId = useType(e.type) + val typeId = useTypeOld(e.type) val locId = tw.getLocation(e) tw.writeExprs_characterliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is String -> { val id = tw.getFreshIdLabel() - val typeId = useType(e.type) + val typeId = useTypeOld(e.type) val locId = tw.getLocation(e) tw.writeExprs_stringliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) @@ -1081,7 +1184,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } null -> { val id = tw.getFreshIdLabel() - val typeId = useType(e.type) // class;kotlin.Nothing + val typeId = useTypeOld(e.type) // class;kotlin.Nothing val locId = tw.getLocation(e) tw.writeExprs_nullliteral(id, typeId, parent, idx) tw.writeHasLocation(id, locId) @@ -1095,7 +1198,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val owner = e.symbol.owner if (owner is IrValueParameter && owner.index == -1) { val id = tw.getFreshIdLabel() - val typeId = useType(e.type) + val typeId = useTypeOld(e.type) val locId = tw.getLocation(e) tw.writeExprs_thisaccess(id, typeId, parent, idx) if (isQualifiedThis(owner)) { @@ -1105,7 +1208,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi tw.writeHasLocation(id, locId) } else { val id = tw.getFreshIdLabel() - val typeId = useType(e.type) + val typeId = useTypeOld(e.type) val locId = tw.getLocation(e) tw.writeExprs_varaccess(id, typeId, parent, idx) tw.writeHasLocation(id, locId) @@ -1116,13 +1219,13 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } is IrSetValue -> { val id = tw.getFreshIdLabel() - val typeId = useType(e.type) + val typeId = useTypeOld(e.type) val locId = tw.getLocation(e) tw.writeExprs_assignexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) val lhsId = tw.getFreshIdLabel() - val lhsTypeId = useType(e.symbol.owner.type) + val lhsTypeId = useTypeOld(e.symbol.owner.type) tw.writeExprs_varaccess(lhsId, lhsTypeId, id, 0) tw.writeHasLocation(id, locId) val vId = useValueDeclaration(e.symbol.owner) @@ -1191,7 +1294,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } is IrWhen -> { val id = tw.getFreshIdLabel() - val typeId = useType(e.type) + val typeId = useTypeOld(e.type) val locId = tw.getLocation(e) tw.writeExprs_whenexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) @@ -1213,7 +1316,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi is IrGetClass -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) - val typeId = useType(e.type) + val typeId = useTypeOld(e.type) tw.writeExprs_getclassexpr(id, typeId, parent, idx) tw.writeHasLocation(id, locId) extractExpression(e.argument, callable, id, 0) diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt index f56b63c2ee4..4a581e184f7 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt @@ -42,7 +42,7 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { tw.writeTrap("// " + fullMsg.replace("\n", "\n//") + "\n") println(fullMsg) } - fun warn(severity: Severity, msg: String, locationString: String? = null, locationId: Label = tw.unknownLocation, stackIndex: Int = 1) { + fun warn(severity: Severity, msg: String, locationString: String? = null, locationId: Label = tw.unknownLocation, stackIndex: Int = 2) { val st = Exception().stackTrace val suffix = if(st.size < stackIndex + 1) { @@ -79,7 +79,7 @@ class FileLogger(logCounter: LogCounter, override val tw: FileTrapWriter): Logge return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" } - fun warnElement(severity: Severity, msg: String, element: IrElement, stackIndex: Int = 2) { + fun warnElement(severity: Severity, msg: String, element: IrElement, stackIndex: Int = 3) { val locationString = tw.getLocationString(element) val locationId = tw.getLocation(element) warn(severity, msg, locationString, locationId, stackIndex) diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index de85b163030..e209e671d71 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -314,6 +314,18 @@ classes( int sourceid: @class ref ); +kt_nullable_types( + unique int id: @kt_nullable_type, + int classid: @classorinterface ref +) + +kt_notnull_types( + unique int id: @kt_notnull_type, + int classid: @classorinterface ref +) + +@kt_type = @kt_nullable_type | @kt_notnull_type + isRecord( unique int id: @class ref ); @@ -906,7 +918,7 @@ javadocText( @type = @primitive | @reftype; @callable = @method | @constructor; @element = @file | @package | @primitive | @class | @interface | @method | @constructor | @modifier | @param | @exception | @field | - @annotation | @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl; + @annotation | @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type; @modifiable = @member_modifiable| @param | @localvar ; diff --git a/java/ql/lib/java.qll b/java/ql/lib/java.qll index 13640eb5723..ce0905184f4 100644 --- a/java/ql/lib/java.qll +++ b/java/ql/lib/java.qll @@ -20,6 +20,7 @@ import semmle.code.java.Javadoc import semmle.code.java.JDK import semmle.code.java.JDKAnnotations import semmle.code.java.JMX +import semmle.code.java.KotlinType import semmle.code.java.Member import semmle.code.java.Modifier import semmle.code.java.Modules diff --git a/java/ql/lib/semmle/code/java/KotlinType.qll b/java/ql/lib/semmle/code/java/KotlinType.qll new file mode 100755 index 00000000000..2d41ebfb4a9 --- /dev/null +++ b/java/ql/lib/semmle/code/java/KotlinType.qll @@ -0,0 +1,27 @@ +/** + * Provides classes and predicates for working with Kotlin types. + */ + +import java + +class KotlinType extends Element, @kt_type { +} + +class KotlinNullableType extends KotlinType, @kt_nullable_type { + override string toString() { + exists(ClassOrInterface ci | + kt_nullable_types(this, ci) and + result = "Kotlin nullable " + ci.toString()) + } + override string getAPrimaryQlClass() { result = "KotlinNullableType" } +} + +class KotlinNotnullType extends KotlinType, @kt_notnull_type { + override string toString() { + exists(ClassOrInterface ci | + kt_notnull_types(this, ci) and + result = "Kotlin not-null " + ci.toString()) + } + override string getAPrimaryQlClass() { result = "KotlinNotnullType" } +} + From 45cade8ff8e985ec361235d5175ad4e0656e326c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 14 Oct 2021 15:37:56 +0100 Subject: [PATCH 0572/1618] Kotlin: Accept/update tests --- .../library-tests/classes/classes.expected | 24 +++++++++++-------- .../kotlin/library-tests/classes/classes.ql | 2 +- .../library-tests/generics/generics.expected | 20 ++++++++-------- .../multiple_files/classes.expected | 16 ++++++++----- .../library-tests/multiple_files/classes.ql | 2 +- .../kotlin/library-tests/types/types.expected | 13 ++++++++-- 6 files changed, 47 insertions(+), 30 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index f114e3d1c7a..50bf442af1e 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -1,10 +1,14 @@ -| classes.kt:2:1:2:18 | ClassOne | -| classes.kt:4:1:6:1 | ClassTwo | -| classes.kt:8:1:10:1 | ClassThree | -| classes.kt:12:1:15:1 | ClassFour | -| classes.kt:17:1:18:1 | ClassFive | -| classes.kt:28:1:30:1 | ClassSix | -| classes.kt:34:1:47:1 | ClassSeven | -| file://:0:0:0:0 | Any | -| file://:0:0:0:0 | ClassesKt | -| file://:0:0:0:0 | Unit | +| classes.kt:2:1:2:18 | ClassOne | ClassOne | +| classes.kt:4:1:6:1 | ClassTwo | ClassTwo | +| classes.kt:8:1:10:1 | ClassThree | ClassThree | +| classes.kt:12:1:15:1 | ClassFour | ClassFour | +| classes.kt:17:1:18:1 | ClassFive | ClassFive | +| classes.kt:28:1:30:1 | ClassSix | ClassSix | +| classes.kt:34:1:47:1 | ClassSeven | ClassSeven | +| file://:0:0:0:0 | Any | kotlin.Any | +| file://:0:0:0:0 | Boolean | kotlin.Boolean | +| file://:0:0:0:0 | ClassesKt | ClassesKt | +| file://:0:0:0:0 | Int | kotlin.Int | +| file://:0:0:0:0 | String | java.lang.String | +| file://:0:0:0:0 | String | kotlin.String | +| file://:0:0:0:0 | Unit | kotlin.Unit | diff --git a/java/ql/test/kotlin/library-tests/classes/classes.ql b/java/ql/test/kotlin/library-tests/classes/classes.ql index ab786d2b7d0..27a702921c1 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.ql +++ b/java/ql/test/kotlin/library-tests/classes/classes.ql @@ -1,5 +1,5 @@ import java from Class c -select c +select c, c.getQualifiedName() diff --git a/java/ql/test/kotlin/library-tests/generics/generics.expected b/java/ql/test/kotlin/library-tests/generics/generics.expected index 1c001430ebe..82a7fa4b899 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.expected +++ b/java/ql/test/kotlin/library-tests/generics/generics.expected @@ -4,17 +4,17 @@ genericType | generics.kt:13:1:18:1 | C1 | generics.kt:13:13:13:13 | W | 1 | parameterizedType | generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | * | -| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | Int | +| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | Integer | | generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:7:6:7:6 | S | | generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:11:15:11:15 | V | | generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:13:13:13:13 | W | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | Int | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | Integer | | generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | String | | generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | String | | generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | generics.kt:13:10:13:10 | T | | generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | generics.kt:15:10:15:10 | U | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | Int | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | Int | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | Integer | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | Integer | | generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | String | | generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | generics.kt:13:13:13:13 | W | | generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | generics.kt:15:10:15:10 | U | @@ -25,13 +25,13 @@ genericFunction | generics.kt:21:5:21:23 | f4 | generics.kt:21:10:21:10 | P | 0 | genericCall | generics.kt:27:17:27:22 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | String | -| generics.kt:30:17:30:21 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | Int | -| generics.kt:32:8:32:12 | f4(...) | generics.kt:21:10:21:10 | P | file://:0:0:0:0 | Int | +| generics.kt:30:17:30:21 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | Integer | +| generics.kt:32:8:32:12 | f4(...) | generics.kt:21:10:21:10 | P | file://:0:0:0:0 | Integer | genericCtor | generics.kt:16:16:16:26 | new C1(...) | 0 | generics.kt:15:10:15:10 | U | | generics.kt:16:16:16:26 | new C1(...) | 1 | generics.kt:15:10:15:10 | U | -| generics.kt:25:14:25:28 | new C1(...) | 0 | file://:0:0:0:0 | Int | -| generics.kt:25:14:25:28 | new C1(...) | 1 | file://:0:0:0:0 | Int | +| generics.kt:25:14:25:28 | new C1(...) | 0 | file://:0:0:0:0 | Integer | +| generics.kt:25:14:25:28 | new C1(...) | 1 | file://:0:0:0:0 | Integer | | generics.kt:28:14:28:32 | new C1(...) | 0 | file://:0:0:0:0 | String | -| generics.kt:28:14:28:32 | new C1(...) | 1 | file://:0:0:0:0 | Int | -| generics.kt:33:21:33:29 | new C0(...) | 0 | file://:0:0:0:0 | Int | +| generics.kt:28:14:28:32 | new C1(...) | 1 | file://:0:0:0:0 | Integer | +| generics.kt:33:21:33:29 | new C0(...) | 0 | file://:0:0:0:0 | Integer | diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected index cb27f3012b8..9b92798042d 100644 --- a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected @@ -1,6 +1,10 @@ -| file1.kt:2:1:2:16 | Class1 | -| file2.kt:2:1:2:16 | Class2 | -| file3.kt:3:1:3:16 | Class3 | -| file://:0:0:0:0 | Any | -| file://:0:0:0:0 | MyJvmName | -| file://:0:0:0:0 | Unit | +| file1.kt:2:1:2:16 | Class1 | Class1 | +| file2.kt:2:1:2:16 | Class2 | Class2 | +| file3.kt:3:1:3:16 | Class3 | Class3 | +| file://:0:0:0:0 | Any | kotlin.Any | +| file://:0:0:0:0 | Boolean | kotlin.Boolean | +| file://:0:0:0:0 | Int | kotlin.Int | +| file://:0:0:0:0 | MyJvmName | MyJvmName | +| file://:0:0:0:0 | String | java.lang.String | +| file://:0:0:0:0 | String | kotlin.String | +| file://:0:0:0:0 | Unit | kotlin.Unit | diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.ql b/java/ql/test/kotlin/library-tests/multiple_files/classes.ql index ab786d2b7d0..27a702921c1 100644 --- a/java/ql/test/kotlin/library-tests/multiple_files/classes.ql +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.ql @@ -1,5 +1,5 @@ import java from Class c -select c +select c, c.getQualifiedName() diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index 3b16c46fd69..2b76d7c3348 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -1,5 +1,15 @@ -| file://:0:0:0:0 | | NullType | | file://:0:0:0:0 | Any | Class | +| file://:0:0:0:0 | Boolean | Class | +| file://:0:0:0:0 | Byte | Class | +| file://:0:0:0:0 | Char | Class | +| file://:0:0:0:0 | Double | Class | +| file://:0:0:0:0 | Float | Class | +| file://:0:0:0:0 | Int | Class | +| file://:0:0:0:0 | Long | Class | +| file://:0:0:0:0 | Nothing | Class | +| file://:0:0:0:0 | Short | Class | +| file://:0:0:0:0 | String | Class | +| file://:0:0:0:0 | String | Class | | file://:0:0:0:0 | Unit | Class | | file://:0:0:0:0 | boolean | PrimitiveType | | file://:0:0:0:0 | byte | PrimitiveType | @@ -9,5 +19,4 @@ | file://:0:0:0:0 | int | PrimitiveType | | file://:0:0:0:0 | long | PrimitiveType | | file://:0:0:0:0 | short | PrimitiveType | -| file://:0:0:0:0 | string | ??? | | types.kt:2:1:37:1 | Foo | Class | From 63e96dffead21503c1c79d5db5b7cefc1bbfe37b Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 18 Oct 2021 12:14:38 +0100 Subject: [PATCH 0573/1618] Kotlin: Add a testcase as a comment for now, so we don't lose it --- .../src/main/kotlin/KotlinExtractorExtension.kt | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index b164a504755..c4fe1578e00 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -306,6 +306,19 @@ XXX delete? s.isNothing() -> return primitiveType(null, "java.lang", "Void", "kotlin", "Nothing") // TODO: Is this right? +/* +TODO: Test case: nullable and has-question-mark type variables: +class X { + fun f1(t: T?) { + f1(null) + } + + fun f2(t: T) { + f2(null) + } +} +*/ + s.isArray() && s.arguments.isNotEmpty() -> { // TODO: fix this, this is only a dummy implementation to let the tests pass val elementType = useTypeOld(s.getArrayElementType(pluginContext.irBuiltIns)) From cd41d5b9cf67a63253afe8df00f6f62a601d7fc5 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 14 Oct 2021 17:24:23 +0100 Subject: [PATCH 0574/1618] Kotlin: Add KotlinType to exprs --- .../main/kotlin/KotlinExtractorExtension.kt | 120 +++++++++--------- java/ql/lib/config/semmlecode.dbscheme | 1 + java/ql/lib/semmle/code/java/Expr.qll | 17 ++- java/ql/lib/semmle/code/java/Statement.qll | 4 +- 4 files changed, 73 insertions(+), 69 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index c4fe1578e00..161c61e68eb 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -229,7 +229,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } } - data class TypeResult(val label: Label, val signature: String) + data class TypeResult(val id: Label, val signature: String) data class TypeResults(val javaResult: TypeResult, val kotlinResult: TypeResult) fun useSimpleType(s: IrSimpleType, canReturnPrimitiveTypes: Boolean): TypeResults { @@ -635,7 +635,7 @@ class X { } fun useTypeOld(t: IrType, canReturnPrimitiveTypes: Boolean = true): Label { - return useType(t, canReturnPrimitiveTypes).javaResult.label + return useType(t, canReturnPrimitiveTypes).javaResult.id } fun useType(t: IrType, canReturnPrimitiveTypes: Boolean = true): TypeResults { @@ -781,14 +781,14 @@ class X { } val assignmentId = tw.getFreshIdLabel() - val typeId = useTypeOld(initializer.expression.type) + val type = useType(initializer.expression.type) val declLocId = tw.getLocation(decl) - tw.writeExprs_assignexpr(assignmentId, typeId, blockId, idx++) + tw.writeExprs_assignexpr(assignmentId, type.javaResult.id, type.kotlinResult.id, blockId, idx++) tw.writeHasLocation(assignmentId, declLocId) val lhsId = tw.getFreshIdLabel() - val lhsTypeId = useTypeOld(backingField.type) - tw.writeExprs_varaccess(lhsId, lhsTypeId, assignmentId, 0) + val lhsType = useType(backingField.type) + tw.writeExprs_varaccess(lhsId, lhsType.javaResult.id, lhsType.kotlinResult.id, assignmentId, 0) tw.writeHasLocation(lhsId, declLocId) val vId = useProperty(decl) // todo: fix this. We should be assigning the field, and not the property tw.writeVariableBinding(lhsId, vId) @@ -906,11 +906,11 @@ class X { fun extractVariable(v: IrVariable, callable: Label) { val id = useVariable(v) val locId = tw.getLocation(v) - val typeId = useTypeOld(v.type) + val type = useType(v.type) val decId = tw.getFreshIdLabel() - tw.writeLocalvars(id, v.name.asString(), typeId, decId) + tw.writeLocalvars(id, v.name.asString(), type.javaResult.id, decId) // TODO: KT type tw.writeHasLocation(id, locId) - tw.writeExprs_localvariabledeclexpr(decId, typeId, id, 0) + tw.writeExprs_localvariabledeclexpr(decId, type.javaResult.id, type.kotlinResult.id, id, 0) tw.writeHasLocation(id, locId) val i = v.initializer if(i != null) { @@ -951,80 +951,80 @@ class X { val exprId: Label = when { c.origin == PLUS -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(c.type) + val type = useType(c.type) val locId = tw.getLocation(c) - tw.writeExprs_addexpr(id, typeId, parent, idx) + tw.writeExprs_addexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == MINUS -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(c.type) + val type = useType(c.type) val locId = tw.getLocation(c) - tw.writeExprs_subexpr(id, typeId, parent, idx) + tw.writeExprs_subexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == DIV -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(c.type) + val type = useType(c.type) val locId = tw.getLocation(c) - tw.writeExprs_divexpr(id, typeId, parent, idx) + tw.writeExprs_divexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == PERC -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(c.type) + val type = useType(c.type) val locId = tw.getLocation(c) - tw.writeExprs_remexpr(id, typeId, parent, idx) + tw.writeExprs_remexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == EQEQ -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(c.type) + val type = useType(c.type) val locId = tw.getLocation(c) - tw.writeExprs_eqexpr(id, typeId, parent, idx) + tw.writeExprs_eqexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == EXCLEQ -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(c.type) + val type = useType(c.type) val locId = tw.getLocation(c) - tw.writeExprs_neexpr(id, typeId, parent, idx) + tw.writeExprs_neexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == LT -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(c.type) + val type = useType(c.type) val locId = tw.getLocation(c) - tw.writeExprs_ltexpr(id, typeId, parent, idx) + tw.writeExprs_ltexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == LTEQ -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(c.type) + val type = useType(c.type) val locId = tw.getLocation(c) - tw.writeExprs_leexpr(id, typeId, parent, idx) + tw.writeExprs_leexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == GT -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(c.type) + val type = useType(c.type) val locId = tw.getLocation(c) - tw.writeExprs_gtexpr(id, typeId, parent, idx) + tw.writeExprs_gtexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) id } c.origin == GTEQ -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(c.type) + val type = useType(c.type) val locId = tw.getLocation(c) - tw.writeExprs_geexpr(id, typeId, parent, idx) + tw.writeExprs_geexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) id } else -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(c.type) + val type = useType(c.type) val locId = tw.getLocation(c) val methodId = useFunction(c.symbol.owner) - tw.writeExprs_methodaccess(id, typeId, parent, idx) + tw.writeExprs_methodaccess(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) tw.writeCallableBinding(id, methodId) @@ -1053,10 +1053,10 @@ class X { ) { for (argIdx in 0 until c.typeArgumentsCount) { val arg = c.getTypeArgument(argIdx)!! - val argTypeId = useTypeOld(arg, false) + val argType = useType(arg, false) val argId = tw.getFreshIdLabel() val mul = if (reverse) -1 else 1 - tw.writeExprs_unannotatedtypeaccess(argId, argTypeId, id, argIdx * mul + startIndex) + tw.writeExprs_unannotatedtypeaccess(argId, argType.javaResult.id, argType.kotlinResult.id, id, argIdx * mul + startIndex) } } @@ -1067,10 +1067,10 @@ class X { callable: Label ) { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(e.type) + val type = useType(e.type) val locId = tw.getLocation(e) val methodId = useFunction(e.symbol.owner) - tw.writeExprs_newexpr(id, typeId, parent, idx) + tw.writeExprs_newexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) tw.writeCallableBinding(id, methodId) for (i in 0 until e.valueArgumentsCount) { @@ -1086,7 +1086,7 @@ class X { if (e.typeArgumentsCount > 0) { val typeAccessId = tw.getFreshIdLabel() - tw.writeExprs_unannotatedtypeaccess(typeAccessId, typeId, id, -3) + tw.writeExprs_unannotatedtypeaccess(typeAccessId, type.javaResult.id, type.kotlinResult.id, id, -3) extractTypeArguments(e, typeAccessId) } } @@ -1110,11 +1110,11 @@ class X { // Add call to : val id = tw.getFreshIdLabel() - val typeId = useTypeOld(e.type) + val type = useType(e.type) val locId = tw.getLocation(e) var methodLabel = getFunctionLabel(irCallable.parent, "", listOf(), e.type) val methodId = tw.getLabelFor(methodLabel) - tw.writeExprs_methodaccess(id, typeId, parent, idx) + tw.writeExprs_methodaccess(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) tw.writeCallableBinding(id, methodId) } @@ -1168,38 +1168,38 @@ class X { when(v) { is Int -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(e.type) + val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_integerliteral(id, typeId, parent, idx) + tw.writeExprs_integerliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is Boolean -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(e.type) + val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_booleanliteral(id, typeId, parent, idx) + tw.writeExprs_booleanliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is Char -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(e.type) + val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_characterliteral(id, typeId, parent, idx) + tw.writeExprs_characterliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is String -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(e.type) + val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_stringliteral(id, typeId, parent, idx) + tw.writeExprs_stringliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } null -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(e.type) // class;kotlin.Nothing + val type = useType(e.type) // class;kotlin.Nothing val locId = tw.getLocation(e) - tw.writeExprs_nullliteral(id, typeId, parent, idx) + tw.writeExprs_nullliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) } else -> { @@ -1211,9 +1211,9 @@ class X { val owner = e.symbol.owner if (owner is IrValueParameter && owner.index == -1) { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(e.type) + val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_thisaccess(id, typeId, parent, idx) + tw.writeExprs_thisaccess(id, type.javaResult.id, type.kotlinResult.id, parent, idx) if (isQualifiedThis(owner)) { // todo: add type access as child of 'id' at index 0 logger.warnElement(Severity.ErrorSevere, "TODO: Qualified this access found.", e) @@ -1221,9 +1221,9 @@ class X { tw.writeHasLocation(id, locId) } else { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(e.type) + val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_varaccess(id, typeId, parent, idx) + tw.writeExprs_varaccess(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) val vId = useValueDeclaration(owner) @@ -1232,14 +1232,14 @@ class X { } is IrSetValue -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(e.type) + val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_assignexpr(id, typeId, parent, idx) + tw.writeExprs_assignexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) val lhsId = tw.getFreshIdLabel() - val lhsTypeId = useTypeOld(e.symbol.owner.type) - tw.writeExprs_varaccess(lhsId, lhsTypeId, id, 0) + val lhsType = useType(e.symbol.owner.type) + tw.writeExprs_varaccess(lhsId, lhsType.javaResult.id, lhsType.kotlinResult.id, id, 0) tw.writeHasLocation(id, locId) val vId = useValueDeclaration(e.symbol.owner) tw.writeVariableBinding(lhsId, vId) @@ -1307,9 +1307,9 @@ class X { } is IrWhen -> { val id = tw.getFreshIdLabel() - val typeId = useTypeOld(e.type) + val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_whenexpr(id, typeId, parent, idx) + tw.writeExprs_whenexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) if(e.origin == IF) { tw.writeWhen_if(id) @@ -1329,8 +1329,8 @@ class X { is IrGetClass -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) - val typeId = useTypeOld(e.type) - tw.writeExprs_getclassexpr(id, typeId, parent, idx) + val type = useType(e.type) + tw.writeExprs_getclassexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) extractExpression(e.argument, callable, id, 0) } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index e209e671d71..5e2ec416587 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -571,6 +571,7 @@ exprs( unique int id: @expr, int kind: int ref, int typeid: @type ref, + int kttypeid: @kt_type ref, int parent: @exprparent ref, int idx: int ref ); diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index a4716e62d7d..a5965137d65 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -17,16 +17,19 @@ class Expr extends ExprParent, @expr { Callable getEnclosingCallable() { callableEnclosingExpr(this, result) } /** Gets the index of this expression as a child of its parent. */ - int getIndex() { exprs(this, _, _, _, result) } + int getIndex() { exprs(this, _, _, _, _, result) } /** Gets the parent of this expression. */ - ExprParent getParent() { exprs(this, _, _, result, _) } + ExprParent getParent() { exprs(this, _, _, _, result, _) } /** Holds if this expression is the child of the specified parent at the specified (zero-based) position. */ - predicate isNthChildOf(ExprParent parent, int index) { exprs(this, _, _, parent, index) } + predicate isNthChildOf(ExprParent parent, int index) { exprs(this, _, _, _, parent, index) } /** Gets the type of this expression. */ - Type getType() { exprs(this, _, result, _, _) } + Type getType() { exprs(this, _, result, _, _, _) } + + /** Gets the Kotlin type of this expression. */ + KotlinType getKotlinType() { exprs(this, _, _, result, _, _) } /** Gets the compilation unit in which this expression occurs. */ CompilationUnit getCompilationUnit() { result = this.getFile() } @@ -44,7 +47,7 @@ class Expr extends ExprParent, @expr { * comparing whether two expressions have the same kind (as opposed * to checking whether an expression has a particular kind). */ - int getKind() { exprs(this, result, _, _, _) } + int getKind() { exprs(this, result, _, _, _, _) } /** Gets the statement containing this expression, if any. */ Stmt getEnclosingStmt() { statementEnclosingExpr(this, result) } @@ -56,7 +59,7 @@ class Expr extends ExprParent, @expr { Stmt getAnEnclosingStmt() { result = this.getEnclosingStmt().getEnclosingStmt*() } /** Gets a child of this expression. */ - Expr getAChildExpr() { exprs(result, _, _, this, _) } + Expr getAChildExpr() { exprs(result, _, _, _, this, _) } /** Gets the basic block in which this expression occurs, if any. */ BasicBlock getBasicBlock() { result.getANode() = this } @@ -1707,7 +1710,7 @@ class MethodAccess extends Expr, Call, @methodaccess { override Expr getAnArgument() { result.getIndex() >= 0 and result.getParent() = this } /** Gets the argument at the specified (zero-based) position in this method access. */ - override Expr getArgument(int index) { exprs(result, _, _, this, index) and index >= 0 } + override Expr getArgument(int index) { exprs(result, _, _, _, this, index) and index >= 0 } /** Gets a type argument supplied as part of this method access, if any. */ Expr getATypeArgument() { result.getIndex() <= -2 and result.getParent() = this } diff --git a/java/ql/lib/semmle/code/java/Statement.qll b/java/ql/lib/semmle/code/java/Statement.qll index bbd2d15a47b..61ff551c09d 100755 --- a/java/ql/lib/semmle/code/java/Statement.qll +++ b/java/ql/lib/semmle/code/java/Statement.qll @@ -736,10 +736,10 @@ class LabeledStmt extends Stmt, @labeledstmt { /** An `assert` statement. */ class AssertStmt extends Stmt, @assertstmt { /** Gets the boolean expression of this `assert` statement. */ - Expr getExpr() { exprs(result, _, _, this, _) and result.getIndex() = 0 } + Expr getExpr() { exprs(result, _, _, _, this, _) and result.getIndex() = 0 } /** Gets the assertion message expression, if any. */ - Expr getMessage() { exprs(result, _, _, this, _) and result.getIndex() = 1 } + Expr getMessage() { exprs(result, _, _, _, this, _) and result.getIndex() = 1 } override string pp() { if exists(this.getMessage()) then result = "assert ... : ..." else result = "assert ..." From b9359bd1196659a17f2a744f1bd1ac0f872bf3f3 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 20 Oct 2021 13:01:53 +0100 Subject: [PATCH 0575/1618] Kotlin: Add a test case to be added MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Found by Tamás --- .../src/main/kotlin/KotlinExtractorExtension.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 161c61e68eb..81dc3a123be 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -317,6 +317,13 @@ class X { f2(null) } } + +TODO: Test case: This breaks kotlinc codegen currently, but up to IR is OK, so we can still have it in a qltest +class X { + fun f1(t: T?) { + f1(null) + } +} */ s.isArray() && s.arguments.isNotEmpty() -> { From 14a10564f3fde8f47aa4e488cf3cb9866fe8de17 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 21 Oct 2021 20:52:15 +0100 Subject: [PATCH 0576/1618] Kotlin: Fix File locations, and fromSource/hasSourceLocation for Kotlin code --- .../src/main/kotlin/KotlinExtractorExtension.kt | 4 +++- java/kotlin-extractor/src/main/kotlin/TrapWriter.kt | 3 +++ java/ql/lib/semmle/code/Location.qll | 2 +- java/ql/lib/semmle/code/java/Element.qll | 2 +- java/ql/test/kotlin/library-tests/classes/classes.expected | 2 +- .../test/kotlin/library-tests/multiple_files/classes.expected | 2 +- 6 files changed, 10 insertions(+), 5 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 81dc3a123be..80194d9d0f7 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -166,8 +166,10 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi } fun extractFileContents(id: Label) { + val locId = tw.getWholeFileLocation() val pkg = file.fqName.asString() val pkgId = extractPackage(pkg) + tw.writeHasLocation(id, locId) tw.writeCupackage(id, pkgId) file.declarations.map { extractDeclaration(it) } CommentExtractor(this).extract() @@ -198,7 +200,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val qualClassName = if (pkg.isEmpty()) jvmName else "$pkg.$jvmName" val label = "@\"class;$qualClassName\"" val id: Label = tw.getLabelFor(label) - val locId = tw.getLocation(-1, -1) // TODO: This should be the whole file + val locId = tw.getWholeFileLocation() val pkgId = extractPackage(pkg) tw.writeClasses(id, jvmName, pkgId, id) tw.writeHasLocation(id, locId) diff --git a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt index 2a34ffb5afa..3dc5bb028db 100644 --- a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt +++ b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt @@ -77,6 +77,9 @@ class FileTrapWriter ( fun getLocation(e: IrElement): Label { return getLocation(e.startOffset, e.endOffset) } + fun getWholeFileLocation(): Label { + return getLocation(fileId, 0, 0, 0, 0) + } fun getLocation(startOffset: Int, endOffset: Int): Label { // If the compiler doesn't have a location, then start and end are both -1 val unknownLoc = startOffset == -1 && endOffset == -1 diff --git a/java/ql/lib/semmle/code/Location.qll b/java/ql/lib/semmle/code/Location.qll index d90a189acb7..8e51cf610af 100755 --- a/java/ql/lib/semmle/code/Location.qll +++ b/java/ql/lib/semmle/code/Location.qll @@ -192,7 +192,7 @@ class Location extends @location { } private predicate hasSourceLocation(Top l, Location loc, File f) { - hasLocation(l, loc) and f = loc.getFile() and f.getExtension() = "java" + hasLocation(l, loc) and f = loc.getFile() and f.getExtension() = ["java", "kt"] } cached diff --git a/java/ql/lib/semmle/code/java/Element.qll b/java/ql/lib/semmle/code/java/Element.qll index 14e48fc0d40..6bb6a23adae 100755 --- a/java/ql/lib/semmle/code/java/Element.qll +++ b/java/ql/lib/semmle/code/java/Element.qll @@ -34,7 +34,7 @@ class Element extends @element, Top { * Elements pertaining to source files may include generated elements * not visible in source code, such as implicit default constructors. */ - predicate fromSource() { this.getCompilationUnit().getExtension() = "java" } + predicate fromSource() { this.getCompilationUnit().getExtension() = ["java", "kt"] } /** Gets the compilation unit that this element belongs to. */ CompilationUnit getCompilationUnit() { result = this.getFile() } diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index 50bf442af1e..520417684ba 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -1,3 +1,4 @@ +| classes.kt:0:0:0:0 | ClassesKt | ClassesKt | | classes.kt:2:1:2:18 | ClassOne | ClassOne | | classes.kt:4:1:6:1 | ClassTwo | ClassTwo | | classes.kt:8:1:10:1 | ClassThree | ClassThree | @@ -7,7 +8,6 @@ | classes.kt:34:1:47:1 | ClassSeven | ClassSeven | | file://:0:0:0:0 | Any | kotlin.Any | | file://:0:0:0:0 | Boolean | kotlin.Boolean | -| file://:0:0:0:0 | ClassesKt | ClassesKt | | file://:0:0:0:0 | Int | kotlin.Int | | file://:0:0:0:0 | String | java.lang.String | | file://:0:0:0:0 | String | kotlin.String | diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected index 9b92798042d..5e9c5362abe 100644 --- a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected @@ -1,10 +1,10 @@ | file1.kt:2:1:2:16 | Class1 | Class1 | | file2.kt:2:1:2:16 | Class2 | Class2 | +| file3.kt:0:0:0:0 | MyJvmName | MyJvmName | | file3.kt:3:1:3:16 | Class3 | Class3 | | file://:0:0:0:0 | Any | kotlin.Any | | file://:0:0:0:0 | Boolean | kotlin.Boolean | | file://:0:0:0:0 | Int | kotlin.Int | -| file://:0:0:0:0 | MyJvmName | MyJvmName | | file://:0:0:0:0 | String | java.lang.String | | file://:0:0:0:0 | String | kotlin.String | | file://:0:0:0:0 | Unit | kotlin.Unit | From ab102245da6081656232b543a2bd6e77cbd4388e Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 22 Oct 2021 10:39:16 +0200 Subject: [PATCH 0577/1618] Add codeql-kotlin to the CODEOWNERS file --- CODEOWNERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CODEOWNERS b/CODEOWNERS index 2c468b290bf..5ee67c52fbc 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -5,6 +5,8 @@ /python/ @github/codeql-python /ruby/ @github/codeql-ruby /swift/ @github/codeql-c +/java/kotlin-extractor/ @github/codeql-kotlin +/java/kotlin-explorer/ @github/codeql-kotlin # ML-powered queries /javascript/ql/experimental/adaptivethreatmodeling/ @github/codeql-ml-powered-queries-reviewers From 48b388daf782d85723c8323544ee0ef6bb003b7f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 20 Oct 2021 13:07:41 +0200 Subject: [PATCH 0578/1618] Remove version number from output artifact name --- java/kotlin-extractor/build.gradle | 5 ++++- java/kotlin-extractor/gradle.properties | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/build.gradle b/java/kotlin-extractor/build.gradle index eb392cb5ada..3f90b3829a1 100644 --- a/java/kotlin-extractor/build.gradle +++ b/java/kotlin-extractor/build.gradle @@ -1,7 +1,6 @@ plugins { id 'org.jetbrains.kotlin.jvm' version "${kotlinVersion}" id 'org.jetbrains.dokka' version '1.4.32' - id "com.vanniktech.maven.publish" version '0.15.1' } group 'com.github.codeql' @@ -21,3 +20,7 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { jvmTarget = "1.8" } } + +jar { + archiveName = "${OUTPUT_JAR_NAME}" +} \ No newline at end of file diff --git a/java/kotlin-extractor/gradle.properties b/java/kotlin-extractor/gradle.properties index 1e999c1e9d9..1aae1a8453c 100644 --- a/java/kotlin-extractor/gradle.properties +++ b/java/kotlin-extractor/gradle.properties @@ -4,4 +4,5 @@ kotlinVersion=1.5.21 GROUP=com.github.codeql VERSION_NAME=0.0.1 POM_DESCRIPTION=CodeQL Kotlin extractor +OUTPUT_JAR_NAME=codeql-extractor-kotlin.jar From 731d601cdd4fe1d524e240ff1320b2b389c505c6 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 20 Oct 2021 13:08:26 +0200 Subject: [PATCH 0579/1618] Add optional dbscheme path parameter to KotlinExtractorDbScheme.kt generator --- java/kotlin-extractor/generate_dbscheme.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/generate_dbscheme.py b/java/kotlin-extractor/generate_dbscheme.py index c94a9a92665..a88d961e29e 100755 --- a/java/kotlin-extractor/generate_dbscheme.py +++ b/java/kotlin-extractor/generate_dbscheme.py @@ -7,6 +7,8 @@ enums = {} unions = {} tables = {} +dbscheme = sys.argv[1] if len(sys.argv) >= 2 else '../ql/lib/config/semmlecode.dbscheme' + def parse_dbscheme(filename): with open(filename, 'r') as f: dbscheme = f.read() @@ -38,7 +40,7 @@ def parse_dbscheme(filename): columns = list(re.findall('(\S+)\s*:\s*([^\s,]+)(?:\s+(ref)|)', body)) tables[relname] = columns -parse_dbscheme('../ql/lib/config/semmlecode.dbscheme') +parse_dbscheme(dbscheme) type_aliases = {} From 1d1b9fe805ae5ee71946ab37dada726ab49a9920 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 22 Oct 2021 21:15:39 +0100 Subject: [PATCH 0580/1618] Kotlin: Add support for more kind of literal And a test --- .../main/kotlin/KotlinExtractorExtension.kt | 21 ++++++++++++ .../library-tests/literals/literals.expected | 29 ++++++++++++++++ .../kotlin/library-tests/literals/literals.kt | 33 +++++++++++++++++++ .../kotlin/library-tests/literals/literals.ql | 4 +++ 4 files changed, 87 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/literals/literals.expected create mode 100644 java/ql/test/kotlin/library-tests/literals/literals.kt create mode 100644 java/ql/test/kotlin/library-tests/literals/literals.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 80194d9d0f7..2fc2353a449 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1182,6 +1182,27 @@ class X { tw.writeExprs_integerliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) + } is Long -> { + val id = tw.getFreshIdLabel() + val type = useType(e.type) + val locId = tw.getLocation(e) + tw.writeExprs_longliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeNamestrings(v.toString(), v.toString(), id) + } is Float -> { + val id = tw.getFreshIdLabel() + val type = useType(e.type) + val locId = tw.getLocation(e) + tw.writeExprs_floatingpointliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeNamestrings(v.toString(), v.toString(), id) + } is Double -> { + val id = tw.getFreshIdLabel() + val type = useType(e.type) + val locId = tw.getLocation(e) + tw.writeExprs_doubleliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeNamestrings(v.toString(), v.toString(), id) } is Boolean -> { val id = tw.getFreshIdLabel() val type = useType(e.type) diff --git a/java/ql/test/kotlin/library-tests/literals/literals.expected b/java/ql/test/kotlin/library-tests/literals/literals.expected new file mode 100644 index 00000000000..afcffb731d9 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/literals/literals.expected @@ -0,0 +1,29 @@ +| literals.kt:3:36:3:39 | true | BooleanLiteral | +| literals.kt:4:36:4:40 | false | BooleanLiteral | +| literals.kt:5:28:5:28 | 0 | IntegerLiteral | +| literals.kt:6:28:6:30 | 123 | IntegerLiteral | +| literals.kt:7:28:7:31 | -123 | IntegerLiteral | +| literals.kt:8:28:8:31 | 15 | IntegerLiteral | +| literals.kt:9:28:9:37 | 11 | IntegerLiteral | +| literals.kt:10:28:10:36 | 1234567 | IntegerLiteral | +| literals.kt:11:30:11:30 | 0 | LongLiteral | +| literals.kt:12:30:12:32 | 123 | LongLiteral | +| literals.kt:13:30:13:33 | -123 | LongLiteral | +| literals.kt:14:30:14:31 | 0 | LongLiteral | +| literals.kt:15:30:15:33 | 123 | LongLiteral | +| literals.kt:16:30:16:34 | -123 | LongLiteral | +| literals.kt:17:30:17:33 | 15 | LongLiteral | +| literals.kt:18:30:18:39 | 11 | LongLiteral | +| literals.kt:19:30:19:38 | 1234567 | LongLiteral | +| literals.kt:20:32:20:35 | 0.0 | FloatingPointLiteral | +| literals.kt:21:32:21:37 | 123.4 | FloatingPointLiteral | +| literals.kt:22:32:22:38 | -123.4 | FloatingPointLiteral | +| literals.kt:23:34:23:36 | 0.0 | DoubleLiteral | +| literals.kt:24:34:24:38 | 123.4 | DoubleLiteral | +| literals.kt:25:34:25:39 | -123.4 | DoubleLiteral | +| literals.kt:26:30:26:32 | c | CharacterLiteral | +| literals.kt:27:30:27:33 | \n | CharacterLiteral | +| literals.kt:28:34:28:35 | | StringLiteral | +| literals.kt:29:35:29:45 | Some string | StringLiteral | +| literals.kt:30:35:30:46 | Some\nstring | StringLiteral | +| literals.kt:31:30:31:33 | null | NullLiteral | diff --git a/java/ql/test/kotlin/library-tests/literals/literals.kt b/java/ql/test/kotlin/library-tests/literals/literals.kt new file mode 100644 index 00000000000..27af90aa928 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/literals/literals.kt @@ -0,0 +1,33 @@ + +fun literalFun() { + val booleanLiteral1: Boolean = true + val booleanLiteral2: Boolean = false + val intLiteral1: Int = 0 + val intLiteral2: Int = 123 + val intLiteral3: Int = -123 + val intLiteral4: Int = 0x0F + val intLiteral5: Int = 0b00001011 + val intLiteral6: Int = 1_234_567 + val longLiteral1: Long = 0 + val longLiteral2: Long = 123 + val longLiteral3: Long = -123 + val longLiteral4: Long = 0L + val longLiteral5: Long = 123L + val longLiteral6: Long = -123L + val longLiteral7: Long = 0x0F + val longLiteral8: Long = 0b00001011 + val longLiteral9: Long = 1_234_567 + val floatLiteral1: Float = 0.0f + val floatLiteral2: Float = 123.4f + val floatLiteral3: Float = -123.4f + val doubleLiteral1: Double = 0.0 + val doubleLiteral2: Double = 123.4 + val doubleLiteral3: Double = -123.4 + val charLiteral1: Char = 'c' + val charLiteral2: Char = '\n' + val stringLiteral1: String = "" + val stringLiteral2: String = "Some string" + val stringLiteral3: String = "Some\nstring" + val nullLiteral1: Int? = null +} + diff --git a/java/ql/test/kotlin/library-tests/literals/literals.ql b/java/ql/test/kotlin/library-tests/literals/literals.ql new file mode 100644 index 00000000000..db19beff30b --- /dev/null +++ b/java/ql/test/kotlin/library-tests/literals/literals.ql @@ -0,0 +1,4 @@ +import java + +from Literal l +select l, l.getPrimaryQlClasses() From e5e6225d574849790d383006e7b604ec36ceabd1 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 25 Oct 2021 13:53:49 +0100 Subject: [PATCH 0581/1618] Kotlin: Add a build.py script that uses kotlinc to build --- java/kotlin-extractor/build.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100755 java/kotlin-extractor/build.py diff --git a/java/kotlin-extractor/build.py b/java/kotlin-extractor/build.py new file mode 100755 index 00000000000..ec185bfdb5f --- /dev/null +++ b/java/kotlin-extractor/build.py @@ -0,0 +1,27 @@ +#!/usr/bin/python + +import glob +import re +import subprocess + +kotlinc = 'kotlinc' +srcs = glob.glob('src/**/*.kt', recursive=True) +jars = ['kotlin-compiler'] + +x = subprocess.run([kotlinc, '-version', '-verbose'], check=True, capture_output=True) +output = x.stderr.decode(encoding = 'UTF-8',errors = 'strict') +m = re.match(r'.*\nlogging: using Kotlin home directory ([^\n]+)\n.*', output) +if m is None: + raise Exception('Cannot determine kotlinc home directory') +kotlin_home = m.group(1) +kotlin_lib = kotlin_home + '/lib' +classpath = ':'.join(map(lambda j: kotlin_lib + '/' + j + '.jar', jars)) + +subprocess.run([kotlinc, + '-d', 'codeql-extractor-kotlin.jar', + '-module-name', 'codeql-kotlin-extractor', + '-no-reflect', + '-jvm-target', '1.8', + '-classpath', classpath] + srcs , check=True) +subprocess.run(['jar', '-u', '-f', 'codeql-extractor-kotlin.jar', '-C', 'src/main/resources', 'META-INF'], check=True) + From 8df5abaef9a56d7548aebfe837135d046e9b4e91 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 25 Oct 2021 15:33:29 +0100 Subject: [PATCH 0582/1618] Kotlin: Add localvariabledeclstmt --- .../main/kotlin/KotlinExtractorExtension.kt | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 2fc2353a449..add8aca0558 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -912,18 +912,21 @@ class X { return tw.getVariableLabelFor(v) } - fun extractVariable(v: IrVariable, callable: Label) { - val id = useVariable(v) + fun extractVariable(v: IrVariable, callable: Label, parent: Label, idx: Int) { + val varId = useVariable(v) + val exprId = tw.getFreshIdLabel() + val stmtId = tw.getFreshIdLabel() val locId = tw.getLocation(v) val type = useType(v.type) - val decId = tw.getFreshIdLabel() - tw.writeLocalvars(id, v.name.asString(), type.javaResult.id, decId) // TODO: KT type - tw.writeHasLocation(id, locId) - tw.writeExprs_localvariabledeclexpr(decId, type.javaResult.id, type.kotlinResult.id, id, 0) - tw.writeHasLocation(id, locId) + tw.writeLocalvars(varId, v.name.asString(), type.javaResult.id, exprId) // TODO: KT type + tw.writeHasLocation(varId, locId) + tw.writeExprs_localvariabledeclexpr(exprId, type.javaResult.id, type.kotlinResult.id, stmtId, 0) + tw.writeHasLocation(exprId, locId) + tw.writeStmts_localvariabledeclstmt(stmtId, parent, idx, callable) + tw.writeHasLocation(stmtId, locId) val i = v.initializer if(i != null) { - extractExpression(i, callable, decId, 0) + extractExpression(i, callable, exprId, 0) } } @@ -933,7 +936,7 @@ class X { extractExpression(s, callable, parent, idx) } is IrVariable -> { - extractVariable(s, callable) + extractVariable(s, callable, parent, idx) } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrStatement: " + s.javaClass, s) From b3d459d1222845b4c192f4814fb9987c60c91741 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 25 Oct 2021 17:13:29 +0100 Subject: [PATCH 0583/1618] Kotlin: Accept test changes --- .../kotlin/library-tests/exprs/exprs.expected | 46 +++++++++---------- .../kotlin/library-tests/stmts/exprs.expected | 6 +-- .../kotlin/library-tests/stmts/stmts.expected | 3 ++ 3 files changed, 29 insertions(+), 26 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 4cb7f2ba579..ec6b5a5b5a0 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -1,46 +1,69 @@ +| exprs.kt:3:5:3:14 | i1 | LocalVariableDeclExpr | | exprs.kt:3:14:3:14 | 1 | IntegerLiteral | +| exprs.kt:4:5:4:18 | i2 | LocalVariableDeclExpr | | exprs.kt:4:14:4:14 | x | VarAccess | | exprs.kt:4:14:4:18 | ... + ... | AddExpr | | exprs.kt:4:18:4:18 | y | VarAccess | +| exprs.kt:5:5:5:18 | i3 | LocalVariableDeclExpr | | exprs.kt:5:14:5:14 | x | VarAccess | | exprs.kt:5:14:5:18 | ... - ... | SubExpr | | exprs.kt:5:18:5:18 | y | VarAccess | +| exprs.kt:6:5:6:18 | i4 | LocalVariableDeclExpr | | exprs.kt:6:14:6:14 | x | VarAccess | | exprs.kt:6:14:6:18 | ... / ... | DivExpr | | exprs.kt:6:18:6:18 | y | VarAccess | +| exprs.kt:7:5:7:18 | i5 | LocalVariableDeclExpr | | exprs.kt:7:14:7:14 | x | VarAccess | | exprs.kt:7:14:7:18 | ... % ... | RemExpr | | exprs.kt:7:18:7:18 | y | VarAccess | +| exprs.kt:18:5:18:20 | i13 | LocalVariableDeclExpr | | exprs.kt:18:15:18:15 | x | VarAccess | | exprs.kt:18:15:18:20 | ... == ... | EQExpr | | exprs.kt:18:20:18:20 | y | VarAccess | +| exprs.kt:19:5:19:20 | i14 | LocalVariableDeclExpr | | exprs.kt:19:15:19:15 | x | VarAccess | | exprs.kt:19:15:19:20 | ... != ... | NEExpr | | exprs.kt:19:15:19:20 | ... != ... | NEExpr | | exprs.kt:19:20:19:20 | y | VarAccess | +| exprs.kt:20:5:20:19 | i15 | LocalVariableDeclExpr | | exprs.kt:20:15:20:15 | x | VarAccess | | exprs.kt:20:15:20:19 | ... < ... | LTExpr | | exprs.kt:20:19:20:19 | y | VarAccess | +| exprs.kt:21:5:21:20 | i16 | LocalVariableDeclExpr | | exprs.kt:21:15:21:15 | x | VarAccess | | exprs.kt:21:15:21:20 | ... <= ... | LEExpr | | exprs.kt:21:20:21:20 | y | VarAccess | +| exprs.kt:22:5:22:19 | i17 | LocalVariableDeclExpr | | exprs.kt:22:15:22:15 | x | VarAccess | | exprs.kt:22:15:22:19 | ... > ... | GTExpr | | exprs.kt:22:19:22:19 | y | VarAccess | +| exprs.kt:23:5:23:20 | i18 | LocalVariableDeclExpr | | exprs.kt:23:15:23:15 | x | VarAccess | | exprs.kt:23:15:23:20 | ... >= ... | GEExpr | | exprs.kt:23:20:23:20 | y | VarAccess | +| exprs.kt:29:5:29:17 | b1 | LocalVariableDeclExpr | | exprs.kt:29:14:29:17 | true | BooleanLiteral | +| exprs.kt:30:5:30:18 | b2 | LocalVariableDeclExpr | | exprs.kt:30:14:30:18 | false | BooleanLiteral | +| exprs.kt:37:5:37:15 | c | LocalVariableDeclExpr | | exprs.kt:37:13:37:15 | x | CharacterLiteral | +| exprs.kt:38:5:38:26 | str | LocalVariableDeclExpr | | exprs.kt:38:16:38:25 | string lit | StringLiteral | +| exprs.kt:39:5:39:38 | strWithQuote | LocalVariableDeclExpr | | exprs.kt:39:25:39:37 | string " lit | StringLiteral | +| exprs.kt:40:5:40:22 | b6 | LocalVariableDeclExpr | +| exprs.kt:41:5:41:23 | b7 | LocalVariableDeclExpr | +| exprs.kt:42:5:42:26 | b8 | LocalVariableDeclExpr | +| exprs.kt:43:5:43:35 | str1 | LocalVariableDeclExpr | | exprs.kt:43:25:43:34 | string lit | StringLiteral | +| exprs.kt:44:5:44:36 | str2 | LocalVariableDeclExpr | | exprs.kt:44:26:44:35 | string lit | StringLiteral | +| exprs.kt:45:5:45:28 | str3 | LocalVariableDeclExpr | | exprs.kt:45:25:45:28 | null | NullLiteral | | exprs.kt:46:12:46:14 | 123 | IntegerLiteral | | exprs.kt:46:12:46:20 | ... + ... | AddExpr | | exprs.kt:46:18:46:20 | 456 | IntegerLiteral | +| exprs.kt:50:5:50:23 | d | LocalVariableDeclExpr | | exprs.kt:50:13:50:16 | true | BooleanLiteral | | exprs.kt:50:13:50:23 | ::class | ClassExpr | | exprs.kt:53:1:55:1 | (...) | MethodAccess | @@ -49,26 +72,3 @@ | exprs.kt:53:9:53:18 | n | VarAccess | | exprs.kt:54:27:54:31 | new C(...) | ClassInstanceExpr | | exprs.kt:54:29:54:30 | 42 | IntegerLiteral | -| file://:0:0:0:0 | b1 | LocalVariableDeclExpr | -| file://:0:0:0:0 | b2 | LocalVariableDeclExpr | -| file://:0:0:0:0 | b6 | LocalVariableDeclExpr | -| file://:0:0:0:0 | b7 | LocalVariableDeclExpr | -| file://:0:0:0:0 | b8 | LocalVariableDeclExpr | -| file://:0:0:0:0 | c | LocalVariableDeclExpr | -| file://:0:0:0:0 | d | LocalVariableDeclExpr | -| file://:0:0:0:0 | i1 | LocalVariableDeclExpr | -| file://:0:0:0:0 | i2 | LocalVariableDeclExpr | -| file://:0:0:0:0 | i3 | LocalVariableDeclExpr | -| file://:0:0:0:0 | i4 | LocalVariableDeclExpr | -| file://:0:0:0:0 | i5 | LocalVariableDeclExpr | -| file://:0:0:0:0 | i13 | LocalVariableDeclExpr | -| file://:0:0:0:0 | i14 | LocalVariableDeclExpr | -| file://:0:0:0:0 | i15 | LocalVariableDeclExpr | -| file://:0:0:0:0 | i16 | LocalVariableDeclExpr | -| file://:0:0:0:0 | i17 | LocalVariableDeclExpr | -| file://:0:0:0:0 | i18 | LocalVariableDeclExpr | -| file://:0:0:0:0 | str | LocalVariableDeclExpr | -| file://:0:0:0:0 | str1 | LocalVariableDeclExpr | -| file://:0:0:0:0 | str2 | LocalVariableDeclExpr | -| file://:0:0:0:0 | str3 | LocalVariableDeclExpr | -| file://:0:0:0:0 | strWithQuote | LocalVariableDeclExpr | diff --git a/java/ql/test/kotlin/library-tests/stmts/exprs.expected b/java/ql/test/kotlin/library-tests/stmts/exprs.expected index 3b5f104f139..0c37351aab4 100644 --- a/java/ql/test/kotlin/library-tests/stmts/exprs.expected +++ b/java/ql/test/kotlin/library-tests/stmts/exprs.expected @@ -1,6 +1,3 @@ -| file://:0:0:0:0 | q2 | LocalVariableDeclExpr | -| file://:0:0:0:0 | q3 | LocalVariableDeclExpr | -| file://:0:0:0:0 | z | LocalVariableDeclExpr | | file://:0:0:0:0 | z | VarAccess | | file://:0:0:0:0 | z | VarAccess | | file://:0:0:0:0 | z | VarAccess | @@ -25,7 +22,9 @@ | stmts.kt:14:13:14:13 | x | VarAccess | | stmts.kt:14:13:14:17 | ... < ... | LTExpr | | stmts.kt:14:17:14:17 | y | VarAccess | +| stmts.kt:15:5:15:13 | z | LocalVariableDeclExpr | | stmts.kt:15:13:15:13 | 3 | IntegerLiteral | +| stmts.kt:17:5:17:58 | q2 | LocalVariableDeclExpr | | stmts.kt:17:26:17:58 | true | BooleanLiteral | | stmts.kt:17:26:17:58 | when ... | WhenExpr | | stmts.kt:17:29:17:32 | true | BooleanLiteral | @@ -33,6 +32,7 @@ | stmts.kt:17:41:17:41 | 4 | IntegerLiteral | | stmts.kt:17:52:17:52 | ...=... | AssignExpr | | stmts.kt:17:56:17:56 | 5 | IntegerLiteral | +| stmts.kt:18:5:18:56 | q3 | LocalVariableDeclExpr | | stmts.kt:18:26:18:56 | true | BooleanLiteral | | stmts.kt:18:26:18:56 | when ... | WhenExpr | | stmts.kt:18:29:18:32 | true | BooleanLiteral | diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index 19965c0759c..6612f90f443 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -11,8 +11,11 @@ | stmts.kt:12:5:14:18 | { ... } | BlockStmt | | stmts.kt:12:8:14:5 | { ... } | BlockStmt | | stmts.kt:13:9:13:16 | return ... | ReturnStmt | +| stmts.kt:15:5:15:13 | var ...; | LocalVariableDeclStmt | +| stmts.kt:17:5:17:58 | var ...; | LocalVariableDeclStmt | | stmts.kt:17:35:17:43 | { ... } | BlockStmt | | stmts.kt:17:50:17:58 | { ... } | BlockStmt | +| stmts.kt:18:5:18:56 | var ...; | LocalVariableDeclStmt | | stmts.kt:19:5:19:16 | return ... | ReturnStmt | | stmts.kt:22:27:30:1 | { ... } | BlockStmt | | stmts.kt:23:11:27:5 | while (...) | WhileStmt | From 8704536f350b725d12af5f32c0e6c2156ed325fb Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 25 Oct 2021 18:34:54 +0100 Subject: [PATCH 0584/1618] Kotlin: local variable indexes start from 1 --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index add8aca0558..849bfc82833 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -920,7 +920,7 @@ class X { val type = useType(v.type) tw.writeLocalvars(varId, v.name.asString(), type.javaResult.id, exprId) // TODO: KT type tw.writeHasLocation(varId, locId) - tw.writeExprs_localvariabledeclexpr(exprId, type.javaResult.id, type.kotlinResult.id, stmtId, 0) + tw.writeExprs_localvariabledeclexpr(exprId, type.javaResult.id, type.kotlinResult.id, stmtId, 1) tw.writeHasLocation(exprId, locId) tw.writeStmts_localvariabledeclstmt(stmtId, parent, idx, callable) tw.writeHasLocation(stmtId, locId) From 286e29cd813e38a2a661451a3898684e890383a1 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 26 Oct 2021 13:12:45 +0100 Subject: [PATCH 0585/1618] Kotlin: Add exprstmt's where appropriate --- .../main/kotlin/KotlinExtractorExtension.kt | 207 ++++++++++-------- java/ql/lib/config/semmlecode.dbscheme | 3 +- 2 files changed, 112 insertions(+), 98 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 849bfc82833..1244e0b01c0 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -789,10 +789,13 @@ class X { continue } + val declLocId = tw.getLocation(decl) + val stmtId = tw.getFreshIdLabel() + tw.writeStmts_exprstmt(stmtId, blockId, idx++, obinitId) + tw.writeHasLocation(stmtId, declLocId) val assignmentId = tw.getFreshIdLabel() val type = useType(initializer.expression.type) - val declLocId = tw.getLocation(decl) - tw.writeExprs_assignexpr(assignmentId, type.javaResult.id, type.kotlinResult.id, blockId, idx++) + tw.writeExprs_assignexpr(assignmentId, type.javaResult.id, type.kotlinResult.id, stmtId, 0) tw.writeHasLocation(assignmentId, declLocId) val lhsId = tw.getFreshIdLabel() @@ -802,7 +805,7 @@ class X { val vId = useProperty(decl) // todo: fix this. We should be assigning the field, and not the property tw.writeVariableBinding(lhsId, vId) - extractExpression(initializer.expression, obinitId, assignmentId, 1) + extractExpressionExpr(initializer.expression, obinitId, assignmentId, 1) } is IrAnonymousInitializer -> { if (decl.isStatic) { @@ -926,14 +929,14 @@ class X { tw.writeHasLocation(stmtId, locId) val i = v.initializer if(i != null) { - extractExpression(i, callable, exprId, 0) + extractExpressionExpr(i, callable, exprId, 0) } } fun extractStatement(s: IrStatement, callable: Label, parent: Label, idx: Int) { when(s) { is IrExpression -> { - extractExpression(s, callable, parent, idx) + extractExpressionStmt(s, callable, parent, idx) } is IrVariable -> { extractVariable(s, callable, parent, idx) @@ -1047,12 +1050,12 @@ class X { } val dr = c.dispatchReceiver if(dr != null) { - extractExpression(dr, callable, exprId, -1) + extractExpressionExpr(dr, callable, exprId, -1) } for(i in 0 until c.valueArgumentsCount) { val arg = c.getValueArgument(i) if(arg != null) { - extractExpression(arg, callable, exprId, i) + extractExpressionExpr(arg, callable, exprId, i) } } } @@ -1088,12 +1091,12 @@ class X { for (i in 0 until e.valueArgumentsCount) { val arg = e.getValueArgument(i) if (arg != null) { - extractExpression(arg, callable, id, i) + extractExpressionExpr(arg, callable, id, i) } } val dr = e.dispatchReceiver if (dr != null) { - extractExpression(dr, callable, id, -2) + extractExpressionExpr(dr, callable, id, -2) } if (e.typeArgumentsCount > 0) { @@ -1107,29 +1110,8 @@ class X { private var currentFunction: IrFunction? = null - fun extractExpression(e: IrExpression, callable: Label, parent: Label, idx: Int) { + fun extractExpressionStmt(e: IrExpression, callable: Label, parent: Label, idx: Int) { when(e) { - is IrInstanceInitializerCall -> { - val irCallable = currentFunction - if (irCallable == null) { - logger.warnElement(Severity.ErrorSevere, "Current function is not set", e) - return - } - - if (irCallable is IrConstructor && irCallable.isPrimary) { - // Todo add parameter to field assignments - } - - // Add call to : - val id = tw.getFreshIdLabel() - val type = useType(e.type) - val locId = tw.getLocation(e) - var methodLabel = getFunctionLabel(irCallable.parent, "", listOf(), e.type) - val methodId = tw.getLabelFor(methodLabel) - tw.writeExprs_methodaccess(id, type.javaResult.id, type.kotlinResult.id, parent, idx) - tw.writeHasLocation(id, locId) - tw.writeCallableBinding(id, methodId) - } is IrDelegatingConstructorCall -> { val irCallable = currentFunction if (irCallable == null) { @@ -1158,16 +1140,108 @@ class X { for (i in 0 until e.valueArgumentsCount) { val arg = e.getValueArgument(i) if (arg != null) { - extractExpression(arg, callable, id, i) + extractExpressionExpr(arg, callable, id, i) } } val dr = e.dispatchReceiver if (dr != null) { - extractExpression(dr, callable, id, -1) + extractExpressionExpr(dr, callable, id, -1) } // todo: type arguments at index -2, -3, ... } + is IrThrow -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + tw.writeStmts_throwstmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + extractExpressionExpr(e.value, callable, id, 0) + } + is IrBreak -> { + val id = tw.getFreshIdLabel() + tw.writeStmts_breakstmt(id, parent, idx, callable) + extractBreakContinue(e, id) + } + is IrContinue -> { + val id = tw.getFreshIdLabel() + tw.writeStmts_continuestmt(id, parent, idx, callable) + extractBreakContinue(e, id) + } + is IrReturn -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + tw.writeStmts_returnstmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + extractExpressionExpr(e.value, callable, id, 0) + } + is IrContainerExpression -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + tw.writeStmts_block(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + e.statements.forEachIndexed { i, s -> + extractStatement(s, callable, id, i) + } + } + is IrWhileLoop -> { + val id = tw.getFreshIdLabel() + loopIdMap[e] = id + val locId = tw.getLocation(e) + tw.writeStmts_whilestmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + extractExpressionExpr(e.condition, callable, id, 0) + val body = e.body + if(body != null) { + extractExpressionStmt(body, callable, id, 1) + } + loopIdMap.remove(e) + } + is IrDoWhileLoop -> { + val id = tw.getFreshIdLabel() + loopIdMap[e] = id + val locId = tw.getLocation(e) + tw.writeStmts_dostmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + extractExpressionExpr(e.condition, callable, id, 0) + val body = e.body + if(body != null) { + extractExpressionStmt(body, callable, id, 1) + } + loopIdMap.remove(e) + } + else -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + tw.writeStmts_exprstmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + extractExpressionExpr(e, callable, id, 0) + } + } + } + + fun extractExpressionExpr(e: IrExpression, callable: Label, parent: Label, idx: Int) { + when(e) { + is IrInstanceInitializerCall -> { + val irCallable = currentFunction + if (irCallable == null) { + logger.warnElement(Severity.ErrorSevere, "Current function is not set", e) + return + } + + if (irCallable is IrConstructor && irCallable.isPrimary) { + // Todo add parameter to field assignments + } + + // Add call to : + val id = tw.getFreshIdLabel() + val type = useType(e.type) + val locId = tw.getLocation(e) + var methodLabel = getFunctionLabel(irCallable.parent, "", listOf(), e.type) + val methodId = tw.getLabelFor(methodLabel) + tw.writeExprs_methodaccess(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeHasLocation(id, locId) + tw.writeCallableBinding(id, methodId) + } is IrConstructorCall -> { extractConstructorCall(e, parent, idx, callable) } @@ -1277,66 +1351,7 @@ class X { val vId = useValueDeclaration(e.symbol.owner) tw.writeVariableBinding(lhsId, vId) - extractExpression(e.value, callable, id, 1) - } - is IrThrow -> { - val id = tw.getFreshIdLabel() - val locId = tw.getLocation(e) - tw.writeStmts_throwstmt(id, parent, idx, callable) - tw.writeHasLocation(id, locId) - extractExpression(e.value, callable, id, 0) - } - is IrBreak -> { - val id = tw.getFreshIdLabel() - tw.writeStmts_breakstmt(id, parent, idx, callable) - extractBreakContinue(e, id) - } - is IrContinue -> { - val id = tw.getFreshIdLabel() - tw.writeStmts_continuestmt(id, parent, idx, callable) - extractBreakContinue(e, id) - } - is IrReturn -> { - val id = tw.getFreshIdLabel() - val locId = tw.getLocation(e) - tw.writeStmts_returnstmt(id, parent, idx, callable) - tw.writeHasLocation(id, locId) - extractExpression(e.value, callable, id, 0) - } - is IrContainerExpression -> { - val id = tw.getFreshIdLabel() - val locId = tw.getLocation(e) - tw.writeStmts_block(id, parent, idx, callable) - tw.writeHasLocation(id, locId) - e.statements.forEachIndexed { i, s -> - extractStatement(s, callable, id, i) - } - } - is IrWhileLoop -> { - val id = tw.getFreshIdLabel() - loopIdMap[e] = id - val locId = tw.getLocation(e) - tw.writeStmts_whilestmt(id, parent, idx, callable) - tw.writeHasLocation(id, locId) - extractExpression(e.condition, callable, id, 0) - val body = e.body - if(body != null) { - extractExpression(body, callable, id, 1) - } - loopIdMap.remove(e) - } - is IrDoWhileLoop -> { - val id = tw.getFreshIdLabel() - loopIdMap[e] = id - val locId = tw.getLocation(e) - tw.writeStmts_dostmt(id, parent, idx, callable) - tw.writeHasLocation(id, locId) - extractExpression(e.condition, callable, id, 0) - val body = e.body - if(body != null) { - extractExpression(body, callable, id, 1) - } - loopIdMap.remove(e) + extractExpressionExpr(e.value, callable, id, 1) } is IrWhen -> { val id = tw.getFreshIdLabel() @@ -1352,8 +1367,8 @@ class X { val bLocId = tw.getLocation(b) tw.writeWhen_branch(bId, id, i) tw.writeHasLocation(bId, bLocId) - extractExpression(b.condition, callable, bId, 0) - extractExpression(b.result, callable, bId, 1) + extractExpressionExpr(b.condition, callable, bId, 0) + extractExpressionStmt(b.result, callable, bId, 1) if(b is IrElseBranch) { tw.writeWhen_branch_else(bId) } @@ -1365,7 +1380,7 @@ class X { val type = useType(e.type) tw.writeExprs_getclassexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) - extractExpression(e.argument, callable, id, 0) + extractExpressionExpr(e.argument, callable, id, 0) } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 5e2ec416587..0d9a9db99a8 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -535,8 +535,7 @@ stmts( int bodydecl: @callable ref ); -// @stmtparent = @callable | @stmt | @switchexpr; -@stmtparent = @exprparent; +@stmtparent = @callable | @stmt | @switchexpr | @whenbranch; case @stmt.kind of 0 = @block From f458745effe813e4072596a3e17c753c91fc03f0 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 26 Oct 2021 13:41:49 +0100 Subject: [PATCH 0586/1618] Kotlin: Update tests --- java/ql/test/kotlin/library-tests/classes/initBlocks.ql | 4 +++- java/ql/test/kotlin/library-tests/stmts/stmts.expected | 6 ++++++ .../test/kotlin/library-tests/variables/variables.expected | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/classes/initBlocks.ql b/java/ql/test/kotlin/library-tests/classes/initBlocks.ql index c5be602f1c2..49c2f016fa7 100644 --- a/java/ql/test/kotlin/library-tests/classes/initBlocks.ql +++ b/java/ql/test/kotlin/library-tests/classes/initBlocks.ql @@ -5,5 +5,7 @@ query predicate initBlocks(Method m) { m.hasName("") } query predicate initCall(MethodAccess ma) { ma.getMethod().hasName("") } query predicate initExpressions(Expr e, int i) { - exists(Method m | m.hasName("") | e.getParent() = m.getBody() and i = e.getIndex()) + exists(Method m, ExprStmt s | m.hasName("") | + e.getParent() = s and s.getParent() = m.getBody() and i = s.getIndex() + ) } diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index 6612f90f443..d0846929460 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -1,4 +1,5 @@ | stmts.kt:2:41:20:1 | { ... } | BlockStmt | +| stmts.kt:3:5:6:5 | ; | ExprStmt | | stmts.kt:3:15:4:5 | { ... } | BlockStmt | | stmts.kt:4:22:5:5 | { ... } | BlockStmt | | stmts.kt:5:12:6:5 | { ... } | BlockStmt | @@ -14,8 +15,12 @@ | stmts.kt:15:5:15:13 | var ...; | LocalVariableDeclStmt | | stmts.kt:17:5:17:58 | var ...; | LocalVariableDeclStmt | | stmts.kt:17:35:17:43 | { ... } | BlockStmt | +| stmts.kt:17:37:17:37 | ; | ExprStmt | | stmts.kt:17:50:17:58 | { ... } | BlockStmt | +| stmts.kt:17:52:17:52 | ; | ExprStmt | | stmts.kt:18:5:18:56 | var ...; | LocalVariableDeclStmt | +| stmts.kt:18:37:18:37 | ; | ExprStmt | +| stmts.kt:18:52:18:52 | ; | ExprStmt | | stmts.kt:19:5:19:16 | return ... | ReturnStmt | | stmts.kt:22:27:30:1 | { ... } | BlockStmt | | stmts.kt:23:11:27:5 | while (...) | WhileStmt | @@ -23,6 +28,7 @@ | stmts.kt:24:9:26:25 | do ... while (...) | DoStmt | | stmts.kt:24:9:26:25 | { ... } | BlockStmt | | stmts.kt:24:13:26:9 | { ... } | BlockStmt | +| stmts.kt:25:13:25:33 | ; | ExprStmt | | stmts.kt:25:24:25:33 | break | BreakStmt | | stmts.kt:28:5:29:16 | while (...) | WhileStmt | | stmts.kt:29:9:29:16 | continue | ContinueStmt | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index d0cc3d39645..189c5a53821 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -1,13 +1,13 @@ | file://:0:0:0:0 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | file://:0:0:0:0 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:2:1:8:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | variables.kt:3:21:3:21 | 1 | | variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | file://:0:0:0:0 | | | variables.kt:6:9:6:25 | int local | file://:0:0:0:0 | int | variables.kt:6:21:6:25 | ... + ... | | variables.kt:10:1:10:21 | topLevel | file://:0:0:0:0 | int | file://:0:0:0:0 | | | variables.kt:12:1:15:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:16:1:34:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:16:11:16:18 | o | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | -| variables.kt:16:11:16:18 | o | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | +| variables.kt:16:11:16:18 | o | variables.kt:12:1:15:1 | C1 | variables.kt:16:11:16:18 | o | | variables.kt:36:1:45:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | | variables.kt:38:11:44:5 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | From 52341dc99f7555091e04e2709d07d87f632b4241 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 26 Oct 2021 11:10:03 +0200 Subject: [PATCH 0587/1618] Modify build script to build both standalone and embeddable plugin variant --- java/kotlin-extractor/build.gradle | 6 +++ java/kotlin-extractor/build.py | 87 +++++++++++++++++++++++------- 2 files changed, 75 insertions(+), 18 deletions(-) diff --git a/java/kotlin-extractor/build.gradle b/java/kotlin-extractor/build.gradle index 3f90b3829a1..c8f95a664e8 100644 --- a/java/kotlin-extractor/build.gradle +++ b/java/kotlin-extractor/build.gradle @@ -23,4 +23,10 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { jar { archiveName = "${OUTPUT_JAR_NAME}" +} + +task getHomeDir { + doLast { + println gradle.gradleHomeDir + } } \ No newline at end of file diff --git a/java/kotlin-extractor/build.py b/java/kotlin-extractor/build.py index ec185bfdb5f..4dcbb438371 100755 --- a/java/kotlin-extractor/build.py +++ b/java/kotlin-extractor/build.py @@ -1,27 +1,78 @@ -#!/usr/bin/python +#!/usr/bin/env python3 import glob import re import subprocess +import shutil kotlinc = 'kotlinc' -srcs = glob.glob('src/**/*.kt', recursive=True) -jars = ['kotlin-compiler'] -x = subprocess.run([kotlinc, '-version', '-verbose'], check=True, capture_output=True) -output = x.stderr.decode(encoding = 'UTF-8',errors = 'strict') -m = re.match(r'.*\nlogging: using Kotlin home directory ([^\n]+)\n.*', output) -if m is None: - raise Exception('Cannot determine kotlinc home directory') -kotlin_home = m.group(1) -kotlin_lib = kotlin_home + '/lib' -classpath = ':'.join(map(lambda j: kotlin_lib + '/' + j + '.jar', jars)) -subprocess.run([kotlinc, - '-d', 'codeql-extractor-kotlin.jar', - '-module-name', 'codeql-kotlin-extractor', - '-no-reflect', - '-jvm-target', '1.8', - '-classpath', classpath] + srcs , check=True) -subprocess.run(['jar', '-u', '-f', 'codeql-extractor-kotlin.jar', '-C', 'src/main/resources', 'META-INF'], check=True) +def compile(srcs, classpath, output): + subprocess.run([kotlinc, + '-d', output, + '-module-name', 'codeql-kotlin-extractor', + '-no-reflect', + '-jvm-target', '1.8', + '-classpath', classpath] + srcs, check=True) + subprocess.run(['jar', '-u', '-f', output, + '-C', 'src/main/resources', 'META-INF'], check=True) + +def compile_standalone(): + srcs = glob.glob('src/**/*.kt', recursive=True) + jars = ['kotlin-compiler'] + + x = subprocess.run([kotlinc, '-version', '-verbose'], + check=True, capture_output=True) + output = x.stderr.decode(encoding='UTF-8', errors='strict') + m = re.match( + r'.*\nlogging: using Kotlin home directory ([^\n]+)\n.*', output) + if m is None: + raise Exception('Cannot determine kotlinc home directory') + kotlin_home = m.group(1) + kotlin_lib = kotlin_home + '/lib' + classpath = ':'.join(map(lambda j: kotlin_lib + '/' + j + '.jar', jars)) + + compile(srcs, classpath, 'codeql-extractor-kotlin-standalone.jar') + + +def compile_embeddable(): + x = subprocess.run(['gradle', 'getHomeDir'], + check=True, capture_output=True) + output = x.stdout.decode(encoding='UTF-8', errors='strict') + m = re.match( + r'.*\n> Task :getHomeDir\n([^\n]+)\n.*', output) + if m is None: + raise Exception('Cannot determine gradle home directory') + gradle_home = m.group(1) + + gradle_lib = gradle_home + '/lib' + jar_patterns = ['kotlin-compiler-embeddable'] + jar_files = [] + for pattern in jar_patterns: + jar_files += glob.glob(gradle_lib + '/' + pattern + '*.jar') + if len(jar_files) == 0: + raise Exception('Cannot find gradle jar files') + classpath = ':'.join(jar_files) + + try: + shutil.copytree('src', 'build/temp_src') + srcs = glob.glob('build/temp_src/**/*.kt', recursive=True) + + # replace imports in files: + for src in srcs: + with open(src, 'r') as f: + content = f.read() + content = content.replace('import com.intellij', + 'import org.jetbrains.kotlin.com.intellij') + with open(src, 'w') as f: + f.write(content) + + compile(srcs, classpath, 'codeql-extractor-kotlin-embeddable.jar') + finally: + shutil.rmtree('build/temp_src') + + +compile_standalone() +compile_embeddable() From b7b506a23d2e4b1c4d3a564a93ec1587aae346c6 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 26 Oct 2021 15:28:19 +0200 Subject: [PATCH 0588/1618] Improve temp directory cleanup --- java/kotlin-extractor/build.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/build.py b/java/kotlin-extractor/build.py index 4dcbb438371..7952c78eb68 100755 --- a/java/kotlin-extractor/build.py +++ b/java/kotlin-extractor/build.py @@ -4,6 +4,7 @@ import glob import re import subprocess import shutil +import os kotlinc = 'kotlinc' @@ -57,6 +58,8 @@ def compile_embeddable(): classpath = ':'.join(jar_files) try: + if os.path.exists('build/temp_src'): + shutil.rmtree('build/temp_src') shutil.copytree('src', 'build/temp_src') srcs = glob.glob('build/temp_src/**/*.kt', recursive=True) @@ -71,7 +74,8 @@ def compile_embeddable(): compile(srcs, classpath, 'codeql-extractor-kotlin-embeddable.jar') finally: - shutil.rmtree('build/temp_src') + if os.path.exists('build/temp_src'): + shutil.rmtree('build/temp_src') compile_standalone() From e9b249855b1612d0d38cea05b62e605d491c3f3a Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 26 Oct 2021 15:58:34 +0200 Subject: [PATCH 0589/1618] Add gitignore to kotlin-explorer --- java/kotlin-explorer/.gitignore | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 java/kotlin-explorer/.gitignore diff --git a/java/kotlin-explorer/.gitignore b/java/kotlin-explorer/.gitignore new file mode 100644 index 00000000000..9c076360bbb --- /dev/null +++ b/java/kotlin-explorer/.gitignore @@ -0,0 +1,10 @@ +.classpath +.gradle +.idea +.project +.settings +bin/ +build/ +gradle/ +gradlew +gradlew.bat From 2cc003ff0ef340542a9059caf8f739cb14d9e46c Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 30 Sep 2021 12:27:48 +0100 Subject: [PATCH 0590/1618] External class extraction prototype --- .../semmle/extractor/java/OdasaOutput.java | 534 +++++ .../java/com/semmle/util/array/ArrayUtil.java | 246 ++ .../com/semmle/util/basic/ObjectUtil.java | 73 + .../semmle/util/concurrent/LockDirectory.java | 395 +++ .../semmle/util/concurrent/ThreadUtil.java | 43 + .../java/com/semmle/util/data/IntRef.java | 19 + .../main/java/com/semmle/util/data/Pair.java | 62 + .../com/semmle/util/data/StringDigestor.java | 173 ++ .../java/com/semmle/util/data/StringUtil.java | 1247 ++++++++++ .../java/com/semmle/util/data/Tuple1.java | 106 + .../java/com/semmle/util/data/Tuple2.java | 93 + .../java/com/semmle/util/data/TupleN.java | 85 + .../util/exception/CatastrophicError.java | 117 + .../com/semmle/util/exception/Exceptions.java | 120 + .../util/exception/InterruptedError.java | 26 + .../semmle/util/exception/NestedError.java | 47 + .../semmle/util/exception/ResourceError.java | 30 + .../com/semmle/util/exception/UserError.java | 46 + .../util/expansion/ExpansionEnvironment.java | 893 +++++++ .../util/extraction/PopulationSpecFile.java | 100 + .../semmle/util/extraction/SpecFileEntry.java | 48 + .../java/com/semmle/util/files/FileUtil.java | 2111 +++++++++++++++++ .../com/semmle/util/files/PathMatcher.java | 160 ++ .../semmle/util/io/BufferedLineReader.java | 103 + .../com/semmle/util/io/RawStreamMuncher.java | 34 + .../com/semmle/util/io/StreamMuncher.java | 49 + .../java/com/semmle/util/io/StreamUtil.java | 201 ++ .../main/java/com/semmle/util/io/WholeIO.java | 548 +++++ .../com/semmle/util/io/csv/CSVParser.java | 207 ++ .../com/semmle/util/io/csv/CSVReader.java | 192 ++ .../com/semmle/util/io/csv/CSVWriter.java | 226 ++ .../java/com/semmle/util/logging/Streams.java | 101 + .../util/process/AbstractProcessBuilder.java | 398 ++++ .../java/com/semmle/util/process/Builder.java | 81 + .../java/com/semmle/util/process/Env.java | 725 ++++++ .../semmle/util/process/LeakPrevention.java | 95 + .../util/projectstructure/ProjectLayout.java | 529 +++++ .../util/trap/CompressedFileInputStream.java | 29 + .../util/trap/dependencies/TextFile.java | 125 + .../trap/dependencies/TrapDependencies.java | 109 + .../util/trap/dependencies/TrapSet.java | 196 ++ .../pathtransformers/NoopTransformer.java | 8 + .../pathtransformers/PathTransformer.java | 46 + .../ProjectLayoutTransformer.java | 37 + .../util/zip/MultiMemberGZIPInputStream.java | 71 + .../main/kotlin/KotlinExtractorExtension.kt | 104 +- .../src/main/kotlin/TrapWriter.kt | 58 +- .../main/kotlin/comments/CommentExtractor.kt | 3 +- .../src/main/kotlin/utils/AutoCloseableUse.kt | 43 + .../src/main/kotlin/utils/ClassNames.kt | 47 + .../src/main/kotlin/utils/Logger.kt | 21 + 51 files changed, 11119 insertions(+), 41 deletions(-) create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/array/ArrayUtil.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/basic/ObjectUtil.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/concurrent/LockDirectory.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/concurrent/ThreadUtil.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/data/IntRef.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/data/Pair.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/data/StringDigestor.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/data/StringUtil.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/data/Tuple1.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/data/Tuple2.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/data/TupleN.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/exception/CatastrophicError.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/exception/Exceptions.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/exception/InterruptedError.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/exception/NestedError.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/exception/ResourceError.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/exception/UserError.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/expansion/ExpansionEnvironment.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/extraction/PopulationSpecFile.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/extraction/SpecFileEntry.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/files/FileUtil.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/files/PathMatcher.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/io/BufferedLineReader.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/io/RawStreamMuncher.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/io/StreamMuncher.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/io/StreamUtil.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/io/WholeIO.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVParser.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVReader.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVWriter.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/logging/Streams.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/process/AbstractProcessBuilder.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/process/Builder.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/process/LeakPrevention.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/projectstructure/ProjectLayout.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/trap/CompressedFileInputStream.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TextFile.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TrapDependencies.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TrapSet.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/NoopTransformer.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/PathTransformer.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/ProjectLayoutTransformer.java create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/util/zip/MultiMemberGZIPInputStream.java create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/AutoCloseableUse.kt create mode 100644 java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt diff --git a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java new file mode 100644 index 00000000000..408236e71ed --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java @@ -0,0 +1,534 @@ +package com.semmle.extractor.java; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +import com.github.codeql.Logger; +import com.github.codeql.Severity; +import static com.github.codeql.ClassNamesKt.getIrClassBinaryPath; + +import org.jetbrains.kotlin.ir.declarations.IrClass; + +import com.semmle.util.concurrent.LockDirectory; +import com.semmle.util.concurrent.LockDirectory.LockingMode; +import com.semmle.util.exception.CatastrophicError; +import com.semmle.util.exception.NestedError; +import com.semmle.util.exception.ResourceError; +import com.semmle.util.extraction.PopulationSpecFile; +import com.semmle.util.extraction.SpecFileEntry; +import com.semmle.util.files.FileUtil; +import com.semmle.util.io.WholeIO; +import com.semmle.util.process.Env; +import com.semmle.util.process.Env.Var; +import com.semmle.util.trap.dependencies.TrapDependencies; +import com.semmle.util.trap.dependencies.TrapSet; +import com.semmle.util.trap.pathtransformers.PathTransformer; + +public class OdasaOutput { + + // either these are set ... + private final File trapFolder; + private final File sourceArchiveFolder; + + // ... or this one is set + private final PopulationSpecFile specFile; + + private File currentSourceFile; + private TrapSet trapsCreated; + private TrapDependencies trapDependenciesForSource; + + private SpecFileEntry currentSpecFileEntry; + + // should origin tracking be used? + private final boolean trackClassOrigins; + + private final Logger log; + + /** DEBUG only: just use the given file as the root for TRAP, source archive etc */ + OdasaOutput(File outputRoot, Logger log) { + this.trapFolder = new File(outputRoot, "trap"); + this.sourceArchiveFolder = new File(outputRoot, "src_archive"); + this.specFile = null; + this.trackClassOrigins = false; + this.log = log; + } + + public OdasaOutput(boolean trackClassOrigins, Logger log) { + String trapFolderVar = Env.systemEnv().getFirstNonEmpty("CODEQL_EXTRACTOR_JAVA_TRAP_DIR", Var.TRAP_FOLDER.name()); + if (trapFolderVar != null) { + String sourceArchiveVar = Env.systemEnv().getFirstNonEmpty("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR", Var.SOURCE_ARCHIVE.name()); + if (sourceArchiveVar == null) + throw new ResourceError(Var.TRAP_FOLDER + " was set to '" + trapFolderVar + "', but " + + Var.SOURCE_ARCHIVE + " was not set"); + this.trapFolder = new File(trapFolderVar); + this.sourceArchiveFolder = new File(sourceArchiveVar); + this.specFile = null; + } else { + this.trapFolder = null; + this.sourceArchiveFolder = null; + String specFileVar = Env.systemEnv().get(Var.ODASA_JAVA_LAYOUT); + if (specFileVar == null) + throw new ResourceError("Neither " + Var.TRAP_FOLDER + " nor " + Var.ODASA_JAVA_LAYOUT + " was set"); + this.specFile = new PopulationSpecFile(new File(specFileVar)); + } + this.trackClassOrigins = trackClassOrigins; + this.log = log; + } + + public File getTrapFolder() { + return trapFolder; + } + + public boolean getTrackClassOrigins() { + return trackClassOrigins; + } + + /** + * Set the source file that is currently being processed. This may affect + * things like trap and source archive directories, and persists as a + * setting until this method is called again. + * @param f the current source file + */ + public void setCurrentSourceFile(File f) { + currentSourceFile = f; + currentSpecFileEntry = entryFor(); + trapsCreated = new TrapSet(); + trapsCreated.addSource(PathTransformer.std().fileAsDatabaseString(f)); + trapDependenciesForSource = null; + } + + /** The output paths for that file, or null if it shouldn't be included */ + private SpecFileEntry entryFor() { + if (specFile != null) + return specFile.getEntryFor(currentSourceFile); + else + return new SpecFileEntry(trapFolder, sourceArchiveFolder, + Arrays.asList(PathTransformer.std().fileAsDatabaseString(currentSourceFile))); + } + + /* + * Trap sets and dependencies. + */ + + private void writeTrapSet() { + trapsCreated.save(trapSetFor(currentSourceFile).toPath()); + } + + private File trapSetFor(File file) { + return FileUtil.appendAbsolutePath( + currentSpecFileEntry.getTrapFolder(), PathTransformer.std().fileAsDatabaseString(file) + ".set"); + } + + public void addDependency(IrClass sym) { + String path = trapFilePathForClass(sym); + trapDependenciesForSource.addDependency(path); + } + + /* + * Source archive. + */ + + /** + * Write the given source file to the right source archive, encoded in UTF-8, + * or do nothing if the file shouldn't be populated. + */ + public void writeCurrentSourceFileToSourceArchive(String contents) { + if (currentSpecFileEntry != null && currentSpecFileEntry.getSourceArchivePath() != null) { + File target = sourceArchiveFileFor(currentSourceFile); + target.getParentFile().mkdirs(); + new WholeIO().write(target, contents); + } + } + + public void writeFileToSourceArchive(File srcFile) { + File target = sourceArchiveFileFor(srcFile); + target.getParentFile().mkdirs(); + String contents = new WholeIO().strictread(srcFile); + new WholeIO().write(target, contents); + } + + private File sourceArchiveFileFor(File file) { + return FileUtil.appendAbsolutePath(currentSpecFileEntry.getSourceArchivePath(), + PathTransformer.std().fileAsDatabaseString(file)); + } + + /* + * Trap file names and paths. + */ + + private static final String CLASSES_DIR = "classes"; + private static final String JARS_DIR = "jars"; + private static final String MODULES_DIR = "modules"; + + private File getTrapFileForCurrentSourceFile() { + if (currentSpecFileEntry == null) + return null; + return trapFileFor(currentSourceFile); + } + + private File getTrapFileForJarFile(File jarFile) { + if (!jarFile.getAbsolutePath().endsWith(".jar")) + return null; + return FileUtil.appendAbsolutePath( + currentSpecFileEntry.getTrapFolder(), + JARS_DIR + "/" + PathTransformer.std().fileAsDatabaseString(jarFile) + ".trap.gz"); + } + + private File getTrapFileForModule(String moduleName) { + return FileUtil.appendAbsolutePath( + currentSpecFileEntry.getTrapFolder(), + MODULES_DIR + "/" + moduleName + ".trap.gz"); + } + + private File trapFileFor(File file) { + return FileUtil.appendAbsolutePath(currentSpecFileEntry.getTrapFolder(), + PathTransformer.std().fileAsDatabaseString(file) + ".trap.gz"); + } + + private File getTrapFileForClassFile(IrClass sym) { + if (currentSpecFileEntry == null) + return null; + return trapFileForClass(sym); + } + + private File trapFileForClass(IrClass sym) { + return FileUtil.fileRelativeTo(currentSpecFileEntry.getTrapFolder(), + trapFilePathForClass(sym)); + } + + private final Map memberTrapPaths = new LinkedHashMap(); + private static final Pattern dots = Pattern.compile(".", Pattern.LITERAL); + private String trapFilePathForClass(IrClass sym) { + String classId = getIrClassBinaryPath(sym); + // TODO: Reinstate this? + //if (getTrackClassOrigins()) + // classId += "-" + StringDigestor.digest(sym.getSourceFileId()); + String result = memberTrapPaths.get(classId); + if (result == null) { + result = CLASSES_DIR + "/" + + dots.matcher(classId).replaceAll("/") + + ".members" + + ".trap.gz"; + memberTrapPaths.put(classId, result); + } + return result; + } + + /* + * Deletion of existing trap files. + */ + + private void deleteTrapFileAndDependencies(IrClass sym) { + File trap = trapFileForClass(sym); + if (trap.exists()) { + trap.delete(); + File depFile = new File(trap.getParentFile(), trap.getName().replace(".trap.gz", ".dep")); + if (depFile.exists()) + depFile.delete(); + File metadataFile = new File(trap.getParentFile(), trap.getName().replace(".trap.gz", ".metadata")); + if (metadataFile.exists()) + metadataFile.delete(); + } + } + + /* + * Trap writers. + */ + + /** + * A {@link TrapFileManager} to output facts for the given source file, + * or null if the source file should not be populated. + */ + private TrapFileManager getTrapWriterForCurrentSourceFile() { + File trapFile = getTrapFileForCurrentSourceFile(); + if (trapFile==null) + return null; + return trapWriter(trapFile, null); + } + + /** + * Get a {@link TrapFileManager} to write members + * about a class, or null if the class shouldn't be populated. + * + * @param sym + * The class's symbol, including, in particular, its fully qualified + * binary class name. + */ + private TrapFileManager getMembersWriterForClass(IrClass sym) { + File trap = getTrapFileForClassFile(sym); + if (trap==null) + return null; + TrapClassVersion currVersion = TrapClassVersion.fromSymbol(sym); + if (trap.exists()) { + // Only re-write an existing trap file if we encountered a newer version of the same class. + TrapClassVersion trapVersion = readVersionInfo(trap); + if (!currVersion.isValid()) { + log.warn("Not rewriting trap file for: " + sym + " " + trapVersion + " " + currVersion + " " + trap); + } else if (currVersion.newerThan(trapVersion)) { + log.info("Rewriting trap file for: " + sym + " " + trapVersion + " " + currVersion + " " + trap); + deleteTrapFileAndDependencies(sym); + } else { + return null; + } + } else { + log.info("Writing trap file for: " + sym.getName() + " " + currVersion + " " + trap); + } + return trapWriter(trap, sym); + } + + private TrapFileManager trapWriter(File trapFile, IrClass sym) { + if (!trapFile.getName().endsWith(".trap.gz")) + throw new CatastrophicError("OdasaOutput only supports writing to compressed trap files"); + String relative = FileUtil.relativePath(trapFile, currentSpecFileEntry.getTrapFolder()); + trapFile.getParentFile().mkdirs(); + return concurrentWriter(trapFile, relative, log, sym); + } + + private TrapFileManager concurrentWriter(File trapFile, String relative, Logger log, IrClass sym) { + if (trapFile.exists()) + return null; + return new TrapFileManager(trapFile, relative, true, log, sym); + } + + public class TrapFileManager implements AutoCloseable { + + private TrapDependencies trapDependenciesForClass; + private File trapFile; + private IrClass sym; + + private TrapFileManager(File trapFile, String relative, boolean concurrentCreation, Logger log, IrClass sym) { + trapDependenciesForClass = new TrapDependencies(relative); + this.trapFile = trapFile; + this.sym = sym; + } + + public File getFile() { + return trapFile; + } + + public void addDependency(IrClass dep) { + trapDependenciesForClass.addDependency(trapFilePathForClass(dep)); + } + + public void close() { + writeTrapDependencies(trapDependenciesForClass); + // Record major/minor version information for extracted class files. + // This is subsequently used to determine whether to re-extract (a newer version of) the same class. + File metadataFile = new File(trapFile.getAbsolutePath().replace(".trap.gz", ".metadata")); + try { + Map versionMap = new LinkedHashMap<>(); + TrapClassVersion tcv = TrapClassVersion.fromSymbol(sym); + versionMap.put(MAJOR_VERSION, String.valueOf(tcv.getMajorVersion())); + versionMap.put(MINOR_VERSION, String.valueOf(tcv.getMinorVersion())); + versionMap.put(LAST_MODIFIED, String.valueOf(tcv.getLastModified())); + FileUtil.writePropertiesCSV(metadataFile, versionMap); + } catch (IOException e) { + log.warn("Could not save trap metadata file: " + metadataFile.getAbsolutePath(), e); + } + } + private void writeTrapDependencies(TrapDependencies trapDependencies) { + String dep = trapDependencies.trapFile().replace(".trap.gz", ".dep"); + trapDependencies.save( + currentSpecFileEntry.getTrapFolder().toPath().resolve(dep)); + } + } + + /* + * Trap file locking. + */ + + /** + * CAUTION: to avoid the potential for deadlock between multiple concurrent extractor processes, + * only one source file {@link TrapLocker} may be open at any time, and the lock must be obtained + * before any class file lock. + * + * Trap file extensions (and paths) ensure that source and class file locks are distinct. + * + * @return a {@link TrapLocker} for the currently processed source file, which must have been + * previously set by a call to {@link OdasaOutput#setCurrentSourceFile(File)}. + */ + public TrapLocker getTrapLockerForCurrentSourceFile() { + return new TrapLocker((IrClass)null); + } + + /** + * CAUTION: to avoid the potential for deadlock between multiple concurrent extractor processes, + * only one jar file {@link TrapLocker} may be open at any time, and the lock must be obtained + * after any source file lock. Only one jar or class file lock may be open at any time. + * + * Trap file extensions (and paths) ensure that source and jar file locks are distinct. + * + * @return a {@link TrapLocker} for the trap file corresponding to the given jar file. + */ + public TrapLocker getTrapLockerForJarFile(File jarFile) { + return new TrapLocker(jarFile); + } + + /** + * CAUTION: to avoid the potential for deadlock between multiple concurrent extractor processes, + * only one module {@link TrapLocker} may be open at any time, and the lock must be obtained + * after any source file lock. Only one jar or class file or module lock may be open at any time. + * + * Trap file extensions (and paths) ensure that source and module file locks are distinct. + * + * @return a {@link TrapLocker} for the trap file corresponding to the given module. + */ + public TrapLocker getTrapLockerForModule(String moduleName) { + return new TrapLocker(moduleName); + } + + /** + * CAUTION: to avoid the potential for deadlock between multiple concurrent extractor processes, + * only one class file {@link TrapLocker} may be open at any time, and the lock must be obtained + * after any source file lock. Only one jar or class file lock may be open at any time. + * + * Trap file extensions (and paths) ensure that source and class file locks are distinct. + * + * @return a {@link TrapLocker} for the trap file corresponding to the given class symbol. + */ + public TrapLocker getTrapLockerForClassFile(IrClass sym) { + return new TrapLocker(sym); + } + + public class TrapLocker implements AutoCloseable { + private final IrClass sym; + private final File trapFile; + private final boolean isNonSourceTrapFile; + private TrapLocker(IrClass sym) { + this.sym = sym; + if (sym==null) { + trapFile = getTrapFileForCurrentSourceFile(); + } else { + trapFile = getTrapFileForClassFile(sym); + } + isNonSourceTrapFile = false; + } + private TrapLocker(File jarFile) { + sym = null; + trapFile = getTrapFileForJarFile(jarFile); + isNonSourceTrapFile = true; + } + private TrapLocker(String moduleName) { + sym = null; + trapFile = getTrapFileForModule(moduleName); + isNonSourceTrapFile = true; + } + public TrapFileManager getTrapFileManager() { + if (trapFile!=null) { + lockTrapFile(trapFile); + return getMembersWriterForClass(sym); + } else { + return null; + } + } + @Override + public void close() { + if (trapFile!=null) { + try { + unlockTrapFile(trapFile); + } catch (NestedError e) { + log.warn("Error unlocking trap file " + trapFile.getAbsolutePath(), e); + } + } + } + + private LockDirectory getExtractorLockDir() { + return LockDirectory.instance(currentSpecFileEntry.getTrapFolder(), log); + } + + private void lockTrapFile(File trapFile) { + getExtractorLockDir().blockingLock(LockingMode.Exclusive, trapFile, "Java extractor lock"); + } + + private void unlockTrapFile(File trapFile) { + boolean success = getExtractorLockDir().maybeUnlock(LockingMode.Exclusive, trapFile); + if (!success) { + log.warn("Trap file was not locked: " + trapFile); + } + } + } + + /* + * Class version tracking. + */ + + private static final String MAJOR_VERSION = "majorVersion"; + private static final String MINOR_VERSION = "minorVersion"; + private static final String LAST_MODIFIED = "lastModified"; + + private static class TrapClassVersion { + private int majorVersion; + private int minorVersion; + private long lastModified; + + public int getMajorVersion() { + return majorVersion; + } + + public int getMinorVersion() { + return minorVersion; + } + + public long getLastModified() { + return lastModified; + } + + private TrapClassVersion(int majorVersion, int minorVersion, long lastModified) { + this.majorVersion = majorVersion; + this.minorVersion = minorVersion; + this.lastModified = lastModified; + } + private boolean newerThan(TrapClassVersion tcv) { + // Classes being compiled from source have major version 0 but should take precedence + // over any classes with the same qualified name loaded from the classpath + // in previous or subsequent extractor invocations. + if (tcv.majorVersion==0) + return false; + else if (majorVersion==0) + return true; + // Otherwise, determine precedence in the following order: + // majorVersion, minorVersion, lastModified. + return tcv.majorVersion < majorVersion || + (tcv.majorVersion == majorVersion && tcv.minorVersion < minorVersion) || + (tcv.majorVersion == majorVersion && tcv.minorVersion == minorVersion && + tcv.lastModified < lastModified); + } + private static TrapClassVersion fromSymbol(IrClass sym) { + return new TrapClassVersion(100, 101, 102); + } + private boolean isValid() { + return majorVersion>=0 && minorVersion>=0; + } + @Override + public String toString() { + return majorVersion + "." + minorVersion + "-" + lastModified; + } + } + + private TrapClassVersion readVersionInfo(File trap) { + int majorVersion = 0; + int minorVersion = 0; + long lastModified = 0; + File metadataFile = new File(trap.getAbsolutePath().replace(".trap.gz", ".metadata")); + if (metadataFile.exists()) { + Map metadataMap = FileUtil.readPropertiesCSV(metadataFile); + try { + majorVersion = Integer.parseInt(metadataMap.get(MAJOR_VERSION)); + minorVersion = Integer.parseInt(metadataMap.get(MINOR_VERSION)); + lastModified = Long.parseLong(metadataMap.get(LAST_MODIFIED)); + } catch (NumberFormatException e) { + log.warn("Invalid class file version for " + trap.getAbsolutePath(), e); + } + } else { + log.warn("Trap metadata file does not exist: " + metadataFile.getAbsolutePath()); + } + return new TrapClassVersion(majorVersion, minorVersion, lastModified); + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/array/ArrayUtil.java b/java/kotlin-extractor/src/main/java/com/semmle/util/array/ArrayUtil.java new file mode 100644 index 00000000000..6553bb5511d --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/array/ArrayUtil.java @@ -0,0 +1,246 @@ +package com.semmle.util.array; + +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.Set; + +import com.semmle.util.basic.ObjectUtil; + +/** + * Convenience methods for manipulating arrays. + */ +public class ArrayUtil +{ + + /** + * A number slightly smaller than the maximum length of an array on most vms. + * This matches the constant in ArrayList. + */ + public static final int MAX_ARRAY_LENGTH = Integer.MAX_VALUE - 8; + + /** + * Comparator for primitive int values. + */ + public static interface IntComparator + { + /** + * Compare ints {@code a} and {@code b}, returning a negative value if {@code a} is 'less' than + * {@code b}, zero if they are equal, otherwise a positive value. + */ + public int compare (int a, int b); + } + + /** + * Find the index of the first occurrence of the given {@code value} in the given {@code array}, + * returning -1 if there is no such element. + */ + public static int findFirst(boolean[] array, boolean value) + { + for(int i=0; i int findFirst(T[] array, T value) + { + for(int i=0; i int findFirstSame(T[] array, T value) + { + for(int i=0; i boolean contains (T element, T ... array) + { + return findFirst(array, element) != -1; + } + + /** + * Construct a new array with length increased by one, containing all elements of a given array + * followed by an additional element. + */ + public static T[] append (T[] array, T element) + { + array = Arrays.copyOf(array, array.length + 1); + array[array.length-1] = element; + return array; + } + + /** + * Construct a new array containing the concatenation of the elements in a number of arrays. + * + * @param arrays The arrays to concatenate; may be null (in which case the result will be null). + * Null elements will be treated as empty arrays. + * @return If {@code arrays} is null, a null array, otherwise a newly allocated array containing + * the elements of every non-null array in {@code arrays} concatenated consecutively. + */ + public static byte[] concatenate (byte[] ... arrays) + { + // Quick break-out if arrays is null + if (arrays == null) { + return null; + } + // Find the total length that will be required + int totalLength = 0; + for(byte[] array : arrays) { + totalLength += array == null ? 0 : array.length; + } + // Allocate a new array for the concatenation + byte[] concatenation = new byte[totalLength]; + // Copy each non-null array into the concatenation + int offset = 0; + for(byte[] array : arrays) { + if (array != null) { + System.arraycopy(array, 0, concatenation, offset, array.length); + offset += array.length; + } + } + + return concatenation; + } + + /** Trivial short-hand for building an array (returns {@code elements} unchanged). */ + public static T[] toArray (T ... elements) + { + return elements; + } + + /** + * Swap two elements in an array. + * + * @param array The array containing the elements to be swapped; must be non-null. + * @param index1 The index of the first element to swap; must be in-bounds. + * @param index2 The index of the second element to swap; must be in-bounds. + * @return The given {@code array}. + */ + public static int[] swap (int[] array, int index1, int index2) + { + int value = array[index1]; + array[index1] = array[index2]; + array[index2] = value; + + return array; + } + + /** + * Returns a fresh Set containing all the elements in the array. + * + * @param + * the class of the objects in the array + * @param array + * the array containing the elements + * @return a Set containing all the elements in the array. + */ + @SafeVarargs + public static Set asSet (T ... array) + { + Set ts = new LinkedHashSet<>(); + Collections.addAll(ts, array); + return ts; + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/basic/ObjectUtil.java b/java/kotlin-extractor/src/main/java/com/semmle/util/basic/ObjectUtil.java new file mode 100644 index 00000000000..ac329ab1a2d --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/basic/ObjectUtil.java @@ -0,0 +1,73 @@ +package com.semmle.util.basic; + +/** + * Trivial utility methods. + */ +public class ObjectUtil { + + /** Query if {@code object1} and {@code object2} are reference-equal, or both null. */ + public static boolean isSame (Object object1, Object object2) + { + return object1 == object2; // Reference equality comparison is deliberate + } + + /** + * Query if {@code object1} and {@code object2} are both null, or both non-null and equal + * according to {@link Object#equals(Object)} (applied as {@code object1.equals(object2)}). + */ + public static boolean equals (Object object1, Object object2) + { + return object1 == null ? object2 == null : object1.equals(object2); + } + + /** + * Query whether {@code object} is equal to any element in {@code objects}, short-circuiting + * the evaluation if possible. + */ + public static boolean equalsAny (Object object, Object ... objects) + { + // Quick break-out if there are no objects to be equal to + if (objects == null || objects.length == 0) { + return false; + } + // Compare against each object in turn + for(Object other : objects) { + if (equals(object, other)) { + return true; + } + } + + return false; + } + + /** + * Return {@code object1.compareTo(object2)}, but handle the case of null input by returning 0 if + * both objects are null, or 1 if only {@code object1} is null (implying that null is always + * 'greater' than non-null). + */ + public static int compareTo (Comparable object1, T2 object2) + { + if (object1 == null) { + return object2 == null ? 0 : 1; + } + return object1.compareTo(object2); + } + + /** + * Return {@code value} if non-null, otherwise {@code replacement}. + */ + public static T replaceNull (T value, T replacement) + { + return value == null ? replacement : value; + } + + @SafeVarargs + public static T nullCoalesce(T... values) { + for(T value : values) { + if (value != null) { + return value; + } + } + return null; + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/concurrent/LockDirectory.java b/java/kotlin-extractor/src/main/java/com/semmle/util/concurrent/LockDirectory.java new file mode 100644 index 00000000000..b5cdd79d641 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/concurrent/LockDirectory.java @@ -0,0 +1,395 @@ +package com.semmle.util.concurrent; + +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.nio.channels.FileChannel; +import java.nio.channels.FileLock; +import java.util.LinkedHashMap; +import java.util.Map; + +import com.semmle.util.data.StringDigestor; +import com.semmle.util.exception.CatastrophicError; +import com.semmle.util.exception.ResourceError; +import com.semmle.util.files.FileUtil; +import com.semmle.util.io.WholeIO; + +import com.github.codeql.Logger; +import com.github.codeql.Severity; + +/** + * Helper class to simplify handling of file-system-based inter-process + * locking and mutual exclusion. + * + * Both files and directories can be locked; locks are provided in the + * usual flavours of "shared" and "exclusive", plus a no-op variety to + * help unify code -- see the {@link LockingMode} enum. + * + * Note that each locked file requires one file descriptor to be held open. + * It is vital for clients to avoid creating too many locks, and to release + * locks when possible. + * + * The locks obtained by this class are VM-wide, and cannot be used to + * ensure mutual exclusion between threads of the same VM. Rather, they + * can enforce mutual exclusion between separate VMs trying to acquire + * locks for the same paths. + */ +public class LockDirectory { + private final Logger logger; + + private final File lockDir; + + /** + * An enum describing the possible locking modes. + */ + public enum LockingMode { + /** + * Shared mode: A shared lock can be taken any number of times, but only + * if no exclusive lock is in place. + */ + Shared(true), + /** + * An exclusive lock can only be taken if no other lock is in place; it + * prevents all other locks. + */ + Exclusive(false), + /** + * A dummy mode: Lock and unlock operations are no-ops. + */ + None(true), + ; + + private boolean shared; + + private LockingMode(boolean shared) { + this.shared = shared; + } + + public boolean isShared() { return shared; } + } + + /** + * An internal representation of a locked path. Contains some immutable state: The canonical + * path being locked, and the (derived) lock and status files. When the {@link #lock(LockDirectory.LockingMode, String)} + * method is called, a file descriptor to the lock file is opened; {@link #unlock(LockDirectory.LockingMode)} must be + * called to release it when the lock is no longer required. + * + * This class is not thread-safe, but it is expected that its clients ({@link LockDirectory}) + * enforce thread-safe access to instances. + */ + private class LockFile { + private final String lockedPath; + private final File lockFile; + private final File statusFile; + + private LockingMode mode = null; + private RandomAccessFile lockStream = null; + private FileChannel lockChannel = null; + private FileLock lock = null; + + public LockFile(File f) { + try { + lockedPath = f.getCanonicalPath(); + } catch (IOException e) { + throw new ResourceError("Failed to canonicalise path for locking: " + f, e); + } + String sha = StringDigestor.digest(lockedPath); + lockFile = new File(lockDir, sha); + statusFile = new File(lockDir, sha + ".log"); + } + + /** + * Get the (canonical) path associated with this lock file -- this is the + * path that is being locked. + */ + public String getLockedPath() { + return lockedPath; + } + + /** + * Acquire a lock with the given mode. If this method returns normally, + * the lock has been acquired -- an exception is thrown otherwise. This + * method does not block. + * + * If no exception is thrown, a file descriptor is kept open until + * {@link #unlock(LockDirectory.LockingMode)} is called. + * @param mode The desired locking mode. If {@link LockingMode#None}, this + * operation is a no-op (and does not in fact open a file descriptor). + * @param message A message to be recorded alongside the lock file. This + * is included in the exception message of other processes using this + * infrastructure when the lock acquisition fails. + * @throws CatastrophicError if a lock has already been obtained and not released. + * @throws ResourceError if an exception occurs while obtaining the lock, including + * if it cannot be acquired because another process holds it. + */ + public void lock(LockingMode mode, String message) { + if (mode == LockingMode.None) return; + if (lock != null) + throw new CatastrophicError("Trying to re-lock existing lock for " + lockedPath); + this.mode = mode; + try { + lockStream = new RandomAccessFile(lockFile, "rw"); + lockChannel = lockStream.getChannel(); + tryLock(mode); + new WholeIO().strictwrite(statusFile, mode + " lock acquired for " + lockedPath + ": " + message); + } catch (IOException e) { + throw new ResourceError("Failed to obtain lock for " + lockedPath + " at " + lockFile, e); + } + } + + /** + * Acquire a lock with the given mode. If this method returns normally, + * the lock has been acquired -- an exception is thrown otherwise. This + * method blocks indefinitely while waiting to acquire the lock. + * + * If no exception is thrown, a file descriptor is kept open until + * {@link #unlock(LockDirectory.LockingMode)} is called. + * @param mode The desired locking mode. If {@link LockingMode#None}, this + * operation is a no-op (and does not in fact open a file descriptor). + * @param message A message to be recorded alongside the lock file. This + * is included in the exception message of other processes using this + * infrastructure when the lock acquisition fails. + * @throws ResourceError if an exception occurs while obtaining the lock,. + */ + public void blockingLock(LockingMode mode, String message) { + if (mode == LockingMode.None) return; + if (lock != null) + throw new CatastrophicError("Trying to re-lock existing lock for " + lockedPath); + this.mode = mode; + try { + lockStream = new RandomAccessFile(lockFile, "rw"); + lockChannel = lockStream.getChannel(); + lock = lockChannel.tryLock(0, Long.MAX_VALUE, mode.isShared()); + while (lock == null) { + ThreadUtil.sleep(500, true); + lock = lockChannel.tryLock(0, Long.MAX_VALUE, mode.isShared()); + } + new WholeIO().strictwrite(statusFile, mode + " lock acquired for " + lockedPath + ": " + message); + } catch (IOException e) { + throw new ResourceError("Failed to obtain lock for " + lockedPath + " at " + lockFile, e); + } + } + + /** + * Internal helper method: Try to acquire a particular kind of lock, assuming the + * {@link #lockChannel} has been set up. Throws if acquisition fails, rather than + * blocking. + * @param mode The desired lock mode -- exclusive or shared. + * @throws IOException if acquisition of the lock fails for reasons other than + * an incompatible lock already being held by another process. + * @throws ResourceError if the lock is already held by another process. The exception + * message includes the status string, if it can be determined. + */ + private void tryLock(LockingMode mode) throws IOException { + lock = lockChannel.tryLock(0, Long.MAX_VALUE, mode.isShared()); + if (lock == null) { + String status = new WholeIO().read(statusFile); + throw new ResourceError("Failed to acquire " + mode + " lock for " + lockedPath + "." + + (status == null ? "" : "\nExisting lock message: " + status)); + } + } + + /** + * Release this lock. This will close the file descriptor opened by {@link #lock(LockDirectory.LockingMode, String)}. + * @param mode A mode, which must match the mode passed into {@link #lock(LockDirectory.LockingMode, String)} + * (unless it is {@link LockingMode#None}, in which case the method is a no-op). + * @throws CatastrophicError if the passed mode does not match the one used for locking. + * @throws ResourceError if releasing the lock or clearing up temporary files fails. + */ + public void unlock(LockingMode mode) { + if (mode == LockingMode.None) + return; + if (mode != this.mode) + throw new CatastrophicError("Attempting to unlock " + lockedPath + " with incompatible mode: " + + this.mode + " lock was obtained, but " + mode + " lock is being released."); + release(mode); + } + + private void release(LockingMode mode) { + try { + if (lock != null) + try { + // On Windows, the lockChannel/lockStream prevents the lockFile from being + // deleted. The statusFile should only be written after the lock is held, + // so deleting it before releasing the lock is not expected to fail if the + // lock is exclusive. + // Deleting the lock file may fail, if another process just acquires it + // after we release it. + try { + if (statusFile.exists() && !statusFile.delete()) { + if (!mode.isShared()) throw new ResourceError("Could not clear status file " + statusFile); + } + } finally { + lock.release(); + FileUtil.close(lockStream); + FileUtil.close(lockChannel); + if (!lockFile.delete()) + logger.error("Could not clear lock file " + lockFile + " (it might have been locked by another process)."); + } + } catch (IOException e) { + throw new ResourceError("Couldn't release lock for " + lockedPath, e); + } + } finally { + mode = null; + lockStream = null; + lockChannel = null; + lock = null; + } + } + } + + private static final Map instances = new LinkedHashMap(); + + /** + * Obtain the {@link LockDirectory} instance for a given lock directory. The directory + * in question will be created if it doesn't exist. + * @param lockDir A directory -- must be writable, and will be created if it doesn't + * already exist. + * @return The {@link LockDirectory} instance responsible for the specified lock directory. + * @throws ResourceError if the directory cannot be created, exists as a non-directory + * or cannot be canonicalised. + */ + public static synchronized LockDirectory instance(File lockDir) { + return instance(lockDir, null); + } + + /** + * See {@link #instance(File)}. + * Use this method only if log output should be directed to a custom {@link Logger}. + */ + public static synchronized LockDirectory instance(File lockDir, Logger logger) { + // First try to create the directory -- canonicalisation will fail if it doesn't exist. + try { + FileUtil.mkdirs(lockDir); + } catch(ResourceError e) { + throw new ResourceError("Couldn't ensure lock directory " + lockDir + " exists.", e); + } + + // Canonicalise. + try { + lockDir = lockDir.getCanonicalFile(); + } catch (IOException e) { + throw new ResourceError("Couldn't canonicalise requested lock directory " + lockDir, e); + } + + // Find and return the right instance. + LockDirectory instance = instances.get(lockDir); + if (instance == null) { + instance = new LockDirectory(lockDir, logger); + instances.put(lockDir, instance); + } + return instance; + } + + /** + * A map from canonical locked paths to the associated {@link LockFile} instances. + */ + private final Map locks = new LinkedHashMap(); + + /** + * Create a new instance of {@link LockDirectory}, holding all locks in the + * specified log directory. + * @param lockDir A writable directory in which locks will be stored. + * @param logger The {@link Logger} to use, if non-null. + */ + private LockDirectory(File lockDir, Logger logger) { + this.lockDir = lockDir; + this.logger = logger; + } + + /** + * Acquire a lock of the specified kind for the path represented by the given file. + * The file should exist, and its path should be canonicalisable. + * + * Calling this method keeps one file descriptor open + * @param mode The desired locking mode. If {@link LockingMode#None} is passed, this is a no-op, + * otherwise it determines whether a shared or exclusive lock is acquired. + * @param f The path that should be locked -- does not need to be writable, and will not + * be opened. + * @param message A message describing the purpose of the lock acquisition. This is + * potentially displayed when other processes fail to acquire the lock for the given + * path. + * @throws CatastrophicError if an attempt is made to lock an already locked path. + */ + public synchronized void lock(LockingMode mode, File f, String message) { + if (mode == LockingMode.None) return; + LockFile lock = new LockFile(f); + if (locks.containsKey(lock.getLockedPath())) + throw new CatastrophicError("Trying to lock already locked path " + lock.getLockedPath() + "."); + lock.lock(mode, message); + locks.put(lock.getLockedPath(), lock); + } + + /** + * Acquire a lock of the specified kind for the path represented by the given file. + * The file should exist, and its path should be canonicalisable. This method waits + * indefinitely for the lock to become available. There is no ordering on processes + * that are waiting to acquire the lock in this manner. + * + * Calling this method keeps one file descriptor open + * @param mode The desired locking mode. If {@link LockingMode#None} is passed, this is a no-op, + * otherwise it determines whether a shared or exclusive lock is acquired. + * @param f The path that should be locked -- does not need to be writable, and will not + * be opened. + * @param message A message describing the purpose of the lock acquisition. This is + * potentially displayed when other processes fail to acquire the lock for the given + * path. + */ + public synchronized void blockingLock(LockingMode mode, File f, String message) { + if (mode == LockingMode.None) return; + LockFile lock = new LockFile(f); + if (locks.containsKey(lock.getLockedPath())) + throw new CatastrophicError("Trying to lock already locked path " + lock.getLockedPath() + "."); + lock.blockingLock(mode, message); + locks.put(lock.getLockedPath(), lock); + } + + /** + * Release a lock held on a particular path. + * + * This method closes the file descriptor associated with the lock, freeing related + * resources. + * @param mode the mode of the lock. If it equals {@link LockingMode#None}, this is a no-op; otherwise + * it is expected to match the mode passed to the corresponding {@link #lock(LockingMode, File, String)} + * call. + * @param f The path which should be unlocked. As with {@link #lock(LockingMode, File, String)}, it is + * expected to exist and be canonicalisable. It also must be currently locked. + * @throws CatastrophicError on API contract violation: The path isn't currently locked, or the + * mode doesn't correspond to the mode specified when it was locked. + * @throws ResourceError if something goes wrong while releasing resources. + */ + public synchronized void unlock(LockingMode mode, File f) { + if (!maybeUnlock(mode, f)) + throw new CatastrophicError("Trying to unlock " + new LockFile(f).getLockedPath() + ", but it is not locked."); + } + + /** + * Release a lock that may be held on a particular path. + * + * This method closes the file descriptor associated with the lock, freeing related + * resources. Unlike {@link #unlock(LockingMode, File)}, this method will not throw + * if the specified {@link File} is not locked, making it more suitable for post-exception + * cleanup -- false will be returned in that case. + * @param mode the mode of the lock. If it equals {@link LockingMode#None}, this is a no-op; otherwise + * it is expected to match the mode passed to the corresponding {@link #lock(LockingMode, File, String)} + * call. + * @param f The path which should be unlocked. As with {@link #lock(LockingMode, File, String)}, it is + * expected to exist and be canonicalisable. + * @return true if mode == LockingMode.None, or the unlock operation completed + * successfully; false if the path f isn't currently locked. + * @throws ResourceError if something goes wrong while releasing resources. + */ + public synchronized boolean maybeUnlock(LockingMode mode, File f) { + if (mode == LockingMode.None) return true; + // New instance constructed just to share the logic of computing the canonical path. + LockFile key = new LockFile(f); + LockFile existing = locks.get(key.getLockedPath()); + if (existing == null) + return false; + locks.remove(key.getLockedPath()); + existing.unlock(mode); + return true; + } + + public File getDir(){ return lockDir; } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/concurrent/ThreadUtil.java b/java/kotlin-extractor/src/main/java/com/semmle/util/concurrent/ThreadUtil.java new file mode 100644 index 00000000000..4ebbf2198ee --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/concurrent/ThreadUtil.java @@ -0,0 +1,43 @@ +package com.semmle.util.concurrent; + +import com.semmle.util.exception.CatastrophicError; +import com.semmle.util.exception.Exceptions; + + +/** + * Utility methods related to Threads. + */ +public enum ThreadUtil +{ + /** Singleton instance of {@link ThreadUtil}. */ + SINGLETON; + + /** + * Sleep for {@code millis} milliseconds. + *

    + * Unlike {@link Thread#sleep(long)} (which is wrapped), this method does not throw an + * {@link InterruptedException}, rather in the event of interruption it either throws an + * {@link CatastrophicError} (if {@code allowInterrupt} is false), or accepts the interruption and + * returns false. + *

    + * + * @return true if a sleep of {@code millis} milliseconds was performed without interruption, or + * false if an interruption occurred. + */ + public static boolean sleep(long millis, boolean allowInterrupt) + { + try { + Thread.sleep(millis); + } + catch (InterruptedException ie) { + if (allowInterrupt) { + Exceptions.ignore(ie, "explicitly permitted interruption"); + return false; + } + else { + throw new CatastrophicError("Interrupted", ie); + } + } + return true; + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/data/IntRef.java b/java/kotlin-extractor/src/main/java/com/semmle/util/data/IntRef.java new file mode 100644 index 00000000000..ce78ded951a --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/data/IntRef.java @@ -0,0 +1,19 @@ +package com.semmle.util.data; + +/** + * A mutable reference to a primitive int. Specialised to avoid + * boxing. + * + */ +public class IntRef { + private int value; + + public IntRef(int value) { + this.value = value; + } + + public int get() { return value; } + public void set(int value) { this.value = value; } + public void inc() { value++; } + public void add(int val) { value += val; }; +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/data/Pair.java b/java/kotlin-extractor/src/main/java/com/semmle/util/data/Pair.java new file mode 100644 index 00000000000..7c8ff7b6ae3 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/data/Pair.java @@ -0,0 +1,62 @@ +package com.semmle.util.data; + + +/** + * An (immutable) ordered pair of values. + *

    + * Pairs are compared with structural equality: (x,y) = (x', y') iff x=x' + * and y=y'. + *

    + * + * @param the type of the first component of the pair + * @param the type of the second component of the pair + */ +public class Pair extends Tuple2 +{ + private static final long serialVersionUID = -2871892357006076659L; + + /* + * Constructor and factory + */ + + + /** + * Create a new pair of values + * @param x the first component of the pair + * @param y the second component of the pair + */ + public Pair(X x, Y y) { + super(x, y); + } + + /** + * Create a new pair of values. This behaves identically + * to the constructor, but benefits from type inference + * @param x the first component of the pair + * @param y the second component of the pair + */ + public static Pair make(X x, Y y) { + return new Pair(x, y); + } + + /* + * Getters + */ + + /** + * Get the first component of this pair + * @return the first component of the pair + */ + public X fst() { + return value0(); + } + + /** + * Get the second component of this pair + * @return the second component of the pair + */ + public Y snd() { + return value1(); + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/data/StringDigestor.java b/java/kotlin-extractor/src/main/java/com/semmle/util/data/StringDigestor.java new file mode 100644 index 00000000000..36ab45a7742 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/data/StringDigestor.java @@ -0,0 +1,173 @@ +package com.semmle.util.data; + +import java.nio.charset.Charset; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import com.semmle.util.exception.CatastrophicError; + +/** + * Encapsulate the creation of message digests from strings. + * + *

    + * This class acts as a (partial) output stream, until the getDigest() method is + * called. After this the class can no longer be used, except to repeatedly call + * {@link #getDigest()}. + * + *

    + * UTF-8 is used internally as the {@link Charset} for this class when converting Strings to bytes. + */ +public class StringDigestor { + private static final Charset UTF8 = Charset.forName("UTF-8"); + private static final String NULL_STRING = ""; + private static final int CHUNK_SIZE = 32; + + private MessageDigest digest; + private byte[] digestBytes; + private final byte[] buf = new byte[CHUNK_SIZE * 3]; // A Java char becomes at most 3 bytes of UTF-8 + + /** + * Create a StringDigestor using SHA-1, ready to accept data + */ + public StringDigestor() { + this("SHA-1"); + } + + /** + * @param digestAlgorithm the algorithm to use in the internal {@link MessageDigest}. + */ + public StringDigestor(String digestAlgorithm) { + try { + digest = MessageDigest.getInstance(digestAlgorithm); + } catch (NoSuchAlgorithmException e) { + throw new CatastrophicError("StringDigestor failed to find the required digest algorithm: " + digestAlgorithm, e); + } + } + + public void reset() { + if (digestBytes == null) throw new CatastrophicError("API violation: Digestor is not finished."); + digest.reset(); + digestBytes = null; + } + + /** + * Write an object into this digestor. This converts the object to a + * string using toString(), writes the length, and then writes the + * string itself. + */ + public StringDigestor write(Object toAppend) { + String str; + if (toAppend == null) { + str = NULL_STRING; + } else { + str = toAppend.toString(); + } + writeBinaryInt(str.length()); + writeNoLength(str); + return this; + } + + /** + * Write the given string without prefixing it by its length. + */ + public StringDigestor writeNoLength(Object toAppend) { + String s = toAppend.toString(); + int len = s.length(); + int i = 0; + while(i + CHUNK_SIZE < len) { + i = writeUTF8(s, i, i + CHUNK_SIZE); + } + writeUTF8(s, i, len); + return this; + } + + private int writeUTF8(String s, int begin, int end) { + if (digestBytes != null) throw new CatastrophicError("API violation: Digestor is finished."); + byte[] buf = this.buf; + int len = 0; + for(int i = begin; i < end; ++i) { + int c = s.charAt(i); + if (c <= 0x7f) { + buf[len++] = (byte)c; + } else if (c <= 0x7ff) { + buf[len] = (byte)(0xc0 | (c >> 6)); + buf[len+1] = (byte)(0x80 | (c & 0x3f)); + len += 2; + } else if (c < 0xd800 || c > 0xdfff) { + buf[len] = (byte)(0xe0 | (c >> 12)); + buf[len+1] = (byte)(0x80 | ((c >> 6) & 0x3f)); + buf[len+2] = (byte)(0x80 | (c & 0x3f)); + len += 3; + } else if (i + 1 < end) { + int c2 = s.charAt(i + 1); + if (c > 0xdbff || c2 < 0xdc00 || c2 > 0xdfff) { + // Invalid UTF-16 + } else { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + buf[len] = (byte)(0xf0 | (c >> 18)); + buf[len+1] = (byte)(0x80 | ((c >> 12) & 0x3f)); + buf[len+2] = (byte)(0x80 | ((c >> 6) & 0x3f)); + buf[len+3] = (byte)(0x80 | (c & 0x3f)); + len += 4; + ++i; + } + } else { + --end; + break; + } + } + digest.update(buf, 0, len); + return end; + } + + /** + * Write an array of raw bytes to the digestor. This appends the contents + * of the array to the accumulated data used for the digest. + */ + public StringDigestor writeBytes(byte[] data) { + if (digestBytes != null) throw new CatastrophicError("API violation: Digestor is finished."); + digest.update(data); + return this; + } + + /** + * Return the hex-encoded digest as a {@link String}. + * + * Get the digest from the data previously appended using write(Object). + * After this is called, the instance's {@link #write(Object)} and {@link #writeBytes(byte[])} + * methods may no longer be used. + */ + public String getDigest() { + if (digestBytes == null) { + digestBytes = digest.digest(); + } + return StringUtil.toHex(digestBytes); + } + + public static String digest(Object o) { + StringDigestor digestor = new StringDigestor(); + digestor.writeNoLength(o); + return digestor.getDigest(); + } + + /** Compute a git-style SHA for the given string. */ + public static String gitBlobSha(String content) { + byte[] bytes = content.getBytes(UTF8); + return digest("blob " + bytes.length + "\0" + content); + } + + /** + * Convert an int to a byte[4] using its little-endian 32bit representation, and append the + * resulting bytes to the accumulated data used for the digest. + */ + public StringDigestor writeBinaryInt(int i) { + if (digestBytes != null) throw new CatastrophicError("API violation: Digestor is finished."); + byte[] buf = this.buf; + buf[0] = (byte)(i & 0xff); + buf[1] = (byte)((i >>> 8) & 0xff); + buf[2] = (byte)((i >>> 16) & 0xff); + buf[3] = (byte)((i >>> 24) & 0xff); + digest.update(buf, 0, 4); + return this; + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/data/StringUtil.java b/java/kotlin-extractor/src/main/java/com/semmle/util/data/StringUtil.java new file mode 100644 index 00000000000..4ace04698d1 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/data/StringUtil.java @@ -0,0 +1,1247 @@ +package com.semmle.util.data; + +import java.math.BigDecimal; +import java.nio.charset.Charset; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Random; +import java.util.regex.Pattern; + +import com.semmle.util.exception.CatastrophicError; +import com.semmle.util.exception.Exceptions; + +public class StringUtil { + + private static final Random RANDOM = new Random(); + + private static final DecimalFormat DOUBLE_FORMATTER; + static { + // Specify the root locale to ensure we use the "." decimal separator + DOUBLE_FORMATTER = new DecimalFormat( + "#.######", + new DecimalFormatSymbols(Locale.ROOT) + ); + DecimalFormatSymbols decimalFormatSymbols = DOUBLE_FORMATTER.getDecimalFormatSymbols(); + decimalFormatSymbols.setNaN("NaN"); + decimalFormatSymbols.setInfinity("Infinity"); + DOUBLE_FORMATTER.setDecimalFormatSymbols(decimalFormatSymbols); + } + + public static String box(List strings) { + List lines = new ArrayList<>(); + for (String s : strings) + for (String line : lines(s)) + lines.add(line); + + int length = 0; + for (String s : lines) + length = Math.max(length, s.length()); + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < length + 6; i++) + sb.append('*'); + for (String s : lines) { + sb.append("\n* "); + sb.append(s); + for (int i = 0; i < length - s.length(); i++) + sb.append(' '); + sb.append(" *"); + } + sb.append('\n'); + for (int i = 0; i < length + 6; i++) + sb.append('*'); + return sb.toString(); + } + + public static String escapeStringLiteralForRegexp(String literal, String charsToPreserve) { + final String charsToEscape = "(){}[].^$+\\*?"; + StringBuilder buf = new StringBuilder(); + for(int i = 0; i < literal.length(); i++) { + char c = literal.charAt(i); + if(charsToEscape.indexOf(c) != -1 && charsToPreserve.indexOf(c) == -1) { + buf.append("\\").append(c); + } + else { + buf.append(c); + } + } + return buf.toString(); + } + + public static String pad(int minWidth, Padding pad, String s) { + + int length = s.length(); + int toPad = minWidth - length; + + if (toPad > 0) { + int left; + int right; + switch (pad) { + case LEFT: + left = 0; + right = toPad; + break; + case RIGHT: + left = toPad; + right = 0; + break; + case CENTRE: + left = toPad / 2; + right = toPad - left; + break; + default: + throw new CatastrophicError("Unknown padding kind: " + pad); + } + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < left; i++) + sb.append(' '); + sb.append(s); + for (int i = 0; i < right; i++) + sb.append(' '); + + return sb.toString(); + } else + return s; + + } + + public static List pad(Padding pad, Collection strings) { + List result = new ArrayList<>(strings.size()); + int maxWidth = 0; + for (String s : strings) + maxWidth = Math.max(maxWidth, s.length()); + for (String s : strings) + result.add(pad(maxWidth, pad, s)); + return result; + } + + public static List pad(Padding pad, String... strings) { + List result = new ArrayList<>(strings.length); + int maxWidth = 0; + for (String s : strings) + maxWidth = Math.max(maxWidth, s.length()); + for (String s : strings) + result.add(pad(maxWidth, pad, s)); + return result; + } + + public static void padTable(List rows, Padding... pad) { + int width = pad.length; + int[] maxLengths = new int[width]; + for (String[] row : rows) { + if (row.length != width) + throw new CatastrophicError("padTable can only be used with a rectangular table. Expected " + width + + " columns but found row: " + Arrays.toString(row)); + for (int i = 0; i < width; i++) + maxLengths[i] = Math.max(maxLengths[i], row[i].length()); + } + for (String[] row : rows) + for (int i = 0; i < width; i++) + row[i] = pad(maxLengths[i], pad[i], row[i]); + } + + public static String glue(String separator, Iterable values) { + StringBuilder sb = new StringBuilder(); + boolean first = true; + for (Object o : values) { + if (first) + first = false; + else + sb.append(separator); + sb.append(o == null ? "" : o.toString()); + } + return sb.toString(); + } + + public static String glue(String separator, Object[] values) { + return glue(separator, Arrays.asList(values)); + } + + public static String glue(String separator, String... values) { + return glue(separator, (Object[]) values); + } + + public static enum Padding { LEFT, RIGHT, CENTRE } + + + /** + * Return a new String with any of the four characters !#:= replaced with a back-slash escaped + * equivalent, and any newline characters replaced by a back-slash n. + *

    + * This allows the String to be used in a .properties file (assuming it does not contain any + * extended unicode characters, which must be converted to unicode escapes). + *

    + *

    + * Note that it does not ensure that the String can be used as a key in a .properties + * file, which requires additional escaping of any spaces. + *

    + * + * @param string The String to escape; must not be null. + * @return The given {@code string} with a back-slash inserted before each instance of any of the + * four characters: #!:= + * @see #escapePropertiesValue(String) + */ + public static String escapePropertiesValue (String string) + { + return string.replace("!", "\\!") + .replace(":", "\\:") + .replace("#", "\\#") + .replace("=", "\\=") + .replace("\n", "\\n"); + } + + /** + * See {@link #escapePropertiesValue(String)}. This method also escapes spaces, so that the + * {@code string} can be used as a .properties key. + * + * @param string The String to escape; must not be null. + * @return The given {@code string} with a back-slash inserted before each instance of any of the + * four characters: #!:= or the space character, and newlines replaced by a backslash n. + */ + public static String escapePropertiesKey (String string) + { + return escapePropertiesValue(string).replace(" ", "\\ "); + } + + /** + * Print a float in a locale-independent way suitable for reading with Double.valueOf(). + */ + public static String printFloat(double value) { + if (Math.abs(value) > 999999999999999.0 && !Double.isInfinite(value)) { + // `DecimalFormat` for `double` loses precision on large numbers, + // printing the least significant digits as all 0. + return DOUBLE_FORMATTER.format(new BigDecimal(value)); + } else { + return DOUBLE_FORMATTER.format(value); + } + } + + public static String escapeHTML(String s) { + if (s == null) return null; + + int length = s.length(); + // initialize a StringBuilder with initial capacity of twice the size of the string, + // except when its size is zero, or when doubling the size causes overflow + StringBuilder sb = new StringBuilder(length * 2 > 0 ? length * 2 : length); + for (int i = 0; i < length; i++) { + char c = s.charAt(i); + switch (c) { + case '<': + sb.append("<"); + break; + case '>': + sb.append(">"); + break; + case '&': + sb.append("&"); + break; + case '"': + sb.append("""); + break; + case '\'': + sb.append("'"); + break; + // be careful with this one (non-breaking white space) + /* + case ' ': + sb.append(" "); + break;*/ + + default: + sb.append(c); + break; + } + } + return sb.toString(); + } + + /** + * Escape special characters in the given string like JSON.stringify does + * (see ECMAScript 5.1, Section 15.12.3). + */ + public static String escapeJSON(String str) { + if (str == null) + return null; + StringBuilder res = new StringBuilder(); + for (int i=0, n=str.length(); i specialMarkdownChars = Arrays.asList( + '\\', '`', '_', '*', '(', ')', '[', ']', '#', '+', '-', '.', '!'); + /** + * Escape special markdown characters in the given string. + */ + public static String escapeMarkdown(String str) { + return escapeMarkdown(specialMarkdownChars, str); + } + + /** + * Escape special markdown characters in the given string. + */ + public static String escapeMarkdown(List specialMarkdownChars, String str) { + if (str == null) + return null; + StringBuilder res = new StringBuilder(); + + boolean escapeOctothorp = true; + for (int i=0, n=str.length(); icols marks the + * start of a new line (and ends up on the new line). For this method, + * "word" means sequence of non-whitespace characters. + * @param text The text that should be wrapped. + * @param cols The number of characters to permit on each line; it is + * only exceeded if there are single words that are longer. + * @return The text with sequences of whitespace before words that would + * exceed the permitted width replaced with '\n'. + */ + public static String wrap(String text, int cols) { + if(text == null) + return null; + List lines = new ArrayList<>(); + int lineStart = -1; int wordStart = -1; int col = 0; + for (int cur = 0; cur < text.length(); cur++) { + if (text.charAt(cur) == '\n') { + // Forced new line. + if (lineStart < 0) { + // Empty new line. + lines.add(""); + } else { + lines.add(text.substring(lineStart, cur).trim()); + } + lineStart = -1; + wordStart = -1; + col = 0; + } else if (Character.isWhitespace(text.charAt(cur))) { + // Possible break. + if (col > cols) { + // Break is needed. + if (lineStart < 0) { + // Long run of whitespace. + continue; + } else if (wordStart < 0) { + // Sequence of whitespace went over after real word. + String line = text.substring(lineStart, cur).trim(); + if (line.length() > 0) lines.add(line); + lineStart = -1; + } else if (wordStart > lineStart) { + // Word goes onto new line. + lines.add(text.substring(lineStart, wordStart - 1).trim()); + lineStart = wordStart; + col = cur - lineStart + 1; + wordStart = -1; + } else { + // Word is a line on its own. + lines.add(text.substring(wordStart, cur).trim()); + lineStart = -1; + wordStart = -1; + } + } else { + // No break, but new word + wordStart = -1; + } + } else { + if (lineStart < 0) { + lineStart = cur; + col = 0; + } + if (wordStart < 0) + wordStart = cur; + } + if (lineStart >= 0) + col++; + } + if (lineStart > -1) + lines.add(text.substring(lineStart).trim()); + return glue("\n", lines); + } + + /** + * Get the first word of the given string, delimited by whitespace. Leading whitespace + * is ignored. + */ + public static String firstWord(String s) { + s = s.trim(); + int i = 0; + while (i < s.length() && !Character.isWhitespace(s.charAt(i))) + i++; + return s.substring(0, i); + } + + /** + * Strip the first word (delimited by whitespace, leading whitespace ignored) and get the + * remainder of the string, trimmed. + */ + public static String stripFirstWord(String s) { + s = s.trim(); + int i = 0; + while (i < s.length() && !Character.isWhitespace(s.charAt(i))) + i++; + return s.substring(i).trim(); + } + + /** + * Trim leading and trailing occurrences of a character from a string + * @param str the string to trim + * @param c the character to remove + * @return A string whose value is str, with any leading and trailing occurrences of c removed, + * or str if it has no leading or trailing occurrences of c. + */ + public static String trim(String str, char c) { + return trim(str, c, true, true); + } + + public static String trim(String str, char c, boolean trimLeading, boolean trimTrailing) { + int begin = 0; + int end = str.length(); + + if (trimLeading) { + while ((begin < end) && (str.charAt(begin) == c)) { + begin++; + } + } + if (trimTrailing) { + while ((begin < end) && (str.charAt(end - 1) == c)) { + end--; + } + } + if ((begin > 0) || (end < str.length())) + str = str.substring(begin, end); + return str; + } + + public static String trimTrailingWhitespace(String str) { + int begin = 0; + int end = str.length(); + while((begin < end) && (Character.isWhitespace(str.charAt(end-1)))) { + end--; + } + if (end < str.length()) + str = str.substring(begin, end); + return str; + } + + private static final Charset UTF8_CHARSET = Charset.forName("UTF-8"); + + /** + * Invert the conversion performed by {@link #stringToBytes(String)}. + */ + public static String bytesToString(byte[] bytes) + { + return new String(bytes, 0, bytes.length, UTF8_CHARSET); + } + + public static String bytesToString(byte[] bytes, int offset, int length) { + return new String(bytes, offset, length, UTF8_CHARSET); + } + + /** Convert a String into a sequence of bytes (according to a UTF-8 representation of the String). */ + public static byte[] stringToBytes (String str) + { + return str.getBytes(Charset.forName("UTF-8")); + } + + /** + * Compute a SHA-1 sum for the given String. + *

    + * The SHA-1 is obtained by first converting the String to bytes, which is Charset-dependent, + * though this method always uses {@link #stringToBytes(String)}. + *

    + * + * @see #toHex(byte[]) + */ + public static byte[] stringToSHA1 (String str) + { + MessageDigest messageDigest; + try { + messageDigest = MessageDigest.getInstance("SHA-1"); + return messageDigest.digest(stringToBytes(str)); + } + catch (NoSuchAlgorithmException e) { + throw new CatastrophicError("Failed to obtain MessageDigest for computing SHA-1", e); + } + + } + + /** + * Constructs a string that repeats the repeatee the specified number of times. + * For example, repeat("foo", 3) would return "foofoofoo". + * + * @param repeatee The string to be repeated. + * @param times The number of times to repeat it. + * @return The result of repeating the repeatee the specified number of times. + */ + public static String repeat(String repeatee, int times) { + if (times == 0) + return ""; + return new String(new char[times]).replace("\0", repeatee); + } + + /** + * Computes the lower-case version of the given string in a way that is independent + * of the system default locale. + * @param s A string value to lowercase. + * @return The value of {@code s} with all English letters converted to lower-case. + */ + public static String lc(String s) { + return s.toLowerCase(Locale.ENGLISH); + } + + /** + * Computes the upper-case version of the given string in a way that is independent + * of the system default locale. + * @param s A string value to uppercase. + * @return The value of {@code s} with all English letters converted to upper-case. + */ + public static String uc(String s) { + return s.toUpperCase(Locale.ENGLISH); + } + + public static String ucfirst(String s) { + if( s.isEmpty() || !Character.isLowerCase(s.charAt(0))) + return s; + else + return uc(s.substring(0,1))+s.substring(1); + } + + private static final Pattern lineEnding = Pattern.compile("\r\n|\r|\n"); + /** + * Regex to match line endings using look-behind, + * so that line separators can be included in the split lines. + * \r\n is matched eagerly, i.e. we only match on \r individually if it is not followed by \n. + */ + private static final Pattern lineEndingIncludingSeparators = Pattern.compile("(?<=(\r\n|\r(?!\n)|\n))"); + + /** + * Get the lines in a given string. All known style of line terminator (CRLF, CR, LF) + * are recognised. Trailing empty lines are not returned, and the resulting strings + * do not include the line separators. + */ + public static String[] lines(String s) { + return lines(s, false, true); + } + + /** + * Get the lines in a given string, including the line separators. + * All known style of line terminator (CRLF, CR, LF) are recognised. + * Trailing empty strings are not returned (but lines containing only separators are). + */ + public static String[] linesWithSeparators(String s) { + return lines(s, true, true); + } + + /** + * Get the lines in a given string. All known style of line terminator (CRLF, CR, LF) + * are recognised. The resulting strings do not include the line separators. If + * {@code squishTrailing} is true, trailing empty lines are not included + * in the result; otherwise, they will appear as empty strings. + */ + public static String[] lines(String s, boolean squishTrailing) { + return lines(s, false, squishTrailing); + } + + /** + * Gets the lines in a given string. All known style of line terminator (CRLF, CR, LF) + * are recognised. + * If {@code includeSeparators} is true, then the line separators are included + * at the end of their corresponding lines; otherwise they are dropped. + * If {@code squishTrailing} is true, then trailing empty lines are not included + * in the result; otherwise, they will appear as empty strings. + */ + public static String[] lines(String s, boolean includeSeparators, boolean squishTrailing) { + if (s.length() == 0) + return new String[0]; + Pattern pattern = includeSeparators ? lineEndingIncludingSeparators : lineEnding; + return pattern.split(s, squishTrailing ? 0 : -1); + } + + /** + * Replace all line endings in the given string with \n + */ + public static String toUnixLineEndings(String s) { + return lineEnding.matcher(s).replaceAll("\n"); + } + + /** + * Get a boolean indicating whether the string contains line separators + * All known style of line terminator (CRLF, CR, LF) are recognised. + */ + public static boolean isMultiLine(String s) { + return lineEnding.matcher(s).find(); + } + + private static final Pattern whitespace = Pattern.compile("\\s+"); + /** + * Get the words (i.e. whitespace-delimited chunks of non-whitespace) from the given string. + * Empty words are not included -- this means that the result is a zero-length array for + * an input string that consists entirely of whitespace. + */ + public static String[] words(String s) { + s = s.trim(); + if (s.length() == 0) + return new String[0]; + return whitespace.split(s); + } + + /** + * Split a string into paragraphs (delimited by empty lines). Line endings are not preserved. + */ + public static String[] paragraphs(String s) { + List paragraphs = new ArrayList<>(); + + StringBuilder paragraph = new StringBuilder(); + boolean emptyParagraph = true; + + for (String line : StringUtil.lines(s)) { + if (line.isEmpty()) { + // line only has line endings, i.e. is between paragraphs. + if (!emptyParagraph) + paragraphs.add(paragraph.toString()); + paragraph = new StringBuilder(); + emptyParagraph = true; + } else { + if(paragraph.length() != 0) + paragraph.append(' '); + paragraph.append(line); + emptyParagraph = false; + } + } + if (!emptyParagraph) + paragraphs.add(paragraph.toString()); + return paragraphs.toArray(new String[0]); + } + + private static final char[] HEX_CHARS = "0123456789abcdef".toCharArray(); + + /** Convert an array of bytes into an array of lower-case hex digits. */ + public static String toHex (byte ... bytes) + { + StringBuilder strBldr = new StringBuilder(bytes.length * 2); + char[] hexchars = HEX_CHARS; + for (byte b : bytes) { + strBldr.append(hexchars[(b >>> 4) & 0xF]).append(hexchars[b & 0xF]); + } + return strBldr.toString(); + + } + + /** + * Convert String of hexadecimal digits to an array of bytes. + * @throws NumberFormatException if string does not have an even length or + * contains invalid characters. + */ + public static byte[] fromHex(String string) { + int len = string.length(); + if(len % 2 != 0) + throw new NumberFormatException("Hexadecimal string should have an even number of characters."); + byte[] data = new byte[len / 2]; + int index = 0; + for (int i = 0; i < len; i += 2) { + int a = Character.digit(string.charAt(i), 16); + if(a == -1) + throw new NumberFormatException("Invalid character in hexadecimal string: " + string.charAt(i)); + int b = Character.digit(string.charAt(i+1), 16); + if(b == -1) + throw new NumberFormatException("Invalid character in hexadecimal string: " + string.charAt(i+1)); + data[index] = (byte) ((a << 4) | b); + index++; + } + return data; + } + + /** + * Return a 8 character String describing the duration in {@code nanoSeconds}. + *

    + * The duration will be scaled and expressed using the appropriate units: nano-, micro-, milli-, + * seconds, minutes, hours, days, or years. + *

    + */ + public static String getDurationString (long nanoSeconds) + { + char sign = nanoSeconds < 0 ? '-' : '+'; + nanoSeconds = nanoSeconds < 0 ? -nanoSeconds : nanoSeconds; + if (nanoSeconds < 1e4) { + return sign + getDurationString(nanoSeconds, 1, "[ns]"); + } + else if (nanoSeconds < 1e7) { + return sign + getDurationString(nanoSeconds, 1e3, "[us]"); + } + else if (nanoSeconds < 1e10) { + return sign + getDurationString(nanoSeconds, 1e6, "[ms]"); + } + else if (nanoSeconds < 1e13) { + return sign + getDurationString(nanoSeconds, 1e9, "[s] "); + } + else if (nanoSeconds < 60e13) { + return sign + getDurationString(nanoSeconds, 60e9, "[m] "); + } + else if (nanoSeconds < 3600e13) { + return sign + getDurationString(nanoSeconds, 3600e9, "[h] "); + } + else if (nanoSeconds < 86400e13) { + return sign + getDurationString(nanoSeconds, 86400e9, "[d] "); + } + else { + return sign + getDurationString(nanoSeconds, 31536000e9, "[y] "); + } + } + + /** + * Return a four character representation of the given duration in {@code nanoSeconds}, divided by + * the given {@code divisor} and suffixed with the given {@code unit}. + * + * @param nanoSeconds The duration to express; must be non-negative. + * @see #getDurationString(long) + */ + private static String getDurationString (long nanoSeconds, double divisor, String unit) + { + // Format as a 4 character floating point + String scaledStr = String.format("%-4f", nanoSeconds / divisor).substring(0, 4); + // Replace a trailing decimal with a space + return (scaledStr.endsWith(".") ? scaledStr.replace(".", " ") : scaledStr) + unit; + } + + /** + * Parse an Integer from the given {@code string}, returning null if parsing failed for any + * reason. + */ + public static Integer parseInteger (String string) + { + // Quick break-out if string is null + if (string == null) { + return null; + } + // Attempt to parse an integer + try { + return Integer.parseInt(string); + } + catch(NumberFormatException nfe) { + Exceptions.ignore(nfe, "deliberate test"); + return null; + } + } + + /** + * Append to a given {@link StringBuilder} a sequence of Objects via their + * {@link Object#toString()} method, and return the StringBuilder. + */ + public static StringBuilder appendLine (StringBuilder strBldr, Object ... args) + { + for(Object arg : args) { + strBldr.append(arg); + } + return strBldr.append("\n"); + } + + /** + * Compose a new String with every line prepended with a given prefix. + *

    + * The final portion of the {@code text} that is not terminated with a newline character will be + * prefixed if and only if it is non-empty. + *

    + * + * @param prefix The string that shall be prefixed to every line in {@code text}. + * @param text The string to split into lines and prefix. + */ + public static String prefixLines (String prefix, String text) + { + return text.replaceAll("(?m)^", prefix); + } + + /** + * Count the number of times a character occurs in a string. + * + * @param str The string to search in. + * @param ch The character to look for. + */ + public static int count (String str, char ch) + { + int r = 0; + for (int i = 0; i < str.length(); i++) { + if (str.charAt(i) == ch) { + r++; + } + } + return r; + } + + /** + * Add line numbers to the start of each line of the given {@code plainText}. + * + * @param plainText - some plain text, with lines distinguished by one of the standard + * line-endings. + * @return the {@code plainText}, with 1-indexed line numbers inserted at the start of each + * line. The line numbers will be of a fixed width comprising the length of the largest + * line number. + */ + public static String addLineNumbers(String plainText) { + /* + * Add line numbers to the plain text code sample. + */ + String[] lines = StringUtil.lines(plainText, false); + // The maximum number of characters needed to represent the line number + int lineColumnWidth = Integer.toString(lines.length).length(); + + StringBuilder sampleWithLineNumbers = new StringBuilder(); + for (int i = 0; i < lines.length; i++) { + boolean last = i == lines.length -1; + sampleWithLineNumbers.append(String.format("%" + lineColumnWidth + "s %s" + (last ? "" : "\n"), i + 1, lines[i])); + } + return sampleWithLineNumbers.toString(); + } + + // Pattern that matches a string of (at least one) decimal digits + private static final Pattern DIGITS_PATTERN = Pattern.compile("[0-9]+"); + + /** Return true iff the given string consists only of digits */ + public static boolean isDigits(String s) { + return DIGITS_PATTERN.matcher(s).matches(); + } + + /** + * Determine whether a given {@code char} is an ASCII letter. + */ + public static boolean isAsciiLetter (char c) + { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); + } + + /** + * A {@link String} comparison function to hopefully help mitigate against timing attacks. + * Aims to be constant time in the length of the first argument however due to the nature + * of Java this is very hard to achieve reliably. Callers should not rely on this method + * being perfectly constant time and other defenses should be introduced as necessary + * to prevent timing attacks based on how critical it is to avoid them. + *

    + * Each argument may safely be null. + *

    + * Note there is a unit tests that asserts the timing properties of this method which is + * committed but not run by default. If any changes are made to the implementation then + * {@code StringUtilTests#secureIsEqualTiming} must be run manually. + */ + public static boolean secureIsEqual(String a, String b) { + if (a == null) { + // Since we are aiming for constant time in the length of the + // first argument only, it is ok to bail out quickly if a is null. + return b == null; + } + + byte[] aBytes = stringToBytes(a); + + boolean definitelyDifferent = b == null || b.length() != a.length(); + byte[] bBytes = stringToBytes(definitelyDifferent ? a : b); + byte[] randomBBytes = new byte[a.length()]; + RANDOM.nextBytes(randomBBytes); + if (definitelyDifferent) { + bBytes = randomBBytes; + } + + int result = 0; + for (int i = 0; i < aBytes.length; i++) { + result |= aBytes[i] ^ bBytes[i]; + } + return result == 0 && !definitelyDifferent; + } + + public static String lineSeparator(){ + return System.getProperty("line.separator"); + } + + public static String naturalGlue(String separator, String finalSeparator, Collection values) { + StringBuilder stringBuilder = new StringBuilder(); + Iterator iterator = values.iterator(); + boolean first = true; + if(iterator.hasNext()) { + boolean hasNext = true; + T current = iterator.next(); + while(hasNext) { + hasNext = iterator.hasNext(); + T next = iterator.hasNext() ? iterator.next() : null; + if(first) { + first = false; + } + else if(!hasNext) { + stringBuilder.append(finalSeparator); + } + else { + stringBuilder.append(separator); + } + stringBuilder.append(current != null ? current : ""); + current = next; + } + } + return stringBuilder.toString(); + } + + /** + * Convert a CamelCase (or camelCase) string to spinal-case. Adjacent sequences of upper-case + * characters are treated as a single word, so that "getXML" would be converted to "get-xml". + * Where a lower-case character follows an upper-case character after a sequence of at + * least on upper-case character, the last upper-case character in the sequence is assumed to + * be the first letter of a new word, rather than the last letter of an acronym. Thus, + * "getXMLFile" becomes "get-xml-file" rather than "get-xmlfile" or "get-xmlf-ile". + * + * @return The spinal-cased equivalent of {@code camelCaseStr}, or null if it is null. + */ + public static String camelToSpinal(String camelCaseStr) { + // Quick break-out if the string is null + if (camelCaseStr == null) + return null; + // Convert to spinal-case + String lcStr = camelCaseStr.toLowerCase(Locale.ENGLISH); + StringBuilder strBldr = new StringBuilder(); + for(int i=0; i 0) { + // Next character is upper-case, and not at the start of the string, + // so insert a preceding dash + strBldr.append("-"); + } + // Consume (append in l.c.) all contiguously following u.c. characters, except that + // if a sequence of two or more u.c. characters occurs followed by a l.c. character + // assume that the last u.c. character is the first in a new word and insert a - + // preceding the new word. + // + // Thus getXML becomes get-xml, but getXMLFile becomes get-xml-file rather than + // get-xmlfile. + int numUc = 0; + while(i 0 + && i+1 < camelCaseStr.length() + && camelCaseStr.charAt(i+1) == lcStr.charAt(i+1) + && isAsciiLetter(lcStr.charAt(i+1))) { + strBldr.append("-").append(lcStr.charAt(i++)); + break; + } + strBldr.append(lcStr.charAt(i++)); + ++numUc; + } + } + // Consume (append) all contiguously following l.c. characters + while(i + * + * @param ql The QL code string + * @param terminateStringsAtLineEnd If true, then strings are treated as ending at EOL; + * if false, unterminated strings result in an IllegalArgumentException. + * + * NB QL does not support multiline strings. + */ + public static String stripQlCommentsAndStrings(String ql, boolean terminateStringsAtLineEnd) { + StringBuilder returnBuilder = new StringBuilder(); + // in a quoted string you must ignore both comment starters + // in a multi-line comment you must ignore the other two (single line comment and string) starters + // in a single line comment you can just eat up to the end of the line + boolean inString = false; + boolean inMultiLineComment = false; + boolean inSingleLineComment = false; + for (int i = 0; i < ql.length(); i++) { + // String + if (!inMultiLineComment && !inSingleLineComment && matchesAt(ql, i, "\"") && !isEscaped(ql, i)) { + inString = !inString; + continue; + } else if (matchesEolAt(ql, i)) { + if (terminateStringsAtLineEnd) { + inString = false; // force strings to end at EOL - multi-line strings are invalid + } else if (inString) { + throw new IllegalArgumentException("Unterminated string found."); + } + } + + // Single-line comment + if (!inString && !inMultiLineComment && matchesAt(ql, i, "//")) { + inSingleLineComment = true; + continue; + } else if (inSingleLineComment && matchesEolAt(ql, i)) { + inSingleLineComment = false; + } + + // Multi-line comment + if (!inString && !inSingleLineComment && matchesAt(ql, i, "/*")) { + inMultiLineComment = true; + } else if (inMultiLineComment && matchesAt(ql, i, "*/")) { + inMultiLineComment = false; + i++; // skip the next character (the '/') as well as this one + + continue; + } + + if (inString || inMultiLineComment || inSingleLineComment) { + continue; + } + + returnBuilder.append(ql.charAt(i)); + } + + if (inString && !terminateStringsAtLineEnd) { + throw new IllegalArgumentException("Unterminated string found."); + } + + return returnBuilder.toString(); + } + + /** + * Calls (@link #stripQlCommentsAndStrings(String, boolean), + * passing {@code false} for the {@code terminateStringsAtLineEnd} parameter. + */ + public static String stripQlCommentsAndStrings(String ql) { + return stripQlCommentsAndStrings(ql, false); + } + + private static boolean matchesAt(String sourceString, int currentCharIndex, String subString) { + if (currentCharIndex + subString.length() > sourceString.length()) { + return false; + } + + return sourceString.substring(currentCharIndex, currentCharIndex + subString.length()).equals(subString); + } + + private static boolean matchesEolAt(String sourceString, int currentCharIndex ) { + return matchesOneOfAt(sourceString, currentCharIndex, "\n", "\r"); + } + + private static boolean matchesOneOfAt(String sourceString, int currentCharIndex, String... subStrings) { + for (String subString: subStrings) { + if (matchesAt(sourceString, currentCharIndex, subString)) { + return true; + } + } + return false; + } + + private static boolean isEscaped(String theString, int currentCharIndex) { + if (currentCharIndex == 0) { + return false; + } + return previousCharacter(theString, currentCharIndex) == '\\' && !isEscaped(theString, currentCharIndex-1); + } + + private static char previousCharacter(String theString, int currentCharIndex) { + if (currentCharIndex == 0) { + return Character.MIN_VALUE; + } + return theString.charAt(currentCharIndex - 1); + } + + /** + * Compare two arrays of strings. The two arrays are considered equal if they + * are either both null or contain equal elements in the same order (ignoring + * case). + * + * @param a + * the first array + * @param a2 + * the second array + * @return true iff the elements in the arrays are equal when ignoring case + */ + public static boolean arrayEqualsIgnoreCase(String[] a, String[] a2) { + if (a == null) return a2 == null; + if (a2 == null) return false; + if (a.length != a2.length) return false; + for (int i = 0; i < a.length; i++) { + if ((a[i] == null && a2[i] != null) || !a[i].equalsIgnoreCase(a2[i])) return false; + } + return true; + } + + public static final Pattern NEWLINE_PATTERN = Pattern.compile("\n"); + + /** + * Convert a string into a doc comment with the content as the body. + */ + public static String toCommentString(String content) { + StringBuilder result = new StringBuilder(); + result.append("/**\n"); + String[] lines = StringUtil.lines(content); + for (String line: lines) { + result.append(" *" + line); + result.append("\n"); + } + result.append(" */"); + return result.toString(); + } + + /** + * Is {@code str} composed only of printable ASCII characters (excluding + * newline, carriage return and tab but including space)? + */ + public static boolean isPrintableAscii(String str) { + if (str == null) + return false; + for(int i=0; i= 32 && c < 127; + } + + /** + * Return true if {@code str} only contains characters which are either printable ASCII or ASCII whitespace + */ + public static boolean isAsciiText(String str) { + for(int i=0; i 159) { + return false; + } + + // Most of ASCII is okay + if (c >= 32 && c < 127) { + return false; + } + + // Basic whitespace is okay + if (c == '\t' || + c == '\n' || + c == '\r') { + return false; + } + + // If we've got this far, it must be a control character + return true; + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/data/Tuple1.java b/java/kotlin-extractor/src/main/java/com/semmle/util/data/Tuple1.java new file mode 100644 index 00000000000..171c90d2f48 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/data/Tuple1.java @@ -0,0 +1,106 @@ +package com.semmle.util.data; + +import java.io.Serializable; + + +/** + * Tuple of one typed element. + *

    + * Note that this is a sub-class of {@link TupleN} and a super-class of {@link Tuple2}, + * {@link Tuple3}, and any subsequent extensions in a similar vein. + *

    + */ +public class Tuple1 extends TupleN +{ + /** + * Serializable variant of {@link Tuple1}. + */ + public static class SerializableTuple1 + extends Tuple1 implements Serializable { + + private static final long serialVersionUID = -7989122667707773448L; + + public SerializableTuple1() { + } + + public SerializableTuple1(T0 t0) { + super(t0); + } + } + + private static final long serialVersionUID = -4317563803154647477L; + + /** The single contained value. */ + protected Type0 _value0; + + + /** Construct a new {@link Tuple1} with a null value. */ + public Tuple1 () {} + + /** Construct a new {@link Tuple1} with the given value. */ + public Tuple1 (Type0 value0) + { + _value0 = value0; + } + + /** Construct a new {@link Tuple1} with the given value. */ + public static Tuple1 make(Type0 value0) + { + return new Tuple1(value0); + } + + /** + * Get the value contained by this {@link Tuple1}. + */ + public final Type0 value0 () + { + return _value0; + } + + @Override + protected Object value_ (int n) + { + return _value0; + } + + /** + * Return the number of elements in this {@link Tuple1}. + *

    + * Sub-classes shall override this method to increase its value accordingly. + *

    + */ + @Override + public int size () + { + return 1; + } + + /** + * Return a plain string representation of the contained value (where null is represented by the + * empty string). + *

    + * Sub-classes shall implement a comma-separated concatenation. + *

    + */ + @Override + public String toPlainString () + { + return _value0 == null ? "" : _value0.toString(); + } + + @Override + public int hashCode () + { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((_value0 == null) ? 0 : _value0.hashCode()); + return result; + } + + @Override + public boolean equals (Object obj) + { + return obj == this || (super.equals(obj) && equal(((Tuple1)obj)._value0, _value0)); + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/data/Tuple2.java b/java/kotlin-extractor/src/main/java/com/semmle/util/data/Tuple2.java new file mode 100644 index 00000000000..2b3ce9a469e --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/data/Tuple2.java @@ -0,0 +1,93 @@ +package com.semmle.util.data; + +import java.io.Serializable; + + +/** + * Tuple of two typed elements. + *

    + * Note that this is an extension of {@link Tuple1} and a super-class of {@link Tuple3} (and any + * subsequent additions). + *

    + */ +public class Tuple2 extends Tuple1 +{ + /** + * Serializable variant of {@link Tuple2}. + */ + public static class SerializableTuple2 + extends Tuple2 implements Serializable { + + private static final long serialVersionUID = 1624467154864321244L; + + public SerializableTuple2() { + } + + public SerializableTuple2(T0 t0, T1 t1) { + super(t0, t1); + } + } + + private static final long serialVersionUID = -400406676673562583L; + + /** The additional element contained by this {@link Tuple2}. */ + protected Type1 _value1; + + /** Construct a new {@link Tuple2} with null values. */ + public Tuple2 () {} + + /** Construct a new {@link Tuple2} with the given values. */ + public Tuple2 (Type0 value0, Type1 value1) + { + super(value0); + _value1 = value1; + } + + /** Construct a new {@link Tuple2} with the given value. */ + public static Tuple2 make(Type1 value0, Type2 value1) + { + return new Tuple2(value0, value1); + } + + /** + * Get the second value in this {@link Tuple2}. + */ + public final Type1 value1 () + { + return _value1; + } + + @Override + protected Object value_ (int n) + { + return n == 2 ? _value1 : super.value_(n); + } + + @Override + public int size () + { + return 2; + } + + @Override + public String toPlainString () + { + return super.toPlainString() + ", " + (_value1 == null ? "" : _value1.toString()); + } + + @Override + public int hashCode () + { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((_value1 == null) ? 0 : _value1.hashCode()); + return result; + } + + @Override + public boolean equals (Object obj) + { + return obj == this || (super.equals(obj) && equal(((Tuple2)obj)._value1, _value1)); + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/data/TupleN.java b/java/kotlin-extractor/src/main/java/com/semmle/util/data/TupleN.java new file mode 100644 index 00000000000..a6b058316f7 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/data/TupleN.java @@ -0,0 +1,85 @@ +package com.semmle.util.data; + +import java.io.Serializable; + +/** + * Untyped base-class for the generic {@link Tuple1}, {@link Tuple2}, ... etc. + *

    + * This class also functions as a zero-element tuple. + *

    + */ +public class TupleN implements Serializable +{ + private static final long serialVersionUID = -1799116497122427806L; + + /** + * Get the n'th value contained by this {@link TupleN}. + * + * @param n The zero-based index of the value to be returned. + * @return The n'th value, or null if n is out of range. + */ + public final Object value (int n) + { + return n < 0 || n > size() ? null : value_(n); + } + + /** Internal method for obtaining the n'th value (n is guaranteed to be in-range). */ + protected Object value_ (int n) + { + return null; + } + + /** + * Get the number of values contained by this {@link TupleN}. + */ + public int size () + { + return 0; + } + + /** + * Return a plain string representation of the contained value (where null is represented by the + * empty string). + *

    + * Sub-classes shall implement a comma-separated concatenation. + *

    + */ + public String toPlainString () + { + return ""; + } + + /** + * Get a parenthesized, comma-separated string representing the values contained by this + * {@link TupleN}. Null values are represented by an empty string. + */ + @Override + public final String toString () + { + return "(" + toPlainString() + ")"; + } + + @Override + public int hashCode () + { + return 0; + } + + @Override + public boolean equals (Object obj) + { + return obj == this || (obj !=null && obj.getClass().equals(getClass())); + } + + /** + * Convenience method implementing objects.equals(object, object), which is not available due to a + * java version restriction. + */ + protected static boolean equal(Object obj1, Object obj2) + { + if (obj1 == null) { + return obj2 == null; + } + return obj1.equals(obj2); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/exception/CatastrophicError.java b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/CatastrophicError.java new file mode 100644 index 00000000000..e3135ec280d --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/CatastrophicError.java @@ -0,0 +1,117 @@ +package com.semmle.util.exception; + +import java.util.Arrays; + +/** + * This is a standard Semmle unchecked exception. + * Usage of this should follow the guidelines described in docs/semmle-unchecked-exceptions.md + */ +public class CatastrophicError extends NestedError { + + private static final long serialVersionUID = 4132771414092814913L; + + public CatastrophicError(String message) { + super(message); + } + + public CatastrophicError(Throwable throwable) { + super(throwable); + } + + public CatastrophicError(String message, Throwable throwable) { + super(message,throwable); + } + + /** + * Utility method for throwing a {@link CatastrophicError} with the given {@code message} if the given + * {@code condition} is true. + */ + public static void throwIf(boolean condition, String message) + { + if (condition) { + throw new CatastrophicError(message); + } + } + + /** + * Utility method for throwing a {@link CatastrophicError} if the given {@code object} is null. + *

    + * See {@link #throwIfAnyNull(Object...)} which may be more convenient for checking multiple + * arguments. + *

    + */ + public static void throwIfNull(Object object) + { + if (object == null) { + throw new CatastrophicError("null object"); + } + } + + /** + * Utility method for throwing a {@link CatastrophicError} with the given {@code message} if the given + * {@code object} is null. + *

    + * See {@link #throwIfAnyNull(Object...)} which may be more convenient for checking multiple + * arguments. + *

    + */ + public static void throwIfNull (Object object, String message) + { + if (object == null) { + throw new CatastrophicError(message); + } + } + + /** + * Throw a {@link CatastrophicError} if any of the given {@code objects} is null. + *

    + * If a {@link CatastrophicError} is thrown, its message will indicate all null arguments by index. + *

    + *

    + * See {@link #throwIfNull(Object, String)} which may be a fraction more efficient if there's only + * one argument, and allows an 'optional' message parameter. + *

    + */ + public static void throwIfAnyNull (Object ... objects) + { + /* + * Check each argument for nullity, and start building a set of index strings iff at least one + * is non-null + */ + String[] nullArgs = null; + for (int argNum = 0; argNum < objects.length; ++argNum) { + if (objects[argNum] == null) { + nullArgs = nullArgs == null ? new String[1] : Arrays.copyOf(nullArgs, nullArgs.length+1); + nullArgs[nullArgs.length-1] = "" + argNum; + } + } + if (nullArgs != null) { + // Compose a message describing which arguments are null + StringBuffer strBuf = new StringBuffer(); + if (nullArgs.length == 0) { + strBuf.append("null argument(s)"); + } else { + strBuf.append("null argument" + (nullArgs.length > 1 ? "s: " : ": ") + nullArgs[0]); + for (int i = 1; i < nullArgs.length; ++i) { + strBuf.append(", " + nullArgs[i]); + } + } + String message = strBuf.toString(); + throw new CatastrophicError(message); + } + } + + /** + * Convenience method for use in constructors that assign a parameter to a + * field, assuming the former to be non-null. + * + * @param t A non-null value of type {@code T}. + * @return {@code t} + * @throws CatastrophicError if {@code t} is null. + * @see #throwIfNull(Object) + */ + public static T nonNull(T t) { + throwIfNull(t); + return t; + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/exception/Exceptions.java b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/Exceptions.java new file mode 100644 index 00000000000..16a051537df --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/Exceptions.java @@ -0,0 +1,120 @@ +package com.semmle.util.exception; + +import java.io.PrintWriter; +import java.io.StringWriter; + +/** + * Simple functions for printing exceptions. This is intended for use + * in debug output, not for formatting for user consumption + */ +public class Exceptions { + + /** + * Compose a String with the same format as that output by {@link Throwable#printStackTrace()}. + */ + public static String printStackTrace(Throwable t) + { + StringWriter stringWriter = new StringWriter(); + t.printStackTrace(new PrintWriter(stringWriter)); + return stringWriter.toString(); + } + + /** + * Print an exception in a readable format with all information, + * including the type, message, stack trace, and nested exceptions + */ + public static String print(Throwable t) { + return printDetailed(t, true); + } + + /** + * Print an exception in a somewhat readable format fitting on one line. + * Most of the time simply using print is preferable + */ + public static String printShort(Throwable t) { + return printDetailed(t, false); + } + + /** + * Ignore an exception. This method does nothing, but should be called + * (with a reasonable message) to document the reason why the exception does + * not need to be used. + */ + public static void ignore(Throwable e, String message) { + + } + + /** + * Print an exception in a long format, possibly producing multiple + * lines if the appropriate flag is passed + * @param multiline if true, produce multiple lines of output + */ + private static String printDetailed(Throwable t, boolean multiline) { + StringBuilder sb = new StringBuilder(); + + Throwable current = t; + while (current != null) { + printOneException(current, multiline, sb); + Throwable cause = current.getCause(); + if (cause == current) + current = null; + else + current = cause; + + if (current != null) { + if (multiline) + sb.append("\n\n ... caused by:\n\n"); + else + sb.append(", caused by: "); + } + } + + return sb.toString(); + } + + private static void printOneException(Throwable t, boolean multiline, StringBuilder sb) { + sb.append(multiline ? t.toString() : t.toString().replace('\n', ' ').replace('\r', ' ')); + boolean first = true; + for (StackTraceElement e : t.getStackTrace()) { + if (first) + sb.append(multiline ? "\n" : " - ["); + else + sb.append(multiline ? "\n" : ", "); + first = false; + sb.append(e.toString()); + } + if (!multiline) + sb.append("]"); + } + + /** A stand-in replacement for `assert` that throws a {@link CatastrophicError} and isn't compiled out. */ + public static void assertion(boolean cond, String message) { + if(!cond) + throw new CatastrophicError(message); + } + + /** + * Turn the given {@link Throwable} into a {@link RuntimeException} by wrapping it if necessary. + */ + public static RuntimeException asUnchecked(Throwable t) { + if (t instanceof RuntimeException) + return (RuntimeException)t; + else + return new RuntimeException(t); + } + + /** + * Throws an arbitrary {@link Throwable}, wrapping in a runtime exception if necessary. + * Unlike {@link #asUnchecked} it preserves subclasses of {@link Error}. + */ + public static T rethrowUnchecked(Throwable t) { + if (t instanceof RuntimeException) { + throw (RuntimeException) t; + } else if (t instanceof Error) { + throw (Error) t; + } + throw new RuntimeException(t); + } + + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/exception/InterruptedError.java b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/InterruptedError.java new file mode 100644 index 00000000000..0b4a21e9636 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/InterruptedError.java @@ -0,0 +1,26 @@ +package com.semmle.util.exception; + +/** + * An exception thrown in cases where it is impossible to + * throw the (checked) Java {@link InterruptedException}, + * eg. in visitors + */ +public class InterruptedError extends RuntimeException { + + private static final long serialVersionUID = 9163340147606765395L; + + public InterruptedError() { } + + public InterruptedError(String message, Throwable cause) { + super(message, cause); + } + + public InterruptedError(String message) { + super(message); + } + + public InterruptedError(Throwable cause) { + super(cause); + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/exception/NestedError.java b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/NestedError.java new file mode 100644 index 00000000000..b35496a3f12 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/NestedError.java @@ -0,0 +1,47 @@ +package com.semmle.util.exception; + +public abstract class NestedError extends RuntimeException { + + private static final long serialVersionUID = -3145876396931008989L; + + public NestedError(String message) { + super(message); + } + + public NestedError(Throwable throwable) { + super(throwable); + } + + public NestedError(String message, Throwable throwable) { + super(buildMessage(message, throwable), throwable); + } + + /** + * Subclasses should not need to call this directly -- just call the + * two-argument super constructor. + */ + private static String buildMessage(String message, Throwable throwable) { + if (throwable == null) + return message; + + while (throwable.getCause() != null && throwable.getCause() != throwable) + throwable = throwable.getCause(); + String banner = "eventual cause: " + throwable.getClass().getSimpleName(); + String rootmsg = throwable.getMessage(); + if (rootmsg == null) { + // Don't amend the banner + } else { + int p = rootmsg.indexOf('\n'); + if (p >= 0) + rootmsg = rootmsg.substring(0, p) + "..."; + if (rootmsg.length() > 100) + rootmsg = rootmsg.substring(0, 80) + "..."; + banner += " \"" + rootmsg + "\""; + } + if (message.contains(banner)) + return message; + else + return message + "\n(" + banner + ")"; + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/exception/ResourceError.java b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/ResourceError.java new file mode 100644 index 00000000000..eed3239b7ac --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/ResourceError.java @@ -0,0 +1,30 @@ +package com.semmle.util.exception; + +/** + * This is a standard Semmle unchecked exception. + * Usage of this should follow the guidelines described in docs/semmle-unchecked-exceptions.md + */ +public class ResourceError extends NestedError { + + private static final long serialVersionUID = 4132771414092814913L; + + public ResourceError(String message) { + super(message); + } + + @Deprecated // A ResourceError may be presented to the user, so should always have a message + public ResourceError(Throwable throwable) { + super(throwable); + } + + public ResourceError(String message, Throwable throwable) { + super(message,throwable); + } + + @Override + public String toString() { + // The message here should always be meaningful enough that we can return that. + return getMessage() != null ? getMessage() : super.toString(); + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/exception/UserError.java b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/UserError.java new file mode 100644 index 00000000000..8a5953c5214 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/exception/UserError.java @@ -0,0 +1,46 @@ +package com.semmle.util.exception; + +/** + * This is a standard Semmle unchecked exception. + * Usage of this should follow the guidelines described in docs/semmle-unchecked-exceptions.md + */ +public class UserError extends NestedError { + + private static final long serialVersionUID = 4132771414092814913L; + + private final boolean reportAsInfoMessage; + + public UserError(String message) { + this(message, false); + } + + /** + * A user-visible error + * + * @param message The message to display + * @param reportAsInfoMessage If true, report as information only - not an error + */ + public UserError(String message, boolean reportAsInfoMessage) { + super(message); + this.reportAsInfoMessage = reportAsInfoMessage; + } + + public UserError(String message, Throwable throwable) { + super(message,throwable); + this.reportAsInfoMessage = false; + } + + /** + * If true, report the message without interpreting it as a fatal error + */ + public boolean reportAsInfoMessage() { + return reportAsInfoMessage; + } + + @Override + public String toString() { + // The message here should always be meaningful enough that we can return that. + return getMessage() != null ? getMessage() : super.toString(); + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/expansion/ExpansionEnvironment.java b/java/kotlin-extractor/src/main/java/com/semmle/util/expansion/ExpansionEnvironment.java new file mode 100644 index 00000000000..a8008ca6299 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/expansion/ExpansionEnvironment.java @@ -0,0 +1,893 @@ +package com.semmle.util.expansion; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.security.GeneralSecurityException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.semmle.util.data.StringUtil; +import com.semmle.util.exception.CatastrophicError; +import com.semmle.util.exception.ResourceError; +import com.semmle.util.exception.UserError; +import com.semmle.util.files.FileUtil; +import com.semmle.util.process.Builder; +import com.semmle.util.process.Env; +import com.semmle.util.process.Env.Var; +import com.semmle.util.process.LeakPrevention; + +/** + * An environment for performing variable expansions. + * + *

    + * The environment is defined by a set of variable definitions, which are + * name/value pairs of strings. Once this has been populated (via the + * {@link #defineVar(String, String)} and {@link #defineVars(Map)} methods), + * arbitrary strings can be expanded. + *

    + * + *

    + * Two modes of expansion are supported: + *

    + *
      + *
    • String mode ({@link #strExpand(String)}): The result is intended to be a + * single string.
    • + *
    • List mode ({@link #listExpand(String)}): The result will be interpreted + * as a command line, and hence is a list of strings. + *
    + * + *

    + * Variables are referenced by ${name} to trigger a string-mode + * expansion, and by ${=name} to trigger a list-mode expansion. + * This makes {@code $} a meta-character, and so it has to be escaped; the + * escape sequence for it is ${}. + *

    + * + *

    + * In list mode, strings are split in a platform-independent way similar (but + * not identical) to normal shell argument splitting. Runs of white-space + * separate arguments, and double-quotes can be used to protect whitespace from + * splitting. The escape character is backslash. All of these metacharacters + * have no special meaning in string mode. + *

    + * + *

    + * The {@code define*} and {@link #doNotExpand(String...)} methods of this + * class are not thread-safe; they mutate instance state in an unsynchronized + * way. By contrast, the expansion methods ({@link #strExpand(String)}, + * {@link #strExpandVar(String)}, {@link #listExpand(String)}, + * {@link #listExpandVar(String)} and {@link #varLookup(String)}) + * are thread safe relative to each + * other. This means that it's fine to construct an expansion environment once, + * and then use it from multiple threads concurrently, as long as no new variables + * are defined. In addition, {@link #validate(String)} is safe to call once an + * {@link ExpansionEnvironment} is fully initialised, even concurrently. + *

    + * + *

    + * Upon encountering any error (malformed variable expansion, malformed quoted + * string (in list mode), reference to unknown variable, cyclic variable + * definitions), the {@link #strExpand(String)} and {@link #listExpand(String)} + * methods will throw {@link UserError} with a suitable message. + *

    + * + *

    + * As an advanced feature, command substitutions can be supported. They take the + * form of $(cmd arg1 arg2) for string-mode expansion, and + * $(=cmd arg1 + * arg2) for list-mode. The contents of the $(..) operator + * undergo normal splitting, and are then run as a new process with the given + * list of arguments. The working directory is unspecified, and it is an error + * to depend upon it. A non-zero exit code, or a non-empty {@code stderr} stream + * of the command, will result in a {@link UserError} indicating that something + * went wrong; otherwise, the {@code stdout} output is collected and substituted + * (possibly undergoing splitting, in the second form). + *

    + */ +public class ExpansionEnvironment { + + /** + * A source for variable definitions to be used in an expansion environment. + */ + public static interface VariableSource { + /** + * A callback which is expected to add all variables in the source to + * the given environment. + * + * @param env + * The environment that should be filled in. + */ + public void fillIn(ExpansionEnvironment env); + } + + private final Map vars = new LinkedHashMap(); + + private final Set unexpandedVars = new LinkedHashSet(); + + private final boolean commandSubstitutions; + + /** + * Construct an empty {@link ExpansionEnvironment}. + */ + public ExpansionEnvironment(boolean commandSubstitutions) { + this.commandSubstitutions = commandSubstitutions; + } + + /** + * This the old default constructor, which always enables command substutitions. + * Doing so is a security risk whenever the string you expand may come + * from an untrusted source, so you should only do that when you explicitly want + * to do it and have decided that it is safe. (And then use the constructor that + * has an explicit argument to say so!) + */ + @Deprecated + public ExpansionEnvironment() { + this(true); + } + + /** + * Construct an environment based on an existing map. + */ + public ExpansionEnvironment(boolean commandSubstitutions, Map vars) { + this(commandSubstitutions); + this.vars.putAll(vars); + } + + /** + * Construct a copy of an existing {@link ExpansionEnvironment}. + */ + public ExpansionEnvironment(ExpansionEnvironment other) { + this(other.commandSubstitutions); + this.vars.putAll(other.vars); + this.unexpandedVars.addAll(other.unexpandedVars); + } + + /** + * Add a set of variable definitions to this environment. + * + * @param vars + * A mapping from variable names to variable values. Recursive + * variable references are allowed, but cycles are an error. + */ + public void defineVars(Map vars) { + this.vars.putAll(vars); + } + + /** + * Add the specified variable definition to this environment. + * + * @param name + * A variable name. + * @param value + * The value that the variable should expand to. References to + * other variables or expansions are allowed, but cycles are an + * error. + */ + public void defineVar(String name, String value) { + this.vars.put(name, value); + } + + /** + * Try to load a file as a Java properties file and add all of its key/value + * pairs as variable definitions. + * + * @param vars + * A {@link File} that will be loaded as a Java properties file, + * if it exists. May be null or a file whose + * existence has not been checked. + * @throws ResourceError + * if the file exists but can't be read, or exists as a + * directory, or reading it fails. + */ + public void defineVarsFromFile(File vars) { + if (vars == null || !vars.exists()) + return; + + if (vars.isDirectory()) + throw new ResourceError(vars + + " is a directory, cannot load variables from it."); + + Properties properties = FileUtil.loadProperties(vars); + for (String key : properties.stringPropertyNames()) + defineVar(key, properties.getProperty(key)); + } + + /** + * Add a variable definition of {@code env.foo=bar} for each system + * environment variable {@code foo=bar}. Typically it is desirable to allow + * the environment to override previously specified variables, so this + * should be called once all other variables have been defined. + * + *

    + * The values of variables taken from the environment are escaped to prevent + * recursive expansion; in particular, this prevents accidental command + * execution if a command substitution is encountered in the environment. + *

    + */ + public void defineVarsFromEnvironment(Env environment) { + String extraVars = environment.get(Var.ODASA_EXTRA_VARIABLES); + if (extraVars != null) + defineVarsFromFile(new File(extraVars)); + + for (Entry var : environment.getenv().entrySet()) + defineVar("env." + var.getKey(), var.getValue().replace("$", "${}")); + + environment.addEnvironmentToNewEnv(this); + } + + /** + * Indicate that references to the given set of variable names should not be + * expanded. This means that they need not be defined, and the output will + * contain the literal variable expansion sequences. + * + * @param vars + * A list of variable names. + */ + public void doNotExpand(String... vars) { + for (String var : vars) + unexpandedVars.add(var); + } + + /** + * Supply a "default value" for a variable, meaning that the variable will + * be set to the given default value if it hasn't already been defined. No + * change is made to this environment if a definition exists. + * @param var A variable name. + * @param defaultValue The default value for the named variable. + */ + public void setDefault(String var, String defaultValue) { + if (!vars.containsKey(var)) + vars.put(var, defaultValue); + } + + /** + * Expand the given string in "string mode", resolving variable references + * and command substitutions. + */ + public String strExpand(String s) { + try { + return new Expander().new ExpansionParser(s).parseAsString().expandAsString(); + } catch (UserError e) { + throw new UserError("Failed to expand '" + s + "'.", e); + } + } + + /** + * Expand the given string in "list mode", resolving variable references and + * command substitutions. + */ + public List listExpand(String s) { + try { + return new Expander().new ExpansionParser(s).parseAsList().expandAsList(); + } catch (UserError e) { + throw new UserError("Failed to expand '" + s + + "' as an argument list.", e); + } + } + + /** + * Expand the given variable fully in "string mode", resolving variable + * references and command substitutions. The entire string is interpreted as + * the name of the initial variable. + */ + public String strExpandVar(String varName) { + return new Expander().new Variable(varName).expandAsString(); + } + + /** + * Expand the given variable fully in "list mode", resolving variable + * references and command substitutions. The entire string is interpreted as + * the name of the initial variable. + */ + public List listExpandVar(String varName) { + return new Expander().new SplitVariable(varName).expandAsList(); + } + + /** + * Validate the given string for expansion. This verifies the absence of + * parse errors, and the fact that all directly referenced variables are + * defined by this environment. + * + *

    + * Expansion using {@link #strExpand(String)} or {@link #listExpand(String)} + * may still not succeed, if there are semantic errors (like circular + * variable definitions) or a command substitution introduces a reference to + * an undefined variable. + *

    + * + * @param str + * A string that should be validated. + * @throws UserError + * if validation fails, with a suitable error message. + */ + public void validate(String str) { + new Expander().new ExpansionParser(str).parseAsList().validate(); + } + + /** + * Look up the (raw) value of a given variable, without performing expansion + * on it. + * + * @param name + * The variable name. + * @return The value that this variable is mapped to. + * @throws UserError + * if the variable is not defined. + */ + public synchronized String varLookup(String name) { + String value = vars.get(name); + if (value == null) { + ArrayList available = new ArrayList(vars.keySet()); + Collections.sort(available); + throw new UserError("Attempting to expand unknown variable: " + + name + ", available variables are: " + available); + } + return value; + } + + /** + * Check whether this environment defines a variable of the given name, without + * performing expansion on it -- such full expansion may still fail. + * + * @param name The variable name. + * @return true if this environment contains a direct definition + */ + public boolean definesVar(String name) { + return vars.containsKey(name); + } + + private static class ExpansionTokeniser { + /** + * The delimiters which should be returned as their own tokens. Order of + * alternatives matters! The recognised tokens are, in order: + * + *
      + *
    • {@code \\}
    • + *
    • {@code \"}
    • + *
    • {@code "}
    • + *
    • ${}
    • + *
    • ${=
    • + *
    • ${
    • + *
    • $(=
    • + *
    • $(
    • + *
    • $
    • + *
    • }
    • + *
    • )
    • + *
    • Runs of whitespace.
    • + *
    + * + *

    + * By defining the alternatives in this order, longer matches will be + * preferred, so that checking for escape sequences is easy. Note that + * in the regular expression source, a literal {@code \} must undergo + * two levels of escaping: Java strings and regular expression + * metacharacters; it thus becomes {@code \\\\}. + */ + private static final Pattern delims = Pattern + .compile("\\\\\\\\|\\\\\"|\"|\\$\\{\\}|\\$\\{=|\\$\\{|" + + "\\$\\(=|\\$\\(|\\$|\\}|\\)|\\s+"); + + private final List tokens = new ArrayList(); + private final int[] positions; + private int nextToken = 0; + + public ExpansionTokeniser(String str) { + Matcher matcher = delims.matcher(str); + StringBuffer tmp = new StringBuffer(); + while (matcher.find()) { + matcher.appendReplacement(tmp, ""); + if (tmp.length() > 0) { + tokens.add(tmp.toString()); + tmp = new StringBuffer(); + } + tokens.add(matcher.group()); + } + matcher.appendTail(tmp); + if (tmp.length() > 0) + tokens.add(tmp.toString()); + + positions = new int[tokens.size()]; + int pos = 0; + for (int i = 0; i < tokens.size(); i++) { + positions[i] = pos; + pos += tokens.get(i).length(); + } + } + + public boolean hasMoreTokens() { + return nextToken < tokens.size(); + } + + public String nextToken() { + return tokens.get(nextToken++); + } + + public boolean isDelimiter(String token) { + return delims.matcher(token).matches(); + } + + public int pos() { + return positions[nextToken - 1] + 1; + } + } + + /** + * A wrapper around the various expansion classes, holding some expansion + * state to detect things like circular variable definitions. + */ + private class Expander { + + private final Set expansionsInProgress = new LinkedHashSet(); + + /** + * A string expansion. This can be a literal string, a variable reference or + * a command substitution; the latter two can optionally be "split". Each + * expansion can be interpreted to yield a single string or a list of + * strings (typically as program arguments). + */ + abstract class Expansion { + public abstract String expandAsString(); + + public abstract List expandAsList(); + + public abstract void validate(); + } + + class Sentence extends Expansion { + private final List> words = new ArrayList>(); + + public Sentence(List> words) { + this.words.addAll(words); + } + + @Override + public void validate() { + for (List expansions : words) + for (Expansion expansion : expansions) + expansion.validate(); + } + + private String expandWord(List word) { + StringBuilder result = new StringBuilder(); + for (Expansion e : word) + result.append(e.expandAsString()); + return result.toString(); + } + + @Override + public String expandAsString() { + StringBuilder result = new StringBuilder(); + + for (List word : words) { + if (result.length() > 0) + result.append(' '); + result.append(expandWord(word)); + } + + return result.toString(); + } + + @Override + public List expandAsList() { + List result = new ArrayList(); + + for (List word : words) { + List> segments = new ArrayList>(); + for (Expansion e : word) { + segments.add(e.expandAsList()); + } + result.addAll(glue(segments)); + } + + return result; + } + + /** + * This is a non-quadratic implementation of the following Haskell code: + * + *

    +			 * 
    +			 * glue :: [[String]] -> [String]
    +			 * glue = foldr join []
    +			 *     where join [] xs = xs
    +			 *           join xs [] = xs
    +			 *           join xs ys = init xs ++ [last xs ++ head ys] ++ tail ys
    +			 * 
    +			 * 
    + */ + private List glue(List> segments) { + String trailingWord = null; + List result = new ArrayList(); + for (List segment : segments) + trailingWord = glue_join_accum(result, segment, trailingWord); + + if (trailingWord != null) + result.add(trailingWord); + + return result; + } + + private String glue_join_accum(List result, + List segment, String trailingWord) { + int n = segment.size(); + switch (n) { + case 0: + return trailingWord; + case 1: + return combine(trailingWord, segment.get(0)); + default: + result.add(combine(trailingWord, segment.get(0))); + result.addAll(segment.subList(1, n - 1)); + return segment.get(n - 1); + } + } + + private String combine(String a, String b) { + if (a == null) + return b; + return a + b; + } + } + + class Literal extends Expansion { + private final String value; + + public Literal(String value) { + this.value = value; + } + + @Override + public void validate() { + // Always valid. + } + + @Override + public String expandAsString() { + return value; + } + + @Override + public List expandAsList() { + return Collections.singletonList(value); + } + } + + class QuotedString extends Sentence { + public QuotedString(List content) { + super(Collections.singletonList(content)); + } + + @Override + public List expandAsList() { + return Collections.singletonList(this.expandAsString()); + } + } + + class Variable extends Expansion { + protected final String name; + + public Variable(String name) { + this.name = name; + } + + @Override + public void validate() { + varLookup(name); // Will throw if variable is undefined. + } + + protected void startExpanding(String name) { + if (!expansionsInProgress.add(name)) + throw new UserError("Circular expansion of variable " + name); + } + + protected void doneWith(String name) { + if (!expansionsInProgress.remove(name)) + throw new CatastrophicError("Not currently expanding " + name); + } + + protected String ref() { + return "${" + name + "}"; + } + + @Override + public final String expandAsString() { + if (unexpandedVars.contains(name)) + return ref(); + startExpanding(name); + String result = expandAsStringImpl(); + doneWith(name); + return result; + } + + public String expandAsStringImpl() { + // Not calling ExpansionEnvironment.strExpand(), since + // we must run in the same enclosing instance of Expander. + return new ExpansionParser(varLookup(name)).parseAsString().expandAsString(); + } + + @Override + public final List expandAsList() { + if (unexpandedVars.contains(name)) + return Collections.singletonList(ref()); + startExpanding(name); + List result = expandAsListImpl(); + doneWith(name); + return result; + } + + public List expandAsListImpl() { + return Collections.singletonList(expandAsStringImpl()); + } + } + + class SplitVariable extends Variable { + public SplitVariable(String name) { + super(name); + } + + @Override + protected String ref() { + return "${=" + name + "}"; + } + + @Override + public String expandAsStringImpl() { + return StringUtil.glue(" ", expandAsListImpl()); + } + + @Override + public List expandAsListImpl() { + return listExpand(varLookup(name)); + } + } + + class Command extends Expansion { + private final Sentence argv; + + public Command(List> args) { + this.argv = new Sentence(args); + } + + @Override + public void validate() { + argv.validate(); + } + + protected String run() { + List args = argv.expandAsList(); + ByteArrayOutputStream result = new ByteArrayOutputStream(); + ByteArrayOutputStream err = new ByteArrayOutputStream(); + Builder builder = new Builder(args, result, err); + builder.setLeakPrevention(LeakPrevention.ALL); + try { + int exitCode = builder.execute(); + if (exitCode != 0) + throw new UserError("Exit code " + exitCode + + " from command " + + builder.toString()); + if (err.size() > 0) + throw new UserError("Command \"" + + builder.toString() + + "\" produced output on stderr: " + err.toString()); + } catch (RuntimeException e) { + throw new UserError("Could not execute command " + + builder.toString(), e); + } + return result.toString(); + } + + @Override + public String expandAsString() { + return run(); + } + + @Override + public List expandAsList() { + return Collections.singletonList(expandAsString()); + } + } + + class SplitCommand extends Command { + public SplitCommand(List> argv) { + super(argv); + } + + @Override + public String expandAsString() { + return StringUtil.glue(" ", expandAsList()); + } + + @Override + public List expandAsList() { + return new ExpansionParser(run()).splitAsString().expandAsList(); + } + } + + private class ExpansionParser { + private final ExpansionTokeniser tokens; + + public ExpansionParser(String str) { + tokens = new ExpansionTokeniser(str); + } + + public Sentence parseAsString() { + List> words = new ArrayList>(); + words.add(parseTerminatedString(null)); + return new Sentence(words); + } + + public Sentence parseAsList() { + return new Sentence(parseTerminatedList(null, false)); + } + + public Sentence splitAsString() { + return new Sentence(parseTerminatedList(null, true)); + } + + private List parseTerminatedString(String terminator) { + List result = new ArrayList(); + + while (tokens.hasMoreTokens()) { + String next = tokens.nextToken(); + if (next.equals(terminator)) { + return result; + } else if (next.equals("\\\"")) { + result.add(new Literal("\"")); + } else if (next.equals("\\\\")) { + result.add(new Literal("\\")); + } else if (!tryParseExpansion(result, next)) { + result.add(new Literal(next)); + } + } + + if (terminator != null) + throw new UserError( + "Premature end of input while looking for matching '" + + terminator + "'."); + + return result; + } + + private List> parseTerminatedList(String terminator, + boolean noExpansions) { + List> result = new ArrayList>(); + + List accum = new ArrayList(); + boolean mustSeeSpace = false; + while (tokens.hasMoreTokens()) { + String next = tokens.nextToken(); + if (next.equals(terminator)) { + if (accum.size() > 0) + result.add(accum); + return result; + } else if (mustSeeSpace + && !Character.isWhitespace(next.charAt(0))) { + throw new UserError("The quoted string ending at " + + tokens.pos() + + " must be surrounded by whitespace."); + } else if (next.length() > 0 + && Character.isWhitespace(next.charAt(0))) { + mustSeeSpace = false; + if (accum.size() > 0) { + result.add(accum); + accum = new ArrayList(); + } + } else if (next.equals("\"")) { + if (!accum.isEmpty()) + throw new UserError( + "At position " + + tokens.pos() + + ", the quote should " + + "either be preceded by a space (if it is intended to start an argument) " + + "or escaped as \\\"."); + accum.add(new QuotedString(parseTerminatedString("\""))); + result.add(accum); + accum = new ArrayList(); + mustSeeSpace = true; + } else if (next.equals("\\\"")) { + // An escaped quote means a literal quote. + accum.add(new Literal("\"")); + } else if (next.equals("\\\\")) { + // An escaped backslash means a literal backslash. + accum.add(new Literal("\\")); + } else if (noExpansions || !tryParseExpansion(accum, next)) { + accum.add(new Literal(next)); + } + } + + if (terminator != null) + throw new UserError( + "Premature end of expansion while looking for '" + + terminator + "'."); + + if (accum.size() > 0) + result.add(accum); + + return result; + } + + private boolean tryParseExpansion(List result, + String curToken) { + if (curToken.equals("${}")) { + result.add(new Literal("$")); + } else if (curToken.equals("$(=") && commandSubstitutions) { + result.add(new SplitCommand(parseTerminatedList(")", false))); + } else if (curToken.equals("$(") && commandSubstitutions) { + result.add(new Command(parseTerminatedList(")", false))); + } else if (curToken.equals("${=")) { + result.add(new SplitVariable(parseVarName())); + } else if (curToken.equals("${")) { + result.add(new Variable(parseVarName())); + } else if (curToken.equals("$")) { + throw new UserError( + "Malformed expansion: A standalone '$' character should be escaped as '${}'."); + } else { + return false; + } + return true; + } + + protected String parseVarName() { + if (!tokens.hasMoreTokens()) + throw new UserError( + "Malformed variable substitution: stray '${' at " + tokens.pos()); + String name = tokens.nextToken(); + if (tokens.isDelimiter(name)) + throw new UserError( + "Malformed variable substitution: Unexpected '" + name + + "' at " + tokens.pos()); + if (!tokens.hasMoreTokens()) + throw new UserError( + "Malformed variable substitution for '" + name + + "': Missing '}' at " + tokens.pos()); + String next = tokens.nextToken(); + if (!next.equals("}")) + throw new UserError( + "Malformed variable substitution: Expecting '}' at " + + tokens.pos() + ", found '" + next + "'."); + return name; + } + } + } + + /** + * Resolve a path. Any variables in the path will be expanded. If + * the path is an absolute path after expansion, it is returned as is. + * Otherwise, it is combined with the given base path. + */ + public File expandPath(File base, String path) { + String expanded = strExpand(path); + if (FileUtil.isAbsolute(expanded)) { + return new File(expanded); + } else { + return FileUtil.fileRelativeTo(base, expanded); + } + } + + /** + * Escape a string so that any '$'s inside it will be interpreted literally, rather than + * as parts of variable references. + */ + public static String escape(String base) { + return base.replace("$", "${}"); + } + + /** + * Escape {@code argument} as an argument, so that any {@code $}, {@code \} or {@code "} is interpreted literally. + * + * @param argument - the String to escape. + * @return the escaped String. + */ + public static String escapeArgument(String argument) { + return escape(argument).replaceAll(Matcher.quoteReplacement("\\"), Matcher.quoteReplacement("\\\\")).replaceAll(Matcher.quoteReplacement("\""), Matcher.quoteReplacement("\\\"")); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/extraction/PopulationSpecFile.java b/java/kotlin-extractor/src/main/java/com/semmle/util/extraction/PopulationSpecFile.java new file mode 100644 index 00000000000..2f800cb6cea --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/extraction/PopulationSpecFile.java @@ -0,0 +1,100 @@ +package com.semmle.util.extraction; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import com.semmle.util.exception.ResourceError; +import com.semmle.util.files.FileUtil; +import com.semmle.util.process.Env; +import com.semmle.util.trap.pathtransformers.PathTransformer; + +/** + * A file listing patterns of source files and which ODASA project + * each should be populated to (if any). + */ +public class PopulationSpecFile { + + private final List specs = new ArrayList(); + + public PopulationSpecFile(File specFile) { + FileReader fileReader = null; + BufferedReader reader = null; + + try { + fileReader = new FileReader(specFile); + reader = new BufferedReader(fileReader); + + File dbPath = null; + File trapFolder = null; + File sourceArchivePath = null; + List patterns = new ArrayList(); + + String line; + while ((line = reader.readLine()) != null) { + line = line.trim(); + if (line.length() == 0 || line.startsWith("@")) + continue; + if (line.startsWith("#")) { + if (dbPath != null) + specs.add(new SpecFileEntry(trapFolder, sourceArchivePath, patterns)); + dbPath = null; + sourceArchivePath = null; + patterns = new ArrayList(); + } else if (line.startsWith("TRAP_FOLDER=")) { + trapFolder = new File(line.substring("TRAP_FOLDER=".length())); + } else if (line.startsWith("ODASA_DB=")) { + dbPath = new File(line.substring("ODASA_DB=".length())); + } else if (line.startsWith("SOURCE_ARCHIVE=")) { + sourceArchivePath = new File(line.substring("SOURCE_ARCHIVE=".length())); + } else if (line.startsWith("BUILD_ERROR_DIR=")) { + // Accept and ignore for backwards compatibility + } else if (line.startsWith("-")) { + File path = new File(line.substring(1).trim()); + patterns.add("-" + normalisePathAndCase(path) + "/"); + } else { + File path = new File(line); + patterns.add(normalisePathAndCase(path) + "/"); + } + } + + if (dbPath != null) + specs.add(new SpecFileEntry(trapFolder, sourceArchivePath, patterns)); + } catch (IOException e) { + throw new ResourceError("I/O error while reading specification file at " + specFile, e); + } finally { + FileUtil.close(reader); + FileUtil.close(fileReader); + } + } + + /** + * Get the entry for a file, or null if there is no matching entry + */ + public SpecFileEntry getEntryFor(File f) { + String path = normalisePathAndCase(f); + + for (SpecFileEntry entry : specs) + if (entry.matches(path)) + return entry; + + return null; + } + + /** + * Normalises the path like {@link PathTransformer#fileAsDatabaseString(File)}, and, in + * addition, converts it to all-lowercase if we're on a case-insensitive + * filesystem. + * @param file the file to normalise + * @return a normalised path that is lowercased if the file system is case-insensitive. + */ + private static String normalisePathAndCase(File file) { + String path = PathTransformer.std().fileAsDatabaseString(file); + if (!Env.getOS().isFileSystemCaseSensitive()) + path = path.toLowerCase(); + return path; + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/extraction/SpecFileEntry.java b/java/kotlin-extractor/src/main/java/com/semmle/util/extraction/SpecFileEntry.java new file mode 100644 index 00000000000..f5cedaebdf2 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/extraction/SpecFileEntry.java @@ -0,0 +1,48 @@ +package com.semmle.util.extraction; + +import java.io.File; +import java.util.List; + +import com.semmle.util.data.StringUtil; + +public class SpecFileEntry { + private final File trapFolder; + private final File sourceArchivePath; + private final List patterns; + + public SpecFileEntry(File trapFolder, File sourceArchivePath, List patterns) { + this.trapFolder = trapFolder; + this.sourceArchivePath = sourceArchivePath; + this.patterns = patterns; + } + + public boolean matches(String path) { + boolean matches = false; + for (String pattern : patterns) { + if (pattern.startsWith("-")) { + if (path.startsWith(pattern.substring(1))) + matches = false; + } else { + if (path.startsWith(pattern)) + matches = true; + } + } + return matches; + } + + public File getTrapFolder() { + return trapFolder; + } + + public File getSourceArchivePath() { + return sourceArchivePath; + } + + @Override + public String toString() { + return + "TRAP_FOLDER=" + trapFolder + "\n" + + "SOURCE_ARCHIVE=" + sourceArchivePath + "\n" + + StringUtil.glue("\n", patterns); + } +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/files/FileUtil.java b/java/kotlin-extractor/src/main/java/com/semmle/util/files/FileUtil.java new file mode 100644 index 00000000000..6c3e754310e --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/files/FileUtil.java @@ -0,0 +1,2111 @@ +package com.semmle.util.files; + + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.Closeable; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FilePermission; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.io.Writer; +import java.lang.reflect.UndeclaredThrowableException; +import java.net.Socket; +import java.nio.charset.Charset; +import java.nio.file.AtomicMoveNotSupportedException; +import java.nio.file.CopyOption; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.AccessControlException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; +import java.util.BitSet; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.Random; +import java.util.Set; +import java.util.Stack; +import java.util.regex.Pattern; + +import com.github.codeql.Logger; +import com.github.codeql.Severity; + +import com.semmle.util.basic.ObjectUtil; +import com.semmle.util.data.Pair; +import com.semmle.util.data.StringUtil; +import com.semmle.util.exception.CatastrophicError; +import com.semmle.util.exception.Exceptions; +import com.semmle.util.exception.ResourceError; +import com.semmle.util.files.PathMatcher.Mode; +import com.semmle.util.io.StreamUtil; +import com.semmle.util.io.csv.CSVReader; +import com.semmle.util.io.csv.CSVWriter; +import com.semmle.util.process.Env; +import com.semmle.util.process.Env.OS; + + +public class FileUtil +{ + public static Logger logger = null; + + /** + * Regular expression pattern for invalid filename characters + */ + private final static Pattern rpInvalidFilenameCharacters = Pattern.compile("[\\\\/:*?\"'<>|@]"); + + /** + * The UTF-8 Charset + */ + public static final Charset UTF8 = Charset.forName("UTF-8"); + + + /** + * List all children of a directory. This throws sensible errors if there is a problem listing the + * directory, unlike Java's listFiles method (which just returns null). + * Equivalent to list(f, null). + * + * @param f the directory in which to list children + * @return the children of f (empty if f is an empty directory) + * @throws ResourceError with an appropriate message if f does not exist, is not a + * directory, cannot be read, or some other error occurred. + */ + public static File[] list (File f) + { + return list(f, null); + } + + /** + * List all children of a directory, with an optional filter. This throws sensible errors if there + * is a problem listing the directory, unlike Java's listFiles method (which just + * returns null). It also sorts the files by their file name, so that the result is + * stable. + * + * @param f the directory in which to list children + * @param filter the filter to use for selecting which files to return, or null + * @return the children of f (empty if f is an empty directory) + * @throws ResourceError with an appropriate message if f does not exist, is not a + * directory, cannot be read, or some other error occurred. + */ + public static File[] list (File f, FileFilter filter) + { + File[] files = filter == null ? f.listFiles() : f.listFiles(filter); + if (files == null) { + boolean exists = f.exists(); + boolean isDirectory = f.isDirectory(); + boolean canRead = f.canRead(); + throw new ResourceError("Could not list the contents of directory " + + f + + " - " + + (!exists + ? "file does not exist." + : !isDirectory + ? "file is not a directory." + : !canRead + ? "cannot read - permission denied." + : "unknown I/O error.")); + } + Arrays.sort(files); + return files; + } + + /** + * Traverse a directory and collect all files selected by the given filter, returning them as a + * set. The filter should not be null; files will be added using a pre-order depth-first + * traversal. + * + * @deprecated Use FileUtil8.CollectingFileVisitor instead. + * @param dir the directory to traverse + * @param filter a filter selecting files of interest + * @return a set of transitively contained files matched by the filter + * @throws ResourceError with an appropriate message upon some error during traversal + */ + @Deprecated + public static Set recursiveFind (File dir, FileFilter filter) + { + Set result = new LinkedHashSet<>(); + recursiveFind(dir, filter, result); + return result; + } + + /** + * Traverse a directory and collect all files selected by the given filter, returning them as a + * set. The filter should not be null; files will be added using a pre-order depth-first + * traversal. Unlike {@link #recursiveFind(File, FileFilter)}, this version + * applies a second filter to directories as well, and only recurses into directories that are + * accepted by that filter. + * + * @deprecated Use FileUtil8.CollectingFileVisitor instead. + * @param dir the directory to traverse + * @param filter a filter selecting files of interest + * @param recurseFilter a filter selecting directories to recurse into. + * @return a set of transitively contained files matched by the filter + * @throws ResourceError with an appropriate message upon some error during traversal + */ + @Deprecated + public static Set recursiveFind (File dir, FileFilter filter, FileFilter recurseFilter) + { + Set result = new LinkedHashSet<>(); + recursiveFind(dir, filter, recurseFilter, result); + return result; + } + + /** + * Traverse a directory and collect all files selected by the given filter, adding them to the + * given set. The filter should not be null; files will be added using a pre-order depth-first + * traversal. + * + * @deprecated Use FileUtil8.CollectingFileVisitor instead. + * @param dir the directory to traverse + * @param filter a filter selecting files of interest + * @param result the set to which transitively contained files matched by the filter should be + * added + * @throws ResourceError with an appropriate message upon some error during traversal + */ + @Deprecated + public static void recursiveFind (File dir, FileFilter filter, Set result) + { + recursiveFind(dir, filter, null, result); + } + + /** + * Traverse a directory and collect all files selected by the given filter, adding them to the + * given set. The filter should not be null; files will be added using a pre-order depth-first + * traversal. Unlike {@link #recursiveFind(File, FileFilter, Set)}, this version + * applies a second filter to directories as well, and only recurses into directories that are + * accepted by that filter. + * + * @deprecated Use FileUtil8.CollectingFileVisitor instead. + * @param dir the directory to traverse + * @param filter a filter selecting files of interest + * @param recurseFilter a filter selecting directories to recurse into. + * @param result the set to which transitively contained files matched by the filter should be + * added + * @throws ResourceError with an appropriate message upon some error during traversal + */ + @Deprecated + public static void recursiveFind (File dir, FileFilter filter, FileFilter recurseFilter, Set result) + { + for (File f : list(dir, filter)) + result.add(f); + + FileFilter recurseDirFilter = recurseFilter == null ? + FileUtil.kindFilter(false) : + FileUtil.andFilters(FileUtil.kindFilter(false), recurseFilter); + + for (File f : list(dir, recurseDirFilter)) { + recursiveFind(f, filter, recurseFilter, result); + } + } + + /** + * Ensure the specified directory exists (as a directory), creating parent directories if + * necessary. + * + * @param dir The directory to create. + * @throws ResourceError if the desired directory already exists (but isn't a directory), or if + * the creation of it or one of its parents fails. + */ + public static void mkdirs (File dir) + { + if (dir.exists()) { + if (dir.isDirectory()) + return; + else + throw new ResourceError("Can't create " + dir + " -- it exists as a non-directory."); + } + if (dir.mkdirs()) + return; + /* + * There is a possible time-of-check time-of-use race condition where someone creates the directory + * between our existence check and our attempt to create it. + * + * In this case our goal is to ensure the existence of the directory, so it's okay if this happens. + * + * There are other possible race conditions, e.g. if someone deletes the directory after we create it, + * but we want to handle this one in particular, since multiple creations of the same directory is + * especially likely when running multiple instances of a process that use a shared directory. + */ + if (dir.isDirectory()) + return; + File child = dir; + File parent = dir.getParentFile(); + while (parent != null) { + if (parent.exists()) + throw new ResourceError("Couldn't create child directory " + child.getName() + " of " + + (parent.isDirectory() ? "" : "non-directory ") + parent + "."); + child = parent; + parent = child.getParentFile(); + } + throw new ResourceError("Couldn't create "+dir.getPath()+": no ancestor even exists."); + } + + /** + * Determines whether or not the specified string represents an absolute path on either a + * Windows-based or UNIX-based system. Absolute paths are those that start with either /, \ or + * X:\, for some letter X. + * + * @param path The string containing the path to check (can safely be null or empty). + * @return true, if the string represents an absolute path, or false otherwise. + */ + public static boolean isAbsolute (String path) + { + // Handle invalid paths gracefully. + if (path == null || path.length() == 0) + return false; + + return path.charAt(0) == '/' // Starts with / + || path.charAt(0) == '\\' // Starts with \ + || ( path.length() >= 3 // Starts with X:/ or X:\ for some character X + && Character.isLetter(path.charAt(0)) + && path.charAt(1) == ':' + && ( path.charAt(2) == '/' + || path.charAt(2) == '\\')); + } + + /** + * Copies a file + * + * @return false if failed to copy. + */ + public static boolean copy (File from, File to) + { + boolean targetFileExisted = to.exists(); + try { + copyFile(from, to, false); + return true; + } + catch (IOException e) { + // If the target did not exist before, make sure + // we delete it if there was any error + if (!targetFileExisted) + to.delete(); + + logger.error("Cannot copy " + from + " to " + to, e); + return false; + } + } + + /** + * Append all of sourceFile to the end of targetFile - like + * copy, but just adds to the end of the file. + * + * @return true iff the append succeeded + */ + public static boolean append (File sourceFile, File targetFile) + { + try { + copyFile(sourceFile, targetFile, true); + return true; + } + catch (IOException e) { + logger.error("Cannot append contents of " + sourceFile + " to " + targetFile, e); + return false; + } + } + + /** + * Write the contents of the given string to the file, creating it if it does not exist and overwriting it if it does. + * + * @param file the target file + * @param content the string to write + */ + public static void write (File file, String content) + { + Writer writer = null; + try { + writer = openWriterUTF8(file, true, false); + writer.write(content); + } + catch (IOException e) { + throw new ResourceError("Failed to write to file " + file, e); + } + finally { + close(writer); + } + } + + /** + * Append the contents of the given string to the file, creating it if it does not exist. + * + * @param file the target file + * @param content the string to write + */ + public static void append (File file, String content) + { + Writer writer = null; + try { + writer = openWriterUTF8(file, false, true); + writer.write(content); + } + catch (IOException e) { + throw new ResourceError("Failed to append to file " + file, e); + } + finally { + close(writer); + } + } + + /** + * Read a text file in its entirety. + */ + public static String readText (File f) throws IOException + { + char[] cbuf = new char[10240]; + StringBuilder buf = new StringBuilder(); + InputStreamReader reader = new InputStreamReader(new FileInputStream(f), "UTF8"); + try { + int n = reader.read(cbuf); + while (n > 0) { + buf.append(cbuf, 0, n); + n = reader.read(cbuf); + } + } + finally { + reader.close(); + } + return buf.toString(); + } + + /** + * Read a text file in its entirety. + */ + public static String readText (Path f) throws IOException + { + char[] cbuf = new char[10240]; + StringBuilder buf = new StringBuilder(); + InputStreamReader reader = new InputStreamReader(Files.newInputStream(f), "UTF8"); + try { + int n = reader.read(cbuf); + while (n > 0) { + buf.append(cbuf, 0, n); + n = reader.read(cbuf); + } + } + finally { + reader.close(); + } + return buf.toString(); + } + + /** + * Load the given file as a standard Java {@link Properties} definition. The parsing is done using + * Properties.load(), which allows comments and accepts both '=' and ':' as the key/value + * separator. + * + * @param f the file to load. + * @return a {@link Properties} object containing the loaded content of the file. + * @throws ResourceError if an IO exception occurs. + */ + public static Properties loadProperties (File f) + { + Properties result = new Properties(); + try (FileInputStream fis = new FileInputStream(f); + Reader reader = new InputStreamReader(new BufferedInputStream(fis), UTF8)) { + result.load(reader); + return result; + } catch (IOException e) { + throw new ResourceError("Failed to read properties from " + f, e); + } + } + + /** + * Save the given {@link Properties} to a file, UTF-8 encoded, with the proper + * escaping. + * + * @param props the {@link Properties} to save. + * @param f the file in which the properties should be saved. + * @throws ResourceError if an IO exception occurs. + */ + public static void writeProperties (Properties props, File f) + { + try (OutputStream os = new FileOutputStream(f); + Writer writer = new OutputStreamWriter(new BufferedOutputStream(os), UTF8)) { + props.store(writer, null); + } catch (IOException ioe) { + throw new ResourceError("Failed to write properties to " + f, ioe); + } + } + + /** + * Copies a folder recursively, by overwriting files if necessary. Copies all folders but filters + * files. + *

    + * IMPORTANT:The contents of from are copied to to, but a + * subdirectory is not created for them. This behaves like rsync -a from/ to. + *

    + * If {@code from} is a file rather than a directory, it is copied (assuming the filter matches + * it) to the file named by {@code to} -- this must not already exist as a directory. + * + * @deprecated Use FileUtil8.recursiveCopy instead. + * @param from Directory whose contents should be copied, or a file. + * @param to Directory to which files and subdirectories of from should be copied, or + * a file path (if {@code from} is a file). + * @param filter the filter to use for selecting which files to copy, or null + * @return false if failed to copy. + */ + @Deprecated + public static boolean recursiveCopy (File from, File to, final FileFilter filter) + { + // Make sure we include all subfolders + FileFilter realFilter = new FileFilter() { + @Override + public boolean accept (File pathname) + { + if (filter == null || pathname.isDirectory()) + return true; + else + return filter == null || filter.accept(pathname); + } + }; + return strictRecursiveCopy(from, to, realFilter); + } + + /** + * Copies a folder recursively, by overwriting files if necessary. Unlike + * {@link #recursiveCopy(File, File, FileFilter)}, this version applies the filter to directories + * as well, and only recurses into directories that are accepted by the filter. + *

    + * IMPORTANT:The contents of from are copied to to, but a + * subdirectory is not created for them. This behaves like rsync -a from/ to. + *

    + * If {@code from} is a file rather than a directory, it is copied (assuming the filter matches + * it) to the file named by {@code to} -- this must not already exist as a directory. + * + * @deprecated Use FileUtil8.recursiveCopy instead. + * @param from Directory whose contents should be copied, or a file. + * @param to Directory to which files and subdirectories of from should be copied, or + * a file path (if {@code from} is a file). + * @param filter the filter to use for selecting which files to copy, or null + * @return false if failed to copy. + */ + @Deprecated + public static boolean strictRecursiveCopy (File from, File to, FileFilter filter) + { + if (!from.exists()) { + return false; + } + if (from.isFile()) { + return copy(from, to); + } + else { + if (!to.exists()) { + if (!to.mkdir()) { + return false; + } + } + boolean success = true; + for (File childFrom : list(from, filter)) { + File childTo = new File(to, childFrom.getName()); + success &= strictRecursiveCopy(childFrom, childTo, filter); + } + return success; + } + } + + /** + * Writes the entire contents of a stream to a file. Closes input stream when writing is done + * + * @return true on success, false otherwise + */ + public static boolean writeStreamToFile (InputStream in, File fileOut) + { + if (in == null) { + return false; + } + FileOutputStream out = null; + try { + out = new FileOutputStream(fileOut); + + byte[] buf = new byte[16 * 1024]; + int count; + while ((count = in.read(buf)) > 0) { + out.write(buf, 0, count); + } + out.flush(); + out.close(); + } + catch (IOException e) { + logger.error("Error writing stream to file", e); + return false; + } + finally { + if (out != null) { + try { + out.close(); + } + catch (IOException e) { + Exceptions.ignore(e, "We don't care about exceptions during closing"); + } + } + if (in != null) { + try { + in.close(); + } + catch (IOException e) { + Exceptions.ignore(e, "We don't care about exceptions during closing"); + } + } + } + return true; + } + + + public static void writeStreamToFile(InputStream inStream, Path resolve) throws IOException { + try (OutputStream out = Files.newOutputStream(resolve)) { + StreamUtil.copy(inStream, out); + } + } + + /** + * Convenience method that handles exception handling for creating a FileInputStream + * + * @return inputstream from file, or null on exception + */ + public static InputStream getFileInputStream (File file) + { + try { + return new FileInputStream(file); + } + catch (FileNotFoundException e) { + logger.trace("Could not open file for input stream", e); + return null; + } + } + + private static void copyFile (File from, File to, boolean append) throws IOException + { + // Try to exclude the case where the files are the same. If that happens, + // succeed except in 'append' mode since that is probably not the intention + // The logic below works if from and to both exist - and if one of them + // doesn't they can't be the same file! + from = tryMakeCanonical(from); + to = tryMakeCanonical(to); + if (from.equals(to)) { + if (append) + throw new IOException("Trying to append the contents of file " + from + " onto itself"); + else + return; // Nothing to do. + } + + try (FileInputStream fis = new FileInputStream(from); + InputStream in = new BufferedInputStream(fis)) + { + if (!to.exists()) + to.createNewFile(); + try (FileOutputStream fos = new FileOutputStream(to, append); + OutputStream out = new BufferedOutputStream(fos)) + { + byte[] buf = new byte[16 * 1024]; + int count; + while ((count = in.read(buf)) > 0) + out.write(buf, 0, count); + } + } + to.setExecutable(canExecute(from)); + } + + /** + * In the current Java security model, calling {@link File#canExecute()} requires the same + * permission as calling {@link Runtime#exec(String)}. This makes it impossible to run under a + * restrictive security manager if we blindly check for a file's execute bit. + *

    + * To work around, if an {@link AccessControlException} arises, and it seems to refer to a lack of + * {@link SecurityConstants#FILE_EXECUTE_ACTION} permission, we suppress the exception and return + * false. Other {@link AccessControlException}s are re-thrown, and otherwise the + * return value coincides with {@link File#canExecute()} on the argument. + */ + private static boolean canExecute (File file) + { + try { + return file.canExecute(); + } + catch (AccessControlException e) { + if (e.getPermission() instanceof FilePermission + && ((FilePermission) e.getPermission()).getActions().contains("execute")) + return false; // deliberately ignoring security failure + throw e; + } + } + + + private static final BitSet allowedCharacters = new BitSet(256); + static { + for (int i = 'a'; i <= 'z'; i++) + allowedCharacters.set(i); + for (int i = 'A'; i <= 'Z'; i++) + allowedCharacters.set(i); + for (int i = '0'; i <= '9'; i++) + allowedCharacters.set(i); + allowedCharacters.set('-'); + allowedCharacters.set('_'); + allowedCharacters.set(' '); + allowedCharacters.set('['); + allowedCharacters.set(']'); + } + + + public static final String sanitizeFilename (String name) + { + StringBuffer safe = new StringBuffer(); + for (int i = 0; i < name.length(); i++) { + char c = name.charAt(i); + if (allowedCharacters.get(c)) + safe.append(c); + } + return safe.toString(); + } + + /** + * Create a unique file in the given directory. Takes a base name and the directory to put it in, + * and returns the file that was created. Attempts to preserve the extensions (if any) - so + * "foo.trap.gz" would become "foo-5.trap.gz", not "foo.trap.gz-5". Guarantees that the file it + * returns was successfully created by this call - so in a multithreaded / multiprocess + * environment can be used to create a globally unique file. + * + * @param baseDirectory the directory that will eventually contain the file. This must exist. + * @param fileName the simple name of the file to create. It should not contain any directory + * separators. + * @return a file in baseDirectory with a name based on fileName that + * did not exist when created. + * @throws IllegalArgumentException if baseDirectory does not exist or + * fileName is not a simple file name. + */ + public static final File createUniqueFile (File baseDirectory, String fileName) + { + return createUniqueFileImpl(baseDirectory, fileName, false); + } + + /** + * Create a unique subdirectory in the given directory. Takes a base name and the directory to put + * it in, and returns the directory that was created. Attempts to preserve the extensions (if any) + * - so "foo.d" would become "foo-5.d", not "foo.d-5". Guarantees that the directory it returns + * was successfully created by this call - so in a multithreaded / multiprocess environment can be + * used to create a globally unique directory. + * + * @param baseDirectory the directory that will eventually contain the file. This must exist. + * @param dirName the simple name of the directory to create. It should not contain any directory + * separators. + * @return a directory in baseDirectory with a name based on dirName + * that did not exist when created. + * @throws ResourceError if there was a problem creating the file + * @throws IllegalArgumentException if baseDirectory does not exist or + * dirName is not a simple name. + */ + public static final File createUniqueDirectory (File baseDirectory, String dirName) + { + return createUniqueFileImpl(baseDirectory, dirName, true); + } + + private static final File createUniqueFileImpl (File baseDirectory, String fileName, boolean directory) + { + + if (!baseDirectory.exists()) + throw new IllegalArgumentException("FileUtil.makeUniqueName(" + baseDirectory + ",\"" + fileName + "\"): " + + " directory " + baseDirectory + " does not exist."); + if (!baseDirectory.isDirectory()) + throw new IllegalArgumentException("FileUtil.makeUniqueName(" + baseDirectory + ",\"" + fileName + "\"): " + + " file " + baseDirectory + " is not a directory."); + if (fileName.contains("/")) + throw new IllegalArgumentException("FileUtil.makeUniqueName(" + baseDirectory + ",\"" + fileName + "\"): " + + " file name \"" + fileName + "\" is not a simple file name."); + + fileName = replaceInvalidFilenameChars(fileName); + + String baseName = fileName; + String name = baseName; + File candidateFile = new File(baseDirectory, name); + String extension = extension(new File(baseName)); + + int i = 1; + + try { + while (!(directory ? candidateFile.mkdir() : candidateFile.createNewFile())) { + // Add a suffix, trying to do that before the extension + if (extension.length() > 0) + name = baseName.substring(0, baseName.length() - extension.length()) + "-" + i + extension; + else + name = baseName + "-" + i; + + candidateFile = new File(baseDirectory, name); + i++; + } + } + catch (IOException e) { + throw new ResourceError("Failed to create a unique file in " + baseDirectory, e); + } + + return candidateFile; + } + + public static boolean containsInvalidFilenameChars (String filename) + { + return rpInvalidFilenameCharacters.matcher(filename).find(); + } + + public static String replaceInvalidFilenameChars (String fileName) + { + // This method gets called from all over the code base. Compile the regex only once (but only + // when it is actually needed) by using a LazyRegexPatternHolder + return rpInvalidFilenameCharacters.matcher(fileName).replaceAll("_"); + } + + /** + * Append a number to a file name, with the intention of making it unique. Similar to + * makeUniqueName, but does not actually make the name unique: it relies on the + * client calling it with a unique number. Attempts to preserve the extensions of files - so + * "foo.tar.gz" would become "foo-5.tar.gz", not "foo.tar.gz-5". + * + * @param file the filename to modify + * @param indexToAdd the number to append at the end of the filename + * @return the modified filename with indexToAdd appended at the end + */ + public static final File appendToName (File file, int indexToAdd) + { + String path = file.getPath(); + String extension = extension(file); + if (extension.length() > 0) + path = path.substring(0, path.length() - extension.length()) + "-" + indexToAdd + extension; + else + path = path + "-" + indexToAdd; + return new File(path); + } + + /** + * Get the extension of the file. Results are of the form: ".java", ".C", "." or "" (no + * extension). The '.gz' extension is treated specially - if there is another extension before it + * the two extensions are lumped together (eg. '.trap.gz', '.tar.gz'). We add another special case + * for '.xml.zip', just to support our own conventions. + */ + public static String extension (File f) + { + return extension(f.getName()); + } + + + /** + * Get the extension of the file. Results are of the form: ".java", ".C", "." or "" (no + * extension). The '.gz' extension is treated specially - if there is another extension before it + * the two extensions are lumped together (eg. '.trap.gz', '.tar.gz'). We add another special case + * for '.xml.zip', just to support our own conventions. + */ + public static String extension (Path f) + { + return extension(f.getFileName().toString()); + } + + /** + * Return the extension of the file name. + * + * @see FileUtil#extension(File) + */ + public static String extension (String name) + { + int i = name.lastIndexOf('.'); + if (i == -1) + return ""; + String extension = name.substring(i); + if (extension.equals(".gz") || extension.equals(".br")) { + // Try to find another extension + int before = name.lastIndexOf('.', i - 1); + if (before == -1) + return extension; + String combinedExtension = name.substring(before); + return combinedExtension; + } + else if (extension.equals(".zip")) { + // Just special-case .xml.zip + if (name.endsWith(".xml.zip")) + return ".xml.zip"; + } + + return extension; + } + + /** + * Return the base name of the file obtained by stripping off leading directories and the + * extension. + */ + public static String basename (File f) + { + return stripExtension(f.getName()); + } + + /** + * Return the base name of the file obtained by stripping off leading directories and the + * extension. Returns the empty string if the path has no components. + */ + public static String basename(Path path) { + Path filename = path.getFileName(); + return filename == null ? "" : stripExtension(filename.toString()); + } + + /** + * Strips the extension off a file name. E.g.: 'MyFile.java' becomes 'MyFile'. Note that + * there are some special cases (see definition of {@link #extension(String)}). For example, + * 'MyFile.tar.gz' becomes 'MyFile' (.tar.gz is considered the extension), but + * 'MyFile.foo.bar' becomes 'MyFile.foo'. + * + * Note that this method retains an optional path prefix. E.g.: + * '/foo/bar/MyFile.java' becomes '/foo/bar/MyFile'. If a completely stripped filename + * (without path, without extension) is desired, then use {@link #basename(File)}. + * + * @param name name of a file (with or without fully qualified path) + * @return input without the file extension + */ + public static String stripExtension (String name) + { + return name.substring(0, name.length() - extension(name).length()); + } + + /** + * Return a file with the same name and in the same directory as a given file, but with a + * different extension. + */ + public static File withExtension (File f, String extension) + { + return new File(withExtension(f.getPath(), extension)); + } + + /** + * Given a string denoting a file name, change its extension. + */ + public static String withExtension (String path, String extension) + { + String oldExtension = extension(path); + return path.substring(0, path.length() - oldExtension.length()) + extension; + } + + /** + * A file filter that searches for files (not directories) by any of the given names. Can do + * case-sensitive or case-insensitive matching + */ + public static FileFilter nameFilter (final boolean caseSensitive, final String ... names) + { + return new FileFilterImpl(names, caseSensitive, false); + } + + /** + * A file filter that matches a set of ant-like patterns against files in a given directory. + * + * @param cwd The current directory -- the patterns are matched against relative paths under this + * directory, and files outside of it are considered to not match the patterns (though + * they will still be accepted by the filter if {@code exclude == true}). + * @param exclude Flag indicating whether files matching the patterns should be included or + * excluded by the filter. + * @param patterns A list of patterns. + * @return The new filter. + */ + public static FileFilter antlikeFilter (File cwd, boolean exclude, String ... patterns) + { + return new PatternFilter(cwd, Mode.Ant, exclude, patterns); + } + + /** + * A file filter that matches file by regular expression. + */ + public static FileFilter regexNameFilter (String regex, boolean matchFiles) + { + return new RegexFileFilter(Pattern.compile(regex), matchFiles); + } + + /** + * A file filter that finds files (not directories) by a list of extensions. Can do case-sensitive + * or case-insensitive matching on the extensions. A sample extension should be, for instance, + * ".ql". + */ + public static FileFilter extensionFilter (final boolean caseSensitive, final String ... extensions) + { + return new FileFilterImpl(extensions, caseSensitive, true); + } + + /** + * Check whether the given directory contains any files or directories + * as defined by the given FileFilter. + */ + public static boolean containsAny(File dir, FileFilter filter){ + if(!dir.isDirectory()) + return false; + + Stack search = new Stack<>(); + search.push(dir); + + while (!search.isEmpty()) { + File f = search.pop(); + + for (File c : list(f)) { + if(filter.accept(c)) + return true; + if (f.isDirectory()) + search.push(c); + } + } + return false; + } + + /** A filter that does not accept any file or directory */ + public static final FileFilter falseFilter = new FileFilter() { + @Override + public boolean accept(File pathname) { + return false; + } + }; + + /** + * A file filter that either picks all files or all directories + */ + public static FileFilter kindFilter (final boolean files) + { + return new FileFilter() { + @Override + public boolean accept (File pathname) + { + if (pathname.isFile() && files) + return true; + if (pathname.isDirectory() && !files) + return true; + return false; + } + }; + } + + /** + * A file filter that accepts precisely the set of files specified as an argument to this method + * (using the set's {@link Set#contains(Object)} method, so up to {@link File}'s equals/hashCode). + */ + public static FileFilter setFilter (final Set acceptedFiles) + { + return new FileFilter() { + @Override + public boolean accept (File pathname) + { + return acceptedFiles.contains(pathname); + } + }; + } + + /** + * Negate a file filter + */ + public static FileFilter negateFilter (final FileFilter filter) + { + return new FileFilter() { + @Override + public boolean accept (File pathname) + { + return !filter.accept(pathname); + } + }; + } + + /** + * Take the conjunction of several file filters + */ + public static FileFilter andFilters(final FileFilter... filters) { + return new FileFilter() { + @Override + public boolean accept (File pathname) + { + for (FileFilter filter : filters) { + if (!filter.accept(pathname)) { + return false; + } + } + return true; + } + }; + } + + /** + * Santize path string To handle windows drive letters and cross-platform builds. + * @param pathString to be sanitized + * @return sanitized path string + */ + private static String santizePathString(String pathString) { + // Replace ':' by '_', as the extractor does - to handle Windows drive letters + pathString = pathString.replace(':', '_'); + + // To support cross-platform builds: if the build is done on one system (eg. Windows, with \) + // but the path is then read in another system (ie with /) then the separators will be + // interpreted incorrectly. Normalise all possible separators to the current one + pathString = pathString.replace('\\', File.separatorChar).replace('/', File.separatorChar); + return pathString; + } + + /** + * Add an absolute path as a suffix to a given directory. This is used to create source archives. + * For instance, appendAbsolutePath("/home/foo/bar", "/usr/include/stdio.h") produces + * "/home/foo/bar/usr/include/stdio.h". Various transformations on the paths are done + * to avoid special characters and to give cross-platform compatibility. + * + * @param root the File to use as a root; the result will be a child of that (or itself) + * @param absolutePath the path to append, which should be a Windows or Unix absolute path + */ + public static File appendAbsolutePath (File root, String absolutePath) + { + absolutePath = santizePathString(absolutePath); + + return new File(root, absolutePath).getAbsoluteFile(); + } + + /** + * Add an absolute path as a suffix to a given directory. This is used to create source archives. + * For instance, appendAbsolutePath("/home/foo/bar", "/usr/include/stdio.h") produces + * "/home/foo/bar/usr/include/stdio.h". Various transformations on the paths are done + * to avoid special characters and to give cross-platform compatibility. + * + * @param root the Path to use as a root; the result will be a child of that (or itself) + * @param absolutePath the path to append, which should be a Windows or Unix absolute path + */ + public static Path appendAbsolutePath(Path root, String absolutePathString){ + + absolutePathString = santizePathString(absolutePathString); + + Path path = Paths.get(absolutePathString); + + if (path.getRoot() != null) + path = path.getRoot().relativize(path); + + return root.resolve(path); + } + + /** + * Close a resource if it is non-null and has been successfully created. Silently catches + * exceptions that can occur during close. + */ + public static void close (Closeable resourceToClose) + { + if (resourceToClose != null) { + try { + resourceToClose.close(); + } + catch (IOException ignored) { + Exceptions.ignore(ignored, "Contract is to ignore"); + } + /* + * Under rare circumstances classes may lie about checked exceptions that they throw. + * Since the intention of this method is to catch all exceptions that are the result + * of IO problems, we check whether the (real) exception that was thrown was an IOException, + * and if so we ignore it. + */ + catch (UndeclaredThrowableException maybeIgnored) { + if (maybeIgnored.getCause() instanceof IOException) { + Exceptions.ignore(maybeIgnored, "Undeclared exception was an IOException, ignoring"); + } else { + throw maybeIgnored; + } + } + } + } + + /** + * Close a socket if it is non-null. Silently catches exceptions that can occur during close. + *

    + * This method is necessary because a {@link Socket} is not {@link Closeable} until Java 7. + */ + public static void close (Socket socket) + { + if (socket != null) { + try { + socket.close(); + } + catch (IOException ignored) { + Exceptions.ignore(ignored, "Contract is to ignore"); + } + } + } + + public static class ResolvedCompressedSourceArchivePaths { + public final String srcArchivePath; + public final String sourceLocationPrefix; + public ResolvedCompressedSourceArchivePaths(String srcArchivePath, String sourceLocationPrefix) { + this.srcArchivePath = srcArchivePath; + this.sourceLocationPrefix = sourceLocationPrefix; + } + } + + /** + * Resolve the paths in the compressed source archive. + * + * @param srcArchiveZip + * - the zip containing the compressed source archive. + * @param convertedSourceLocationPrefix + * - the source location prefix, converted to a source archive + * compatible format using + * {@link FileUtil#convertAbsolutePathForSourceArchive(String)}. + * @return a {@link ResolvedCompressedSourceArchivePaths} class wit + */ + public static ResolvedCompressedSourceArchivePaths resolveCompressedSourceArchivePaths(File srcArchiveZip, String convertedSourceLocationPrefix) { + String srcArchivePath = ""; + String sourcePath; + boolean legacyZip = srcArchiveZip.getName().equals("src_archive.zip"); + if (legacyZip) { + // Location of the source archive in the zip + srcArchivePath = FileUtil.convertPathForSourceArchiveZip(""); + // Location of the source directory within the source archive. + sourcePath = srcArchivePath + convertedSourceLocationPrefix; + } else if (convertedSourceLocationPrefix.startsWith("/")) { + sourcePath = convertedSourceLocationPrefix.substring(1); + } else { + sourcePath = convertedSourceLocationPrefix; + } + return new ResolvedCompressedSourceArchivePaths(srcArchivePath, sourcePath); + } + + /** + * Converts an absolute path to a path that can be used in the source archive. This involves + * normalising (and canonicalising) the path, stripping any trailing slash, and + * prepending a slash if the path is non-empty. + * + * @param absolutePath The absolute path to convert (must be non-null). + * @return The converted path. + * @throws CatastrophicError If absolutePath is null. + */ + public static String convertAbsolutePathForSourceArchive(String absolutePath) + { + // Enforce preconditions. + if (absolutePath == null) { + throw new CatastrophicError("FileUtil.convertPathForSourceArchiveZip: absolutePath must be non-null"); + } + + // Normalise the path and replace any instances of the Windows-specific path character ':'. + absolutePath = normalisePath(absolutePath); + absolutePath = absolutePath.replace(':', '_'); + + // Make sure that the path starts with a forward slash (to separate it from "src_archive") + // and then strip any trailing forward slash. (Note that if the original path starts off + // empty, the net result of these two operations is still empty.) + if (!absolutePath.startsWith("/")) + absolutePath = "/" + absolutePath; + if (absolutePath.endsWith("/")) + absolutePath = absolutePath.substring(0, absolutePath.length() - 1); + + return absolutePath; + } + + /** + * Converts an absolute path to a path that can be used in the source archive .zip. This involves + * normalising (and canonicalising) the path, stripping any trailing slash and prepending the + * string "src_archive/" (unless the path is empty, when the slash after "src_archive" is + * dropped). + * + * @param absolutePath The absolute path to convert (must be non-null). + * @return The converted path. + * @throws CatastrophicError If absolutePath is null. + */ + public static String convertPathForSourceArchiveZip(String absolutePath) { + return "src_archive" + convertAbsolutePathForSourceArchive(absolutePath); + } + + /** + * Construct a child of base by appending a relative path. For example: with base="/usr" and + * relativePath="local/bin/foo", the result is "/usr/local/bin/foo"; if base="C:\odasa" and + * relativePath="projects/foo", then the result is "C:\odasa\projects\foo". The relative path must + * not start with a slash. Normalisation: treat both "/" and "\" as the path separator. As a + * special case, if {@code base} is null, a file representing just the + * {@code relativePath} is constructed. + */ + public static File fileRelativeTo (File base, String relativePath) + { + if (!isRelativePath(relativePath)) + throw new CatastrophicError("Invalid relative path '" + relativePath + "'."); + + return new File(base, relativePath); + } + + /** + * Is the given path a relative path suitable for {@link #fileRelativeTo(File, String)}? + */ + public static boolean isRelativePath (String path) + { + if (path.startsWith("/")) { + return false; + } + if (path.startsWith("\\")) { + return false; + } + if (Env.getOS() == OS.WINDOWS && path.contains(":")) { + return false; + } + return true; + } + + /** + * Converts a path to a normalised form. This involves converting any initial lowercase drive + * letter to uppercase, and converting backslashes to forward slashes. + * + * @param path The path to normalise (must be non-null). + * @return The normalised version of the path. + * @throws CatastrophicError If {@code path} is null. + */ + public static String normalisePath (String path) + { + // Enforce preconditions. + if (path == null) { + throw new CatastrophicError("FileUtil.normalisePath: path must be non-null"); + } + + // Convert any initial lowercase driver letter to uppercase. + if (path.length() >= 2 && path.charAt(1) == ':') { + char driveLetter = path.charAt(0); + if (driveLetter >= 'a' && driveLetter <= 'z') { + path = Character.toUpperCase(driveLetter) + path.substring(1); + } + } + + // Convert any backslashes to forward slashes. + path = path.replace('\\', '/'); + + return path; + } + + /** + * Compute the nearest common parent for two files. + * + * @return The most nested directory which is both a parent of {@code a} and a parent of {@code b} + * . + * @throws ResourceError if no common parent can be found. This can happen if, for example, the + * two files are on different Windows drive letters. + */ + public static File commonParent (File a, File b) + { + Set parents = new LinkedHashSet<>(); + for (File cur = a; cur != null; cur = cur.getParentFile()) + parents.add(cur); + for (File cur = b; cur != null; cur = cur.getParentFile()) + if (!parents.add(cur)) + return cur; + throw new ResourceError("Could not determine a common parent for " + a + " and " + b + "."); + } + + /** + * Compute the nearest common parent for a set of files. + * + * @return The most nested directory which is a parent of all files in {@code fs}. + * @throws ResourceError if no common parent can be found. This can happen if, for example, two of + * the files are on different Windows drive letters, or the list is empty. + */ + public static File commonParent (List fs) + { + if (fs.isEmpty()) { + throw new CatastrophicError("No files to find common parent of"); + } + File cur = fs.get(0); + for (File f : fs) { + cur = commonParent(cur, f); + } + return cur; + } + + /** + * Compute the relative path to file from baseDirectory. Fails with a + * {@link ResourceError} if file is not a child of baseDirectory. Tries + * canonical paths and comparing normal file paths. The returned path is relative (ie does not + * start with a slash). + * + * @throws ResourceError if a relative path cannot be determined + */ + public static String relativePath (File file, File baseDirectory) + { + String candidate = relativePathOpt(file, baseDirectory); + if (candidate != null) + return candidate; + + throw new ResourceError("Could not determine a relative path to " + file + " from " + baseDirectory); + } + + /** + * Compute the relative path to file from baseDirectory. Returns + * file.getAbsolutePath() if file is not a child of + * baseDirectory. Tries canonical paths and comparing normal file paths. + */ + public static String tryMakeRelativePath (File file, File baseDirectory) + { + String candidate = relativePathOpt(file, baseDirectory); + return candidate != null ? candidate : file.getAbsolutePath(); + } + + public static String relativePathOpt (File file, File baseDirectory) + { + try { + File canonicalToFile = file.getCanonicalFile(); + File canonicalToBase = baseDirectory.getCanonicalFile(); + String canonicalRelative = relativePathAsIsOpt(canonicalToFile, canonicalToBase); + if (canonicalRelative != null) + return canonicalRelative; + } + catch (IOException ignored) { + Exceptions.ignore(ignored, "Fall through to comparing standard paths"); + } + + String relative = relativePathAsIsOpt(file, baseDirectory); + return relative; + } + + /** + * The same as {@link #relativePathOpt(File, File)}, but it does not canonicalize its arguments. + */ + public static String relativePathAsIsOpt (File childFile, File parentFile) + { + String child = childFile.getPath(); + String parent = parentFile.getPath(); + int parentLength = parent.length(); + // Is the child too short? + if (child.length() <= parentLength) + return null; + // Is the parent not even a prefix? + if (!child.startsWith(parent)) + return null; + // Is the parent prefix a full dir name? (catches child=/home and parent=/ho) + if (child.charAt(parentLength) == File.separatorChar) + return child.substring(parentLength + 1); + // We also need to check the previous character to handle + // cases like parent=/ or parent=c:\ + if (parentLength > 0 && child.charAt(parentLength - 1) == File.separatorChar) + return child.substring(parentLength); + return null; + } + + public static boolean isWithin (File file, File baseDirectory) + { + return (relativePathOpt(file, baseDirectory) != null) + || (tryMakeCanonical(file).equals(tryMakeCanonical(baseDirectory))); + } + + /** + * Constructs the relative path to the target {@code f} from {@code base}. The base file or + * directory does not need to be a parent of the target but a common parent needs to exist. + * + * @param f the target file + * @param base the working directory (or a file within the working directory) + * @return the relative path from {@code base} to {@code f} + * @throws ResourceError if there is no common parent according to {@link FileUtil#commonParent} + */ + public static String relativePathLink (File f, File base) + { + f = f.getAbsoluteFile(); + base = base.getAbsoluteFile(); + File parent = commonParent(f, base); + StringBuilder path = new StringBuilder(); + for (File cur = base; !cur.equals(parent); cur = cur.getParentFile()) + path.append(".." + File.separator); + path.append(relativePath(f, parent)); + return path.toString(); + } + + /** + * Try to convert a file into a canonical file. Handles the possible IO exception by just making + * the path absolute. + */ + public static File tryMakeCanonical (File f) + { + try { + return f.getCanonicalFile(); + } + catch (IOException ignored) { + Exceptions.ignore(ignored, "Can't log error: Could be too verbose."); + return new File(simplifyPath(f)); + } + } + + + private static class FileFilterImpl implements FileFilter + { + private final String[] names; + private final boolean caseSensitive; + private final boolean extensionOnly; + + + private FileFilterImpl (String[] names, boolean caseSensitive, boolean extensionOnly) + { + this.names = Arrays.copyOf(names, names.length); + this.caseSensitive = caseSensitive; + this.extensionOnly = extensionOnly; + + if (!caseSensitive) + for (int i = 0; i < this.names.length; i++) + this.names[i] = StringUtil.lc(this.names[i]); + } + + @Override + public boolean accept (File pathname) + { + if (!pathname.isFile()) + return false; + + String nameToMatch = caseSensitive ? pathname.getName() : StringUtil.lc(pathname.getName()); + for (String s : names) { + if (extensionOnly && nameToMatch.endsWith(s)) + return true; + if (!extensionOnly && nameToMatch.equals(s)) + return true; + } + return false; + } + } + + private static class PatternFilter implements FileFilter + { + private final PathMatcher matcher; + private final boolean exclude; + private final File cwd; + + + private PatternFilter (File cwd, Mode mode, boolean exclude, String ... patterns) + { + this.cwd = cwd; + this.exclude = exclude; + matcher = new PathMatcher(mode, Arrays.asList(patterns)); + } + + @Override + public boolean accept (File f) + { + String path = relativePathOpt(f, cwd); + if (path == null) + return exclude; + else + return exclude ^ matcher.matches(path); + } + } + + private static class RegexFileFilter implements FileFilter + { + private final Pattern pattern; + private final boolean matchFiles; + + + private RegexFileFilter (Pattern pattern, boolean matchFiles) + { + this.pattern = pattern; + this.matchFiles = matchFiles; + } + + @Override + public boolean accept (File pathname) + { + if (pathname.isFile() != matchFiles) { + return false; + } + return pattern.matcher(pathname.getName()).matches(); + } + } + + + /** + * Is parent a (recursive) parent of child? The case where parent is the + * same as child is not counted. This could return the wrong result in odd + * situations involving links, but tries to make paths canonical if possible. + */ + public static boolean recursiveParentOf (File parent, File child) + { + return relativePathOpt(child, parent) != null; + } + + /** + * Delete the given file, even if it is a non-empty directory -- in which case it is traversed and + * all contents are removed. This method makes a best-effort attempt to avoid infinite loops + * through symlinks, though that part is largely untested at the time of writing. + * + * @deprecated use FileUtil8.recursiveDelete instead. + * @param file The file or directory that should be deleted + * @return true, if the file or directory was successfully deleted, or false otherwise. + */ + @Deprecated + public static boolean recursiveDelete (File file) + { + return recursiveDelete(file, falseFilter) == DeletionResult.Deleted; + } + + + public enum DeletionResult + { + Deleted, SkippedSomeFiles, Failed + }; + + + /** + * Delete the given file, even if it is a non-empty directory; however, preserve files (or + * directories) that match the given {@link FileFilter} for exceptions. This method makes a + * best-effort attempt to avoid infinite loops through symlinks, though that part is largely + * untested at time of writing [in particular, a loop of read-only symlinks may lead to infinite + * recursion]. + * + * @deprecated use FileUtil8.recursiveDelete instead. + * @param file the file or folder to delete + * @param exceptions a {@link FileFilter} that will be consulted before attempting to delete + * anything; if it accepts, the current file is not deleted (which means its parent + * directories will be preserved, too). + * @return A {@link DeletionResult} indicating the status: Deleted if the file has been + * successfully deleted (and no longer exists), SkippedSomeFiles if the file exists either + * because it was skipped or because it's the parent directory of some skipped files, and + * Failed if a file we tried to delete could not be removed. + */ + @Deprecated + public static DeletionResult recursiveDelete (File file, FileFilter exceptions) + { + if (exceptions.accept(file)) + return DeletionResult.SkippedSomeFiles; + if (file.delete()) + return DeletionResult.Deleted; + if (file.isDirectory()) { + File[] children = file.listFiles(); + if (children == null) + return DeletionResult.Failed; + boolean skippedSomeChildren = false; + for (File f : children) { + DeletionResult childResult = recursiveDelete(f, exceptions); + if (childResult == DeletionResult.Failed) + return DeletionResult.Failed; + else if (childResult == DeletionResult.SkippedSomeFiles) + skippedSomeChildren = true; + } + if (file.delete()) + return DeletionResult.Deleted; + else + return skippedSomeChildren ? DeletionResult.SkippedSomeFiles : DeletionResult.Failed; + } + else + return DeletionResult.Failed; + } + + /** + * Takes a File path and return another File path that has a different extension. Notice that this + * operation works on the path name represented by the File object. No attempt to resolve + * symlinks, or otherwise canonicalize the path name, is made. The file referenced by the file + * path may or may not exist. + * + * @param file the path from which to generate the new path + * @param newExtension the desired extension + * @return a file path with a different extension + */ + public static File replaceFileExtension (File file, String newExtension) + { + String name = file.getName(); + int index = name.lastIndexOf('.'); + if (index != -1) { + name = name.substring(0, index); + } + return new File(file.getParentFile(), name + newExtension); + } + + /** + * Return the SHA-1 hash for a file. + * + * @param file the file to hash + * @return a String representation of the hash in hexadecimal + */ + public static String sha1 (File file) + { + byte[] buf = new byte[4096]; + FileInputStream fio = null; + try { + fio = new FileInputStream(file); + MessageDigest digest = MessageDigest.getInstance("SHA-1"); + int read; + while ((read = fio.read(buf)) > 0) + digest.update(buf, 0, read); + return StringUtil.toHex(digest.digest()); + } catch (IOException e) { + throw new ResourceError("Could not read file for hashing: " + file, e); + } + catch (NoSuchAlgorithmException e) { + throw new ResourceError("Could not find SHA-1 algorithm", e); + } + finally { + close(fio); + } + } + + /** + * Copy the source properties file to the target, appending the given variable definitions as + * properties (with proper escaping). An optional marker string is printed as a comment before the + * extra variables, if any. + */ + public static void copyPropertiesFile ( + File source, + File target, + Set> extraVariables, + String extraComment) + { + if (source.isFile()) + copy(source, target); + appendProperties(target, extraVariables, extraComment); + } + + /** + * Append the given set of properties to a specified file, taking care of proper escaping of + * special characters. + * + * @param target the file to write -- content is appended + * @param extraVariables A string/value mapping of properties + * @param extraComment A properties-file commend to prepend to the new values, to trace + * provenance. Can be {@code null} to disable. + */ + public static void appendProperties (File target, Set> extraVariables, String extraComment) + { + if (extraVariables.isEmpty()) + return; + + Properties props = new Properties(); + + for (Pair var : extraVariables) + props.put(var.fst(), var.snd()); + + StringWriter writer = new StringWriter(); + writer.append('\n'); + try { + props.store(writer, extraComment); + } + catch (IOException e) { + throw new ResourceError("Failed to convert properties to string while appending to file " + target, e); + } + + append(target, writer.toString()); + } + + /** + * Append the given set of properties to a specified file, taking care of proper escaping of + * special characters. + * + * @param target the file to write -- content is appended + * @param extraVariables A string/value mapping of properties + * @param extraComment A properties-file commend to prepend to the new values, to trace + * provenance. Can be {@code null} to disable. + */ + public static void appendProperties (File target, Map extraVariables, String extraComment) + { + Set> vars = new LinkedHashSet<>(); + for (Entry e : extraVariables.entrySet()) + vars.add(Pair.make(e.getKey(), e.getValue())); + appendProperties(target, vars, extraComment); + } + + + /** + * A pattern matching "logical" path separators, i.e. runs of forward or back slashes, possibly + * interspersed with single dots. A string matched by this pattern is equivalent to a single + * occurrence of the separator. + */ + private static final Pattern ANY_PATH_SEPARATOR = Pattern.compile("[\\\\/]+(\\.[\\\\/]+)*"); + + /** + * Normalise a string representing a path by replacing sequences that match + * {@link #ANY_PATH_SEPARATOR} with a single forward slash. The transformation makes no + * reference to a file system. Example transformations: + *

      + *
    • a/./b to a/b
    • + *
    • a\b to a/b
    • + *
    • a\b/c to a/b/c
    • + *
    • C:\a\b to C:/a/b
    • + *
    • /a/b to /a/b
    • + *
    • . to . + *
    • ./ to ./ + *
    + */ + public static String normalizePathSeparators(String path) + { + return ANY_PATH_SEPARATOR.matcher(path).replaceAll("/"); + } + + /** + * Normalise a file name without incurring the cost of filesystem access that + * {@link File#getCanonicalFile()} would. In particular, remove redundant "./" + * components from the path, and simplify "foo/.." to nothing. The path is made + * absolute in the process. + * + * @param file + * the file path to normalise. + * @return A string representing the path of the file, with obviously redundant + * components stripped off. + */ + public static String simplifyPath (File file) + { + return file.toPath().toAbsolutePath().normalize().toString(); + } + + /** + * Read properties from a CSV file into a Map + * + * @param file CSV file, each row containing a key and value + * @return Map containing key-value bindings + */ + public static Map readPropertiesCSV (File file) + { + Map result = new LinkedHashMap<>(); + Reader reader = null; + InputStream input = null; + CSVReader csv = null; + try { + input = new FileInputStream(file); + reader = new InputStreamReader(input, "UTF-8"); + csv = new CSVReader(reader); + for (String[] line : csv.readAll()) { + if (line.length >= 1) { + String key = line[0]; + String value = null; + if (line.length >= 2) { + value = line[1]; + } + result.put(key, value); + } + } + return Collections.unmodifiableMap(result); + } + catch (UnsupportedEncodingException e) { + throw new CatastrophicError(e); + } + catch (IOException e) { + throw new ResourceError("Could not read data from " + file, e); + } + finally { + FileUtil.close(reader); + FileUtil.close(input); + FileUtil.close(csv); + } + } + + /** + * Write properties to a CSV file + * + * @param file CSV file + * @param data Map containing key-value bindings + */ + public static void writePropertiesCSV (File file, Map data) throws IOException + { + OutputStream out = null; + Writer writer = null; + CSVWriter csvWriter = null; + try { + out = new FileOutputStream(file); + writer = new OutputStreamWriter(out, "UTF-8"); + csvWriter = new CSVWriter(writer); + + for (Entry e : data.entrySet()) { + csvWriter.writeNext(e.getKey(), e.getValue()); + } + } + catch (FileNotFoundException e) { + throw new ResourceError("Could not find file '" + file + "'", e); + } + catch (UnsupportedEncodingException e) { + throw new CatastrophicError(e); + } + finally { + FileUtil.close(csvWriter); + FileUtil.close(writer); + FileUtil.close(out); + } + } + + /** + * Obtain a File that does not exist, returning the given {@code path} if it does not exist, or + * the given {@code path} with a randomly generated numerical suffix if it does. + * + * @throws ResourceError if the {@code path} could not be accessed. + */ + public static final File ensureUnique (File path) + { + try { + if (path.exists()) { + Random random = new Random(); + File uniquePath; + do { + uniquePath = new File(path.toString() + "." + random.nextInt()); + } + while (uniquePath.exists()); + return uniquePath; + } + return path; + } + catch (SecurityException se) { + throw new ResourceError("Could not access file " + path, se); + } + } + + /** + * Open the specified {@code file} with a new {@link Writer}. + * + * @param file The file to open + * @param overwrite Flag indicating whether the file may be overwritten if it already exists. + * @param append Flag indicating whether the file should be appended if it already exists ( + * {@code overwrite} is ignored if this flag is true). + */ + public static Writer openWriterUTF8 (File file, boolean overwrite, boolean append) + { + try { + FileOutputStream ostream; + if (file.exists()) { + if (append) { + ostream = new FileOutputStream(file, true); + } + else if (overwrite) { + if (!file.delete()) { + throw new ResourceError("Could not delete existing file: " + file); + } + ostream = new FileOutputStream(file, false); + } + else { + throw new ResourceError("File already exists: " + file); + } + } + else { + ostream = new FileOutputStream(file, false); + } + return new OutputStreamWriter(ostream, UTF8); + } + catch (SecurityException se) { + throw new ResourceError("Could not access file " + file, se); + } + catch (IOException ioe) { + throw new ResourceError("Failed to open FileWriter for " + file, ioe); + } + } + + /** + * Rename a file, creating any directories as needed. If the destination file (or directory) + * exists, it is overwritten. + * + * @param src The file to be renamed. Must be non-null and must exist. + * @param dest The file's new name. Must be non-null. Will be overwritten if it already exists. + */ + public static void forceRename (File src, File dest) + { + final String errorPrefix = "FileUtil.forceRename: "; + if (src == null) + throw new CatastrophicError(errorPrefix + "source File is null."); + if (dest == null) + throw new CatastrophicError(errorPrefix + "destination File is null."); + if (!src.exists()) + throw new ResourceError(errorPrefix + "source File '" + src.toString() + "' does not exist."); + + // File.renameTo(foo) requires that foo's parent directory exists. + mkdirs(dest.getAbsoluteFile().getParentFile()); + if (dest.exists() && !recursiveDelete(dest)) + throw new ResourceError(errorPrefix + "Couldn't overwrite destination file '" + dest.toString() + "'."); + if (!src.renameTo(dest)) + throw new ResourceError(errorPrefix + "Couldn't rename file '" + src.toString() + "' to '" + dest.toString() + + "'."); + } + + /** + * Copy a file, creating any directories as needed. If the destination file (or directory) + * exists, it is overwritten. + * + * @param src The file to be renamed. Must be non-null and must exist. + * @param dest The path to copy the file to. Must be non-null. Will be overwritten if it already exists. + */ + public static void forceCopy(File src, File dest) + { + final String errorPrefix = "FileUtil.forceCopy: "; + if (src == null) + throw new CatastrophicError(errorPrefix + "source File is null."); + if (dest == null) + throw new CatastrophicError(errorPrefix + "destination File is null."); + if (!src.exists()) + throw new ResourceError(errorPrefix + "source File '" + src.toString() + "' does not exist.", new FileNotFoundException(src.toString())); + + mkdirs(dest.getAbsoluteFile().getParentFile()); + if (dest.exists() && !recursiveDelete(dest)) + throw new ResourceError(errorPrefix + "Couldn't overwrite destination file '" + dest.toString() + "'."); + if (!copy(src, dest)) + throw new ResourceError(errorPrefix + "Couldn't copy file '" + src.toString() + "' to '" + dest.toString() + + "'."); + } + + /** + * Query whether a {@link File} is non-null, and represents an existing file that can be + * read. + */ + public static boolean isReadableFile (File path) + { + return path != null && path.isFile() && path.canRead(); + } + + /** + * Compare a pair of paths using their canonical form to determine if they resolve to identical + * paths. Returns false if either is null. + */ + public static boolean isSamePath (File path1, File path2) + { + // Quick break-out if either path is null + if (path1 == null || path2 == null) { + return false; + } + // Compare the canonical paths + return ObjectUtil.equals(tryMakeCanonical(path1), tryMakeCanonical(path2)); + } + + /** + * Add the extension {@code extension} to the {@link File} {@code file}. + * + * @param file - the File to which we want to add the {@code extension}. + * @param extension - the extension, without the dot, which will be appended. + * @return a copy of {@code file} with the extension added. + */ + public static File addExtension (File file, String extension) + { + return new File(file.getPath() + "." + extension); + } + + /** + * Ensures the existence of a given file. The method does nothing if the file already exists and creates a + * new one if it does not. + * @throws ResourceError if f already exists and is not a file. + */ + public static void ensureFileExists(File f){ + try{ + if(!f.exists()){ + mkdirs(f.getAbsoluteFile().getParentFile()); + if(!f.createNewFile()) { + throw new ResourceError("Cannot create file '" + f + "', since a directory with the same name already exists!"); + } + }else if(f.isDirectory()){ + throw new ResourceError("Cannot create file '" + f + "', since a directory with the same name already exists!"); + } + }catch(IOException ioe){ + throw new ResourceError("Could not create file '" + f + "'", ioe); + } + } + + /** + * Copy a resource within a class into a file. + * @param clazz The class responsible for the resource. + * @param resourceName The resource's name. + * @param target The file to copy the resource to. + */ + /* + public static void resourceToFile(Class clazz, String resourceName, File target){ + try { + Files.createDirectories(target.toPath().getParent()); + try (InputStream is = clazz.getResourceAsStream(resourceName); + AtomicFileOutputStream afos = new AtomicFileOutputStream(target.toPath()); + BufferedOutputStream bos = new BufferedOutputStream(afos)) { + StreamUtil.copy(is, bos); + } + } catch (IOException e) { + throw new ResourceError("Error copying resource '" + clazz.getName() + "' '" + resourceName + "' to '" + target + "'", e); + } + } + */ + + /** + * Attempts to create a temporary directory. + */ + public static File createTempDir(){ + File globalTempDir = new File(System.getProperty("java.io.tmpdir")); + return createUniqueDirectory(globalTempDir, "semmleTempDir"); + } + + /** + * Magic constant: the maximum number of file operation attempts in + * {@link #performWithRetries}. + */ + private static final int FILE_OPERATION_ATTEMPTS_LIMIT = 30; + /** + * Magic constant: the delay between file operation attempts in + * {@link #performWithRetries}. Chosen to overapproximate the time Windows + * Defender takes to scan directories our code creates. + */ + private static final int FILE_OPERATION_ATTEMPTS_DELAY_MS = 1000; + + /** + * Functional interface resembling a {@link BiConsumer} of {@link Path}s, + * but whose {@code accept} method may throw an {@link IOException}. + */ + private static interface RetryablePathConsumer { + void accept(Path source, Path target) throws IOException; + } + + /** + * In Java 8, this would just be BiFunction. + */ + private static interface ErrorMessageCreator { + String apply(Path source, Path target); + } + + /** + * Attempts to perform the given {@code operation} on the {@code source} and + * {@code target} paths. + * + * If the operation fails, it is attempted again after a + * {@value #FILE_OPERATION_ATTEMPTS_DELAY_MS} ms delay. This process is + * repeated until the operation succeeds, or a total of + * {@value #FILE_OPERATION_ATTEMPTS_LIMIT} attempts are made, at which point + * an error is thrown. The given {@code errorMessageCreator} is used to + * construct suitable messages upon retries or failure. + *

    + * This is useful when either the source or the target has been created just + * before the attempted operation. (For example, atomic directory creation + * usually involves creating a temporary directory with the desired contents + * and then moving it to the desired location, or temporary directories may + * be created, populated, and then deleted after use.) + * + * Aggressive variants of Windows Defender (ATP) tend to scan such newly-created + * files immediately, and the operation will only succeed if attempted again + * after Defender releases the files. + * + * @throws IOException + * if the operation does not succeed after + * {@value #FILE_OPERATION_ATTEMPTS_LIMIT} attempts + */ + private static void performWithRetries(RetryablePathConsumer operation, Path source, Path target, + ErrorMessageCreator errorMessageCreator) throws IOException { + for (int i = 1;; i++) { + try { + operation.accept(source, target); + return; + } catch (AtomicMoveNotSupportedException e) { + // Allow this to propagate, since retrying won't help. + throw e; + } catch (IOException e) { + String message = errorMessageCreator.apply(source, target); + logger.warn(message + " (attempt " + i + ")", e); + if (i == FILE_OPERATION_ATTEMPTS_LIMIT) + throw new IOException(message + "(" + FILE_OPERATION_ATTEMPTS_LIMIT + " attempts made)", e); + } + try { + logger.trace("Waiting for " + FILE_OPERATION_ATTEMPTS_DELAY_MS + " ms before making another attempt."); + Thread.sleep(FILE_OPERATION_ATTEMPTS_DELAY_MS); + } catch (InterruptedException e) { + logger.warn("Thread interrupted before making another attempt.", e); + } + } + } + + /** + * Attempts to move the {@code source} file to the {@code target} file. + * Wraps {@link #performWithRetries} around + * {@link java.nio.file.Files#move} to retry the move if it fails. + * + * @see #performWithRetries + */ + public static void moveWithRetries(Path source, Path target, final CopyOption... options) throws IOException { + performWithRetries( + new RetryablePathConsumer() { + @Override + public void accept(Path source, Path target) throws IOException { Files.move(source, target, options); } + }, + source, target, + new ErrorMessageCreator() { + @Override + public String apply(Path s, Path t) { return "Failed to perform move from " + s.toAbsolutePath() + " to " + t.toAbsolutePath(); } + }); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/files/PathMatcher.java b/java/kotlin-extractor/src/main/java/com/semmle/util/files/PathMatcher.java new file mode 100644 index 00000000000..56563960144 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/files/PathMatcher.java @@ -0,0 +1,160 @@ +package com.semmle.util.files; + +import java.util.regex.Pattern; + +import com.semmle.util.data.StringUtil; + +/** + * Utility class to match a string to a pattern, which can either be + * an ant-like include/exclude pattern (with wildcards), or a rsync-like + * pattern. + *

    + * In ant-like mode: + *

      + *
    • '**' matches zero or more characters (most notably including '/'). + *
    • '*' matches zero or more characters except for '/'. + *
    • '?' matches any character (other than '/'). + *
    + *

    + * In rsync-like mode: + *

      + *
    • A pattern is matched only at the root if it starts with '/', and otherwise + * it is matched against each level of the directory tree. + *
    • '**', '*' and '?' have the same meaning as for ant. + *
    • Other rsync features (like [:..:] groups and backslash-escapes) are not supported. + *
    + */ +public class PathMatcher { + + public enum Mode { + Ant, Rsync; + } + + private final Mode mode; + private final Pattern pattern; + private final String originalPattern; + + /** + * Create a {@link PathMatcher}. + * + * @param pattern An ant-like pattern + */ + public PathMatcher(String pattern) { + this(Mode.Ant, pattern); + } + + /** Create a {@link PathMatcher}. + * + * @param mode The {@link Mode} to use + * @param pattern A pattern, interpreted as ant-like or rsync-like depending on + * the value of {@code mode} + */ + public PathMatcher(Mode mode, String pattern) { + this.mode = mode; + this.originalPattern = pattern; + StringBuilder b = new StringBuilder(); + toRegex(b, pattern); + this.pattern = Pattern.compile(b.toString()); + } + + /** Create a {@link PathMatcher}. + * + * @param patterns Several ant-like patterns + */ + public PathMatcher(Iterable patterns) { + this(Mode.Ant, patterns); + } + + /** Create a {@link PathMatcher}. + * + * @param mode The {@link Mode} to use. + * @param patterns Several patterns, interpreted as ant-like or rsync-like depending + * on the value of {@code mode}. + */ + public PathMatcher(Mode mode, Iterable patterns) { + this.mode = mode; + this.originalPattern = patterns.toString(); + StringBuilder b = new StringBuilder(); + for (String pattern : patterns) { + if (b.length() > 0) + b.append('|'); + toRegex(b, pattern); + } + this.pattern = Pattern.compile(b.toString()); + } + + private void toRegex(StringBuilder b, String pattern) { + if (pattern.length() == 0) return; + //normalize pattern path separators + pattern = pattern.replace('\\', '/'); + //replace double slashes + pattern = pattern.replaceAll("//+", "/"); + // escape + pattern = StringUtil.escapeStringLiteralForRegexp(pattern, "*?"); + + // for ant, ending with '/' is shorthand for "/**" + if (mode == Mode.Ant && pattern.endsWith("/")) pattern = pattern + "**"; + + // replace "**/" with (^|.*/)" + // replace "**" with ".*" + // replace "*" with "[^/]* + // replace "?" with "[^/]" + int i = 0; + + // In rsync-mode, a leading slash is an 'anchor' -- the pattern is only matched + // when rooted at the start of the path. This is the default behaviour for ant-like + // patterns. + if (mode == Mode.Rsync) { + if (pattern.charAt(0) == '/') { + // The slash is just anchoring, and may actually be missing + // in the case of a relative path. + b.append("/?"); + i++; + } else { + // Non-anchored rsync pattern: the pattern can match at any level in the tree. + b.append("(.*/)?"); + } + } + + while (i < pattern.length()) { + char c = pattern.charAt(i); + if (c == '*' && i < pattern.length() - 2 && pattern.charAt(i+1) == '*' && pattern.charAt(i+2) == '/') { + b.append("(?:^|.*/)"); + i += 3; + } + else if (c == '*' && i < pattern.length() - 1 && pattern.charAt(i+1) == '*') { + b.append(".*"); + i += 2; + } + else if(c == '*') { + b.append("[^/]*"); + i++; + } + else if(c == '?') { + b.append("[^/]"); + i++; + } + else { + b.append(c); + i++; + } + } + } + + /** + * Match the specified path against a shell pattern. The path is normalised by replacing '\' with '/'. + * @param path The path to match. + */ + public boolean matches(String path) { + // normalise path + path = path.replace('\\', '/'); + if(path.endsWith("/")) + path = path.substring(0, path.length()-1); + return pattern.matcher(path).matches(); + } + + @Override + public String toString() { + return "Matches " + originalPattern + " [" + pattern + "]"; + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/io/BufferedLineReader.java b/java/kotlin-extractor/src/main/java/com/semmle/util/io/BufferedLineReader.java new file mode 100644 index 00000000000..99c0b7d1569 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/io/BufferedLineReader.java @@ -0,0 +1,103 @@ +package com.semmle.util.io; + +import java.io.BufferedReader; +import java.io.Closeable; +import java.io.IOException; +import java.io.Reader; + +import com.semmle.util.files.FileUtil; + +/** + * A custom buffered reader akin to {@link BufferedReader}, except that it preserves + * line terminators (and so its {@code readLine()} method is called + * {@link #readLineAndTerminator()}). The other {@link Reader} methods should not + * be called, and will throw. + */ +public class BufferedLineReader implements Closeable { + private final char[] buffer = new char[8192]; + private int nextChar = 0, nChars = 0; + private final Reader in; + + public BufferedLineReader(Reader in) { + this.in = in; + } + + /** + * Read the string up to and including the next CRLF or LF terminator. This method + * may return a non-terminated string at EOF, or if a line is too long to fit in the + * internal buffer. Calls will block until enough data has been read to fill the + * buffer or find a line terminator. + * @return The next line (or buffer-full) of text. + * @throws IOException if the underlying stream throws. + */ + public String readLineAndTerminator() throws IOException { + int terminator = findNextLineTerminator(); + if (terminator == -1) + return null; + String result = new String(buffer, nextChar, terminator - nextChar + 1); + nextChar = terminator + 1; + return result; + } + + /** + * Get the index of the last character that should be included in the next line. + * Usually, this is the LF in a LF or CRLF line terminator, but it might be the + * end of the buffer (if it is full, and no newlines are present), or it may be + * -1 (but only if EOF has been reached, and the buffer is currently empty). + * The first character of the line is pointed to by {@link #nextChar}, which + * may be modified by this method if the buffer is refilled. + */ + private int findNextLineTerminator() throws IOException { + int alreadyChecked = 0; + do { + for (int i = nextChar + alreadyChecked; i < nChars; i++) { + if (buffer[i] == '\r' && i+1 < nChars && buffer[i+1] == '\n') + return i+1; // CRLF + else if (buffer[i] == '\n') + return i; // LF + } + + // We didn't find a full newline in the existing buffer: Try to fill. + alreadyChecked = nChars - nextChar; + int newlyRead = fill(); + if (newlyRead <= 0) + return nChars - 1; + } while (true); + } + + /** + * Block until at least one character from the underlying stream is read, + * or EOF is reached. + */ + private int fill() throws IOException { + if (nextChar >= nChars) { + // No unread characters. + nextChar = 0; + nChars = 0; + } else if (nextChar > 0) { + // Some unread characters. + System.arraycopy(buffer, nextChar, buffer, 0, nChars - nextChar); + nChars = nChars - nextChar; + nextChar = 0; + } + + // Is the buffer full? + if (nChars == buffer.length) + return 0; + + int read; + do { + read = in.read(buffer, nChars, buffer.length - nChars); + } while (read == 0); + + if (read > 0) { + nChars += read; + } + return read; + } + + @Override + public void close() { + FileUtil.close(in); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/io/RawStreamMuncher.java b/java/kotlin-extractor/src/main/java/com/semmle/util/io/RawStreamMuncher.java new file mode 100644 index 00000000000..29ca3538530 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/io/RawStreamMuncher.java @@ -0,0 +1,34 @@ +package com.semmle.util.io; + +import com.semmle.util.exception.Exceptions; +import com.semmle.util.files.FileUtil; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * A thread that copies data from an input stream to an output stream. When + * the input stream runs out, it closes both the input and output streams. + */ +public class RawStreamMuncher extends Thread { + private final InputStream in; + private final OutputStream out; + + public RawStreamMuncher(InputStream in, OutputStream out) { + this.in = in; + this.out = out; + } + + @Override + public void run() { + try { + StreamUtil.copy(in, out); + } catch (IOException e) { + Exceptions.ignore(e, "When the process exits, a harmless IOException will occur here"); + } finally { + FileUtil.close(in); + FileUtil.close(out); + } + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/io/StreamMuncher.java b/java/kotlin-extractor/src/main/java/com/semmle/util/io/StreamMuncher.java new file mode 100644 index 00000000000..d9c557690f0 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/io/StreamMuncher.java @@ -0,0 +1,49 @@ +package com.semmle.util.io; + +import com.semmle.util.exception.Exceptions; +import com.semmle.util.files.FileUtil; +import com.semmle.util.io.BufferedLineReader; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintStream; + +/** + * A thread that forwards data from one stream to another. It waits for + * entire lines of input from one stream before writing data to the next + * stream, and it flushes as it goes. + */ +public class StreamMuncher extends Thread { + private final InputStream is; + private PrintStream output; + private BufferedLineReader reader; + + public StreamMuncher(InputStream is, OutputStream output) { + this.is = is; + if (output != null) + this.output = new PrintStream(output); + } + + @Override + public void run() { + InputStreamReader isr = null; + try { + isr = new InputStreamReader(is); + reader = new BufferedLineReader(isr); + String line; + while ((line = reader.readLineAndTerminator()) != null) { + if (output != null) { + output.print(line); + output.flush(); + } + } + } catch (IOException e) { + Exceptions.ignore(e, "When the process exits, a harmless IOException will occur here"); + } finally { + FileUtil.close(reader); + FileUtil.close(isr); + } + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/io/StreamUtil.java b/java/kotlin-extractor/src/main/java/com/semmle/util/io/StreamUtil.java new file mode 100644 index 00000000000..8071b2803fc --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/io/StreamUtil.java @@ -0,0 +1,201 @@ +package com.semmle.util.io; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.io.Writer; +import java.nio.charset.StandardCharsets; + +import com.semmle.util.exception.CatastrophicError; + +/** + * Utility methods concerning {@link InputStream}s and {@link OutputStream}s. + */ +public class StreamUtil +{ + /** + * Copy all bytes that can be read from an {@link InputStream}, into an {@link OutputStream}. + * + * @param inputStream The InputStream from which to read, until an + * {@link InputStream#read(byte[])} operation returns indicating that the input stream + * has reached its end. + * @param outputStream The OutputStream to which all bytes read from {@code inputStream} should be + * written. + * @return The number of bytes copied. + * @throws IOException from {@link InputStream#read(byte[])} or + * {@link OutputStream#write(byte[], int, int)} + * @throws CatastrophicError if either of the streams is {@code null} + */ + public static long copy(InputStream inputStream, OutputStream outputStream) throws IOException + { + nullCheck(inputStream, outputStream); + + // Copy byte data + long total = 0; + byte[] bytes = new byte[1024]; + int read; + while ((read = inputStream.read(bytes)) > 0) { + outputStream.write(bytes, 0, read); + total += read; + } + return total; + } + + /** + * Copy all chars that can be read from a {@link Reader}, into a {@link Writer}. + * + * @param reader The Reader from which to read, until a {@link Reader#read(char[])} operation + * returns indicating that the reader has reached its end. + * @param writer The Writer to which all characters read from {@code reader} should be written. + * @return The number of bytes copied. + * @throws IOException from {@link Reader#read(char[])} or + * {@link Writer#write(char[], int, int)} + * @throws CatastrophicError if either of the streams is {@code null} + */ + public static long copy(Reader reader, Writer writer) throws IOException + { + nullCheck(reader, writer); + + // Copy byte data + long total = 0; + char[] chars = new char[1024]; + int read; + while ((read = reader.read(chars)) > 0) { + writer.write(chars, 0, read); + total += read; + } + return total; + } + + /** + * Copy at most {@code length} bytes from an {@link InputStream}, into an {@link OutputStream}. + *

    + * Note that this method will busy-wait during periods for which the {@code inputStream} cannot + * supply any data, but has not reached its end. + *

    + * + * @param inputStream The InputStream from which to read, until {@code length} bytes have + * been read or {@link InputStream#read(byte[], int, int)} operation returns + * indicating that the input stream has reached its end. + * @param outputStream The OutputStream to which all bytes read from {@code inputStream} should be + * written. + * @param length The maximum number of bytes to copy + * @return The number of bytes copied. + * @throws IOException from {@link InputStream#read(byte[], int, int)} or + * {@link OutputStream#write(byte[], int, int)} + * @throws CatastrophicError if either of the streams is {@code null} + */ + public static long limitedCopy(InputStream inputStream, OutputStream outputStream, long length) throws IOException + { + nullCheck(inputStream, outputStream); + + // Copy byte data + long total = 0; + byte[] bytes = new byte[1024]; + int read; + while ((read = inputStream.read(bytes, 0, (int) Math.min(bytes.length, length))) > 0) { + outputStream.write(bytes, 0, read); + length -= read; + total += read; + } + return total; + } + + private static void nullCheck(Object input, Object output) { + CatastrophicError.throwIfAnyNull(input, output); + } + + /** + * Skips over and discards n bytes of data from an input stream. If n is negative then no bytes are skipped. + * @param stream the InputStream + * @param n the number of bytes to be skipped. + * @return false if the end-of-file was reached before successfully skipping n bytes + */ + public static boolean skip(InputStream stream, long n) throws IOException { + if (n <= 0) + return true; + long toSkip = n - 1; + + while (toSkip > 0) { + long skipped = stream.skip(toSkip); + if (skipped == 0) { + if(stream.read() == -1) + return false; + else + skipped++; + } + toSkip -= skipped; + } + if(stream.read() == -1) + return false; + else + return true; + } + + /** + * Reads n bytes from the input stream and returns them. This method will block + * until all n bytes are available. If the end of the stream is reached before n bytes are + * read it returns just the read bytes. + * + * @param stream the InputStream + * @param n the number of bytes to read + * @return the read bytes + * @throws IOException if an IOException occurs when accessing the stream + * @throws IllegalArgumentException if n is negative + */ + public static byte[] readN(InputStream stream, int n) throws IOException { + if (n < 0) throw new IllegalArgumentException("n must be positive"); + + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + limitedCopy(stream, bOut, n); + return bOut.toByteArray(); + } + + /** + * Reads bytes from the input stream into the given buffer. This method will block + * until all bytes are available. If the end of the stream is reached before enough bytes are + * read it reads as much as it can. + * + * @param stream the InputStream + * @param buf the buffer to read into + * @param offset the offset to read into + * @param length the number of bytes to read + * @return the total number of read bytes + * @throws IOException if an IOException occurs when accessing the stream + * @throws IllegalArgumentException if n is negative + */ + public static int read(InputStream stream, byte[] buf, int offset, int length) throws IOException { + if (length < 0) throw new IllegalArgumentException("length must be positive"); + + // Copy byte data + int total = 0; + int read; + while ((read = stream.read(buf, offset, length)) > 0) { + length -= read; + total += read; + } + + return total; + } + + /** + * Convenience method for constructing a buffered reader with a UTF8 charset. + */ + public static BufferedReader newUTF8BufferedReader(InputStream inputStream) { + return new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + } + + /** + * Convenience method for constructing a buffered writer with a UTF8 charset. + */ + public static BufferedWriter newUTF8BufferedWriter(OutputStream outputStream) { + return new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)); + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/io/WholeIO.java b/java/kotlin-extractor/src/main/java/com/semmle/util/io/WholeIO.java new file mode 100644 index 00000000000..d45ea9c5daa --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/io/WholeIO.java @@ -0,0 +1,548 @@ +package com.semmle.util.io; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; +import java.io.Writer; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.OpenOption; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.Arrays; +import java.util.regex.Pattern; + +import com.semmle.util.array.ArrayUtil; +import com.semmle.util.data.IntRef; +import com.semmle.util.exception.ResourceError; +import com.semmle.util.files.FileUtil; + +/** + * A class that allows bulk operations on entire files, + * reading or writing them as {@link String} values. + * + * This is intended to address the woeful inadequacy of + * the Java standard libraries in this area. + */ +public class WholeIO { + private IOException e; + + /** + * Regular expression {@link Pattern} + */ + private final static Pattern rpLineEndingCRLF = Pattern.compile("\r\n"); + + /** + * The default encoding to use for writing, and for reading if no + * encoding can be detected. + */ + private final String defaultEncoding; + + /** + * Construct a new {@link WholeIO} instance using ODASA's default + * charset ({@code "UTF-8"}) for all input and output (unless a + * different encoding is detected for a file being read). + */ + public WholeIO() { + this("UTF-8"); + } + + /** + * Construct a new {@link WholeIO} instance using the specified + * encoding for all input and output (unless a different encoding + * is detected for a file being read). + * + * @param encoding The encoding name, e.g. {@code "UTF-8"}. + */ + public WholeIO(String encoding) { + defaultEncoding = encoding; + } + + /** + * Open the given file for reading, get the entire content + * and return it as a {@link String}. Returns null + * on error, in which case you can check the getLastException() + * method for the exception that occurred. + * + * Warning: This method trims the content of the file, removing + * leading and trailing whitespace. Do not use it if you care about file + * locations being preserved; use 'read' instead. + * + * @param file The file to read + * @return The trimmed contents of the file, or null on error. + */ + public String readAndTrim(File file) { + e = null; + FileInputStream f = null; + try { + f = new FileInputStream(file); + String contents = readString(f); + return contents == null ? null : contents.trim(); + } catch (IOException e) { + this.e = e; + return null; + } finally { + FileUtil.close(f); + } + } + + /** + * Open the given filename for writing and dump the given + * {@link String} into it. Returns false + * on error, in which case you can check the getLastException() + * method for the exception that occurred. Tries to create any + * enclosing directories that do not exist. + * + * @param filename The name of the file to write to + * @param contents the string to write out + * @return the success state + */ + public boolean write(String filename, String contents) { + return write(new File(filename), contents); + } + + /** + * Open the given filename for writing and dump the given + * {@link String} into it. Returns false + * on error, in which case you can check the getLastException() + * method for the exception that occurred. Tries to create any + * enclosing directories that do not exist. + * + * @param file The file to write to + * @param contents the string to write out + * @return the success state + */ + public boolean write(File file, String contents) { + return write(file, contents, false); + } + + /** + * Open the given path for writing and dump the given + * {@link String} into it. Returns false + * on error, in which case you can check the getLastException() + * method for the exception that occurred. Tries to create any + * enclosing directories that do not exist. + * + * @param path The path to write to + * @param contents the string to write out + * @return the success state + */ + public boolean write(Path path, String contents) { + return write(path, contents, false); + } + + /** + * Open the given filename for writing and dump the given + * {@link String} into it. Throws {@link ResourceError} + * if we fail. + * + * @param file The file to write to + * @param contents the string to write out + */ + public void strictwrite(File file, String contents) { + strictwrite(file, contents, false); + } + + /** + * Open the given path for writing and dump the given + * {@link String} into it. Throws {@link ResourceError} + * if we fail. + * + * @param path The path to write to + * @param contents the string to write out + */ + public void strictwrite(Path path, String contents) { + strictwrite(path, contents, false); + } + + /** + * This is the same as {@link #write(File,String)}, + * except that this method allows appending to an existing file. + * + * @param file the file to write to + * @param contents the string to write out + * @param append whether or not to append to any existing file + * @return the success state + */ + public boolean write(File file, String contents, boolean append) { + if (file.getParentFile() != null) + file.getParentFile().mkdirs(); + + FileOutputStream fos = null; + try { + fos = new FileOutputStream(file, append); + Writer writer = new OutputStreamWriter(fos, Charset.forName(defaultEncoding)); + writer.append(contents); + writer.close(); + return true; + } catch (IOException e) { + this.e = e; + return false; + } finally { + FileUtil.close(fos); + } + } + + /** + * This is the same as {@link #write(Path,String)}, + * except that this method allows appending to an existing file. + * + * @param path the path to write to + * @param contents the string to write out + * @param append whether or not to append to any existing file + * @return the success state + */ + public boolean write(Path path, String contents, boolean append) { + try { + if (path.getParent() != null) + Files.createDirectories(path.getParent()); + + try (Writer writer = Files.newBufferedWriter(path, Charset.forName(defaultEncoding), + StandardOpenOption.CREATE, StandardOpenOption.WRITE, + append ? StandardOpenOption.APPEND : StandardOpenOption.TRUNCATE_EXISTING)) { + writer.append(contents); + } + } catch (IOException e) { + this.e = e; + return false; + } + return true; + } + + /** + * This is the same as {@link #strictwrite(File,String)}, + * except that this method allows appending to an existing file. + */ + public void strictwrite(File file, String contents, boolean append) { + if (!write(file, contents, append)) + throw new ResourceError("Failed to write file " + file, getLastException()); + } + + /** + * This is the same as {@link #strictwrite(Path,String)}, + * except that this method allows appending to an existing file. + */ + public void strictwrite(Path path, String contents, boolean append) { + if (!write(path, contents, append)) + throw new ResourceError("Failed to write path " + path, getLastException()); + } + + /** + * Get the exception that occurred during the last call to + * read(), if any. If the last read() call completed normally, + * this returns null. + * @return The last caught exception, or null if N/A. + */ + public IOException getLastException() { + return e; + } + + public String read(File file) { + InputStream is = null; + try { + is = new FileInputStream(file); + return readString(is); + } + catch (IOException e) { + this.e = e; + return null; + } + finally { + FileUtil.close(is); + } + } + + public String read(Path path) { + InputStream is = null; + try { + is = Files.newInputStream(path); + return readString(is); + } + catch (IOException e) { + this.e = e; + return null; + } + finally { + FileUtil.close(is); + } + } + + /** + * Read the contents of the given {@link File} as text (line endings are normalised to "\n" in the output). + * + * @param file The file to read. + * @return The text contents of the file, if possible, or null if the file cannot be read. + */ + public String readText(File file) { + String result = read(file); + return result != null ? result.replaceAll("\r\n", "\n") : null; + } + + /** + * Read the contents of the given {@link Path} as text (line endings are normalised to "\n" in the output). + * + * @param path The path to read. + * @return The text contents of the path, if possible, or null if the file cannot be read. + */ + public String readText(Path path) { + String result = read(path); + return result != null ? result.replaceAll("\r\n", "\n") : null; + } + + + /** + * Read the contents of the given {@link File}, throwing a {@link ResourceError} + * if we fail. + */ + public String strictread(File f) { + String content = read(f); + if (content == null) + throw new ResourceError("Failed to read file " + f, getLastException()); + return content; + } + + /** + * Read the contents of the given {@link Path}, throwing a {@link ResourceError} + * if we fail. + */ + public String strictread(Path f) { + String content = read(f); + if (content == null) + throw new ResourceError("Failed to read path " + f, getLastException()); + return content; + } + + /** + * Read the contents of the given {@link File} as text (line endings are normalised to "\n" in the output). + * + * @param file The file to read. + * @return The text contents of the file, if possible. + * @throws ResourceError If the file cannot be read. + */ + public String strictreadText(File file) { + return rpLineEndingCRLF.matcher(strictread(file)).replaceAll("\n"); + } + + /** + * Read the contents of the given {@link Path} as text (line endings are normalised to "\n" in the output). + * + * @param path The path to read. + * @return The text contents of the path, if possible. + * @throws ResourceError If the path cannot be read. + */ + public String strictreadText(Path path) { + return rpLineEndingCRLF.matcher(strictread(path)).replaceAll("\n"); + } + + /** + * Get the entire content of an {@link InputStream} + * and interpret it as a {@link String} trying to detect its character set. + * Returns null on error, in which case you can check + * the getLastException() method for the exception that occurred. + * + * @param stream the stream to read from + * @return The contents of the file, or null on error. + */ + public String readString(InputStream stream) { + IntRef length = new IntRef(0); + byte[] bytes = readBinary(stream, length); + + if (bytes == null) return null; + + try { + IntRef start = new IntRef(0); + String charset = determineCharset(bytes, length.get(), start); + return new String(bytes, start.get(), length.get() - start.get(), charset); + } catch (UnsupportedEncodingException e) { + this.e = e; + return null; + } + } + + /** + * Get the entire content of an {@link InputStream} + * and interpret it as a {@link String} trying to detect its character set. + * Throws a {@link ResourceError} on error. + * + * @param stream the stream to read from + * @return the contents of the input stream + */ + public String strictReadString(InputStream stream) { + String content = readString(stream); + if (content == null) + throw new ResourceError("Could not read from stream", getLastException()); + return content; + } + + /** + * Get the entire content of an {@link InputStream}, interpreting it + * as a sequence of bytes. This removes restrictions regarding invalid + * code points that would potentially prevent reading a file's contents + * as a String. + * + * This method returns null on error, in which case you can + * check {@link #getLastException()} for the exception that occurred. + * + * @param stream the stream to read from + * @return The binary contents of the file, or null on error. + */ + public byte[] readBinary(InputStream stream) { + IntRef length = new IntRef(0); + byte[] bytes = readBinary(stream, length); + return bytes == null ? null : Arrays.copyOf(bytes, length.get()); + } + + /** + * Get the entire content of an {@link InputStream}, interpreting it + * as a sequence of bytes. This removes restrictions regarding invalid + * code points that would potentially prevent reading a file's contents + * as a String. + * + * @param stream the stream to read from + * @return The binary contents of the file -- always non-null. + * @throws ResourceError if an exception occurs during IO. + */ + public byte[] strictReadBinary(InputStream stream) { + byte[] result = readBinary(stream); + if (result == null) + throw new ResourceError("Couldn't read from stream", e); + return result; + } + + /** + * Get the entire binary contents of a {@link File} as a sequence of bytes. + * + * @param file the file to read + * @return the file's contents as a byte[] -- always non-null. + * @throws ResourceError if an exception occurs during IO. + */ + public byte[] strictReadBinary(File file) { + FileInputStream stream = null; + try { + stream = new FileInputStream(file); + byte[] result = readBinary(stream); + if (result == null) + throw new ResourceError("Couldn't read from file " + file + ".", e); + return result; + } catch (FileNotFoundException e) { + throw new ResourceError("Couldn't read from file " + file + ".", e); + } finally { + FileUtil.close(stream); + } + } + + /** + * Get the entire binary contents of a {@link Path} as a sequence of bytes. + * + * @param path the path to read + * @return the file's contents as a byte[] -- always non-null. + * @throws ResourceError if an exception occurs during IO. + */ + public byte[] strictReadBinary(Path path) { + InputStream stream = null; + try { + stream = Files.newInputStream(path); + byte[] result = readBinary(stream); + if (result == null) + throw new ResourceError("Couldn't read from path " + path + ".", e); + return result; + } catch (IOException e) { + throw new ResourceError("Couldn't read from path " + path + ".", e); + } finally { + FileUtil.close(stream); + } + } + + /** + * Get the entire binary contents of a {@link Path} as a sequence of bytes. + * + * @param path the path to read + * @return the file's contents as a byte[] -- always non-null. + */ + public byte[] readBinary(Path path) throws IOException { + InputStream stream = null; + try { + stream = Files.newInputStream(path); + byte[] result = readBinary(stream); + if (result == null) + throw new ResourceError("Couldn't read from path " + path + ".", e); + return result; + } finally { + FileUtil.close(stream); + } + } + + private byte[] readBinary(InputStream stream, IntRef offsetHolder) { + try { + byte[] bytes = new byte[16384]; + int offset = 0; + int readThisTime; + do { + readThisTime = stream.read(bytes, offset, bytes.length - offset); + if (readThisTime > 0) { + offset += readThisTime; + if (offset == bytes.length) + bytes = safeArrayDouble(bytes); + } + } while (readThisTime > 0); + offsetHolder.set(offset); + return bytes; + } catch (IOException e) { + this.e = e; + return null; + } + } + + /** + * Safely attempt to double the length of an array. + * @param array The array which want to be doubled + * @return a new array that is longer than array + */ + private byte[] safeArrayDouble(byte[] array) { + if (array.length >= ArrayUtil.MAX_ARRAY_LENGTH) { + throw new ResourceError("Cannot stream into array as it exceed the maximum array size"); + } + // Compute desired capacity + long newCapacity = array.length * 2L; + // Ensure it is at least as large as minCapacity + if (newCapacity < 16) + newCapacity = 16; + // Ensure it is at most MAX_ARRAY_LENGTH + if (newCapacity > ArrayUtil.MAX_ARRAY_LENGTH) { + newCapacity = ArrayUtil.MAX_ARRAY_LENGTH; + } + return Arrays.copyOf(array, (int)newCapacity); + } + + /** + * Try to determine the encoding of a byte[] using a byte-order mark (if present) + * Defaults to UTF-8 if none found. + */ + private String determineCharset(byte[] bom, int length, IntRef start) { + start.set(0); + String ret = defaultEncoding; + if(length < 2) + return ret; + if (length >= 3 && byteToInt(bom[0]) == 0xEF && byteToInt(bom[1]) == 0xBB && byteToInt(bom[2]) == 0xBF) { + ret = "UTF-8"; + start.set(3); + } else if (byteToInt(bom[0]) == 0xFE && byteToInt(bom[1]) == 0xFF) { + ret = "UTF-16BE"; + start.set(2); + } else if (byteToInt(bom[0]) == 0xFF && byteToInt(bom[1]) == 0xFE) { + ret = "UTF-16LE"; + start.set(2); + } + return ret; + } + + private static int byteToInt(byte b) { + return b & 0xFF; + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVParser.java b/java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVParser.java new file mode 100644 index 00000000000..749b1bee5df --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVParser.java @@ -0,0 +1,207 @@ +package com.semmle.util.io.csv; + +/** + Copyright 2005 Bytecode Pty Ltd. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * A very simple CSV parser released under a commercial-friendly license. + * This just implements splitting a single line into fields. + * + * @author Glen Smith + * @author Rainer Pruy + * + */ +public class CSVParser { + + private final char separator; + + private final char quotechar; + + private final char escape; + + private final boolean strictQuotes; + + private StringBuilder buf = new StringBuilder(INITIAL_READ_SIZE); + + /** The default separator to use if none is supplied to the constructor. */ + public static final char DEFAULT_SEPARATOR = ','; + + private static final int INITIAL_READ_SIZE = 128; + + /** + * The default quote character to use if none is supplied to the + * constructor. + */ + public static final char DEFAULT_QUOTE_CHARACTER = '"'; + + + /** + * The default escape character to use if none is supplied to the + * constructor. + */ + public static final char DEFAULT_ESCAPE_CHARACTER = '"'; + + /** + * The default strict quote behavior to use if none is supplied to the + * constructor + */ + public static final boolean DEFAULT_STRICT_QUOTES = false; + + /** + * Constructs CSVReader with supplied separator and quote char. + * Allows setting the "strict quotes" flag + * @param separator + * the delimiter to use for separating entries + * @param quotechar + * the character to use for quoted elements + * @param escape + * the character to use for escaping a separator or quote + * @param strictQuotes + * if true, characters outside the quotes are ignored + */ + CSVParser(char separator, char quotechar, char escape, boolean strictQuotes) { + this.separator = separator; + this.quotechar = quotechar; + this.escape = escape; + this.strictQuotes = strictQuotes; + } + + /** + * + * @return true if something was left over from last call(s) + */ + public boolean isPending() { + return buf.length() != 0; + } + + public String[] parseLineMulti(String nextLine) throws IOException { + return parseLine(nextLine, true); + } + + public String[] parseLine(String nextLine) throws IOException { + return parseLine(nextLine, false); + } + /** + * Parses an incoming String and returns an array of elements. + * + * @param nextLine + * the string to parse + * @return the comma-tokenized list of elements, or null if nextLine is null + * @throws IOException if bad things happen during the read + */ + private String[] parseLine(String nextLine, boolean multi) throws IOException { + + if (!multi && isPending()) { + clear(); + } + + if (nextLine == null) { + if (isPending()) { + String s = buf.toString(); + clear(); + return new String[] {s}; + } else { + return null; + } + } + + ListtokensOnThisLine = new ArrayList(); + boolean inQuotes = isPending(); + for (int i = 0; i < nextLine.length(); i++) { + + char c = nextLine.charAt(i); + if (c == this.escape && isNextCharacterEscapable(nextLine, inQuotes, i)) { + buf.append(nextLine.charAt(i+1)); + i++; + } else if (c == quotechar) { + if( isNextCharacterEscapedQuote(nextLine, inQuotes, i) ){ + buf.append(nextLine.charAt(i+1)); + i++; + }else{ + inQuotes = !inQuotes; + // the tricky case of an embedded quote in the middle: a,bc"d"ef,g + if (!strictQuotes) { + if(i>2 //not on the beginning of the line + && nextLine.charAt(i-1) != this.separator //not at the beginning of an escape sequence + && nextLine.length()>(i+1) && + nextLine.charAt(i+1) != this.separator //not at the end of an escape sequence + ){ + buf.append(c); + } + } + } + } else if (c == separator && !inQuotes) { + tokensOnThisLine.add(buf.toString()); + clear(); // start work on next token + } else { + if (!strictQuotes || inQuotes) + buf.append(c); + } + } + // line is done - check status + if (inQuotes) { + if (multi) { + // continuing a quoted section, re-append newline + buf.append('\n'); + // this partial content is not to be added to field list yet + } else { + throw new IOException("Un-terminated quoted field at end of CSV line"); + } + } else { + tokensOnThisLine.add(buf.toString()); + clear(); + } + return tokensOnThisLine.toArray(new String[tokensOnThisLine.size()]); + + } + + /** + * precondition: the current character is a quote or an escape + * @param nextLine the current line + * @param inQuotes true if the current context is quoted + * @param i current index in line + * @return true if the following character is a quote + */ + private boolean isNextCharacterEscapedQuote(String nextLine, boolean inQuotes, int i) { + return inQuotes // we are in quotes, therefore there can be escaped quotes in here. + && nextLine.length() > (i+1) // there is indeed another character to check. + && nextLine.charAt(i+1) == quotechar; + } + + /** + * precondition: the current character is an escape + * @param nextLine the current line + * @param inQuotes true if the current context is quoted + * @param i current index in line + * @return true if the following character is a quote + */ + protected boolean isNextCharacterEscapable(String nextLine, boolean inQuotes, int i) { + return inQuotes // we are in quotes, therefore there can be escaped quotes in here. + && nextLine.length() > (i+1) // there is indeed another character to check. + && ( nextLine.charAt(i+1) == quotechar || nextLine.charAt(i+1) == this.escape); + } + + /** + * Reset the buffer used for storing the current field's value + */ + private void clear() { + buf.setLength(0); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVReader.java b/java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVReader.java new file mode 100644 index 00000000000..cbecb552c56 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVReader.java @@ -0,0 +1,192 @@ +package com.semmle.util.io.csv; + +/** + Copyright 2005 Bytecode Pty Ltd. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import java.io.BufferedReader; +import java.io.Closeable; +import java.io.IOException; +import java.io.Reader; +import java.util.ArrayList; +import java.util.List; + +/** + * A very simple CSV reader released under a commercial-friendly license. + * + * @author Glen Smith + * + */ +public class CSVReader implements Closeable { + + private final BufferedReader br; + + private boolean hasNext = true; + + private final CSVParser parser; + + private final int skipLines; + + private boolean linesSkipped; + + /** The line number of the last physical line read (one-based). */ + private int curline = 0; + + /** The physical line number at which the last logical line read started (one-based). */ + private int startLine = 0; + + /** + * The default line to start reading. + */ + private static final int DEFAULT_SKIP_LINES = 0; + + /** + * Constructs CSVReader using a comma for the separator. + * + * @param reader + * the reader to an underlying CSV source. + */ + public CSVReader(Reader reader) { + this(reader, + CSVParser.DEFAULT_SEPARATOR, CSVParser.DEFAULT_QUOTE_CHARACTER, + CSVParser.DEFAULT_ESCAPE_CHARACTER, DEFAULT_SKIP_LINES, + CSVParser.DEFAULT_STRICT_QUOTES); + } + + /** + * Constructs CSVReader with supplied separator and quote char. + * + * @param reader + * the reader to an underlying CSV source. + * @param separator + * the delimiter to use for separating entries + * @param quotechar + * the character to use for quoted elements + * @param escape + * the character to use for escaping a separator or quote + * @param line + * the line number to skip for start reading + * @param strictQuotes + * sets if characters outside the quotes are ignored + */ + private CSVReader(Reader reader, char separator, char quotechar, char escape, int line, boolean strictQuotes) { + this.br = new BufferedReader(reader); + this.parser = new CSVParser(separator, quotechar, escape, strictQuotes); + this.skipLines = line; + } + + + /** + * Reads the entire file into a List with each element being a String[] of + * tokens. + * + * @return a List of String[], with each String[] representing a line of the + * file. + * + * @throws IOException + * if bad things happen during the read + */ + public List readAll() throws IOException { + + List allElements = new ArrayList(); + while (hasNext) { + String[] nextLineAsTokens = readNext(); + if (nextLineAsTokens != null) + allElements.add(nextLineAsTokens); + } + return allElements; + + } + + /** + * Reads the next line from the buffer and converts to a string array. + * + * @return a string array with each comma-separated element as a separate + * entry, or null if there are no more lines to read. + * + * @throws IOException + * if bad things happen during the read + */ + public String[] readNext() throws IOException { + boolean first = true; + String[] result = null; + do { + String nextLine = getNextLine(); + + if (first) { + startLine = curline; + first = false; + } + + if (!hasNext) { + return result; // should throw if still pending? + } + String[] r = parser.parseLineMulti(nextLine); + if (r.length > 0) { + if (result == null) { + result = r; + } else { + String[] t = new String[result.length+r.length]; + System.arraycopy(result, 0, t, 0, result.length); + System.arraycopy(r, 0, t, result.length, r.length); + result = t; + } + } + } while (parser.isPending()); + return result; + } + + /** + * Reads the next line from the file. + * + * @return the next line from the file without trailing newline + * @throws IOException + * if bad things happen during the read + */ + private String getNextLine() throws IOException { + if (!this.linesSkipped) { + for (int i = 0; i < skipLines; i++) { + br.readLine(); + ++curline; + } + this.linesSkipped = true; + } + String nextLine = br.readLine(); + if (nextLine == null) { + hasNext = false; + } else { + ++curline; + } + return hasNext ? nextLine : null; + } + + /** + * Closes the underlying reader. + * + * @throws IOException if the close fails + */ + @Override + public void close() throws IOException{ + br.close(); + } + + /** + * Return the physical line number (one-based) at which the last logical line read started, + * or zero if no line has been read yet. + */ + public int getStartLine() { + return startLine; + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVWriter.java b/java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVWriter.java new file mode 100644 index 00000000000..e1fee41154a --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/io/csv/CSVWriter.java @@ -0,0 +1,226 @@ +package com.semmle.util.io.csv; + +/** + Copyright 2005 Bytecode Pty Ltd. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import java.io.Closeable; +import java.io.IOException; +import java.io.Writer; +import java.util.List; + +/** + * A very simple CSV writer released under a commercial-friendly license. + * + * @author Glen Smith + * + */ +public class CSVWriter implements Closeable { + + private static final int INITIAL_STRING_SIZE = 128; + + private Writer rawWriter; + + private char separator; + + private char quotechar; + + private char escapechar; + + private String lineEnd; + + /** The quote constant to use when you wish to suppress all quoting. */ + public static final char NO_QUOTE_CHARACTER = '\u0000'; + + /** The escape constant to use when you wish to suppress all escaping. */ + private static final char NO_ESCAPE_CHARACTER = '\u0000'; + + /** Default line terminator uses platform encoding. */ + private static final String DEFAULT_LINE_END = "\n"; + + private boolean[] eagerQuotingFlags = {}; + + /** + * Constructs CSVWriter using a comma for the separator. + * + * @param writer + * the writer to an underlying CSV source. + */ + public CSVWriter(Writer writer) { + this(writer, + CSVParser.DEFAULT_SEPARATOR, + CSVParser.DEFAULT_QUOTE_CHARACTER, + CSVParser.DEFAULT_ESCAPE_CHARACTER + ); + } + + /** + * Constructs CSVWriter with supplied separator and quote char. + * + * @param writer + * the writer to an underlying CSV source. + * @param separator + * the delimiter to use for separating entries + * @param quotechar + * the character to use for quoted elements + * @param escapechar + * the character to use for escaping quotechars or escapechars + */ + public CSVWriter(Writer writer, char separator, char quotechar, char escapechar) { + this(writer, separator, quotechar, escapechar, DEFAULT_LINE_END); + } + + /** + * Constructs CSVWriter with supplied separator, quote char, escape char and line ending. + * + * @param writer + * the writer to an underlying CSV source. + * @param separator + * the delimiter to use for separating entries + * @param quotechar + * the character to use for quoted elements + * @param escapechar + * the character to use for escaping quotechars or escapechars + * @param lineEnd + * the line feed terminator to use + */ + private CSVWriter(Writer writer, char separator, char quotechar, char escapechar, String lineEnd) { + this.rawWriter = writer; + this.separator = separator; + this.quotechar = quotechar; + this.escapechar = escapechar; + this.lineEnd = lineEnd; + } + + /** + * Call with an array of booleans, corresponding to columns, where columns that have + * false will not be quoted unless they contain special characters. + *

    + * If there are more columns to print than have been configured here, any additional + * columns will be treated as if true was passed. + */ + public void setEagerQuotingColumns(boolean... flags) { + eagerQuotingFlags = flags; + } + + /** + * Writes the entire list to a CSV file. The list is assumed to be a + * String[] + * + * @param allLines + * a List of String[], with each String[] representing a line of + * the file. + */ + public void writeAll(List allLines) throws IOException { + for (String[] line : allLines) { + writeNext(line); + } + } + + /** + * Writes the next line to the file. + * + * @param nextLine + * a string array with each comma-separated element as a separate + * entry. + */ + public void writeNext(String... nextLine) throws IOException { + + if (nextLine == null) + return; + + StringBuilder sb = new StringBuilder(INITIAL_STRING_SIZE); + for (int i = 0; i < nextLine.length; i++) { + + if (i != 0) { + sb.append(separator); + } + + String nextElement = nextLine[i]; + if (nextElement == null) + continue; + boolean hasSpecials = stringContainsSpecialCharacters(nextElement); + + if (hasSpecials || i >= eagerQuotingFlags.length || eagerQuotingFlags[i] + || stringContainsSomewhatSpecialCharacter(nextElement)) { + if (quotechar != NO_QUOTE_CHARACTER) + sb.append(quotechar); + sb.append(hasSpecials ? processLine(nextElement) : nextElement); + if (quotechar != NO_QUOTE_CHARACTER) + sb.append(quotechar); + } else { + sb.append(nextElement); + } + } + + sb.append(lineEnd); + rawWriter.write(sb.toString()); + + } + + /** + * Return true if there are characters that need to be escaped in addition to + * being quoted. + */ + private boolean stringContainsSpecialCharacters(String line) { + return line.indexOf(quotechar) != -1 || line.indexOf(escapechar) != -1; + } + + /** + * Return true if there are characters that should not appear in a completely + * unquoted field. + */ + private boolean stringContainsSomewhatSpecialCharacter(String s) { + return s.indexOf('"') != -1 || s.indexOf('\'') != -1 || s.indexOf('\t') != -1 || s.indexOf(separator) != -1; + } + + protected StringBuilder processLine(String nextElement) + { + StringBuilder sb = new StringBuilder(INITIAL_STRING_SIZE); + for (int j = 0; j < nextElement.length(); j++) { + char nextChar = nextElement.charAt(j); + if (escapechar != NO_ESCAPE_CHARACTER && nextChar == quotechar) { + sb.append(escapechar).append(nextChar); + } else if (escapechar != NO_ESCAPE_CHARACTER && nextChar == escapechar) { + sb.append(escapechar).append(nextChar); + } else { + sb.append(nextChar); + } + } + + return sb; + } + + /** + * Flush underlying stream to writer. + * + * @throws IOException if bad things happen + */ + public void flush() throws IOException { + rawWriter.flush(); + } + + /** + * Close the underlying stream writer flushing any buffered content. + * + * @throws IOException if bad things happen + * + */ + @Override + public void close() throws IOException { + rawWriter.close(); + } + +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/logging/Streams.java b/java/kotlin-extractor/src/main/java/com/semmle/util/logging/Streams.java new file mode 100644 index 00000000000..9fee4edda49 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/logging/Streams.java @@ -0,0 +1,101 @@ +package com.semmle.util.logging; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintStream; +import java.util.Stack; + +import com.semmle.util.exception.CatastrophicError; + +/** + * A class to wrap around accesses to {@link System#out} and + * {@link System#err}, so that tools can behave consistently when + * run in-process or out-of-process. + */ +public class Streams { + private static final InheritableThreadLocal out = + new InheritableThreadLocal() { + @Override + protected PrintStream initialValue() { + return System.out; + } + }; + + private static final InheritableThreadLocal err = + new InheritableThreadLocal() { + @Override + protected PrintStream initialValue() { + return System.err; + } + }; + + private static final InheritableThreadLocal in = + new InheritableThreadLocal() { + @Override + protected InputStream initialValue() { + return System.in; + } + }; + + private static class SavedContext { + public PrintStream out, err; + public InputStream in; + } + + private static final ThreadLocal> contexts = + new ThreadLocal>() { + @Override + protected Stack initialValue() { + return new Stack(); + } + }; + + public static PrintStream out() { + return out.get(); + } + + public static PrintStream err() { + return err.get(); + } + + public static InputStream in() { + return in.get(); + } + + public static void pushContext(OutputStream stdout, OutputStream stderr, InputStream stdin) { + SavedContext context = new SavedContext(); + context.out = out.get(); + context.err = err.get(); + context.in = in.get(); + // When we run in-process, we don't benefit from + // a clean slate like we do when starting a new + // process. We need to reset anything that we care + // about manually. + // In particular, the parent VM may well have set + // showAllLogs=True, and we don't want the extra + // noise when executing the child, so we set a + // fresh log state for the duration of the child. + + contexts.get().push(context); + out.set(asPrintStream(stdout)); + err.set(asPrintStream(stderr)); + in.set(stdin); + } + + private static PrintStream asPrintStream(OutputStream stdout) { + return stdout instanceof PrintStream ? + (PrintStream)stdout : new PrintStream(stdout); + } + + public static void popContext() { + Stack context = contexts.get(); + out.get().flush(); + err.get().flush(); + if (context.isEmpty()) + throw new CatastrophicError("Popping logging context without preceding push."); + SavedContext old = context.pop(); + out.set(old.out); + err.set(old.err); + in.set(old.in); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/process/AbstractProcessBuilder.java b/java/kotlin-extractor/src/main/java/com/semmle/util/process/AbstractProcessBuilder.java new file mode 100644 index 00000000000..98b7794f452 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/process/AbstractProcessBuilder.java @@ -0,0 +1,398 @@ +package com.semmle.util.process; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Timer; +import java.util.TimerTask; + +import com.github.codeql.Logger; +import com.github.codeql.Severity; + +import com.semmle.util.data.StringUtil; +import com.semmle.util.exception.CatastrophicError; +import com.semmle.util.exception.Exceptions; +import com.semmle.util.exception.InterruptedError; +import com.semmle.util.exception.ResourceError; +import com.semmle.util.files.FileUtil; +import com.semmle.util.io.RawStreamMuncher; + +/** + * A builder for an external process. This class wraps {@link ProcessBuilder}, + * adding support for spawning threads to manage the input and output streams of + * the created process. + */ +public abstract class AbstractProcessBuilder { + public static Logger logger = null; + + // timeout for the muncher threads in seconds + protected static final long MUNCH_TIMEOUT = 20; + private final ProcessBuilder builder; + private boolean logFailure = true; + private InputStream in; + private LeakPrevention leakPrevention; + + private volatile boolean interrupted = false; + private volatile Thread threadToInterrupt = null; + + private volatile boolean hitTimeout = false; + + private final Map canonicalEnvVarNames = new LinkedHashMap<>(); + + private RawStreamMuncher inMuncher; + + + public AbstractProcessBuilder (List args, File cwd, Map env) + { + // Sanity checks + CatastrophicError.throwIfNull(args); + for (int i = 0; i < args.size(); ++i) + CatastrophicError.throwIfNull(args.get(i)); + + leakPrevention = LeakPrevention.NONE; + builder = new ProcessBuilder(new ArrayList<>(args)); + if (cwd != null) { + builder.directory(cwd); + } + // Make sure that values that have been explicitly removed from Env.systemEnv() + // -- such as the variables representing command-line arguments -- + // are not taken over by the new ProcessBuilder. + Map keepThese = Env.systemEnv().getenv(); + for (Iterator it = builder.environment().keySet().iterator(); it.hasNext();) { + String name = it.next(); + if (!keepThese.containsKey(name)) + it.remove(); + } + if (env != null) { + addEnvironment(env); + } + + } + + public void setLeakPrevention(LeakPrevention leakPrevention) { + CatastrophicError.throwIfNull(leakPrevention); + this.leakPrevention = leakPrevention; + } + + /** + * See {@link ProcessBuilder#redirectErrorStream(boolean)}. + */ + public void setRedirectErrorStream(boolean redirectErrorStream) { + this.builder.redirectErrorStream(redirectErrorStream); + } + + public final boolean hasEnvVar(String name) { + return builder.environment().containsKey(getCanonicalVarName(name)); + } + + /** + * Add the specified key/value pair to the environment of the builder, + * overriding any previous environment entry of that name. This method + * provides additional logic to handle systems where environment + * variable names are case-insensitive, ensuring the last-added value + * for a name ends up in the final environment regardless of case. + * @param name The name of the environment variable. Whether case matters + * is OS-dependent. + * @param value The value for the environment variable. + */ + public final void addEnvVar(String name, String value) { + builder.environment().put(getCanonicalVarName(name), value); + } + + /** + * Prepend a specified set of arguments to this process builder's command line. + * This only makes sense before the builder is started. + */ + public void prependArgs(List args) { + builder.command().addAll(0, args); + } + + /** + * Compute a canonical environment variable name relative to this process + * builder. + * + * The need for this method arises on platforms where the environment is + * case-insensitive -- any inspection of it in such a situation needs to + * canonicalise the variable name to have well-defined behaviour. This is + * builder-specific, because it depends on its existing environment. For + * example, if it already defines a variable called Path, and the + * environment is case-insensitive, then setting a variable called + * PATH should overwrite this, and checking whether a variable + * called PATH is already defined should return true. + */ + public String getCanonicalVarName(String name) { + if (!Env.getOS().isEnvironmentCaseSensitive()) { + // We need to canonicalise the variable name to work around Java API limitations. + if (canonicalEnvVarNames.isEmpty()) + for (String var : builder.environment().keySet()) + canonicalEnvVarNames.put(StringUtil.lc(var), var); + String canonical = canonicalEnvVarNames.get(StringUtil.lc(name)); + if (canonical == null) + canonicalEnvVarNames.put(StringUtil.lc(name), name); + else + name = canonical; + } + return name; + } + + /** + * Get a snapshot of this builder's environment, using canonical variable names + * (as per {@link #getCanonicalVarName(String)}) as keys. Modifications to this + * map do not propagate back to the builder; use + * {@link #addEnvVar(String, String)} or {@link #addEnvironment(Map)} to extend + * its environment. + */ + public Map getCanonicalCurrentEnv() { + Map result = new LinkedHashMap<>(); + for (Entry e : builder.environment().entrySet()) + result.put(getCanonicalVarName(e.getKey()), e.getValue()); + return result; + } + + /** + * Specify an input stream of data that will be piped to the process's + * standard input. + * + * CAUTION: if this stream is the current process' standard in and no + * input is ever received, then we will leak an uninterruptible thread + * waiting for some input. This will terminate only when the standard in + * is closed, i.e. when the current process terminates. + */ + public final void setIn(InputStream in) { + this.in = in; + } + + /** + * Set the environment of this builder to the given map. Any + * existing environment entries (either from the current process + * environment or from previous calls to {@link #addEnvVar(String, String)}, + * {@link #addEnvironment(Map)} or {@link #setEnvironment(Map)}) + * are discarded. + * @param env The environment to use. + */ + public final void setEnvironment(Map env) { + builder.environment().clear(); + canonicalEnvVarNames.clear(); + addEnvironment(env); + } + + /** + * Add the specified set of environment variables to the environment for + * the builder. This leaves existing variable definitions in place, but + * can override them. + * @param env The environment to merge into the current environment. + */ + public final void addEnvironment(Map env) { + for (Entry entry : env.entrySet()) + addEnvVar(entry.getKey(), entry.getValue()); + } + + public final int execute() { + return execute(0); + } + + /** + * Set the flag indicating that a non-zero exit code may be expected. This + * will suppress the log of failed commands. + */ + public final void expectFailure() { + logFailure = false; + } + + public final int execute(long timeout) { + Process process = null; + boolean processStopped = true; + Timer timer = null; + try { + synchronized (this) { + // Handle the case where we called kill() too early to use + // Thread.interrupt() + if (interrupted) + throw new InterruptedException(); + threadToInterrupt = Thread.currentThread(); + } + + processStopped = false; + String directory; + if (builder.directory() == null) { + directory = "current directory ('" + System.getProperty("user.dir") + "')"; + } else { + directory = "'" + builder.directory().toString() + "'"; + } + logger.debug("Running command: '" + toString() + "' in " + directory); + process = builder.start(); + setupInputHandling(process.getOutputStream()); + setupOutputHandling(process.getInputStream(), + process.getErrorStream()); + if (timeout != 0) { + // create the timer's thread as a "daemon" thread, so it does not + // prevent the jvm from terminating + timer = new Timer(true); + final Thread current = Thread.currentThread(); + timer.schedule(new TimerTask() { + @Override + public void run() { + hitTimeout = true; + current.interrupt(); + } + }, timeout); + } + + int result = process.waitFor(); + processStopped = true; + if (result != 0 && logFailure) + logger.error("Spawned process exited abnormally (code " + result + + "; tried to run: " + getBuilderCommand() + ")"); + return result; + } catch (IOException e) { + throw new ResourceError( + "IOException while executing process with args: " + + getBuilderCommand(), e); + } catch (InterruptedException e) { + throw new InterruptedError( + "InterruptedException while executing process with args: " + + getBuilderCommand(), e); + } finally { + // cancel the timer + if (timer != null) { + timer.cancel(); + } + // clear the interrupted flag of the current thread + // in case it was set earlier (ie by the Timer or a call to kill()) + synchronized (this) { + threadToInterrupt = null; + Thread.interrupted(); + } + // get rid of the process, in case it is still running. + if (process != null && !processStopped) { + killProcess(process); + } + try { + cleanupInputHandling(); + cleanupOutputHandling(); + } finally { + + if (process != null) { + FileUtil.close(process.getErrorStream()); + FileUtil.close(process.getInputStream()); + FileUtil.close(process.getOutputStream()); + } + } + } + } + + /** + * Provides the implementation of actually stopping the child + * process. Provided as an extension point so that this can + * be customised for later Java versions or for other reasons. + */ + protected void killProcess(Process process) { + process.destroy(); + } + + /** + * Setup handling of the process input stream (stdin). + * + * @param outputStream OutputStream connected to the process's standard input. + */ + protected void setupInputHandling(OutputStream outputStream) { + if (in == null) { + FileUtil.close(outputStream); + return; + } + inMuncher = new RawStreamMuncher(in, outputStream); + inMuncher.start(); + } + + /** + * Setup handling of the process' output streams (stdout and stderr). + * + * @param stdout + * InputStream connected to the process' standard output stream. + * @param stderr + * InputStream connected to the process' standard error stream. + */ + protected abstract void setupOutputHandling(InputStream stdout, InputStream stderr); + + /** + * Cleanup resources related to output handling. The method is always called, either after the process + * has exited normally, or after an abnormal termination due to an exception. As a result cleanupOutputHandling() + * might be called, without a previous call to setupOutputHandling. The implementation of this method should + * handle this case. + */ + protected abstract void cleanupOutputHandling(); + + private void cleanupInputHandling() { + if (inMuncher != null && inMuncher.isAlive()) { + // There's no real need to wait for the muncher to terminate -- on the contrary, + // if it's still alive it will typically be waiting for a closing action that + // will only happen after execute() returns anyway. + // The best we can do is try to interrupt it. + inMuncher.interrupt(); + } + } + + protected void waitForMuncher(String which, Thread muncher, long timeout) { + // wait for termination of the muncher until a deadline is reached + try { + muncher.join(timeout); + + } catch (InterruptedException e) { + Exceptions.ignore(e,"Further interruption attempts are ineffective --" + + " we're already waiting for termination."); + } + // if muncher is still alive, report an error + if(muncher.isAlive()){ + muncher.interrupt(); + logger.error(String.format("Standard %s stream hasn't closed %s seconds after termination of subprocess '%s'.", which, MUNCH_TIMEOUT, this)); + } + } + + public final void kill() { + synchronized (this) { + interrupted = true; + if (threadToInterrupt != null) + threadToInterrupt.interrupt(); + } + } + + public boolean processTimedOut() { + return hitTimeout; + } + + @Override + public String toString() { + return commandLineToString(getBuilderCommand()); + } + + private List getBuilderCommand() { + return leakPrevention.cleanUpArguments(builder.command()); + } + + private static String commandLineToString(List commandLine) { + StringBuilder sb = new StringBuilder(); + boolean first = true; + for (String s : commandLine) { + boolean tricky = s.isEmpty() || s.contains(" ") ; + + if (!first) + sb.append(" "); + first = false; + if (tricky) + sb.append("\""); + + sb.append(s.replace("\"", "\\\"")); + + if (tricky) + sb.append("\""); + } + return sb.toString(); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/process/Builder.java b/java/kotlin-extractor/src/main/java/com/semmle/util/process/Builder.java new file mode 100644 index 00000000000..b54a8fe88f8 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/process/Builder.java @@ -0,0 +1,81 @@ +package com.semmle.util.process; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import com.semmle.util.io.StreamMuncher; +import com.semmle.util.logging.Streams; + +public class Builder extends AbstractProcessBuilder { + + private final OutputStream err; + private final OutputStream out; + protected StreamMuncher errMuncher; + protected StreamMuncher outMuncher; + + public Builder(OutputStream out, OutputStream err, File cwd, String... args) { + this(out, err, cwd, null, args); + } + + public Builder(OutputStream out, OutputStream err, File cwd, + Map env, String... args) { + this(Arrays.asList(args), out, err, env, cwd); + } + + public Builder(List args, OutputStream out, OutputStream err) { + this(args, out, err, null, null); + } + + public Builder(List args, OutputStream out, OutputStream err, + File cwd) { + this(args, out, err, null, cwd); + } + + public Builder(List args, OutputStream out, OutputStream err, + Map env) { + this(args, out, err, env, null); + } + + public Builder(List args, OutputStream out, OutputStream err, + Map env, File cwd) { + super(args, cwd, env); + this.out = out; + this.err = err; + } + + /** + * Convenience method that executes the given command line in the current + * working directory with the current environment, blocking until + * completion. The process's output stream is redirected to System.out, and + * its error stream to System.err. It returns the exit code of the command. + */ + public static int run(List commandLine) { + return new Builder(commandLine, Streams.out(), Streams.err()).execute(); + } + + @Override + protected void cleanupOutputHandling() { + // wait for munchers to finish munching. + long deadline = 1000*MUNCH_TIMEOUT; + // note: check that munchers are not null, in case setupOutputHandling was + // not called to initialize them + if(outMuncher != null) { + waitForMuncher("output", outMuncher,deadline); + } + if(errMuncher != null) { + waitForMuncher("error", errMuncher,deadline); + } + } + + @Override + protected void setupOutputHandling(InputStream stdout, InputStream stderr) { + errMuncher = new StreamMuncher(stderr, err); + errMuncher.start(); + outMuncher = new StreamMuncher(stdout, out); + outMuncher.start(); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java b/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java new file mode 100644 index 00000000000..2e00bb61b32 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/process/Env.java @@ -0,0 +1,725 @@ +package com.semmle.util.process; + +import java.io.Serializable; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.Locale; +import java.util.Map; +import java.util.Stack; +import java.util.TreeMap; + +import com.semmle.util.exception.Exceptions; +import com.semmle.util.expansion.ExpansionEnvironment; + +/** + * Helper methods for finding out environment properties like the OS type. + */ +public class Env { + /** + * Enum for commonly used environment variables. + * + *

    + * The intention is that the name of the enum constant is the same as the environment + * variable itself. This means that the toString method does the right thing, + * as does calling {@link Enum#name() }. + *

    + * + *

    + * Should you wish to rename an environment variable (which you're unlikely to, due to the + * fact that there are many non-Java consumers), you can do a rename refactoring to make the + * Java consumers do the right thing. + *

    + */ + public enum Var { + /* + * Core toolchain variables + */ + /** + * The location of the toolchain. + * + * Deprecated in favour of {@link Var#SEMMLE_DIST}, {@link Var#SEMMLE_HOME}, and + * {@link Var#SEMMLE_DATA}. + */ + @Deprecated + ODASA_HOME, + /** + * The location of the user's configuration files, including project configurations, + * dashboard configurations, team insight configurations, licenses etc. + */ + SEMMLE_HOME, + /** + * The location of the user's data, including snapshots, built dashboards, team + * insight data, etc. + */ + SEMMLE_DATA, + /** + * The location of any caches used by the toolchain, including compilation caches, trap caches, etc. + */ + SEMMLE_CACHE, + /** + * The location of the toolchain files, including the odasa jar, our queries etc. + */ + SEMMLE_DIST, + /** + * If running from a git tree, the root of the tree. + */ + SEMMLE_GIT_ROOT, + /** + * The root from which relative paths in a DOOD file are resolved. + */ + SEMMLE_QUERY_ROOT, + /** + * The directory where lock files are kept. + */ + SEMMLE_LOCK_DIR, + /** + * The directory which will be checked for licenses. + */ + SEMMLE_LICENSE_DIR, + /** + * The location where our queries are kept. + */ + ODASA_QUERIES, + /** + * The location of the 'tools' directory + */ + ODASA_TOOLS, + /** + * Whether we are running in 'prototyping mode'. + */ + ODASA_PROTOTYPE_MODE, + /** + * The location of the default compilation cache, as a space-separated list of URIs. + * + * Multiple entries are tried in sequence. + */ + SEMMLE_COMPILATION_CACHE, + /** + * Override the versions used in compilation caching. + * + * This is useful for testing without modifying the version manually. + */ + SEMMLE_OVERRIDE_OPTIMISER_VERSION, + /** + * If set, do not use compilation caching. + */ + SEMMLE_NO_COMPILATION_CACHING, + /** + * If set, use this as the size of compilation caches, in bytes. If set to 'INFINITY', no + * limit will be placed on the size. + */ + SEMMLE_COMPILATION_CACHE_SIZE, + + /* + * Other toolchain variables + */ + SEMMLE_JAVA_HOME, + ODASA_JAVA_HOME, + ODASA_TRACER_CONFIGURATION, + /** + * The Java tracer agent to propagate to JVM processes. + */ + SEMMLE_JAVA_TOOL_OPTIONS, + /** + * Whether to run jar-based subprocesses in-process instead. + */ + ODASA_IN_PROCESS, + /** + * The executable to use for importing trap files. + */ + SEMMLE_TRAP_IMPORTER, + SEMMLE_PRESERVE_SYMLINKS, + SEMMLE_PATH_TRANSFORMER, + + /* + * Environment variables for password for credential stores. + * Either is accepted to allow a single entry point in the code + * while documenting as appropriate for the audience. + */ + SEMMLE_CREDENTIALS_PASSWORD, + LGTM_CREDENTIALS_PASSWORD, + + /* + * + * Internal config variables + */ + /** + * Extra arguments to pass to JVMs launched by Semmle tools. + */ + SEMMLE_JAVA_ARGS, + /** + * A list of log levels to set, of the form: + * "foo.bar=TRACE,bar.baz=DEBUG" + */ + SEMMLE_LOG_LEVELS, + /** + * The default heap size for commands that accept a ram parameter. + */ + SEMMLE_DEFAULT_HEAP_SIZE, + SEMMLE_MAX_RAM_MB, + /** + * Whether to disable asynchronous logging in the query server (otherwise it may drop messages). + */ + SEMMLE_SYNCHRONOUS_LOGGING, + /** + * Whether or not to use memory mapping + */ + SEMMLE_MEMORY_MAPPING, + SEMMLE_METRICS_DIR, + /** + * Whether we are running in our own unit tests. + */ + SEMMLE_UNIT_TEST_MODE, + /** + * Whether to include the source QL in a QLO. + */ + SEMMLE_DEBUG_QL_IN_QLO, + /** + * Whether to enable extra assertions + */ + ODASA_ASSERTIONS, + /** + * A file containing extra variables for ExpansionEnvironments. + */ + ODASA_EXTRA_VARIABLES, + ODASA_TUNE_GC, + /** + * Whether to run PI in hosted mode. + */ + SEMMLE_ODASA_DEBUG, + /** + * The python executable to use for Qltest. + */ + SEMMLE_PYTHON, + /** + * The platform we are running on; one of "linux", "osx" and "win". + */ + SEMMLE_PLATFORM, + /** + * Location of platform specific tools, currently only used in universal LGTM distributions + */ + SEMMLE_PLATFORM_TOOLS, + /** + * PATH to use to look up tooling required by macOS Relocator scripts. + */ + CODEQL_TOOL_PATH, + /** + * This can override the heuristics for BDD factory resetting. Most useful for measurements + * and debugging. + */ + CODEQL_BDD_RESET_FRACTION, + + /** + * How many TRAPLinker errors to report. + */ + SEMMLE_MAX_TRAP_ERRORS, + + /** + * How many tuples to accumulate in memory before pushing to disk. + */ + SEMMLE_MAX_TRAP_INMEMORY_TUPLES, + /** + * How many files to merge at each merge step. + */ + SEMMLE_MAX_TRAP_MERGE, + + /* + * Variables used by extractors. + */ + /** + * Whether the C++ extractor should copy executables before + * running them (works around System Integrity Protection + * on OS X 10.11+). + */ + SEMMLE_COPY_EXECUTABLES, + /** + * When SEMMLE_COPY_EXECUTABLES is in operation, where to + * create the directory to copy the executables to. + */ + SEMMLE_COPY_EXECUTABLES_SUPER_ROOT, + /** + * When SEMMLE_COPY_EXECUTABLES is in operation, the + * directory we are copying executables to. + */ + SEMMLE_COPY_EXECUTABLES_ROOT, + /** + * The executable which should be used as an implicit runner on Windows. + */ + SEMMLE_WINDOWS_RUNNER_BINARY, + /** + * Verbosity level for the Java interceptor. + */ + SEMMLE_INTERCEPT_VERBOSITY, + /** + * Verbosity level for the Java extractor. + */ + ODASA_JAVAC_VERBOSE, + /** + * Whether to use class origin tracking for the Java extractor. + */ + ODASA_JAVA_CLASS_ORIGIN_TRACKING, + ODASA_JAVAC_CORRECT_EXCEPTIONS, + ODASA_JAVAC_EXTRA_CLASSPATH, + ODASA_NO_ECLIPSE_BUILD, + + /* + * Variables set during snapshot builds + */ + /** + * The location of the project being built. + */ + ODASA_PROJECT, + /** + * The location of the snapshot being built. + */ + ODASA_SNAPSHOT, + ODASA_SNAPSHOT_NAME, + ODASA_SRC, + ODASA_DB, + ODASA_BUILD_ERROR_DIR, + TRAP_FOLDER, + SOURCE_ARCHIVE, + ODASA_OUTPUT, + ODASA_SUBPROJECT_THREADS, + + /* + * Layout variables + */ + ODASA_JAVA_LAYOUT, + ODASA_CPP_LAYOUT, + ODASA_CSHARP_LAYOUT, + ODASA_PYTHON_LAYOUT, + ODASA_JAVASCRIPT_LAYOUT, + + /* + * External variables + */ + JAVA_HOME, + PATH, + LINUX_VARIANT, + + /* + * If set, use this proxy for HTTP requests + */ + HTTP_PROXY, + http_proxy, + + /* + * If set, use this proxy for HTTPS requests + */ + HTTPS_PROXY, + https_proxy, + + /* + * If set, ignore the variables above and do not use any proxies for requests + */ + NO_PROXY, + no_proxy, + + /* + * Variables set by the codeql-action. All variables will + * be unset if the CLI is not in the context of the + * codeql-action. + */ + + /** + * Either {@code actions} or {@code runner}. + */ + CODEQL_ACTION_RUN_MODE, + + /** + * Semantic version of the codeql-action. + */ + CODEQL_ACTION_VERSION, + /* + * tracer variables + */ + /** + * Colon-separated list of enabled tracing languages + */ + CODEQL_TRACER_LANGUAGES, + /** + * Path to the build-tracer log file + */ + CODEQL_TRACER_LOG, + /** + * Prefix to a language-specific root directory + */ + CODEQL_TRACER_ROOT_, + + ; + } + + private static final int DEFAULT_RAM_MB_32 = 1024; + private static final int DEFAULT_RAM_MB = 4096; + private static final Env instance = new Env(); + + private final Stack> envVarContexts; + + public static synchronized Env systemEnv() { + return instance; + } + + /** + * Create an instance of Env containing no variables. Intended for use in + * testing to isolate the test from the local machine environment. + */ + public static Env emptyEnv() { + Env env = new Env(); + env.envVarContexts.clear(); + env.envVarContexts.push(Collections.unmodifiableMap(makeContext())); + return env; + } + + private static Map makeContext() { + if (getOS().equals(OS.WINDOWS)) { + // We want to compare in the same way Windows does, which means + // upper-casing. For example, '_' needs to come after 'Z', but + // would come before 'z'. + return new TreeMap<>((a, b) -> a.toUpperCase(Locale.ENGLISH).compareTo(b.toUpperCase(Locale.ENGLISH))); + } else { + return new LinkedHashMap<>(); + } + } + + public Env() { + envVarContexts = new Stack<>(); + Map env = makeContext(); + try { + env.putAll(System.getenv()); + } catch (SecurityException ex) { + Exceptions.ignore(ex, "Treat an inaccessible environment variable as not existing"); + } + envVarContexts.push(Collections.unmodifiableMap(env)); + } + + public synchronized void unsetAll(Collection names) { + if (!names.isEmpty()) { + Map map = envVarContexts.pop(); + map = new LinkedHashMap<>(map); + for (String name : names) + map.remove(name); + envVarContexts.push(Collections.unmodifiableMap(map)); + } + } + + public synchronized Map getenv() { + return envVarContexts.peek(); + } + + /** + * Get the value of an environment variable, or null if + * the environment variable is not set. WARNING: not all systems may + * make a difference between an empty variable or null, + * so don't rely on that behavior. + */ + public synchronized String get(Var var) { + return get(var.name()); + } + + /** + * Get the value of an environment variable, or null if + * the environment variable is not set. WARNING: not all systems may + * make a difference between an empty variable or null, + * so don't rely on that behavior. + */ + public synchronized String get(String envVarName) { + return getenv().get(envVarName); + } + + /** + * Get the non-empty value of an environment variable, or null + * if the environment variable is not set or set to an empty value. + */ + public synchronized String getNonEmpty(Var var) { + return getNonEmpty(var.name()); + } + + /** + * Get the value of an environment variable, or the empty string if it is not + * set. + */ + public synchronized String getPossiblyEmpty(String envVarName) { + String got = getenv().get(envVarName); + return got != null ? got : ""; + } + + /** + * Get the non-empty value of an environment variable, or null + * if the environment variable is not set or set to an empty value. + */ + public synchronized String getNonEmpty(String envVarName) { + String s = get(envVarName); + return s == null || s.isEmpty() ? null : s; + } + + /** + * Gets the value of the first environment variable among envVarNames + * whose value is non-empty, or null if all variables have empty values. + */ + public synchronized String getFirstNonEmpty(String... envVarNames) { + for (String envVarName : envVarNames) { + String s = getNonEmpty(envVarName); + if (s != null) + return s; + } + return null; + } + + /** + * Gets the value of the first environment variable among envVars + * whose value is non-empty, or null if all variables have empty values. + */ + public synchronized String getFirstNonEmpty(Var... envVars) { + String[] envVarNames = new String[envVars.length]; + for (int i = 0; i < envVars.length; ++i) + envVarNames[i] = envVars[i].name(); + return getFirstNonEmpty(envVarNames); + } + + /** + * Read a boolean from the given environment variable. If the variable + * is not set, then return false. Otherwise, interpret the + * environment variable using {@link Boolean#parseBoolean(String)}. + */ + public boolean getBoolean(Var var) { + return getBoolean(var.name()); + } + + /** + * Read a boolean from the given environment variable name. If the variable + * is not set, then return false. Otherwise, interpret the + * environment variable using {@link Boolean#parseBoolean(String)}. + */ + public boolean getBoolean(String envVarName) { + return getBoolean(envVarName, false); + } + + /** + * Read a boolean from the given environment variable. If the variable + * is not set, then return def. Otherwise, interpret the + * environment variable using {@link Boolean#parseBoolean(String)}. + */ + public boolean getBoolean(Var var, boolean def) { + return getBoolean(var.name(), def); + } + + /** + * Read a boolean from the given environment variable name. If the variable + * is not set, then return def. Otherwise, interpret the + * environment variable using {@link Boolean#parseBoolean(String)}. + */ + public boolean getBoolean(String envVarName, boolean def) { + String v = get(envVarName); + return v == null ? def : Boolean.parseBoolean(v); + } + + /** + * Read an integer setting from the given environment variable name. If the + * variable is not set, or fails to parse, return the supplied default value. + */ + public int getInt(Var var, int defaultValue) { + return getInt(var.name(), defaultValue); + } + + /** + * Read an integer setting from the given environment variable name. If the + * variable is not set, or fails to parse, return the supplied default value. + */ + public int getInt(String envVarName, int defaultValue) { + String value = get(envVarName); + if (value == null) + return defaultValue; + + try { + return Integer.parseInt(value); + } catch (NumberFormatException e) { + Exceptions.ignore(e, "We'll just use the default value."); + return defaultValue; + } + } + + /** + * Enter a new context for environment variables, with the given + * new variable values. The values will override the current environment + * values if they define the same variables. + */ + public synchronized void pushEnvironmentContext(Map addedValues) { + Map newValues = makeContext(); + newValues.putAll(envVarContexts.peek()); + newValues.putAll(addedValues); + envVarContexts.push(Collections.unmodifiableMap(newValues)); + } + + /** + * Leave a context for environment variables that was created with + * pushEnvironmentContext + */ + public synchronized void popEnvironmentContext() { + envVarContexts.pop(); + } + + /** + * Add all the custom environment variables to a process builder, so that + * they are passed on to the child process. + */ + public synchronized void addEnvironmentToNewProcess(ProcessBuilder builder) { + if (envVarContexts.size() > 1) + builder.environment().putAll(envVarContexts.peek()); + } + + public synchronized void addEnvironmentToNewEnv(ExpansionEnvironment env) { + if (envVarContexts.size() > 1) + env.defineVars(envVarContexts.peek()); + } + + /** + * Get a string representing the OS type. This + * is not guaranteed to have any particular form, and + * is for displaying to users. Might return null if + * the property is not defined by the JVM. + */ + public static String getOSName() { + return System.getProperty("os.name"); + } + + /** + * Determine which OS is currently being run (somewhat best-effort). + * Does not determine whether a program is being run under Cygwin + * or not - Windows will be the OS even under Cygwin. + */ + public static OS getOS() { + String name = getOSName(); + if (name == null) + return OS.UNKNOWN; + if (name.contains("Windows")) + return OS.WINDOWS; + else if (name.contains("Mac OS X")) + return OS.MACOS; + else if (name.contains("Linux")) + return OS.LINUX; + else + // Guess that we are probably some Unix flavour + return OS.UNKNOWN_UNIX; + } + + /** + * Kinds of operating systems. A notable absence is Cygwin: this just + * gets reported as Windows. + */ + public static enum OS { + WINDOWS(false, false), LINUX(true, true), MACOS(false, true), UNKNOWN_UNIX(true, true), UNKNOWN(true, true),; + + private final boolean fileSystemCaseSensitive; + private final boolean envVarsCaseSensitive; + + private OS(boolean fileSystemCaseSensitive, boolean envVarsCaseSensitive) { + this.fileSystemCaseSensitive = fileSystemCaseSensitive; + this.envVarsCaseSensitive = envVarsCaseSensitive; + } + + /** + * Get an OS value from the short display name. Acceptable + * inputs (case insensitive) are: Windows, Linux, MacOS or + * Mac OS. + * + * @throws IllegalArgumentException if the given name does not + * correspond to an OS + */ + public static OS fromDisplayName(String name) { + if (name != null) { + name = name.toUpperCase(); + if ("WINDOWS".equals(name)) + return WINDOWS; + if ("LINUX".equals(name)) + return LINUX; + if ("MACOS".equals(name.replace(" ", ""))) + return MACOS; + } + throw new IllegalArgumentException("No OS type found with name " + name); + } + + public boolean isFileSystemCaseSensitive() { + return fileSystemCaseSensitive; + } + + public boolean isEnvironmentCaseSensitive() { + return envVarsCaseSensitive; + } + + /** The short name of this operating system, in the style of {@link Var#SEMMLE_PLATFORM}. */ + public String getShortName() { + switch (this) { + case WINDOWS: + return "win"; + case LINUX: + return "linux"; + case MACOS: + return "osx"; + default: + return "unknown"; + } + } + } + + public static enum Architecture { + X86(true, false), X64(false, true), UNDETERMINED(false, false); + + private final boolean is32Bit; + private final boolean is64Bit; + + private Architecture(boolean is32Bit, boolean is64Bit) { + this.is32Bit = is32Bit; + this.is64Bit = is64Bit; + } + + /** Is this definitely a 32-bit architecture? */ + public boolean is32Bit() { + return is32Bit; + } + + /** Is this definitely a 64-bit architecture? */ + public boolean is64Bit() { + return is64Bit; + } + } + + /** + * Try to detect whether the JVM is 32-bit or 64-bit. Since there is no documented, + * portable way to do this it is best effort. + */ + public Architecture tryDetermineJvmArchitecture() { + String value = System.getProperty("sun.arch.data.model"); + if ("32".equals(value)) + return Architecture.X86; + else if ("64".equals(value)) + return Architecture.X64; + + // Look at the max heap value - if >= 4G we *must* be in 64-bit + long maxHeap = Runtime.getRuntime().maxMemory(); + if (maxHeap < Long.MAX_VALUE && maxHeap >= 4096L << 20) + return Architecture.X64; + + // Try to get the OS arch - it *appears* to give JVM bitness + String osArch = System.getProperty("os.arch"); + if ("x86".equals(osArch) || "i386".equals(osArch)) + return Architecture.X86; + else if ("x86_64".equals(osArch) || "amd64".equals(osArch)) + return Architecture.X64; + + return Architecture.UNDETERMINED; + } + + /** + * Get the default amount of ram to use for new JVMs, depending on the + * current architecture. If it looks like we're running on a 32-bit + * machine, the result is sufficiently small to be representable. + */ + public int defaultRamMb() { + return getInt( + Var.SEMMLE_DEFAULT_HEAP_SIZE, + tryDetermineJvmArchitecture().is32Bit() ? DEFAULT_RAM_MB_32 : DEFAULT_RAM_MB); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/process/LeakPrevention.java b/java/kotlin-extractor/src/main/java/com/semmle/util/process/LeakPrevention.java new file mode 100644 index 00000000000..d27bde39430 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/process/LeakPrevention.java @@ -0,0 +1,95 @@ +package com.semmle.util.process; + +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collections; +import java.util.List; + +public abstract class LeakPrevention { + + public abstract List cleanUpArguments(List args); + + /** + * What to put in place of any suppressed arguments. + */ + static final String REPLACEMENT_STRING = "*****"; + + /** + * Hides all arguments. Will only show the command name. + * e.g. "foo bar baz" is changed to "foo" + */ + public static final LeakPrevention ALL = new LeakPrevention() { + @Override + public List cleanUpArguments(List args) { + return args.isEmpty() ? args : Collections.singletonList(args.get(0)); + } + }; + + /** + * Does not hide any arguments. + */ + public static final LeakPrevention NONE = new LeakPrevention() { + @Override + public List cleanUpArguments(List args) { + return args; + } + }; + + /** + * Hides the arguments at the given indexes. + */ + public static LeakPrevention suppressedArguments(int... args) { + if (args.length == 0) + return NONE; + + final BitSet suppressed = new BitSet(); + for (int index : args) { + suppressed.set(index); + } + + return new LeakPrevention() { + @Override + public List cleanUpArguments(List args) { + List result = new ArrayList<>(args.size()); + int index = 0; + for (String arg : args) { + if (suppressed.get(index)) + result.add(REPLACEMENT_STRING); + else + result.add(arg); + index++; + } + return result; + } + }; + } + + /** + * Hides the given string from any arguments that it appears in. + * The substring will be replaced while leaving the rest of the + * argument unmodified. + *

    + * There are some potential pitfalls to be aware of when using this + * method. + *

      + *
    • This only suppresses exact textual matches. If the argument that + * appears is only derived from the secret instead of being an exact + * copy then it will not be suppressed. + *
    • If the secret value appears elsewhere in a known string, then it + * could leak the contents of the secret because the viewer knows what + * should have been there in the known case. + *
    + */ + public static LeakPrevention suppressSubstring(final String substringToSuppress) { + return new LeakPrevention() { + @Override + public List cleanUpArguments(List args) { + List result = new ArrayList<>(args.size()); + for (String arg : args) { + result.add(arg.replace(substringToSuppress, REPLACEMENT_STRING)); + } + return result; + } + }; + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/projectstructure/ProjectLayout.java b/java/kotlin-extractor/src/main/java/com/semmle/util/projectstructure/ProjectLayout.java new file mode 100644 index 00000000000..4d414c65632 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/projectstructure/ProjectLayout.java @@ -0,0 +1,529 @@ +package com.semmle.util.projectstructure; + +import java.io.File; +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.semmle.util.data.StringUtil; +import com.semmle.util.exception.CatastrophicError; +import com.semmle.util.exception.UserError; +import com.semmle.util.io.WholeIO; + +/** + * A project-layout file optionally begins with an '@' + * followed by the name the project should be renamed to. + * Optionally, it can then be followed by a list of + * include/exclude patterns (see below) which are kept + * as untransformed paths. This is followed by one or + * more clauses. Each clause has the following form: + * + * #virtual-path + * path/to/include + * another/path/to/include + * -/path/to/include/except/this + * + * i.e. one or more paths (to include) and zero or more paths + * prefixed by minus-signs (to exclude). + */ +public class ProjectLayout +{ + public static final char PROJECT_NAME_PREFIX = '@'; + + private String project; + + /** + * Map from virtual path prefixes (following the '#' in the project-layout) + * to the sequence of patterns that fall into that section. Declared as a + * {@link LinkedHashMap} since iteration order matters -- we process blocks in + * the same order as they occur in the project-layout. + */ + private final LinkedHashMap sections = new LinkedHashMap(); + + /** + * A file name, or similar string, to use in error messages so that the + * user knows what to fix. + */ + private String source; + + /** + * Load a project-layout file. + * + * @param file the project-layout to load + */ + public ProjectLayout(File file) { + this(StringUtil.lines(new WholeIO().strictread(file)), file.toString()); + } + + /** + * Construct a project-layout object from an array of strings, each + * corresponding to one line of the project-layout. This constructor + * is for testing. For other uses see {@link ProjectLayout#ProjectLayout(File)}. + * + * @param lines the lines of the project-layout + */ + public ProjectLayout(String... lines) { + this(lines, null); + } + + private ProjectLayout(String[] lines, String source) { + this.source = source; + String virtual = ""; + Section section = new Section(""); + sections.put("", section); + int num = 0; + for (String line : lines) { + num++; + line = line.trim(); + if (line.isEmpty()) + continue; + switch (line.charAt(0)) { + case PROJECT_NAME_PREFIX: + if (project != null) + throw error("Only one project name is allowed", source, num); + project = tail(line); + break; + case '#': + virtual = tail(line); + if (sections.containsKey(virtual)) + throw error("Duplicate virtual path prefix " + virtual, source, num); + section = new Section(virtual); + sections.put(virtual, section); + break; + case '-': + section.add(new Rewrite(tail(line), source, num)); + break; + default: + section.add(new Rewrite(line, virtual, source, num)); + } + } + } + + private static String tail(String line) { + return line.substring(1).trim(); + } + + /** + * Get the project name, if specified by the project-layout. This + * method should only be called if it is guaranteed that the + * project-layout will contain a project name, and it throws + * a {@link UserError} if it doesn't. + * @return the project name -- guaranteed not null. + * @throws UserError if the project-layout file did not specify a + * project name. + */ + public String projectName() { + if (project == null) + throw error("No project name is defined", source); + return project; + } + + /** + * Get the project name, if specified by the project-layout file. + * If the file contains no renaming specification, return the + * given default value. + * @param defaultName The name to use if the project-layout doesn't + * specify a target project name. + * @return the specified name or default value. + */ + public String projectName(String defaultName) { + return project == null ? defaultName : project; + } + + /** + * @return the section headings (aka virtual paths) + */ + public List sections() { + List result = new ArrayList(); + result.addAll(sections.keySet()); + return result; + } + + /** + * Determine whether or not a particular section in this + * project-layout is empty (has no include/exclude patterns). + * + * @param section the name of the section + * @return true if the section is empty + */ + public boolean sectionIsEmpty(String section) { + if (!sections.containsKey(section)) + throw new CatastrophicError("Section does not exist: " + section); + return sections.get(section).isEmpty(); + } + + /** + * Reaname a section in this project-layout. + * + * @param oldName the old name of the section + * @param newName the new name + */ + public void renameSection(String oldName, String newName) { + if (!sections.containsKey(oldName)) + throw new CatastrophicError("Section does not exist: " + oldName); + Section section = sections.remove(oldName); + section.rename(newName); + sections.put(newName, section); + } + + /** + * Return a project-layout file for just one of the sections in this + * project-layout. This is done by copying all the rules from the + * section, and changing the section heading (beginning with '#') + * to a project name (beginning with '@'). + * + * @param sectionName the section to create a project-layout from + * @return the text of the newly created project-layout + */ + public String subLayout(String sectionName) { + Section section = sections.get(sectionName); + if (section == null) + throw new CatastrophicError("Section does not exist: " + section); + return section.toLayout(); + } + + /** + * Maps a path to its corresponding artificial path according to the + * rules in this project-layout. If the path is excluded (either + * explicitly, or because it is not mentioned in the project-layout) + * then null is returned. + *

    + * Paths should start with a leading forward-slash + * + * @param path the path to map + * @return the artificial path, or null if the path is excluded + */ + public String artificialPath(String path) { + // If there is no leading slash, the path does not conform to the expected + // format and there is no match. (An exception is made for a completely + // empty string, which will get the sole prefix '/' and be mapped as usual). + if (path.length() > 0 && path.charAt(0) != '/') + return null; + List prefixes = Section.prefixes(path); + for (Section section : sections.values()) { + Rewrite rewrite = section.match(prefixes); + String rewritten = null; + if (rewrite != null) + rewritten = rewrite.rewrite(path); + if (rewritten != null) + return rewritten; + } + return null; + } + + /** + * Checks whether a path should be included in the project specified by + * this file. A file is included if it is mapped to some location. + *

    + * Paths should start with a leading forward-slash + * + * @param path the path to check + * @return true if the path should be included + */ + public boolean includeFile(String path) { + return artificialPath(path) != null; + } + + public void writeTo(Writer writer) throws IOException { + if (project != null) { + writer.write(PROJECT_NAME_PREFIX); + writer.write(project); + writer.write("\n"); + } + for (Section section : sections.values()) { + if (!section.virtual.isEmpty()) { + writer.write("#"); + writer.write(section.virtual); + writer.write("\n"); + } + section.outputRules(writer); + } + } + + public void addPattern(String section, String pattern) { + if (pattern == null || pattern.isEmpty()) { + throw new IllegalArgumentException("ProjectLayout.addPattern: pattern must be a non-empty string"); + } + boolean exclude = pattern.charAt(0) == '-'; + Rewrite rewrite = exclude ? + new Rewrite(pattern.substring(1), null, 0) : + new Rewrite(pattern, section, null, 0); + Section s = sections.get(section); + if (s == null) { + s = new Section(section); + sections.put(section, s); + } + s.add(rewrite); + } + + private static UserError error(String message, String source) { + return error(message, source, 0); + } + + private static UserError error(String message, String source, int line) { + if (source == null) + return new UserError(message); + StringBuilder sb = new StringBuilder(message); + sb.append(" ("); + if (line > 0) + sb.append("line ").append(line).append(" of "); + sb.append(source).append(")"); + return new UserError(sb.toString()); + } + + /** + * Each section corresponds to a block beginning with '#some/path'. There + * is also an initial section for any include/exclude patterns before the + * first '#'. + */ + private static class Section { + private String virtual; + private final Map simpleRewrites; + private final List complexRewrites; + + public Section(String virtual) { + this.virtual = virtual; + simpleRewrites = new LinkedHashMap(); + complexRewrites = new ArrayList(); + } + + public String toLayout() { + StringWriter result = new StringWriter(); + result.append('@').append(virtual).append('\n'); + try { + outputRules(result); + } catch (IOException e) { + throw new CatastrophicError("StringWriter.append threw an IOException", e); + } + return result.toString(); + } + + private void outputRules(Writer writer) throws IOException { + List all = new ArrayList(); + all.addAll(simpleRewrites.values()); + all.addAll(complexRewrites); + Collections.sort(all, Rewrite.COMPARATOR); + for (Rewrite rewrite : all) + writer.append(rewrite.toString()).append('\n'); + } + + public void rename(String newName) { + virtual = newName; + for (Rewrite rewrite : simpleRewrites.values()) + rewrite.virtual = newName; + for (Rewrite rewrite : complexRewrites) + rewrite.virtual = newName; + } + + public void add(Rewrite rewrite) { + int index = simpleRewrites.size() + complexRewrites.size(); + rewrite.setIndex(index); + if (rewrite.isSimple()) + simpleRewrites.put(rewrite.simplePrefix(), rewrite); + else + complexRewrites.add(rewrite); + } + + public boolean isEmpty() { + return simpleRewrites.isEmpty() && complexRewrites.isEmpty(); + } + + private static List prefixes(String path) { + List result = new ArrayList(); + result.add(path); + int i = path.length(); + while (i > 1) { + i = path.lastIndexOf('/', i - 1); + result.add(path.substring(0, i)); + } + result.add("/"); + return result; + } + + public Rewrite match(List prefixes) { + Rewrite best = null; + for (String prefix : prefixes) { + Rewrite match = simpleRewrites.get(prefix); + if (match != null) + if (best == null || best.index < match.index) + best = match; + } + // Last matching rewrite 'wins' + for (int i = complexRewrites.size() - 1; i >= 0; i--) { + Rewrite rewrite = complexRewrites.get(i); + if (rewrite.matches(prefixes.get(0))) { + if (best == null || best.index < rewrite.index) + best = rewrite; + // no point continuing + break; + } + } + return best; + } + } + + /** + * Each Rewrite corresponds to a single include or exclude line in the project-layout. + * For example, for following clause there would be three Rewrite objects: + * + * #Source + * /src + * /lib + * -/src/tests + * + * For includes use the two-argument constructor; for excludes the one-argument constructor. + */ + private static class Rewrite { + + private static final Comparator COMPARATOR = new Comparator() { + + @Override + public int compare(Rewrite t, Rewrite o) { + if (t.index < o.index) + return -1; + if (t.index == o.index) + return 0; + return 1; + } + }; + + private int index; + private final String original; + private final Pattern pattern; + private String virtual; + private final String simple; + + /** + * The intention is to allow the ** wildcard when followed by a slash only. The + * following should be invalid: + * - a / *** / b (too many stars) + * - a / ** (** at the end should be omitted) + * - a / **b (illegal) + * - a / b** (illegal) + * - ** (the same as a singleton '/') + * This regex matches ** when followed by a non-/ character, or the end of string. + */ + private static final Pattern verifyStars = Pattern.compile(".*(?:\\*\\*[^/].*|\\*\\*$|[^/]\\*\\*.*)"); + + public Rewrite(String exclude, String source, int line) { + original = '-' + exclude; + if (!exclude.startsWith("/")) + exclude = '/' + exclude; + if (exclude.indexOf("//") != -1) + throw error("Illegal '//' in exclude path", source, line); + if (verifyStars.matcher(exclude).matches()) + throw error("Illegal use of '**' in exclude path", source, line); + if (exclude.endsWith("/")) + exclude = exclude.substring(0, exclude.length() - 1); + pattern = compilePrefix(exclude); + exclude = exclude.replace("//", "/"); + if (exclude.length() > 1 && exclude.endsWith("/")) + exclude = exclude.substring(0, exclude.length() - 1); + simple = exclude.contains("*") ? null : exclude; + } + + public void setIndex(int index) { + this.index = index; + } + + public Rewrite(String include, String virtual, String source, int line) { + original = include; + if (!include.startsWith("/")) + include = '/' + include; + int doubleslash = include.indexOf("//"); + if (doubleslash != include.lastIndexOf("//")) + throw error("More than one '//' in include path", source, line); + if (verifyStars.matcher(include).matches()) + throw error("Illegal use of '**' in include path", source, line); + if (!virtual.startsWith("/")) + virtual = "/" + virtual; + if (virtual.endsWith("/")) + virtual = virtual.substring(0, virtual.length() - 1); + this.virtual = virtual; + this.pattern = compilePrefix(include); + include = include.replace("//", "/"); + if (include.length() > 1 && include.endsWith("/")) + include = include.substring(0, include.length() - 1); + simple = include.contains("*") ? null : include; + } + + /** + * Patterns are matched by translation to regex. The following invariants + * are assumed to hold: + * + * - The pattern starts with a '/'. + * - There are no occurrences of '**' that is not surrounded by slashes + * (unless it is at the start of a pattern). + * - There is at most one double slash. + * + * The result of the translation has precisely one capture group, which + * (after successful matching) will contain the part of the path that + * should be glued to the virtual prefix. + * + * It proceeds by starting the capture group either after the double + * slash or at the start of the pattern, and then replacing '*' with + * '[^/]*' (meaning any number of non-slash characters) and '/**' with + * '(?:|/.*)' (meaning empty string or a slash followed by any number of + * characters including '/'). + * + * The pattern is terminated by the term '(?:/.*|$)', saying 'either the + * next character is a '/' or the string ends' -- this avoids accidental + * matching of partial directory/file names. + * + * IMPORTANT: Run the ProjectLayoutTests when changing this! + */ + private static Pattern compilePrefix(String pattern) { + pattern = StringUtil.escapeStringLiteralForRegexp(pattern, "*"); + if (pattern.contains("//")) + pattern = pattern.replace("//", "(/"); + else + pattern = "(" + pattern; + if (pattern.endsWith("/")) + pattern = pattern.substring(0, pattern.length() - 1); + pattern = pattern.replace("/**", "-///-") + .replace("*", "[^/]*") + .replace("-///-", "(?:|/.*)"); + return Pattern.compile(pattern + "(?:/.*|$))"); + } + + /** Is this rewrite simple? (i.e. contains no wildcards) */ + public boolean isSimple() { + return simple != null; + } + + /** Returns the path included/excluded by this rewrite, if it is + * simple, or null if it is not. + * + * @return included/excluded path, or null + */ + public String simplePrefix() { + return simple; + } + + public boolean matches(String path) { + return pattern.matcher(path).matches(); + } + + public String rewrite(String path) { + if (virtual == null) + return null; + Matcher matcher = pattern.matcher(path); + if (!matcher.matches()) + return null; + return virtual + matcher.group(1); + } + + @Override + public String toString() { + return original; + } + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/trap/CompressedFileInputStream.java b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/CompressedFileInputStream.java new file mode 100644 index 00000000000..0a6fc1c2915 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/CompressedFileInputStream.java @@ -0,0 +1,29 @@ +package com.semmle.util.trap; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; + +import com.semmle.util.zip.MultiMemberGZIPInputStream; + +public class CompressedFileInputStream { + /** + * Create an input stream for reading the uncompressed data from a (possibly) compressed file, with + * the decompression method chosen based on the file extension. + * + * @param f The compressed file to read + * @return An input stream from which you can read the file's uncompressed data. + * @throws IOException From the underlying decompression input stream. + */ + public static InputStream fromFile(Path f) throws IOException { + InputStream fileInputStream = Files.newInputStream(f); + if (f.getFileName().toString().endsWith(".gz")) { + return new MultiMemberGZIPInputStream(fileInputStream, 8192); + //} else if (f.getFileName().toString().endsWith(".br")) { + // return new BrotliInputStream(fileInputStream); + } else { + return fileInputStream; + } + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TextFile.java b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TextFile.java new file mode 100644 index 00000000000..c896827ee2f --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TextFile.java @@ -0,0 +1,125 @@ +package com.semmle.util.trap.dependencies; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.semmle.util.exception.ResourceError; +import com.semmle.util.io.StreamUtil; +import com.semmle.util.io.WholeIO; +import com.semmle.util.trap.CompressedFileInputStream; + +public abstract class TextFile { + static final String TRAPS = "TRAPS"; + private static final Pattern HEADER = Pattern.compile("([^\r\n]+?) (\\d\\.\\d)"); + + protected String version; + protected final Set traps = new LinkedHashSet(); + + protected abstract Set getSet(Path path, String label); + protected abstract void parseError(Path path); + + public TextFile(String version) { + this.version = version; + } + + /** + * Load the current text file, checking that it matches the expected header. + * + *

    + * This method is somewhat performance-sensitive, as at least our C++ extractors + * can generate very large input files. The format is therefore parsed by hand. + *

    + * + *

    + * The accepted format consists of: + *

      + *
    • Zero or more EOL comments, marked with {@code //}. + *
    • Precisely one header line, of the form {@code $HEADER $VERSION}; this is + * checked against {@code expected_header}. + *
    • Zero or more "file lists", each beginning with the name of a set (see + * {@link #getSet(File, String)}) on a line by itself, followed by file paths, + * one per line. + *
    + * + *

    + * Empty lines are permitted throughout. + *

    + */ + protected void load(String expected_header, Path path) { + try (InputStream is = CompressedFileInputStream.fromFile(path); + BufferedReader lines = StreamUtil.newUTF8BufferedReader(is)) { + boolean commentsPermitted = true; + Set currentSet = null; + for (String line = lines.readLine(); line != null; line = lines.readLine()) { + // Skip empty lines. + if (line.isEmpty()) + continue; + // If comments are still permitted, skip comment lines. + if (commentsPermitted && line.startsWith("//")) + continue; + // If comments are still permitted, the first non-comment line is the header. + // In addition, we allow no further comments. + if (commentsPermitted) { + Matcher matcher = HEADER.matcher(line); + if (!matcher.matches() || !matcher.group(1).equals(expected_header)) + parseError(path); + commentsPermitted = false; + version = matcher.group(2); + continue; + } + // We have a non-blank line; this either names the new set, or is a line that + // should be put into the current set. + Set newSet = getSet(path, line); + if (newSet != null) { + currentSet = newSet; + } else { + if (currentSet == null) + parseError(path); + else + currentSet.add(line); + } + } + } catch (IOException e) { + throw new ResourceError("Couldn't read " + path, e); + } + } + + /** + * @return the format version of the loaded file + */ + public String version() { + return version; + } + + /** + * Save this object to a file (or throw a ResourceError on failure) + * + * @param file the file in which to save this object + */ + public void save(Path file) { + new WholeIO().strictwrite(file, toString()); + } + + protected void appendHeaderString(StringBuilder sb, String header, String version) { + sb.append(header).append(' ').append(version).append('\n'); + } + + protected void appendSet(StringBuilder sb, String title, Set set) { + sb.append('\n').append(title).append('\n'); + for (String s : set) + sb.append(s).append('\n'); + } + + protected void appendSingleton(StringBuilder sb, String title, String s) { + sb.append('\n').append(title).append('\n'); + sb.append(s).append('\n'); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TrapDependencies.java b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TrapDependencies.java new file mode 100644 index 00000000000..ff6880ea80e --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TrapDependencies.java @@ -0,0 +1,109 @@ +package com.semmle.util.trap.dependencies; + +import java.io.File; +import java.nio.file.Path; +import java.util.AbstractSet; +import java.util.Collections; +import java.util.Iterator; +import java.util.Set; + +import com.semmle.util.exception.ResourceError; + +/** + * The immediate dependencies of a particular TRAP file + */ +public class TrapDependencies extends TextFile +{ + static final String TRAP = "TRAP"; + + private String trap; + + /** + * Create an empty dependencies node for a TRAP file + */ + public TrapDependencies(String trap) { + super(TrapSet.LATEST_VERSION); + this.trap = trap; + } + + /** + * Load a TRAP dependencies (.dep) file + * + * @param file the file to load + */ + public TrapDependencies(Path file) { + super(null); + load(TrapSet.HEADER, file); + if(trap == null) + parseError(file); + } + + @Override + protected Set getSet(final Path file, String label) { + if(label.equals(TRAP)) { + return new AbstractSet() { + @Override + public Iterator iterator() { + return null; + } + @Override + public int size() { + return 0; + } + @Override + public boolean add(String s) { + if(trap != null) + parseError(file); + trap = s; + return true; + } + }; + } + if(label.equals(TRAPS)) return traps; + return null; + } + + @Override + protected void parseError(Path file) { + throw new ResourceError("Corrupt TRAP dependencies: " + file); + } + + /** + * @return the path of the TRAP with the dependencies stored in this object + * (relative to the source location) + */ + public String trapFile() { + return trap; + } + + /** + * @return the paths of the TRAP file dependencies + * (relative to the trap directory) + * + */ + public Set dependencies() { + return Collections.unmodifiableSet(traps); + } + + /** + * Add a path to a TRAP file (relative to the trap directory). + * + * @param trap the path to the trap file to add + */ + public void addDependency(String trap) { + traps.add(trap); + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + appendHeaderString(sb, TrapSet.HEADER, TrapSet.LATEST_VERSION); + appendSingleton(sb, TRAP, trap); + appendSet(sb, TRAPS, traps); + return sb.toString(); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TrapSet.java b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TrapSet.java new file mode 100644 index 00000000000..d1d6760fdbf --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/dependencies/TrapSet.java @@ -0,0 +1,196 @@ +package com.semmle.util.trap.dependencies; + +import java.nio.file.Path; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.Set; + +import com.semmle.util.exception.ResourceError; + +/** + * A set of source files and the TRAP files that were generated when + * compiling them. + *

    + * The set of TRAP files is not necessarily sufficient to create a + * consistent database, unless combined with inter-TRAP dependency + * information from .dep files (see {@link TrapDependencies}). + */ +public class TrapSet extends TextFile +{ + static final String HEADER = "TRAP dependencies"; + static final String LATEST_VERSION = "1.2"; + static final String SOURCES = "SOURCES"; + static final String INCLUDES = "INCLUDES"; + static final String OBJECTS = "OBJECTS"; + static final String INPUT_OBJECTS = "INPUT_OBJECTS"; + + // state + private final Set sources = new LinkedHashSet(); + private final Set includes = new LinkedHashSet(); + private final Set objects = new LinkedHashSet(); + private final Set inputObjects = new LinkedHashSet(); + + private Path file; + + /** + * Create an empty TRAP set + */ + public TrapSet() { + super(LATEST_VERSION); + } + + @Override + protected Set getSet(Path file, String label) { + if (label.equals(SOURCES)) return sources; + if (label.equals(INCLUDES)) return includes; + if (label.equals(OBJECTS)) return objects; + if (label.equals(INPUT_OBJECTS)) return inputObjects; + if (label.equals(TRAPS)) return traps; + return null; + } + + /** + * Load a TRAP set (.set) file + * + * @param path the file to load + */ + public TrapSet(Path path) { + super(null); + load(HEADER, path); + this.file = path; + } + + /** + * Return the most recent file used when loading or saving this + * trap set. If this set was constructed, rather than loaded, and + * has not been saved then the result is null. + * + * @return the file or null + */ + public Path getFile() { + return file; + } + + @Override + protected void parseError(Path file) { + throw new ResourceError("Corrupt TRAP set: " + file); + } + + /** + * @return the paths of the source files contained in this TRAP set + */ + public Set sourceFiles() { + return Collections.unmodifiableSet(sources); + } + + /** + * @return the paths to the include files contained in this TRAP set + */ + public Set includeFiles() { + return Collections.unmodifiableSet(includes); + } + + /** + * @return the paths of the TRAP files contained in this TRAP set + * (relative to the trap directory) + * + */ + public Set trapFiles() { + return Collections.unmodifiableSet(traps); + } + + /** + * @return the object names in this TRAP set + * + */ + public Set objectNames() { + return Collections.unmodifiableSet(objects); + } + + /** + * @return the object names in this TRAP set + * + */ + public Set inputObjectNames() { + return Collections.unmodifiableSet(inputObjects); + } + + /** + * Add a fully-qualified path to a source-file. + * + * @param source the path to the source file to add + */ + public void addSource(String source) { + sources.add(source); + } + + /** + * Add a fully-qualified path to an include-file. + * + * @param include the path to the include file to add + */ + public void addInclude(String include) { + includes.add(include); + } + + /** + * Add a path to a TRAP file (relative to the trap directory). + * + * @param trap the path to the trap file to add + * @return true if the path was not already present + */ + public boolean addTrap(String trap) { + return traps.add(trap); + } + + /** + * Check if this set contains a TRAP path + * + * @param trap the path to check + * @return true if this set contains the path + */ + public boolean containsTrap(String trap) { + return trap.contains(trap); + } + + /** + * Are the sources mentioned in this TRAP set disjoint from the given + * set of paths? + * + * @param paths the set of paths to check disjointness with + * @return true if and only if the paths are disjoint + */ + public boolean sourcesDisjointFrom(Set paths) { + for (String source : sources) + if (paths.contains(source)) + return false; + return true; + } + + /** + * Save this TRAP set to a .set file (or throw a ResourceError on failure) + * + * @param file the file in which to save this set + */ + @Override + public void save(Path file) { + super.save(file); + this.file = file; + } + + /* + * (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + appendHeaderString(sb, HEADER, LATEST_VERSION); + appendSet(sb, SOURCES, sources); + appendSet(sb, INCLUDES, includes); + appendSet(sb, OBJECTS, objects); + appendSet(sb, INPUT_OBJECTS, inputObjects); + appendSet(sb, TRAPS, traps); + return sb.toString(); + } +} diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/NoopTransformer.java b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/NoopTransformer.java new file mode 100644 index 00000000000..5ee27b81c84 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/NoopTransformer.java @@ -0,0 +1,8 @@ +package com.semmle.util.trap.pathtransformers; + +public class NoopTransformer extends PathTransformer { + @Override + public String transform(String input) { + return input; + } +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/PathTransformer.java b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/PathTransformer.java new file mode 100644 index 00000000000..414e754a190 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/PathTransformer.java @@ -0,0 +1,46 @@ +package com.semmle.util.trap.pathtransformers; + +import java.io.File; + +import com.semmle.util.files.FileUtil; +import com.semmle.util.process.Env; +import com.semmle.util.process.Env.Var; + +public abstract class PathTransformer { + public abstract String transform(String input); + + /** + * Convert a file to its path in the (code) database. Turns file paths into + * canonical, absolute, strings and normalises away Unix/Windows differences. + */ + public String fileAsDatabaseString(File file) { + String path; + if (Boolean.valueOf(Env.systemEnv().get(Var.SEMMLE_PRESERVE_SYMLINKS))) + path = FileUtil.simplifyPath(file); + else + path = FileUtil.tryMakeCanonical(file).getPath(); + return transform(FileUtil.normalisePath(path)); + } + + /** + * Utility method for extractors: Canonicalise the given path as required + * for the current extraction. Unlike {@link FileUtil#tryMakeCanonical(File)}, + * this method is consistent with {@link #fileAsDatabaseString(File)}. + */ + public File canonicalFile(String path) { + return new File(fileAsDatabaseString(new File(path))); + } + + private static final PathTransformer DEFAULT_TRANSFORMER; + static { + String layout = Env.systemEnv().get(Var.SEMMLE_PATH_TRANSFORMER); + if (layout == null) + DEFAULT_TRANSFORMER = new NoopTransformer(); + else + DEFAULT_TRANSFORMER = new ProjectLayoutTransformer(new File(layout)); + } + + public static PathTransformer std() { + return DEFAULT_TRANSFORMER; + } +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/ProjectLayoutTransformer.java b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/ProjectLayoutTransformer.java new file mode 100644 index 00000000000..b1bd319e150 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/trap/pathtransformers/ProjectLayoutTransformer.java @@ -0,0 +1,37 @@ +package com.semmle.util.trap.pathtransformers; + +import java.io.File; + +import com.semmle.util.projectstructure.ProjectLayout; + +public class ProjectLayoutTransformer extends PathTransformer { + private final ProjectLayout layout; + + public ProjectLayoutTransformer(File file) { + layout = new ProjectLayout(file); + } + + @Override + public String transform(String input) { + if (isWindowsPath(input, 0)) { + String result = layout.artificialPath('/' + input); + if (result == null) { + return input; + } else if (isWindowsPath(result, 1) && result.charAt(0) == '/') { + return result.substring(1); + } else { + return result; + } + } else { + String result = layout.artificialPath(input); + return result != null ? result : input; + } + } + + private static boolean isWindowsPath(String s, int startAt) { + return s.length() >= (3 + startAt) && + s.charAt(startAt) != '/' && + s.charAt(startAt + 1) == ':' && + s.charAt(startAt + 2) == '/'; + } +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/java/com/semmle/util/zip/MultiMemberGZIPInputStream.java b/java/kotlin-extractor/src/main/java/com/semmle/util/zip/MultiMemberGZIPInputStream.java new file mode 100644 index 00000000000..85a081bd41d --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/util/zip/MultiMemberGZIPInputStream.java @@ -0,0 +1,71 @@ +package com.semmle.util.zip; + +import java.io.IOException; +import java.io.InputStream; +import java.io.PushbackInputStream; +import java.util.zip.GZIPInputStream; + +public class MultiMemberGZIPInputStream extends GZIPInputStream { + + public MultiMemberGZIPInputStream(InputStream in, int size) throws IOException { + // Wrap the stream in a PushbackInputStream... + super(new PushbackInputStream(in, size), size); + this.size = size; + } + + public MultiMemberGZIPInputStream(InputStream in) throws IOException { + // Wrap the stream in a PushbackInputStream... + super(new PushbackInputStream(in, 1024)); + this.size = -1; + } + + private MultiMemberGZIPInputStream child; + private int size; + private boolean eos; + + @Override + public int read(byte[] inputBuffer, int inputBufferOffset, int inputBufferLen) throws IOException { + if (eos) { + return -1; + } + else if (child != null) { + return child.read(inputBuffer, inputBufferOffset, inputBufferLen); + } + int charsRead = super.read(inputBuffer, inputBufferOffset, inputBufferLen); + if (charsRead == -1) { + // Push any remaining buffered data back onto the stream + // If the stream is then not empty, use it to construct + // a new instance of this class and delegate this and any + // future calls to it... + int n = inf.getRemaining() - 8; + if (n > 0) { + // More than 8 bytes remaining in deflater + // First 8 are gzip trailer. Add the rest to + // any un-read data... + ((PushbackInputStream) this.in).unread(buf, len - n, n); + } else { + // Nothing in the buffer. We need to know whether or not + // there is unread data available in the underlying stream + // since the base class will not handle an empty file. + // Read a byte to see if there is data and if so, + // push it back onto the stream... + byte[] b = new byte[1]; + int ret = in.read(b, 0, 1); + if (ret == -1) { + eos = true; + return -1; + } else { + ((PushbackInputStream) this.in).unread(b, 0, 1); + } + } + if(size == -1) + child = new MultiMemberGZIPInputStream(in); + else + child = new MultiMemberGZIPInputStream(in, size); + return child.read(inputBuffer, inputBufferOffset, inputBufferLen); + } else { + return charsRead; + } + } + +} diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 1244e0b01c0..6a7da88f013 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -22,6 +22,10 @@ import java.io.StringWriter import java.nio.file.Files import java.nio.file.Paths import java.util.* +import com.intellij.openapi.vfs.StandardFileSystems +import com.semmle.extractor.java.OdasaOutput +import com.semmle.extractor.java.OdasaOutput.TrapFileManager +import com.semmle.util.files.FileUtil import kotlin.system.exitProcess class KotlinExtractorExtension(private val invocationTrapFile: String, private val checkTrapIdentical: Boolean) : IrGenerationExtension { @@ -40,10 +44,13 @@ class KotlinExtractorExtension(private val invocationTrapFile: String, private v val logger = Logger(logCounter, tw) logger.info("Extraction started") logger.flush() + // FIXME: FileUtil expects a static global logger + // which should be provided by SLF4J's factory facility. For now we set it here. + FileUtil.logger = logger val srcDir = File(System.getenv("CODEQL_EXTRACTOR_JAVA_SOURCE_ARCHIVE_DIR").takeUnless { it.isNullOrEmpty() } ?: "kotlin-extractor/src") srcDir.mkdirs() moduleFragment.files.mapIndexed { index: Int, file: IrFile -> - val fileTrapWriter = FileTrapWriter(lm, invocationTrapFileBW, file) + val fileTrapWriter = SourceFileTrapWriter(lm, invocationTrapFileBW, file) fileTrapWriter.writeCompilation_compiling_files(compilation, index, fileTrapWriter.fileId) doFile(invocationTrapFile, fileTrapWriter, checkTrapIdentical, logCounter, trapDir, srcDir, file, pluginContext) } @@ -124,9 +131,11 @@ fun doFile(invocationTrapFile: String, val trapTmpFile = File.createTempFile("$filePath.", ".trap.tmp", trapFileDir) trapTmpFile.bufferedWriter().use { trapFileBW -> trapFileBW.write("// Generated by invocation ${invocationTrapFile.replace("\n", "\n// ")}\n") - val tw = FileTrapWriter(TrapLabelManager(), trapFileBW, file) - val fileExtractor = KotlinFileExtractor(logger, tw, file, pluginContext) + val tw = SourceFileTrapWriter(TrapLabelManager(), trapFileBW, file) + val externalClassExtractor = ExternalClassExtractor(logger, file.path, pluginContext) + val fileExtractor = KotlinSourceFileExtractor(logger, tw, file, externalClassExtractor, pluginContext) fileExtractor.extractFileContents(tw.fileId) + externalClassExtractor.extractExternalClasses() } if (checkTrapIdentical && trapFile.exists()) { if(equivalentTrap(trapTmpFile, trapFile)) { @@ -160,7 +169,51 @@ fun fakeLabel(): Label { return IntLabel(0) } -class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val file: IrFile, val pluginContext: IrPluginContext) { +class ExternalClassExtractor(val logger: FileLogger, val sourceFilePath: String, val pluginContext: IrPluginContext) { + + val externalClassesDone = HashSet() + val externalClassWorkList = ArrayList() + + fun extractLater(c: IrClass): Boolean { + val ret = externalClassesDone.add(c) + if(ret) externalClassWorkList.add(c) + return ret + } + + fun extractExternalClasses() { + val output = OdasaOutput(false, logger) + output.setCurrentSourceFile(File(sourceFilePath)) + do { + val nextBatch = ArrayList(externalClassWorkList) + externalClassWorkList.clear() + nextBatch.forEach { irClass -> + output.getTrapLockerForClassFile(irClass).useAC { locker -> + locker.getTrapFileManager().useAC { manager -> + if(manager == null) { + logger.info("Skipping extracting class ${irClass.name}") + return + } + manager.getFile().bufferedWriter().use { trapFileBW -> + val tw = ClassFileTrapWriter(TrapLabelManager(), trapFileBW, getIrClassBinaryPath(irClass)) + val fileExtractor = KotlinFileExtractor(logger, tw, manager, this, pluginContext) + fileExtractor.extractClassSource(irClass) + } + } + } + } + } while (!externalClassWorkList.isEmpty()); + } + +} + +class KotlinSourceFileExtractor( + logger: FileLogger, + tw: FileTrapWriter, + val file: IrFile, + externalClassExtractor: ExternalClassExtractor, + pluginContext: IrPluginContext) : + KotlinFileExtractor(logger, tw, null, externalClassExtractor, pluginContext) { + val fileClass by lazy { extractFileClass(file) } @@ -171,7 +224,7 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi val pkgId = extractPackage(pkg) tw.writeHasLocation(id, locId) tw.writeCupackage(id, pkgId) - file.declarations.map { extractDeclaration(it) } + file.declarations.map { extractDeclaration(it, fileClass) } CommentExtractor(this).extract() } @@ -207,6 +260,15 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return id } +} + +open class KotlinFileExtractor( + val logger: FileLogger, + val tw: FileTrapWriter, + val dependencyCollector: TrapFileManager?, + val externalClassExtractor: ExternalClassExtractor, + val pluginContext: IrPluginContext) { + fun usePackage(pkg: String): Label { return extractPackage(pkg) } @@ -219,14 +281,14 @@ class KotlinFileExtractor(val logger: FileLogger, val tw: FileTrapWriter, val fi return id } - fun extractDeclaration(declaration: IrDeclaration) { + fun extractDeclaration(declaration: IrDeclaration, parentId: Label) { when (declaration) { is IrClass -> extractClassSource(declaration) - is IrFunction -> extractFunction(declaration) + is IrFunction -> extractFunction(declaration, parentId) is IrAnonymousInitializer -> { // Leaving this intentionally empty. init blocks are extracted during class extraction. } - is IrProperty -> extractProperty(declaration) + is IrProperty -> extractProperty(declaration, parentId) else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclaration: " + declaration.javaClass, declaration) } } @@ -476,6 +538,11 @@ class X { return id } + fun extractExternalClassLater(c: IrClass) { + dependencyCollector?.addDependency(c) + externalClassExtractor.extractLater(c) + } + private fun getClassLabel(c: IrClass, typeArgs: List): String { val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() @@ -548,7 +615,7 @@ class X { // so for now we extract the source class for those too if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { - extractClassSource(c) + extractExternalClassLater(c) } }) } @@ -598,7 +665,7 @@ class X { extractClassCommon(c, id) c.typeParameters.map { extractTypeParameter(it) } - c.declarations.map { extractDeclaration(it) } + c.declarations.map { extractDeclaration(it, id) } extractObjectInitializerFunction(c, id) return id @@ -821,7 +888,7 @@ class X { } } - fun extractFunction(f: IrFunction) { + fun extractFunction(f: IrFunction, parentId: Label) { currentFunction = f f.typeParameters.map { extractTypeParameter(it) } @@ -829,16 +896,6 @@ class X { val locId = tw.getLocation(f) val signature = "TODO" - val parent = f.parent - val parentId = when (parent) { - is IrClass -> useClassSource(parent) - is IrFile -> fileClass - else -> { - logger.warnElement(Severity.ErrorSevere, "Unrecognised function parent: " + parent.javaClass, parent) - fakeLabel() - } - } - val id: Label if (f.symbol is IrConstructorSymbol) { val returnTypeId = useTypeOld(erase(f.returnType)) @@ -880,7 +937,7 @@ class X { return id } - fun extractProperty(p: IrProperty) { + fun extractProperty(p: IrProperty, parentId: Label) { val bf = p.backingField if(bf == null) { logger.warnElement(Severity.ErrorSevere, "IrProperty without backing field", p) @@ -888,7 +945,6 @@ class X { val id = useProperty(p) val locId = tw.getLocation(p) val typeId = useTypeOld(bf.type) - val parentId = if (p.parent is IrClass) useClassSource(p.parent as IrClass) else fileClass tw.writeFields(id, p.name.asString(), typeId, parentId, id) tw.writeHasLocation(id, locId) } @@ -1407,5 +1463,5 @@ class X { tw.writeKtBreakContinueTargets(id, loopId) } -} +} diff --git a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt index 3dc5bb028db..5ac452c52db 100644 --- a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt +++ b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt @@ -3,6 +3,7 @@ package com.github.codeql import java.io.BufferedWriter import java.io.File import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.IrFileEntry import org.jetbrains.kotlin.ir.declarations.path import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrVariable @@ -60,14 +61,42 @@ open class TrapWriter (val lm: TrapLabelManager, val bw: BufferedWriter) { } } -class FileTrapWriter ( +abstract class SourceOffsetResolver { + abstract fun getLineNumber(offset: Int): Int + abstract fun getColumnNumber(offset: Int): Int +} + +class FileSourceOffsetResolver(val fileEntry: IrFileEntry) : SourceOffsetResolver() { + override fun getLineNumber(offset: Int) = fileEntry.getLineNumber(offset) + override fun getColumnNumber(offset: Int) = fileEntry.getLineNumber(offset) +} + +object NullSourceOffsetResolver : SourceOffsetResolver() { + override fun getLineNumber(offset: Int) = 0 + override fun getColumnNumber(offset: Int) = 0 +} + +class SourceFileTrapWriter ( lm: TrapLabelManager, bw: BufferedWriter, - val irFile: IrFile + irFile: IrFile) : + FileTrapWriter(lm, bw, irFile.path, FileSourceOffsetResolver(irFile.fileEntry)) { +} + +class ClassFileTrapWriter ( + lm: TrapLabelManager, + bw: BufferedWriter, + filePath: String) : + FileTrapWriter(lm, bw, filePath, NullSourceOffsetResolver) { +} + +open class FileTrapWriter ( + lm: TrapLabelManager, + bw: BufferedWriter, + val filePath: String, + val sourceOffsetResolver: SourceOffsetResolver ): TrapWriter (lm, bw) { - private val fileEntry = irFile.fileEntry val fileId = { - val filePath = irFile.path val fileLabel = "@\"$filePath;sourcefile\"" val id: Label = getLabelFor(fileLabel) writeFiles(id, filePath) @@ -87,24 +116,23 @@ class FileTrapWriter ( // be a zero-width location. QL doesn't support these, so we translate it // into a one-width location. val zeroWidthLoc = !unknownLoc && startOffset == endOffset - val startLine = if(unknownLoc) 0 else fileEntry.getLineNumber(startOffset) + 1 - val startColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(startOffset) + 1 - val endLine = if(unknownLoc) 0 else fileEntry.getLineNumber(endOffset) + 1 - val endColumn = if(unknownLoc) 0 else fileEntry.getColumnNumber(endOffset) + val startLine = if(unknownLoc) 0 else sourceOffsetResolver.getLineNumber(startOffset) + 1 + val startColumn = if(unknownLoc) 0 else sourceOffsetResolver.getColumnNumber(startOffset) + 1 + val endLine = if(unknownLoc) 0 else sourceOffsetResolver.getLineNumber(endOffset) + 1 + val endColumn = if(unknownLoc) 0 else sourceOffsetResolver.getColumnNumber(endOffset) val endColumn2 = if(zeroWidthLoc) endColumn + 1 else endColumn val locFileId: Label = if (unknownLoc) unknownFileId else fileId return getLocation(locFileId, startLine, startColumn, endLine, endColumn2) } fun getLocationString(e: IrElement): String { - val path = irFile.path if (e.startOffset == -1 && e.endOffset == -1) { - return "unknown location, while processing $path" + return "unknown location, while processing $filePath" } else { - val startLine = fileEntry.getLineNumber(e.startOffset) + 1 - val startColumn = fileEntry.getColumnNumber(e.startOffset) + 1 - val endLine = fileEntry.getLineNumber(e.endOffset) + 1 - val endColumn = fileEntry.getColumnNumber(e.endOffset) - return "file://$path:$startLine:$startColumn:$endLine:$endColumn" + val startLine = sourceOffsetResolver.getLineNumber(e.startOffset) + 1 + val startColumn = sourceOffsetResolver.getColumnNumber(e.startOffset) + 1 + val endLine = sourceOffsetResolver.getLineNumber(e.endOffset) + 1 + val endColumn = sourceOffsetResolver.getColumnNumber(e.endOffset) + return "file://$filePath:$startLine:$startColumn:$endLine:$endColumn" } } val variableLabelMapping: MutableMap> = mutableMapOf>() diff --git a/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt index 6baf071077d..62876f5cba5 100644 --- a/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.psi.KtVisitor import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset -class CommentExtractor(private val fileExtractor: KotlinFileExtractor) { +class CommentExtractor(private val fileExtractor: KotlinSourceFileExtractor) { private val file = fileExtractor.file private val tw = fileExtractor.tw private val logger = fileExtractor.logger @@ -109,4 +109,3 @@ class CommentExtractor(private val fileExtractor: KotlinFileExtractor) { }) } } - diff --git a/java/kotlin-extractor/src/main/kotlin/utils/AutoCloseableUse.kt b/java/kotlin-extractor/src/main/kotlin/utils/AutoCloseableUse.kt new file mode 100644 index 00000000000..fe68f308893 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/AutoCloseableUse.kt @@ -0,0 +1,43 @@ +package com.github.codeql + +// Functions copied from stdlib/jdk7/src/kotlin/AutoCloseable.kt, which is not available within kotlinc, +// but allows the `.use` pattern to be applied to JDK7 AutoCloseables: + +/** + * Executes the given [block] function on this resource and then closes it down correctly whether an exception + * is thrown or not. + * + * In case if the resource is being closed due to an exception occurred in [block], and the closing also fails with an exception, + * the latter is added to the [suppressed][java.lang.Throwable.addSuppressed] exceptions of the former. + * + * @param block a function to process this [AutoCloseable] resource. + * @return the result of [block] function invoked on this resource. + */ +public inline fun T.useAC(block: (T) -> R): R { + var exception: Throwable? = null + try { + return block(this) + } catch (e: Throwable) { + exception = e + throw e + } finally { + this.closeFinallyAC(exception) + } +} + +/** +* Closes this [AutoCloseable], suppressing possible exception or error thrown by [AutoCloseable.close] function when +* it's being closed due to some other [cause] exception occurred. +* +* The suppressed exception is added to the list of suppressed exceptions of [cause] exception. +*/ +fun AutoCloseable?.closeFinallyAC(cause: Throwable?) = when { + this == null -> {} + cause == null -> close() + else -> + try { + close() + } catch (closeException: Throwable) { + cause.addSuppressed(closeException) + } +} \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt b/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt new file mode 100644 index 00000000000..5a6893e1762 --- /dev/null +++ b/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt @@ -0,0 +1,47 @@ +package com.github.codeql + +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrDeclaration +import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent +import org.jetbrains.kotlin.ir.declarations.IrPackageFragment +import org.jetbrains.kotlin.load.java.sources.JavaSourceElement +import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass +import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement + +// Taken from Kotlin's interpreter/Utils.kt function 'internalName' +// Translates class names into their JLS section 13.1 binary name +fun getClassBinaryName(that: IrClass): String { + val internalName = StringBuilder(that.name.asString()) + generateSequence(that as? IrDeclarationParent) { (it as? IrDeclaration)?.parent } + .drop(1) + .forEach { + when (it) { + is IrClass -> internalName.insert(0, it.name.asString() + "$") + is IrPackageFragment -> it.fqName.asString().takeIf { it.isNotEmpty() }?.let { internalName.insert(0, "$it.") } + } + } + return internalName.toString() +} + +fun getRawIrClassBinaryPath(irClass: IrClass): String? { + val cSource = irClass.source + when(cSource) { + is JavaSourceElement -> { + val element = cSource.javaElement + when(element) { + is BinaryJavaClass -> return element.virtualFile.getPath() + } + } + is KotlinJvmBinarySourceElement -> { + return cSource.binaryClass.location + } + } + return null +} + +fun getIrClassBinaryPath(irClass: IrClass): String { + // If a class location is known, replace the JAR delimiter !/: + return getRawIrClassBinaryPath(irClass)?.replaceFirst("!/", "/") + // Otherwise, make up a fake location: + ?: "/!unknown-binary-location/${getClassBinaryName(irClass).replace(".", "/")}.class" +} diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt index 4a581e184f7..b4d5f11654c 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt @@ -42,6 +42,15 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { tw.writeTrap("// " + fullMsg.replace("\n", "\n//") + "\n") println(fullMsg) } + fun trace(msg: String) { + info(msg) + } + fun debug(msg: String) { + info(msg) + } + fun trace(msg: String, exn: Exception) { + info(msg + " // " + exn) + } fun warn(severity: Severity, msg: String, locationString: String? = null, locationId: Label = tw.unknownLocation, stackIndex: Int = 2) { val st = Exception().stackTrace val suffix = @@ -63,6 +72,18 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { val locStr = if (locationString == null) "" else "At " + locationString + ": " print("$ts Warning: $locStr$msg\n$suffix") } + fun warn(msg: String, exn: Exception) { + warn(Severity.Warn, msg + " // " + exn) + } + fun warn(msg: String) { + warn(Severity.Warn, msg) + } + fun error(msg: String) { + warn(Severity.Error, msg) + } + fun error(msg: String, exn: Exception) { + error(msg + " // " + exn) + } fun printLimitedWarningCounts() { for((caller, count) in logCounter.warningCounts) { if(count >= logCounter.warningLimit) { From a0671cafb14ded136aed5df0c63ffdd518136242 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 30 Sep 2021 12:34:09 +0100 Subject: [PATCH 0591/1618] Remove trap file compression for now --- .../semmle/extractor/java/OdasaOutput.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java index 408236e71ed..97feb415be1 100644 --- a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java +++ b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java @@ -177,18 +177,18 @@ public class OdasaOutput { return null; return FileUtil.appendAbsolutePath( currentSpecFileEntry.getTrapFolder(), - JARS_DIR + "/" + PathTransformer.std().fileAsDatabaseString(jarFile) + ".trap.gz"); + JARS_DIR + "/" + PathTransformer.std().fileAsDatabaseString(jarFile) + ".trap"); } private File getTrapFileForModule(String moduleName) { return FileUtil.appendAbsolutePath( currentSpecFileEntry.getTrapFolder(), - MODULES_DIR + "/" + moduleName + ".trap.gz"); + MODULES_DIR + "/" + moduleName + ".trap"); } private File trapFileFor(File file) { return FileUtil.appendAbsolutePath(currentSpecFileEntry.getTrapFolder(), - PathTransformer.std().fileAsDatabaseString(file) + ".trap.gz"); + PathTransformer.std().fileAsDatabaseString(file) + ".trap"); } private File getTrapFileForClassFile(IrClass sym) { @@ -214,7 +214,7 @@ public class OdasaOutput { result = CLASSES_DIR + "/" + dots.matcher(classId).replaceAll("/") + ".members" + - ".trap.gz"; + ".trap"; memberTrapPaths.put(classId, result); } return result; @@ -228,10 +228,10 @@ public class OdasaOutput { File trap = trapFileForClass(sym); if (trap.exists()) { trap.delete(); - File depFile = new File(trap.getParentFile(), trap.getName().replace(".trap.gz", ".dep")); + File depFile = new File(trap.getParentFile(), trap.getName().replace(".trap", ".dep")); if (depFile.exists()) depFile.delete(); - File metadataFile = new File(trap.getParentFile(), trap.getName().replace(".trap.gz", ".metadata")); + File metadataFile = new File(trap.getParentFile(), trap.getName().replace(".trap", ".metadata")); if (metadataFile.exists()) metadataFile.delete(); } @@ -283,7 +283,7 @@ public class OdasaOutput { } private TrapFileManager trapWriter(File trapFile, IrClass sym) { - if (!trapFile.getName().endsWith(".trap.gz")) + if (!trapFile.getName().endsWith(".trap")) throw new CatastrophicError("OdasaOutput only supports writing to compressed trap files"); String relative = FileUtil.relativePath(trapFile, currentSpecFileEntry.getTrapFolder()); trapFile.getParentFile().mkdirs(); @@ -320,7 +320,7 @@ public class OdasaOutput { writeTrapDependencies(trapDependenciesForClass); // Record major/minor version information for extracted class files. // This is subsequently used to determine whether to re-extract (a newer version of) the same class. - File metadataFile = new File(trapFile.getAbsolutePath().replace(".trap.gz", ".metadata")); + File metadataFile = new File(trapFile.getAbsolutePath().replace(".trap", ".metadata")); try { Map versionMap = new LinkedHashMap<>(); TrapClassVersion tcv = TrapClassVersion.fromSymbol(sym); @@ -333,7 +333,7 @@ public class OdasaOutput { } } private void writeTrapDependencies(TrapDependencies trapDependencies) { - String dep = trapDependencies.trapFile().replace(".trap.gz", ".dep"); + String dep = trapDependencies.trapFile().replace(".trap", ".dep"); trapDependencies.save( currentSpecFileEntry.getTrapFolder().toPath().resolve(dep)); } @@ -515,7 +515,7 @@ public class OdasaOutput { int majorVersion = 0; int minorVersion = 0; long lastModified = 0; - File metadataFile = new File(trap.getAbsolutePath().replace(".trap.gz", ".metadata")); + File metadataFile = new File(trap.getAbsolutePath().replace(".trap", ".metadata")); if (metadataFile.exists()) { Map metadataMap = FileUtil.readPropertiesCSV(metadataFile); try { From debb942c0e1334551c33cfe1c063a5b7b16fc172 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 30 Sep 2021 16:06:36 +0100 Subject: [PATCH 0592/1618] Implement mtime and class version extraction --- .../semmle/extractor/java/OdasaOutput.java | 27 +++++++++++++- .../src/main/kotlin/utils/ClassNames.kt | 36 ++++++++++++------- 2 files changed, 49 insertions(+), 14 deletions(-) diff --git a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java index 97feb415be1..58391987afe 100644 --- a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java +++ b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java @@ -12,9 +12,16 @@ import java.util.regex.Pattern; import com.github.codeql.Logger; import com.github.codeql.Severity; import static com.github.codeql.ClassNamesKt.getIrClassBinaryPath; +import static com.github.codeql.ClassNamesKt.getIrClassVirtualFile; import org.jetbrains.kotlin.ir.declarations.IrClass; +import com.intellij.openapi.vfs.VirtualFile; + +import org.jetbrains.org.objectweb.asm.ClassVisitor; +import org.jetbrains.org.objectweb.asm.ClassReader; +import org.jetbrains.org.objectweb.asm.Opcodes; + import com.semmle.util.concurrent.LockDirectory; import com.semmle.util.concurrent.LockDirectory.LockingMode; import com.semmle.util.exception.CatastrophicError; @@ -500,7 +507,25 @@ public class OdasaOutput { tcv.lastModified < lastModified); } private static TrapClassVersion fromSymbol(IrClass sym) { - return new TrapClassVersion(100, 101, 102); + VirtualFile vf = getIrClassVirtualFile(sym); + if(vf == null) + return new TrapClassVersion(0, 0, 0); + + final int[] versionStore = new int[1]; + + try { + ClassVisitor versionGetter = new ClassVisitor(Opcodes.ASM7) { + public void visit​(int version, int access, java.lang.String name, java.lang.String signature, java.lang.String superName, java.lang.String[] interfaces) { + versionStore[0] = version; + } + }; + (new ClassReader(vf.contentsToByteArray())).accept(versionGetter, ClassReader.SKIP_CODE | ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); + + return new TrapClassVersion(versionStore[0] & 0xffff, versionStore[0] >> 16, vf.getTimeStamp()); + } + catch(IOException e) { + return new TrapClassVersion(0, 0, 0); + } } private boolean isValid() { return majorVersion>=0 && minorVersion>=0; diff --git a/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt b/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt index 5a6893e1762..b66b86dae85 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt @@ -6,8 +6,11 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclarationParent import org.jetbrains.kotlin.ir.declarations.IrPackageFragment import org.jetbrains.kotlin.load.java.sources.JavaSourceElement import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass +import org.jetbrains.kotlin.load.kotlin.VirtualFileKotlinClass import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement +import com.intellij.openapi.vfs.VirtualFile + // Taken from Kotlin's interpreter/Utils.kt function 'internalName' // Translates class names into their JLS section 13.1 binary name fun getClassBinaryName(that: IrClass): String { @@ -23,20 +26,27 @@ fun getClassBinaryName(that: IrClass): String { return internalName.toString() } +fun getIrClassVirtualFile(irClass: IrClass): VirtualFile? { + val cSource = irClass.source + when(cSource) { + is JavaSourceElement -> { + val element = cSource.javaElement + when(element) { + is BinaryJavaClass -> return element.virtualFile + } + } + is KotlinJvmBinarySourceElement -> { + val binaryClass = cSource.binaryClass + when(binaryClass) { + is VirtualFileKotlinClass -> return binaryClass.file + } + } + } + return null +} + fun getRawIrClassBinaryPath(irClass: IrClass): String? { - val cSource = irClass.source - when(cSource) { - is JavaSourceElement -> { - val element = cSource.javaElement - when(element) { - is BinaryJavaClass -> return element.virtualFile.getPath() - } - } - is KotlinJvmBinarySourceElement -> { - return cSource.binaryClass.location - } - } - return null + return getIrClassVirtualFile(irClass)?.getPath() } fun getIrClassBinaryPath(irClass: IrClass): String { From 4c3b9e658b1b3c96010ab1ad53e0fbaa9994d5f3 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 30 Sep 2021 16:15:04 +0100 Subject: [PATCH 0593/1618] Fix trap file output paths These should be named for the class name, not its fs location --- .../src/main/java/com/semmle/extractor/java/OdasaOutput.java | 4 ++-- java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java index 58391987afe..9ef2165a75f 100644 --- a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java +++ b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java @@ -11,7 +11,7 @@ import java.util.regex.Pattern; import com.github.codeql.Logger; import com.github.codeql.Severity; -import static com.github.codeql.ClassNamesKt.getIrClassBinaryPath; +import static com.github.codeql.ClassNamesKt.getIrClassBinaryName; import static com.github.codeql.ClassNamesKt.getIrClassVirtualFile; import org.jetbrains.kotlin.ir.declarations.IrClass; @@ -212,7 +212,7 @@ public class OdasaOutput { private final Map memberTrapPaths = new LinkedHashMap(); private static final Pattern dots = Pattern.compile(".", Pattern.LITERAL); private String trapFilePathForClass(IrClass sym) { - String classId = getIrClassBinaryPath(sym); + String classId = getIrClassBinaryName(sym); // TODO: Reinstate this? //if (getTrackClassOrigins()) // classId += "-" + StringDigestor.digest(sym.getSourceFileId()); diff --git a/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt b/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt index b66b86dae85..ab483832cc6 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt @@ -13,7 +13,7 @@ import com.intellij.openapi.vfs.VirtualFile // Taken from Kotlin's interpreter/Utils.kt function 'internalName' // Translates class names into their JLS section 13.1 binary name -fun getClassBinaryName(that: IrClass): String { +fun getIrClassBinaryName(that: IrClass): String { val internalName = StringBuilder(that.name.asString()) generateSequence(that as? IrDeclarationParent) { (it as? IrDeclaration)?.parent } .drop(1) @@ -53,5 +53,5 @@ fun getIrClassBinaryPath(irClass: IrClass): String { // If a class location is known, replace the JAR delimiter !/: return getRawIrClassBinaryPath(irClass)?.replaceFirst("!/", "/") // Otherwise, make up a fake location: - ?: "/!unknown-binary-location/${getClassBinaryName(irClass).replace(".", "/")}.class" + ?: "/!unknown-binary-location/${getIrClassBinaryName(irClass).replace(".", "/")}.class" } From 8e63d10c1f899526b50f05c2fec3862f036b45da Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 1 Oct 2021 12:43:55 +0100 Subject: [PATCH 0594/1618] Populate Folders, containerparent tables --- .../semmle/extractor/java/PopulateFile.java | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 java/kotlin-extractor/src/main/java/com/semmle/extractor/java/PopulateFile.java diff --git a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/PopulateFile.java b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/PopulateFile.java new file mode 100644 index 00000000000..3b5b30d25e6 --- /dev/null +++ b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/PopulateFile.java @@ -0,0 +1,104 @@ +package com.semmle.extractor.java; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import com.github.codeql.Label; +import com.github.codeql.TrapWriter; +import com.github.codeql.KotlinExtractorDbSchemeKt; +import com.semmle.util.trap.pathtransformers.PathTransformer; +import com.semmle.util.files.FileUtil; + +public class PopulateFile { + + private TrapWriter tw; + private PathTransformer transformer; + public PopulateFile(TrapWriter tw) { + this.tw = tw; + this.transformer = PathTransformer.std(); + } + + private static final String[] keyReplacementMap = new String[127]; + static { + keyReplacementMap['&'] = "&"; + keyReplacementMap['{'] = "{"; + keyReplacementMap['}'] = "}"; + keyReplacementMap['"'] = """; + keyReplacementMap['@'] = "@"; + keyReplacementMap['#'] = "#"; + } + + /** + * Escape a string for use in a TRAP key, by replacing special characters with HTML entities. + *

    + * The given string cannot contain any sub-keys, as the delimiters { and } + * are escaped. + *

    + * To construct a key containing both sub-keys and arbitrary input data, escape the individual parts of + * the key rather than the key as a whole, for example: + *

    +	 * "foo;{" + label.toString() + "};" + escapeKey(data)
    +	 * 
    + */ + public static String escapeKey(String s) { + StringBuilder sb = null; + int lastIndex = 0; + for (int i = 0; i < s.length(); ++i) { + char ch = s.charAt(i); + switch (ch) { + case '&': + case '{': + case '}': + case '"': + case '@': + case '#': + if (sb == null) { + sb = new StringBuilder(); + } + sb.append(s, lastIndex, i); + sb.append(keyReplacementMap[ch]); + lastIndex = i + 1; + break; + } + } + if (sb != null) { + sb.append(s, lastIndex, s.length()); + return sb.toString(); + } else { + return s; + } + } + + public Label populateFile(File absoluteFile) { + String databasePath = transformer.fileAsDatabaseString(absoluteFile); + // Ensure the rewritten path is used from now on. + File normalisedFile = new File(databasePath); + Label result = tw.getLabelFor("@\"" + escapeKey(databasePath) + ";sourcefile" + "\""); + KotlinExtractorDbSchemeKt.writeFiles(tw, result, databasePath); + populateParents(normalisedFile, result); + return result; + } + + private Label addFolderTuple(String databasePath) { + Label result = tw.getLabelFor("@\"" + escapeKey(databasePath) + ";folder" + "\""); + KotlinExtractorDbSchemeKt.writeFolders(tw, result, databasePath); + return result; + } + + /** + * Populate the parents of an already-normalised file. The path transformers + * and canonicalisation of {@link PathTransformer#fileAsDatabaseString(File)} will not be + * re-applied to this, so it should only be called after proper normalisation + * has happened. It will fill in all parent folders in the current TRAP file. + */ + private void populateParents(File normalisedFile, Label label) { + File parent = normalisedFile.getParentFile(); + if (parent == null) return; + + Label parentLabel = addFolderTuple(FileUtil.normalisePath(parent.getPath())); + populateParents(parent, parentLabel); + KotlinExtractorDbSchemeKt.writeContainerparent(tw, parentLabel, label); + } + +} \ No newline at end of file From b299779750d4e5f67e8793939a9ca971112f9ec1 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 1 Oct 2021 14:59:46 +0100 Subject: [PATCH 0595/1618] Create Files table entries for JAR/JRT files --- .../semmle/extractor/java/PopulateFile.java | 35 ++++++++++++++++++- .../src/main/kotlin/TrapWriter.kt | 17 +++++---- .../src/main/kotlin/utils/ClassNames.kt | 3 +- 3 files changed, 46 insertions(+), 9 deletions(-) diff --git a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/PopulateFile.java b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/PopulateFile.java index 3b5b30d25e6..16cb0fc11ad 100644 --- a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/PopulateFile.java +++ b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/PopulateFile.java @@ -7,8 +7,9 @@ import java.util.Map; import com.github.codeql.Label; import com.github.codeql.TrapWriter; import com.github.codeql.KotlinExtractorDbSchemeKt; -import com.semmle.util.trap.pathtransformers.PathTransformer; +import com.semmle.util.exception.CatastrophicError; import com.semmle.util.files.FileUtil; +import com.semmle.util.trap.pathtransformers.PathTransformer; public class PopulateFile { @@ -101,4 +102,36 @@ public class PopulateFile { KotlinExtractorDbSchemeKt.writeContainerparent(tw, parentLabel, label); } + public Label relativeFileId(File jarFile, String pathWithinJar) { + if (pathWithinJar.contains("\\")) + throw new CatastrophicError("Invalid jar path: '" + pathWithinJar + "' should not contain '\\'."); + + Label jarFileId = this.populateFile(jarFile); + Label jarFileLocation = tw.getLocation(jarFileId,0,0,0,0); + KotlinExtractorDbSchemeKt.writeHasLocation(tw, jarFileId, jarFileLocation); + + String databasePath = transformer.fileAsDatabaseString(jarFile); + StringBuilder fullName = new StringBuilder(databasePath); + String[] split = pathWithinJar.split("/"); + Label current = jarFileId; + for (int i = 0; i < split.length; i++) { + String shortName = split[i]; + + fullName.append("/"); + fullName.append(shortName); + Label fileId = tw.getLabelFor("@\"" + fullName + ";jarFile" + "\""); + + boolean file = i == split.length - 1; + if (file) { + KotlinExtractorDbSchemeKt.writeFiles(tw, fileId, fullName.toString()); + } else { + KotlinExtractorDbSchemeKt.writeFolders(tw, fileId, fullName.toString()); + } + KotlinExtractorDbSchemeKt.writeContainerparent(tw, current, fileId); + current = fileId; + } + + return current; + } + } \ No newline at end of file diff --git a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt index 5ac452c52db..89bb8e9d026 100644 --- a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt +++ b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt @@ -8,6 +8,8 @@ import org.jetbrains.kotlin.ir.declarations.path import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrVariable +import com.semmle.extractor.java.PopulateFile + class TrapLabelManager { public var nextId: Int = 100 @@ -23,6 +25,7 @@ open class TrapWriter (val lm: TrapLabelManager, val bw: BufferedWriter) { @Suppress("UNCHECKED_CAST") return lm.labelMapping.get(label) as Label? } + @JvmOverloads fun getLabelFor(label: String, initialise: (Label) -> Unit = {}): Label { val maybeId: Label? = getExistingLabelFor(label) if(maybeId == null) { @@ -96,12 +99,14 @@ open class FileTrapWriter ( val filePath: String, val sourceOffsetResolver: SourceOffsetResolver ): TrapWriter (lm, bw) { - val fileId = { - val fileLabel = "@\"$filePath;sourcefile\"" - val id: Label = getLabelFor(fileLabel) - writeFiles(id, filePath) - id - }() + val populateFile = PopulateFile(this) + val splitFilePath = filePath.split("!/") + val fileId = + (if(splitFilePath.size == 1) + populateFile.populateFile(File(filePath)) + else + populateFile.relativeFileId(File(splitFilePath.get(0)), splitFilePath.get(1)) + ) as Label fun getLocation(e: IrElement): Label { return getLocation(e.startOffset, e.endOffset) diff --git a/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt b/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt index ab483832cc6..981d4aa7204 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/ClassNames.kt @@ -50,8 +50,7 @@ fun getRawIrClassBinaryPath(irClass: IrClass): String? { } fun getIrClassBinaryPath(irClass: IrClass): String { - // If a class location is known, replace the JAR delimiter !/: - return getRawIrClassBinaryPath(irClass)?.replaceFirst("!/", "/") + return getRawIrClassBinaryPath(irClass) // Otherwise, make up a fake location: ?: "/!unknown-binary-location/${getIrClassBinaryName(irClass).replace(".", "/")}.class" } From 4a18705d7372cc4ad9bcd21c4fa0b224e17a27a6 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 1 Oct 2021 15:35:03 +0100 Subject: [PATCH 0596/1618] Write .set file for source file --- .../src/main/java/com/semmle/extractor/java/OdasaOutput.java | 3 ++- .../src/main/kotlin/KotlinExtractorExtension.kt | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java index 9ef2165a75f..a3c71cfd2ad 100644 --- a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java +++ b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java @@ -123,7 +123,7 @@ public class OdasaOutput { * Trap sets and dependencies. */ - private void writeTrapSet() { + public void writeTrapSet() { trapsCreated.save(trapSetFor(currentSourceFile).toPath()); } @@ -294,6 +294,7 @@ public class OdasaOutput { throw new CatastrophicError("OdasaOutput only supports writing to compressed trap files"); String relative = FileUtil.relativePath(trapFile, currentSpecFileEntry.getTrapFolder()); trapFile.getParentFile().mkdirs(); + trapsCreated.addTrap(relative); return concurrentWriter(trapFile, relative, log, sym); } diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 6a7da88f013..0bed0e80a28 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -202,6 +202,7 @@ class ExternalClassExtractor(val logger: FileLogger, val sourceFilePath: String, } } } while (!externalClassWorkList.isEmpty()); + output.writeTrapSet() } } From 6de5a36cdc509bfc39c5cda16124aad54c3bfd70 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 1 Oct 2021 16:37:49 +0100 Subject: [PATCH 0597/1618] Write Java class files in gzip format This means our names match those expected by javac --- .../semmle/extractor/java/OdasaOutput.java | 20 +++++++++---------- .../main/kotlin/KotlinExtractorExtension.kt | 3 ++- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java index a3c71cfd2ad..7ca86ee6ac4 100644 --- a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java +++ b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java @@ -184,18 +184,18 @@ public class OdasaOutput { return null; return FileUtil.appendAbsolutePath( currentSpecFileEntry.getTrapFolder(), - JARS_DIR + "/" + PathTransformer.std().fileAsDatabaseString(jarFile) + ".trap"); + JARS_DIR + "/" + PathTransformer.std().fileAsDatabaseString(jarFile) + ".trap.gz"); } private File getTrapFileForModule(String moduleName) { return FileUtil.appendAbsolutePath( currentSpecFileEntry.getTrapFolder(), - MODULES_DIR + "/" + moduleName + ".trap"); + MODULES_DIR + "/" + moduleName + ".trap.gz"); } private File trapFileFor(File file) { return FileUtil.appendAbsolutePath(currentSpecFileEntry.getTrapFolder(), - PathTransformer.std().fileAsDatabaseString(file) + ".trap"); + PathTransformer.std().fileAsDatabaseString(file) + ".trap.gz"); } private File getTrapFileForClassFile(IrClass sym) { @@ -221,7 +221,7 @@ public class OdasaOutput { result = CLASSES_DIR + "/" + dots.matcher(classId).replaceAll("/") + ".members" + - ".trap"; + ".trap.gz"; memberTrapPaths.put(classId, result); } return result; @@ -235,10 +235,10 @@ public class OdasaOutput { File trap = trapFileForClass(sym); if (trap.exists()) { trap.delete(); - File depFile = new File(trap.getParentFile(), trap.getName().replace(".trap", ".dep")); + File depFile = new File(trap.getParentFile(), trap.getName().replace(".trap.gz", ".dep")); if (depFile.exists()) depFile.delete(); - File metadataFile = new File(trap.getParentFile(), trap.getName().replace(".trap", ".metadata")); + File metadataFile = new File(trap.getParentFile(), trap.getName().replace(".trap.gz", ".metadata")); if (metadataFile.exists()) metadataFile.delete(); } @@ -290,7 +290,7 @@ public class OdasaOutput { } private TrapFileManager trapWriter(File trapFile, IrClass sym) { - if (!trapFile.getName().endsWith(".trap")) + if (!trapFile.getName().endsWith(".trap.gz")) throw new CatastrophicError("OdasaOutput only supports writing to compressed trap files"); String relative = FileUtil.relativePath(trapFile, currentSpecFileEntry.getTrapFolder()); trapFile.getParentFile().mkdirs(); @@ -328,7 +328,7 @@ public class OdasaOutput { writeTrapDependencies(trapDependenciesForClass); // Record major/minor version information for extracted class files. // This is subsequently used to determine whether to re-extract (a newer version of) the same class. - File metadataFile = new File(trapFile.getAbsolutePath().replace(".trap", ".metadata")); + File metadataFile = new File(trapFile.getAbsolutePath().replace(".trap.gz", ".metadata")); try { Map versionMap = new LinkedHashMap<>(); TrapClassVersion tcv = TrapClassVersion.fromSymbol(sym); @@ -341,7 +341,7 @@ public class OdasaOutput { } } private void writeTrapDependencies(TrapDependencies trapDependencies) { - String dep = trapDependencies.trapFile().replace(".trap", ".dep"); + String dep = trapDependencies.trapFile().replace(".trap.gz", ".dep"); trapDependencies.save( currentSpecFileEntry.getTrapFolder().toPath().resolve(dep)); } @@ -541,7 +541,7 @@ public class OdasaOutput { int majorVersion = 0; int minorVersion = 0; long lastModified = 0; - File metadataFile = new File(trap.getAbsolutePath().replace(".trap", ".metadata")); + File metadataFile = new File(trap.getAbsolutePath().replace(".trap.gz", ".metadata")); if (metadataFile.exists()) { Map metadataMap = FileUtil.readPropertiesCSV(metadataFile); try { diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 0bed0e80a28..d5d8753a38e 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -22,6 +22,7 @@ import java.io.StringWriter import java.nio.file.Files import java.nio.file.Paths import java.util.* +import java.util.zip.GZIPOutputStream import com.intellij.openapi.vfs.StandardFileSystems import com.semmle.extractor.java.OdasaOutput import com.semmle.extractor.java.OdasaOutput.TrapFileManager @@ -193,7 +194,7 @@ class ExternalClassExtractor(val logger: FileLogger, val sourceFilePath: String, logger.info("Skipping extracting class ${irClass.name}") return } - manager.getFile().bufferedWriter().use { trapFileBW -> + GZIPOutputStream(manager.getFile().outputStream()).bufferedWriter().use { trapFileBW -> val tw = ClassFileTrapWriter(TrapLabelManager(), trapFileBW, getIrClassBinaryPath(irClass)) val fileExtractor = KotlinFileExtractor(logger, tw, manager, this, pluginContext) fileExtractor.extractClassSource(irClass) From 12ce2d5829f8c5429ca9bf61edde3b9b581fff87 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 20 Oct 2021 16:01:13 +0100 Subject: [PATCH 0598/1618] Substitute Kotlin classes for Java equivalents --- .../main/kotlin/KotlinExtractorExtension.kt | 43 ++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index d5d8753a38e..4bd7ac9f8af 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -3,6 +3,7 @@ package com.github.codeql import com.github.codeql.comments.CommentExtractor import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext +import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement @@ -15,6 +16,7 @@ import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.packageFqName import org.jetbrains.kotlin.ir.util.render +import org.jetbrains.kotlin.name.FqName import java.io.File import java.io.FileOutputStream import java.io.PrintWriter @@ -27,6 +29,8 @@ import com.intellij.openapi.vfs.StandardFileSystems import com.semmle.extractor.java.OdasaOutput import com.semmle.extractor.java.OdasaOutput.TrapFileManager import com.semmle.util.files.FileUtil +import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable +import org.jetbrains.kotlin.ir.util.kotlinFqName import kotlin.system.exitProcess class KotlinExtractorExtension(private val invocationTrapFile: String, private val checkTrapIdentical: Boolean) : IrGenerationExtension { @@ -370,6 +374,7 @@ XXX delete? s.isChar() -> return primitiveType("char", "java.lang", "Character", "kotlin", "Char") s.isString() -> return primitiveType(null, "java.lang", "String", "kotlin", "String") + s.isUnit() -> return primitiveType("void", "java.lang", "Void", "kotlin", "Nothing") // TODO: Is this right? s.isNothing() -> return primitiveType(null, "java.lang", "Void", "kotlin", "Nothing") // TODO: Is this right? /* @@ -605,20 +610,39 @@ class X { return tw.getLabelFor(classId) } + fun extractClassLaterIfExternal(c: IrClass) { + // we don't have an "external dependencies" extractor yet, + // so for now we extract the source class for those too + if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || + c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { + extractExternalClassLater(c) + } + } + fun useClassInstance(c: IrClass, typeArgs: List): Label { - val classId = getClassLabel(c, typeArgs) + // TODO: only substitute in class and function signatures + // because within function bodies we can get things like Unit.INSTANCE + // and List.asIterable (an extension, i.e. static, method) + // Map Kotlin class to its equivalent Java class: + val substituteClass = c.fqNameWhenAvailable?.toUnsafe() + ?.let { JavaToKotlinClassMap.mapKotlinToJava(it) } + ?.let { pluginContext.referenceClass(it.asSingleFqName()) } + ?.owner + + val extractClass = substituteClass ?: c + + val classId = getClassLabel(extractClass, typeArgs) return tw.getLabelFor(classId, { // If this is a generic type instantiation then it has no // source entity, so we need to extract it here if (typeArgs.isNotEmpty()) { - extractClassInstance(c, typeArgs) - } - // we don't have an "external dependencies" extractor yet, - // so for now we extract the source class for those too - if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || - c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { - extractExternalClassLater(c) + extractClassInstance(extractClass, typeArgs) } + + // Extract both the Kotlin and equivalent Java classes, so that we have database entries + // for both even if all internal references to the Kotlin type are substituted. + extractClassLaterIfExternal(c) + substituteClass?.let { extractClassLaterIfExternal(it) } }) } @@ -1465,5 +1489,4 @@ class X { tw.writeKtBreakContinueTargets(id, loopId) } - -} +} \ No newline at end of file From e5e694f7d3165e2930025d6ea0d5dd0a9fdb23fd Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 25 Oct 2021 12:39:08 +0100 Subject: [PATCH 0599/1618] Adjust Kotlin type correspondence tables when extracting a substituted type --- .../main/kotlin/KotlinExtractorExtension.kt | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 4bd7ac9f8af..a8dc9745320 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -14,8 +14,6 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.* -import org.jetbrains.kotlin.ir.util.packageFqName -import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.name.FqName import java.io.File import java.io.FileOutputStream @@ -29,8 +27,7 @@ import com.intellij.openapi.vfs.StandardFileSystems import com.semmle.extractor.java.OdasaOutput import com.semmle.extractor.java.OdasaOutput.TrapFileManager import com.semmle.util.files.FileUtil -import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable -import org.jetbrains.kotlin.ir.util.kotlinFqName +import org.jetbrains.kotlin.ir.util.* import kotlin.system.exitProcess class KotlinExtractorExtension(private val invocationTrapFile: String, private val checkTrapIdentical: Boolean) : IrGenerationExtension { @@ -299,6 +296,7 @@ open class KotlinFileExtractor( } } + data class UseClassInstanceResult(val classLabel: Label, val javaClass: IrClass) data class TypeResult(val id: Label, val signature: String) data class TypeResults(val javaResult: TypeResult, val kotlinResult: TypeResult) @@ -427,24 +425,24 @@ class X { val classifier: IrClassifierSymbol = s.classifier val cls: IrClass = classifier.owner as IrClass - val classId = useClassInstance(cls, s.arguments) - val javaPackage = cls.packageFqName?.asString() - val javaName = cls.name.asString() - val qualClassName = if (javaPackage == null) javaName else "$javaPackage.$javaName" - val javaSignature = qualClassName // TODO: Is this right? - val javaResult = TypeResult(classId, javaSignature) + val classInstanceResult = useClassInstance(cls, s.arguments) + val javaClassId = classInstanceResult.classLabel + val kotlinQualClassName = cls.fqNameForIrSerialization.asString() + val javaQualClassName = classInstanceResult.javaClass.fqNameForIrSerialization.asString() + val javaSignature = javaQualClassName // TODO: Is this right? + val javaResult = TypeResult(javaClassId, javaSignature) val kotlinResult = if (s.hasQuestionMark) { - val kotlinSignature = "$javaSignature?" // TODO: Is this right? - val kotlinLabel = "@\"kt_type;nullable;$qualClassName\"" + val kotlinSignature = "$kotlinQualClassName?" // TODO: Is this right? + val kotlinLabel = "@\"kt_type;nullable;$kotlinQualClassName\"" val kotlinId: Label = tw.getLabelFor(kotlinLabel, { - tw.writeKt_nullable_types(it, classId) + tw.writeKt_nullable_types(it, javaClassId) }) TypeResult(kotlinId, kotlinSignature) } else { - val kotlinSignature = javaSignature // TODO: Is this right? - val kotlinLabel = "@\"kt_type;notnull;$qualClassName\"" + val kotlinSignature = kotlinQualClassName // TODO: Is this right? + val kotlinLabel = "@\"kt_type;notnull;$kotlinQualClassName\"" val kotlinId: Label = tw.getLabelFor(kotlinLabel, { - tw.writeKt_notnull_types(it, classId) + tw.writeKt_notnull_types(it, javaClassId) }) TypeResult(kotlinId, kotlinSignature) } @@ -619,7 +617,7 @@ class X { } } - fun useClassInstance(c: IrClass, typeArgs: List): Label { + fun useClassInstance(c: IrClass, typeArgs: List): UseClassInstanceResult { // TODO: only substitute in class and function signatures // because within function bodies we can get things like Unit.INSTANCE // and List.asIterable (an extension, i.e. static, method) @@ -632,7 +630,7 @@ class X { val extractClass = substituteClass ?: c val classId = getClassLabel(extractClass, typeArgs) - return tw.getLabelFor(classId, { + val classLabel : Label = tw.getLabelFor(classId, { // If this is a generic type instantiation then it has no // source entity, so we need to extract it here if (typeArgs.isNotEmpty()) { @@ -644,6 +642,8 @@ class X { extractClassLaterIfExternal(c) substituteClass?.let { extractClassLaterIfExternal(it) } }) + + return UseClassInstanceResult(classLabel, extractClass) } fun extractClassCommon(c: IrClass, id: Label) { @@ -657,7 +657,7 @@ class X { t.classifier.owner is IrClass -> { val classifier: IrClassifierSymbol = t.classifier val tcls: IrClass = classifier.owner as IrClass - val l = useClassInstance(tcls, t.arguments) + val l = useClassInstance(tcls, t.arguments).classLabel tw.writeExtendsReftype(id, l) } else -> { logger.warn(Severity.ErrorSevere, "Unexpected simple type supertype: " + t.javaClass + ": " + t.render()) From f5021e8e687300459be2de0360b0355c93154fe8 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 25 Oct 2021 15:12:57 +0100 Subject: [PATCH 0600/1618] Java: produce Java 8 class files for compatibility with packaged Java 11 binary --- java/kotlin-extractor/build.gradle | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/build.gradle b/java/kotlin-extractor/build.gradle index c8f95a664e8..af5e0b281a1 100644 --- a/java/kotlin-extractor/build.gradle +++ b/java/kotlin-extractor/build.gradle @@ -29,4 +29,10 @@ task getHomeDir { doLast { println gradle.gradleHomeDir } -} \ No newline at end of file +} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + } +} From 48d5561c95aa2cabf54db7a116f79947b29ab34d Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 25 Oct 2021 15:55:34 +0100 Subject: [PATCH 0601/1618] Use getClassLabel for Kotlin <-> Java type correspondences Without this, the table can be non-functional due to mapping one unqualified Kotlin type onto several qualified Java types --- .../src/main/kotlin/KotlinExtractorExtension.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index a8dc9745320..389dea21cb7 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -427,7 +427,7 @@ class X { val classInstanceResult = useClassInstance(cls, s.arguments) val javaClassId = classInstanceResult.classLabel - val kotlinQualClassName = cls.fqNameForIrSerialization.asString() + val kotlinQualClassName = getUnquotedClassLabel(cls, s.arguments) val javaQualClassName = classInstanceResult.javaClass.fqNameForIrSerialization.asString() val javaSignature = javaQualClassName // TODO: Is this right? val javaResult = TypeResult(javaClassId, javaSignature) @@ -548,7 +548,7 @@ class X { externalClassExtractor.extractLater(c) } - private fun getClassLabel(c: IrClass, typeArgs: List): String { + private fun getUnquotedClassLabel(c: IrClass, typeArgs: List): String { val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() var label: String @@ -556,11 +556,9 @@ class X { if (parent is IrClass) { // todo: fix this. Ugly string concat to handle nested class IDs. // todo: Can the containing class have type arguments? - val p = getClassLabel(parent, listOf()) - label = "${p.substring(0, p.length - 1)}\$$cls" + label = "${getUnquotedClassLabel(parent, listOf())}\$$cls" } else { - val qualClassName = if (pkg.isEmpty()) cls else "$pkg.$cls" - label = "@\"class;$qualClassName" + label = if (pkg.isEmpty()) cls else "$pkg.$cls" } for (arg in typeArgs) { @@ -568,10 +566,12 @@ class X { label += ";{$argId}" } - label += "\"" return label } + private fun getClassLabel(c: IrClass, typeArgs: List) = + "@\"class;${getUnquotedClassLabel(c, typeArgs)}\"" + private fun getTypeArgumentLabel( arg: IrTypeArgument, reportOn: IrElement From e65f451af6abed7c1a59f42f73449cffc1e306bc Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 25 Oct 2021 16:37:39 +0100 Subject: [PATCH 0602/1618] erase: retain question-mark qualifier if present --- .../src/main/kotlin/KotlinExtractorExtension.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 389dea21cb7..a620c897e51 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -762,6 +762,8 @@ class X { } } + fun withQuestionMark(t: IrType, hasQuestionMark: Boolean) = if(hasQuestionMark) t.makeNullable() else t.makeNotNull() + fun erase (t: IrType): IrType { if (t is IrSimpleType) { val classifier = t.classifier @@ -774,11 +776,11 @@ class X { if (t.makeNotNull().isArray()) { val elementType = t.getArrayElementType(pluginContext.irBuiltIns) val erasedElementType = erase(elementType) - return (classifier as IrClassSymbol).typeWith(erasedElementType) + return withQuestionMark((classifier as IrClassSymbol).typeWith(erasedElementType), t.hasQuestionMark) } if (owner is IrClass) { - return (classifier as IrClassSymbol).typeWith() + return withQuestionMark((classifier as IrClassSymbol).typeWith(), t.hasQuestionMark) } } return t From 4dda475a8db40b93c2d45c558b1733c6a50ce022 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 25 Oct 2021 16:52:45 +0100 Subject: [PATCH 0603/1618] Fix source location column numbers --- java/kotlin-extractor/src/main/kotlin/TrapWriter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt index 89bb8e9d026..94b8e3e1210 100644 --- a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt +++ b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt @@ -71,7 +71,7 @@ abstract class SourceOffsetResolver { class FileSourceOffsetResolver(val fileEntry: IrFileEntry) : SourceOffsetResolver() { override fun getLineNumber(offset: Int) = fileEntry.getLineNumber(offset) - override fun getColumnNumber(offset: Int) = fileEntry.getLineNumber(offset) + override fun getColumnNumber(offset: Int) = fileEntry.getColumnNumber(offset) } object NullSourceOffsetResolver : SourceOffsetResolver() { From 124dcb0e5f7ddd485da2adb53d4095bed3f6f83f Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 26 Oct 2021 16:55:28 +0100 Subject: [PATCH 0604/1618] Update test expectations --- .../library-tests/classes/classes.expected | 1308 +- .../library-tests/classes/interfaces.expected | 1220 ++ .../library-tests/classes/superTypes.expected | 2546 ++- .../library-tests/methods/methods.expected | 14525 +++++++++++++++ .../library-tests/methods/parameters.expected | 10833 +++++++++++ .../multiple_files/classes.expected | 1310 +- .../kotlin/library-tests/types/types.expected | 3349 +++- .../variables/variables.expected | 15071 +++++++++++++++- 8 files changed, 50147 insertions(+), 15 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index 520417684ba..fe3077989b3 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -6,9 +6,1315 @@ | classes.kt:17:1:18:1 | ClassFive | ClassFive | | classes.kt:28:1:30:1 | ClassSix | ClassSix | | classes.kt:34:1:47:1 | ClassSeven | ClassSeven | +| file://:0:0:0:0 | AbstractChronology | java.time.chrono.AbstractChronology | +| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | +| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | +| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | +| file://:0:0:0:0 | AbstractExecutorService | java.util.concurrent.AbstractExecutorService | +| file://:0:0:0:0 | AbstractInterruptibleChannel | java.nio.channels.spi.AbstractInterruptibleChannel | +| file://:0:0:0:0 | AbstractList | java.util.AbstractList | +| file://:0:0:0:0 | AbstractList | java.util.AbstractList | +| file://:0:0:0:0 | AbstractList | java.util.AbstractList | +| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | +| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | +| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | +| file://:0:0:0:0 | AbstractOwnableSynchronizer | java.util.concurrent.locks.AbstractOwnableSynchronizer | +| file://:0:0:0:0 | AbstractQueuedSynchronizer | java.util.concurrent.locks.AbstractQueuedSynchronizer | +| file://:0:0:0:0 | AbstractRepository | sun.reflect.generics.repository.AbstractRepository | +| file://:0:0:0:0 | AbstractRepository | sun.reflect.generics.repository.AbstractRepository | +| file://:0:0:0:0 | AbstractSet | java.util.AbstractSet | +| file://:0:0:0:0 | AbstractSet | java.util.AbstractSet | +| file://:0:0:0:0 | AbstractStringBuilder | java.lang.AbstractStringBuilder | +| file://:0:0:0:0 | AccessControlContext | java.security.AccessControlContext | +| file://:0:0:0:0 | AccessDescriptor | java.lang.invoke.AccessDescriptor | +| file://:0:0:0:0 | AccessMode | java.lang.invoke.AccessMode | +| file://:0:0:0:0 | AccessMode | java.nio.file.AccessMode | +| file://:0:0:0:0 | AccessType | java.lang.invoke.AccessType | +| file://:0:0:0:0 | AccessibleObject | java.lang.reflect.AccessibleObject | +| file://:0:0:0:0 | AdaptedCallable | java.util.concurrent.AdaptedCallable | +| file://:0:0:0:0 | AdaptedRunnable | java.util.concurrent.AdaptedRunnable | +| file://:0:0:0:0 | AdaptedRunnableAction | java.util.concurrent.AdaptedRunnableAction | +| file://:0:0:0:0 | AnnotationType | sun.reflect.annotation.AnnotationType | +| file://:0:0:0:0 | AnnotationVisitor | jdk.internal.org.objectweb.asm.AnnotationVisitor | | file://:0:0:0:0 | Any | kotlin.Any | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | java.lang.ArrayIndexOutOfBoundsException | +| file://:0:0:0:0 | ArrayList | java.util.ArrayList | +| file://:0:0:0:0 | ArrayList | java.util.ArrayList | +| file://:0:0:0:0 | ArrayList | java.util.ArrayList | +| file://:0:0:0:0 | ArrayListSpliterator | java.util.ArrayListSpliterator | +| file://:0:0:0:0 | ArrayListSpliterator | java.util.ArrayListSpliterator | +| file://:0:0:0:0 | ArrayTypeSignature | sun.reflect.generics.tree.ArrayTypeSignature | +| file://:0:0:0:0 | AsynchronousFileChannel | java.nio.channels.AsynchronousFileChannel | +| file://:0:0:0:0 | AtomicInteger | java.util.concurrent.atomic.AtomicInteger | +| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | +| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | +| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | +| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | +| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | +| file://:0:0:0:0 | Attribute | java.text.Attribute | +| file://:0:0:0:0 | Attribute | jdk.internal.org.objectweb.asm.Attribute | +| file://:0:0:0:0 | AuthPermission | javax.security.auth.AuthPermission | +| file://:0:0:0:0 | AuthPermissionHolder | javax.security.auth.AuthPermissionHolder | +| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | +| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | +| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | +| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | +| file://:0:0:0:0 | BaseLocale | sun.util.locale.BaseLocale | +| file://:0:0:0:0 | BasicPermission | java.security.BasicPermission | +| file://:0:0:0:0 | BasicType | java.lang.invoke.BasicType | +| file://:0:0:0:0 | BigInteger | java.math.BigInteger | +| file://:0:0:0:0 | Boolean | java.lang.Boolean | | file://:0:0:0:0 | Boolean | kotlin.Boolean | +| file://:0:0:0:0 | BooleanSignature | sun.reflect.generics.tree.BooleanSignature | +| file://:0:0:0:0 | BottomSignature | sun.reflect.generics.tree.BottomSignature | +| file://:0:0:0:0 | BoundMethodHandle | java.lang.invoke.BoundMethodHandle | +| file://:0:0:0:0 | Buffer | java.nio.Buffer | +| file://:0:0:0:0 | BufferedWriter | java.io.BufferedWriter | +| file://:0:0:0:0 | Builder | java.lang.module.Builder | +| file://:0:0:0:0 | Builder | java.util.Builder | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | Byte | java.lang.Byte | +| file://:0:0:0:0 | Byte | kotlin.Byte | +| file://:0:0:0:0 | ByteArray | kotlin.ByteArray | +| file://:0:0:0:0 | ByteBuffer | java.nio.ByteBuffer | +| file://:0:0:0:0 | ByteIterator | kotlin.collections.ByteIterator | +| file://:0:0:0:0 | ByteOrder | java.nio.ByteOrder | +| file://:0:0:0:0 | ByteSignature | sun.reflect.generics.tree.ByteSignature | +| file://:0:0:0:0 | ByteVector | jdk.internal.org.objectweb.asm.ByteVector | +| file://:0:0:0:0 | CallSite | java.lang.invoke.CallSite | +| file://:0:0:0:0 | CaseInsensitiveChar | sun.util.locale.CaseInsensitiveChar | +| file://:0:0:0:0 | CaseInsensitiveString | sun.util.locale.CaseInsensitiveString | +| file://:0:0:0:0 | Category | java.util.Category | +| file://:0:0:0:0 | CertPath | java.security.cert.CertPath | +| file://:0:0:0:0 | CertPathRep | java.security.cert.CertPathRep | +| file://:0:0:0:0 | Certificate | java.security.cert.Certificate | +| file://:0:0:0:0 | CertificateRep | java.security.cert.CertificateRep | +| file://:0:0:0:0 | Char | kotlin.Char | +| file://:0:0:0:0 | CharArray | kotlin.CharArray | +| file://:0:0:0:0 | CharBuffer | java.nio.CharBuffer | +| file://:0:0:0:0 | CharIterator | kotlin.collections.CharIterator | +| file://:0:0:0:0 | CharProgression | kotlin.ranges.CharProgression | +| file://:0:0:0:0 | CharRange | kotlin.ranges.CharRange | +| file://:0:0:0:0 | CharSignature | sun.reflect.generics.tree.CharSignature | +| file://:0:0:0:0 | Character | java.lang.Character | +| file://:0:0:0:0 | Characteristics | java.util.stream.Characteristics | +| file://:0:0:0:0 | Charset | java.nio.charset.Charset | +| file://:0:0:0:0 | CharsetDecoder | java.nio.charset.CharsetDecoder | +| file://:0:0:0:0 | CharsetEncoder | java.nio.charset.CharsetEncoder | +| file://:0:0:0:0 | ChronoField | java.time.temporal.ChronoField | +| file://:0:0:0:0 | ChronoUnit | java.time.temporal.ChronoUnit | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | ClassDataSlot | java.io.ClassDataSlot | +| file://:0:0:0:0 | ClassLoader | java.lang.ClassLoader | +| file://:0:0:0:0 | ClassNotFoundException | java.lang.ClassNotFoundException | +| file://:0:0:0:0 | ClassReader | jdk.internal.org.objectweb.asm.ClassReader | +| file://:0:0:0:0 | ClassSignature | sun.reflect.generics.tree.ClassSignature | +| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | +| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | +| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | +| file://:0:0:0:0 | ClassTypeSignature | sun.reflect.generics.tree.ClassTypeSignature | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValueMap | java.lang.ClassValueMap | +| file://:0:0:0:0 | ClassVisitor | jdk.internal.org.objectweb.asm.ClassVisitor | +| file://:0:0:0:0 | ClassWriter | jdk.internal.org.objectweb.asm.ClassWriter | +| file://:0:0:0:0 | ClassicFormat | java.time.format.ClassicFormat | +| file://:0:0:0:0 | Cleaner | java.lang.ref.Cleaner | +| file://:0:0:0:0 | CleanerCleanable | jdk.internal.ref.CleanerCleanable | +| file://:0:0:0:0 | CleanerImpl | jdk.internal.ref.CleanerImpl | +| file://:0:0:0:0 | Clock | java.time.Clock | +| file://:0:0:0:0 | CodeSigner | java.security.CodeSigner | +| file://:0:0:0:0 | CodeSource | java.security.CodeSource | +| file://:0:0:0:0 | CoderResult | java.nio.charset.CoderResult | +| file://:0:0:0:0 | CodingErrorAction | java.nio.charset.CodingErrorAction | +| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | +| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | +| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | +| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Compiled | java.lang.invoke.Compiled | +| file://:0:0:0:0 | CompositePrinterParser | java.time.format.CompositePrinterParser | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentWeakInternSet | java.lang.invoke.ConcurrentWeakInternSet | +| file://:0:0:0:0 | ConcurrentWeakInternSet | java.lang.invoke.ConcurrentWeakInternSet | +| file://:0:0:0:0 | ConditionObject | java.util.concurrent.locks.ConditionObject | +| file://:0:0:0:0 | Config | java.io.Config | +| file://:0:0:0:0 | Configuration | java.lang.module.Configuration | +| file://:0:0:0:0 | ConstantPool | jdk.internal.reflect.ConstantPool | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | ConstructorRepository | sun.reflect.generics.repository.ConstructorRepository | +| file://:0:0:0:0 | ContentHandler | java.net.ContentHandler | +| file://:0:0:0:0 | Controller | java.lang.Controller | +| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | +| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | +| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | +| file://:0:0:0:0 | CounterCell | java.util.concurrent.CounterCell | +| file://:0:0:0:0 | Date | java.util.Date | +| file://:0:0:0:0 | DateTimeFormatter | java.time.format.DateTimeFormatter | +| file://:0:0:0:0 | DateTimeParseContext | java.time.format.DateTimeParseContext | +| file://:0:0:0:0 | DateTimePrintContext | java.time.format.DateTimePrintContext | +| file://:0:0:0:0 | DayOfWeek | java.time.DayOfWeek | +| file://:0:0:0:0 | Debug | sun.security.util.Debug | +| file://:0:0:0:0 | DecimalStyle | java.time.format.DecimalStyle | +| file://:0:0:0:0 | Dictionary | java.util.Dictionary | +| file://:0:0:0:0 | Dictionary | java.util.Dictionary | +| file://:0:0:0:0 | Double | java.lang.Double | +| file://:0:0:0:0 | Double | kotlin.Double | +| file://:0:0:0:0 | DoubleArray | kotlin.DoubleArray | +| file://:0:0:0:0 | DoubleBuffer | java.nio.DoubleBuffer | +| file://:0:0:0:0 | DoubleIterator | kotlin.collections.DoubleIterator | +| file://:0:0:0:0 | DoubleSignature | sun.reflect.generics.tree.DoubleSignature | +| file://:0:0:0:0 | DoubleSummaryStatistics | java.util.DoubleSummaryStatistics | +| file://:0:0:0:0 | Duration | java.time.Duration | +| file://:0:0:0:0 | Edge | jdk.internal.org.objectweb.asm.Edge | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | EntryIterator | java.util.concurrent.EntryIterator | +| file://:0:0:0:0 | EntrySetView | java.util.concurrent.EntrySetView | +| file://:0:0:0:0 | EntrySpliterator | java.util.EntrySpliterator | +| file://:0:0:0:0 | EntrySpliterator | java.util.EntrySpliterator | +| file://:0:0:0:0 | EntrySpliterator | java.util.concurrent.EntrySpliterator | +| file://:0:0:0:0 | EntrySpliterator | java.util.concurrent.EntrySpliterator | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | kotlin.Enum | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | Exception | java.lang.Exception | +| file://:0:0:0:0 | ExceptionNode | java.util.concurrent.ExceptionNode | +| file://:0:0:0:0 | Executable | java.lang.reflect.Executable | +| file://:0:0:0:0 | Exports | java.lang.module.Exports | +| file://:0:0:0:0 | ExtendedOption | java.lang.ExtendedOption | +| file://:0:0:0:0 | Extension | sun.util.locale.Extension | +| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | +| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | +| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | +| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | +| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | +| file://:0:0:0:0 | FairSync | java.util.concurrent.locks.FairSync | +| file://:0:0:0:0 | Field | java.lang.reflect.Field | +| file://:0:0:0:0 | Field | java.text.Field | +| file://:0:0:0:0 | FieldPosition | java.text.FieldPosition | +| file://:0:0:0:0 | FieldVisitor | jdk.internal.org.objectweb.asm.FieldVisitor | +| file://:0:0:0:0 | FieldWriter | jdk.internal.org.objectweb.asm.FieldWriter | +| file://:0:0:0:0 | File | java.io.File | +| file://:0:0:0:0 | FileChannel | java.nio.channels.FileChannel | +| file://:0:0:0:0 | FileDescriptor | java.io.FileDescriptor | +| file://:0:0:0:0 | FileLock | java.nio.channels.FileLock | +| file://:0:0:0:0 | FileStore | java.nio.file.FileStore | +| file://:0:0:0:0 | FileSystem | java.nio.file.FileSystem | +| file://:0:0:0:0 | FileSystemProvider | java.nio.file.spi.FileSystemProvider | +| file://:0:0:0:0 | FileTime | java.nio.file.attribute.FileTime | +| file://:0:0:0:0 | FilterOutputStream | java.io.FilterOutputStream | +| file://:0:0:0:0 | FilterValues | java.io.FilterValues | +| file://:0:0:0:0 | FilteringMode | java.util.FilteringMode | +| file://:0:0:0:0 | FixedClock | java.time.FixedClock | +| file://:0:0:0:0 | Float | java.lang.Float | +| file://:0:0:0:0 | Float | kotlin.Float | +| file://:0:0:0:0 | FloatArray | kotlin.FloatArray | +| file://:0:0:0:0 | FloatBuffer | java.nio.FloatBuffer | +| file://:0:0:0:0 | FloatIterator | kotlin.collections.FloatIterator | +| file://:0:0:0:0 | FloatSignature | sun.reflect.generics.tree.FloatSignature | +| file://:0:0:0:0 | ForEachEntryTask | java.util.concurrent.ForEachEntryTask | +| file://:0:0:0:0 | ForEachKeyTask | java.util.concurrent.ForEachKeyTask | +| file://:0:0:0:0 | ForEachMappingTask | java.util.concurrent.ForEachMappingTask | +| file://:0:0:0:0 | ForEachTransformedEntryTask | java.util.concurrent.ForEachTransformedEntryTask | +| file://:0:0:0:0 | ForEachTransformedKeyTask | java.util.concurrent.ForEachTransformedKeyTask | +| file://:0:0:0:0 | ForEachTransformedMappingTask | java.util.concurrent.ForEachTransformedMappingTask | +| file://:0:0:0:0 | ForEachTransformedValueTask | java.util.concurrent.ForEachTransformedValueTask | +| file://:0:0:0:0 | ForEachValueTask | java.util.concurrent.ForEachValueTask | +| file://:0:0:0:0 | ForkJoinPool | java.util.concurrent.ForkJoinPool | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinWorkerThread | java.util.concurrent.ForkJoinWorkerThread | +| file://:0:0:0:0 | FormalTypeParameter | sun.reflect.generics.tree.FormalTypeParameter | +| file://:0:0:0:0 | Format | java.text.Format | +| file://:0:0:0:0 | FormatStyle | java.time.format.FormatStyle | +| file://:0:0:0:0 | ForwardingNode | java.util.concurrent.ForwardingNode | +| file://:0:0:0:0 | Frame | jdk.internal.org.objectweb.asm.Frame | +| file://:0:0:0:0 | GenericDeclRepository | sun.reflect.generics.repository.GenericDeclRepository | +| file://:0:0:0:0 | GenericDeclRepository | sun.reflect.generics.repository.GenericDeclRepository | +| file://:0:0:0:0 | GetField | java.io.GetField | +| file://:0:0:0:0 | GetReflectionFactoryAction | jdk.internal.reflect.GetReflectionFactoryAction | +| file://:0:0:0:0 | Global | java.io.Global | +| file://:0:0:0:0 | Handle | jdk.internal.org.objectweb.asm.Handle | +| file://:0:0:0:0 | Hashtable | java.util.Hashtable | +| file://:0:0:0:0 | Hashtable | java.util.Hashtable | +| file://:0:0:0:0 | Hashtable | java.util.Hashtable | +| file://:0:0:0:0 | Hashtable | java.util.Hashtable | +| file://:0:0:0:0 | Hidden | java.lang.invoke.Hidden | +| file://:0:0:0:0 | IOException | java.io.IOException | +| file://:0:0:0:0 | Identity | java.lang.Identity | +| file://:0:0:0:0 | IllegalAccessException | java.lang.IllegalAccessException | +| file://:0:0:0:0 | IllegalArgumentException | java.lang.IllegalArgumentException | +| file://:0:0:0:0 | IndexOutOfBoundsException | java.lang.IndexOutOfBoundsException | +| file://:0:0:0:0 | InetAddress | java.net.InetAddress | +| file://:0:0:0:0 | InetAddressHolder | java.net.InetAddressHolder | +| file://:0:0:0:0 | InnocuousForkJoinWorkerThread | java.util.concurrent.InnocuousForkJoinWorkerThread | +| file://:0:0:0:0 | InnocuousThreadFactory | jdk.internal.ref.InnocuousThreadFactory | +| file://:0:0:0:0 | InputStream | java.io.InputStream | +| file://:0:0:0:0 | Instant | java.time.Instant | | file://:0:0:0:0 | Int | kotlin.Int | +| file://:0:0:0:0 | IntArray | kotlin.IntArray | +| file://:0:0:0:0 | IntBuffer | java.nio.IntBuffer | +| file://:0:0:0:0 | IntIterator | kotlin.collections.IntIterator | +| file://:0:0:0:0 | IntProgression | kotlin.ranges.IntProgression | +| file://:0:0:0:0 | IntRange | kotlin.ranges.IntRange | +| file://:0:0:0:0 | IntSignature | sun.reflect.generics.tree.IntSignature | +| file://:0:0:0:0 | IntSummaryStatistics | java.util.IntSummaryStatistics | +| file://:0:0:0:0 | Integer | java.lang.Integer | +| file://:0:0:0:0 | InterfaceAddress | java.net.InterfaceAddress | +| file://:0:0:0:0 | Intrinsic | java.lang.invoke.Intrinsic | +| file://:0:0:0:0 | Invokers | java.lang.invoke.Invokers | +| file://:0:0:0:0 | IsoChronology | java.time.chrono.IsoChronology | +| file://:0:0:0:0 | IsoCountryCode | java.util.IsoCountryCode | +| file://:0:0:0:0 | IsoEra | java.time.chrono.IsoEra | +| file://:0:0:0:0 | Item | jdk.internal.org.objectweb.asm.Item | +| file://:0:0:0:0 | Key | java.security.Key | +| file://:0:0:0:0 | KeyIterator | java.util.concurrent.KeyIterator | +| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | +| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | +| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | +| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | +| file://:0:0:0:0 | KeySpliterator | java.util.KeySpliterator | +| file://:0:0:0:0 | KeySpliterator | java.util.KeySpliterator | +| file://:0:0:0:0 | KeySpliterator | java.util.concurrent.KeySpliterator | +| file://:0:0:0:0 | KeySpliterator | java.util.concurrent.KeySpliterator | +| file://:0:0:0:0 | Kind | java.lang.invoke.Kind | +| file://:0:0:0:0 | Label | jdk.internal.org.objectweb.asm.Label | +| file://:0:0:0:0 | LambdaForm | java.lang.invoke.LambdaForm | +| file://:0:0:0:0 | LambdaFormEditor | java.lang.invoke.LambdaFormEditor | +| file://:0:0:0:0 | LanguageRange | java.util.LanguageRange | +| file://:0:0:0:0 | Level | java.lang.Level | +| file://:0:0:0:0 | LineReader | java.util.LineReader | +| file://:0:0:0:0 | LinkOption | java.nio.file.LinkOption | +| file://:0:0:0:0 | LocalDate | java.time.LocalDate | +| file://:0:0:0:0 | LocalDateTime | java.time.LocalDateTime | +| file://:0:0:0:0 | LocalTime | java.time.LocalTime | +| file://:0:0:0:0 | Locale | java.util.Locale | +| file://:0:0:0:0 | LocaleExtensions | sun.util.locale.LocaleExtensions | +| file://:0:0:0:0 | Long | java.lang.Long | +| file://:0:0:0:0 | Long | kotlin.Long | +| file://:0:0:0:0 | LongArray | kotlin.LongArray | +| file://:0:0:0:0 | LongBuffer | java.nio.LongBuffer | +| file://:0:0:0:0 | LongIterator | kotlin.collections.LongIterator | +| file://:0:0:0:0 | LongProgression | kotlin.ranges.LongProgression | +| file://:0:0:0:0 | LongRange | kotlin.ranges.LongRange | +| file://:0:0:0:0 | LongSignature | sun.reflect.generics.tree.LongSignature | +| file://:0:0:0:0 | LongSummaryStatistics | java.util.LongSummaryStatistics | +| file://:0:0:0:0 | MapEntry | java.util.concurrent.MapEntry | +| file://:0:0:0:0 | MapMode | java.nio.channels.MapMode | +| file://:0:0:0:0 | MapReduceEntriesTask | java.util.concurrent.MapReduceEntriesTask | +| file://:0:0:0:0 | MapReduceEntriesTask | java.util.concurrent.MapReduceEntriesTask | +| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | java.util.concurrent.MapReduceEntriesToDoubleTask | +| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | java.util.concurrent.MapReduceEntriesToDoubleTask | +| file://:0:0:0:0 | MapReduceEntriesToIntTask | java.util.concurrent.MapReduceEntriesToIntTask | +| file://:0:0:0:0 | MapReduceEntriesToIntTask | java.util.concurrent.MapReduceEntriesToIntTask | +| file://:0:0:0:0 | MapReduceEntriesToLongTask | java.util.concurrent.MapReduceEntriesToLongTask | +| file://:0:0:0:0 | MapReduceEntriesToLongTask | java.util.concurrent.MapReduceEntriesToLongTask | +| file://:0:0:0:0 | MapReduceKeysTask | java.util.concurrent.MapReduceKeysTask | +| file://:0:0:0:0 | MapReduceKeysTask | java.util.concurrent.MapReduceKeysTask | +| file://:0:0:0:0 | MapReduceKeysToDoubleTask | java.util.concurrent.MapReduceKeysToDoubleTask | +| file://:0:0:0:0 | MapReduceKeysToDoubleTask | java.util.concurrent.MapReduceKeysToDoubleTask | +| file://:0:0:0:0 | MapReduceKeysToIntTask | java.util.concurrent.MapReduceKeysToIntTask | +| file://:0:0:0:0 | MapReduceKeysToIntTask | java.util.concurrent.MapReduceKeysToIntTask | +| file://:0:0:0:0 | MapReduceKeysToLongTask | java.util.concurrent.MapReduceKeysToLongTask | +| file://:0:0:0:0 | MapReduceKeysToLongTask | java.util.concurrent.MapReduceKeysToLongTask | +| file://:0:0:0:0 | MapReduceMappingsTask | java.util.concurrent.MapReduceMappingsTask | +| file://:0:0:0:0 | MapReduceMappingsTask | java.util.concurrent.MapReduceMappingsTask | +| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | java.util.concurrent.MapReduceMappingsToDoubleTask | +| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | java.util.concurrent.MapReduceMappingsToDoubleTask | +| file://:0:0:0:0 | MapReduceMappingsToIntTask | java.util.concurrent.MapReduceMappingsToIntTask | +| file://:0:0:0:0 | MapReduceMappingsToIntTask | java.util.concurrent.MapReduceMappingsToIntTask | +| file://:0:0:0:0 | MapReduceMappingsToLongTask | java.util.concurrent.MapReduceMappingsToLongTask | +| file://:0:0:0:0 | MapReduceMappingsToLongTask | java.util.concurrent.MapReduceMappingsToLongTask | +| file://:0:0:0:0 | MapReduceValuesTask | java.util.concurrent.MapReduceValuesTask | +| file://:0:0:0:0 | MapReduceValuesTask | java.util.concurrent.MapReduceValuesTask | +| file://:0:0:0:0 | MapReduceValuesToDoubleTask | java.util.concurrent.MapReduceValuesToDoubleTask | +| file://:0:0:0:0 | MapReduceValuesToDoubleTask | java.util.concurrent.MapReduceValuesToDoubleTask | +| file://:0:0:0:0 | MapReduceValuesToIntTask | java.util.concurrent.MapReduceValuesToIntTask | +| file://:0:0:0:0 | MapReduceValuesToIntTask | java.util.concurrent.MapReduceValuesToIntTask | +| file://:0:0:0:0 | MapReduceValuesToLongTask | java.util.concurrent.MapReduceValuesToLongTask | +| file://:0:0:0:0 | MapReduceValuesToLongTask | java.util.concurrent.MapReduceValuesToLongTask | +| file://:0:0:0:0 | MappedByteBuffer | java.nio.MappedByteBuffer | +| file://:0:0:0:0 | MemberName | java.lang.invoke.MemberName | +| file://:0:0:0:0 | Method | java.lang.reflect.Method | +| file://:0:0:0:0 | MethodHandle | java.lang.invoke.MethodHandle | +| file://:0:0:0:0 | MethodRepository | sun.reflect.generics.repository.MethodRepository | +| file://:0:0:0:0 | MethodType | java.lang.invoke.MethodType | +| file://:0:0:0:0 | MethodTypeForm | java.lang.invoke.MethodTypeForm | +| file://:0:0:0:0 | MethodTypeSignature | sun.reflect.generics.tree.MethodTypeSignature | +| file://:0:0:0:0 | MethodVisitor | jdk.internal.org.objectweb.asm.MethodVisitor | +| file://:0:0:0:0 | MethodWriter | jdk.internal.org.objectweb.asm.MethodWriter | +| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | +| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | +| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | +| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | +| file://:0:0:0:0 | Module | java.lang.Module | +| file://:0:0:0:0 | ModuleDescriptor | java.lang.module.ModuleDescriptor | +| file://:0:0:0:0 | ModuleLayer | java.lang.ModuleLayer | +| file://:0:0:0:0 | ModuleReference | java.lang.module.ModuleReference | +| file://:0:0:0:0 | ModuleVisitor | jdk.internal.org.objectweb.asm.ModuleVisitor | +| file://:0:0:0:0 | Month | java.time.Month | +| file://:0:0:0:0 | Name | java.lang.invoke.Name | +| file://:0:0:0:0 | NamedFunction | java.lang.invoke.NamedFunction | +| file://:0:0:0:0 | NamedPackage | java.lang.NamedPackage | +| file://:0:0:0:0 | NativeLibrary | java.lang.NativeLibrary | +| file://:0:0:0:0 | NestHost | jdk.internal.org.objectweb.asm.NestHost | +| file://:0:0:0:0 | NestMembers | jdk.internal.org.objectweb.asm.NestMembers | +| file://:0:0:0:0 | NetworkInterface | java.net.NetworkInterface | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.locks.Node | +| file://:0:0:0:0 | NonfairSync | java.util.concurrent.locks.NonfairSync | +| file://:0:0:0:0 | Nothing | kotlin.Nothing | +| file://:0:0:0:0 | Number | java.lang.Number | +| file://:0:0:0:0 | Number | kotlin.Number | +| file://:0:0:0:0 | Object | java.lang.Object | +| file://:0:0:0:0 | ObjectInputStream | java.io.ObjectInputStream | +| file://:0:0:0:0 | ObjectOutputStream | java.io.ObjectOutputStream | +| file://:0:0:0:0 | ObjectStreamClass | java.io.ObjectStreamClass | +| file://:0:0:0:0 | ObjectStreamException | java.io.ObjectStreamException | +| file://:0:0:0:0 | ObjectStreamField | java.io.ObjectStreamField | +| file://:0:0:0:0 | OffsetClock | java.time.OffsetClock | +| file://:0:0:0:0 | OffsetDateTime | java.time.OffsetDateTime | +| file://:0:0:0:0 | OffsetTime | java.time.OffsetTime | +| file://:0:0:0:0 | Opens | java.lang.module.Opens | +| file://:0:0:0:0 | Option | java.lang.Option | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | OptionalDataException | java.io.OptionalDataException | +| file://:0:0:0:0 | OptionalDouble | java.util.OptionalDouble | +| file://:0:0:0:0 | OptionalInt | java.util.OptionalInt | +| file://:0:0:0:0 | OptionalLong | java.util.OptionalLong | +| file://:0:0:0:0 | OutputStream | java.io.OutputStream | +| file://:0:0:0:0 | Package | java.lang.Package | +| file://:0:0:0:0 | Parameter | java.lang.reflect.Parameter | +| file://:0:0:0:0 | ParsePosition | java.text.ParsePosition | +| file://:0:0:0:0 | Parsed | java.time.format.Parsed | +| file://:0:0:0:0 | Period | java.time.Period | +| file://:0:0:0:0 | Permission | java.security.Permission | +| file://:0:0:0:0 | PermissionCollection | java.security.PermissionCollection | +| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanableRef | jdk.internal.ref.PhantomCleanableRef | +| file://:0:0:0:0 | PhantomReference | java.lang.ref.PhantomReference | +| file://:0:0:0:0 | PhantomReference | java.lang.ref.PhantomReference | +| file://:0:0:0:0 | PolymorphicSignature | java.lang.invoke.PolymorphicSignature | +| file://:0:0:0:0 | PrintStream | java.io.PrintStream | +| file://:0:0:0:0 | PrintWriter | java.io.PrintWriter | +| file://:0:0:0:0 | Properties | java.util.Properties | +| file://:0:0:0:0 | ProtectionDomain | java.security.ProtectionDomain | +| file://:0:0:0:0 | Provider | java.security.Provider | +| file://:0:0:0:0 | Provides | java.lang.module.Provides | +| file://:0:0:0:0 | Proxy | java.net.Proxy | +| file://:0:0:0:0 | PutField | java.io.PutField | +| file://:0:0:0:0 | Random | java.util.Random | +| file://:0:0:0:0 | RandomAccessSpliterator | java.util.RandomAccessSpliterator | +| file://:0:0:0:0 | RandomDoublesSpliterator | java.util.RandomDoublesSpliterator | +| file://:0:0:0:0 | RandomIntsSpliterator | java.util.RandomIntsSpliterator | +| file://:0:0:0:0 | RandomLongsSpliterator | java.util.RandomLongsSpliterator | +| file://:0:0:0:0 | Reader | java.io.Reader | +| file://:0:0:0:0 | ReduceEntriesTask | java.util.concurrent.ReduceEntriesTask | +| file://:0:0:0:0 | ReduceEntriesTask | java.util.concurrent.ReduceEntriesTask | +| file://:0:0:0:0 | ReduceKeysTask | java.util.concurrent.ReduceKeysTask | +| file://:0:0:0:0 | ReduceKeysTask | java.util.concurrent.ReduceKeysTask | +| file://:0:0:0:0 | ReduceValuesTask | java.util.concurrent.ReduceValuesTask | +| file://:0:0:0:0 | ReduceValuesTask | java.util.concurrent.ReduceValuesTask | +| file://:0:0:0:0 | ReentrantLock | java.util.concurrent.locks.ReentrantLock | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReflectionFactory | jdk.internal.reflect.ReflectionFactory | +| file://:0:0:0:0 | ReflectiveOperationException | java.lang.ReflectiveOperationException | +| file://:0:0:0:0 | Reifier | sun.reflect.generics.visitor.Reifier | +| file://:0:0:0:0 | Requires | java.lang.module.Requires | +| file://:0:0:0:0 | ReservationNode | java.util.concurrent.ReservationNode | +| file://:0:0:0:0 | ResolvedModule | java.lang.module.ResolvedModule | +| file://:0:0:0:0 | ResolverStyle | java.time.format.ResolverStyle | +| file://:0:0:0:0 | RetentionPolicy | java.lang.annotation.RetentionPolicy | +| file://:0:0:0:0 | RunnableExecuteAction | java.util.concurrent.RunnableExecuteAction | +| file://:0:0:0:0 | RuntimeException | java.lang.RuntimeException | +| file://:0:0:0:0 | RuntimePermission | java.lang.RuntimePermission | +| file://:0:0:0:0 | SearchEntriesTask | java.util.concurrent.SearchEntriesTask | +| file://:0:0:0:0 | SearchKeysTask | java.util.concurrent.SearchKeysTask | +| file://:0:0:0:0 | SearchMappingsTask | java.util.concurrent.SearchMappingsTask | +| file://:0:0:0:0 | SearchValuesTask | java.util.concurrent.SearchValuesTask | +| file://:0:0:0:0 | Segment | java.util.concurrent.Segment | +| file://:0:0:0:0 | SerializablePermission | java.io.SerializablePermission | +| file://:0:0:0:0 | Service | java.security.Service | +| file://:0:0:0:0 | ServiceProvider | jdk.internal.module.ServiceProvider | +| file://:0:0:0:0 | ServicesCatalog | jdk.internal.module.ServicesCatalog | +| file://:0:0:0:0 | Short | java.lang.Short | +| file://:0:0:0:0 | Short | kotlin.Short | +| file://:0:0:0:0 | ShortArray | kotlin.ShortArray | +| file://:0:0:0:0 | ShortBuffer | java.nio.ShortBuffer | +| file://:0:0:0:0 | ShortIterator | kotlin.collections.ShortIterator | +| file://:0:0:0:0 | ShortSignature | sun.reflect.generics.tree.ShortSignature | +| file://:0:0:0:0 | SimpleClassTypeSignature | sun.reflect.generics.tree.SimpleClassTypeSignature | +| file://:0:0:0:0 | SimpleEntry | java.util.SimpleEntry | +| file://:0:0:0:0 | SimpleImmutableEntry | java.util.SimpleImmutableEntry | +| file://:0:0:0:0 | SocketAddress | java.net.SocketAddress | +| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | +| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | +| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | +| file://:0:0:0:0 | SoftCleanableRef | jdk.internal.ref.SoftCleanableRef | +| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | +| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | +| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | +| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | +| file://:0:0:0:0 | Specializer | java.lang.invoke.Specializer | +| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | +| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | +| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | +| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | +| file://:0:0:0:0 | StackFrameInfo | java.lang.StackFrameInfo | +| file://:0:0:0:0 | StackTraceElement | java.lang.StackTraceElement | +| file://:0:0:0:0 | StackWalker | java.lang.StackWalker | +| file://:0:0:0:0 | State | java.lang.State | +| file://:0:0:0:0 | Status | java.io.Status | | file://:0:0:0:0 | String | java.lang.String | | file://:0:0:0:0 | String | kotlin.String | -| file://:0:0:0:0 | Unit | kotlin.Unit | +| file://:0:0:0:0 | StringBuffer | java.lang.StringBuffer | +| file://:0:0:0:0 | StringBuilder | java.lang.StringBuilder | +| file://:0:0:0:0 | Subject | javax.security.auth.Subject | +| file://:0:0:0:0 | Subset | java.lang.Subset | +| file://:0:0:0:0 | SuppliedThreadLocal | java.lang.SuppliedThreadLocal | +| file://:0:0:0:0 | Sync | java.util.concurrent.locks.Sync | +| file://:0:0:0:0 | SystemClock | java.time.SystemClock | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | Tag | jdk.internal.reflect.Tag | +| file://:0:0:0:0 | TextStyle | java.time.format.TextStyle | +| file://:0:0:0:0 | Thread | java.lang.Thread | +| file://:0:0:0:0 | ThreadGroup | java.lang.ThreadGroup | +| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | +| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | +| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | +| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | +| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | +| file://:0:0:0:0 | ThreadLocalMap | java.lang.ThreadLocalMap | +| file://:0:0:0:0 | Throwable | java.lang.Throwable | +| file://:0:0:0:0 | Throwable | kotlin.Throwable | +| file://:0:0:0:0 | TickClock | java.time.TickClock | +| file://:0:0:0:0 | TimeDefinition | java.time.zone.TimeDefinition | +| file://:0:0:0:0 | TimeUnit | java.util.concurrent.TimeUnit | +| file://:0:0:0:0 | Timestamp | java.security.Timestamp | +| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | +| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | +| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | +| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | +| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | +| file://:0:0:0:0 | TreeBin | java.util.concurrent.TreeBin | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | Type | java.net.Type | +| file://:0:0:0:0 | Type | jdk.internal.org.objectweb.asm.Type | +| file://:0:0:0:0 | TypeParam | kotlin.TypeParam | +| file://:0:0:0:0 | TypePath | jdk.internal.org.objectweb.asm.TypePath | +| file://:0:0:0:0 | TypeVariableSignature | sun.reflect.generics.tree.TypeVariableSignature | +| file://:0:0:0:0 | TypesAndInvokers | java.lang.invoke.TypesAndInvokers | +| file://:0:0:0:0 | URI | java.net.URI | +| file://:0:0:0:0 | URL | java.net.URL | +| file://:0:0:0:0 | URLConnection | java.net.URLConnection | +| file://:0:0:0:0 | URLStreamHandler | java.net.URLStreamHandler | +| file://:0:0:0:0 | UnicodeBlock | java.lang.UnicodeBlock | +| file://:0:0:0:0 | UnicodeScript | java.lang.UnicodeScript | +| file://:0:0:0:0 | Unloader | java.lang.Unloader | +| file://:0:0:0:0 | Unsafe | jdk.internal.misc.Unsafe | +| file://:0:0:0:0 | UserPrincipalLookupService | java.nio.file.attribute.UserPrincipalLookupService | +| file://:0:0:0:0 | ValueIterator | java.util.concurrent.ValueIterator | +| file://:0:0:0:0 | ValueRange | java.time.temporal.ValueRange | +| file://:0:0:0:0 | ValueSpliterator | java.util.ValueSpliterator | +| file://:0:0:0:0 | ValueSpliterator | java.util.ValueSpliterator | +| file://:0:0:0:0 | ValueSpliterator | java.util.concurrent.ValueSpliterator | +| file://:0:0:0:0 | ValueSpliterator | java.util.concurrent.ValueSpliterator | +| file://:0:0:0:0 | ValuesView | java.util.concurrent.ValuesView | +| file://:0:0:0:0 | VarForm | java.lang.invoke.VarForm | +| file://:0:0:0:0 | VarHandle | java.lang.invoke.VarHandle | +| file://:0:0:0:0 | Version | java.lang.Version | +| file://:0:0:0:0 | Version | java.lang.Version | +| file://:0:0:0:0 | Version | java.lang.Version | +| file://:0:0:0:0 | Version | java.lang.Version | +| file://:0:0:0:0 | Version | java.lang.module.Version | +| file://:0:0:0:0 | VersionInfo | java.lang.VersionInfo | +| file://:0:0:0:0 | Void | java.lang.Void | +| file://:0:0:0:0 | VoidDescriptor | sun.reflect.generics.tree.VoidDescriptor | +| file://:0:0:0:0 | WeakClassKey | java.io.WeakClassKey | +| file://:0:0:0:0 | WeakClassKey | java.lang.WeakClassKey | +| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | +| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | +| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | +| file://:0:0:0:0 | WeakCleanableRef | jdk.internal.ref.WeakCleanableRef | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | +| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | +| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | +| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | Wildcard | sun.reflect.generics.tree.Wildcard | +| file://:0:0:0:0 | WorkQueue | java.util.concurrent.WorkQueue | +| file://:0:0:0:0 | Wrapper | sun.invoke.util.Wrapper | +| file://:0:0:0:0 | Writer | java.io.Writer | +| file://:0:0:0:0 | WrongMethodTypeException | java.lang.invoke.WrongMethodTypeException | +| file://:0:0:0:0 | ZoneId | java.time.ZoneId | +| file://:0:0:0:0 | ZoneOffset | java.time.ZoneOffset | +| file://:0:0:0:0 | ZoneOffsetTransition | java.time.zone.ZoneOffsetTransition | +| file://:0:0:0:0 | ZoneOffsetTransitionRule | java.time.zone.ZoneOffsetTransitionRule | +| file://:0:0:0:0 | ZoneRules | java.time.zone.ZoneRules | +| file://:0:0:0:0 | ZonedDateTime | java.time.ZonedDateTime | diff --git a/java/ql/test/kotlin/library-tests/classes/interfaces.expected b/java/ql/test/kotlin/library-tests/classes/interfaces.expected index d62a8753dbf..2d409c82361 100644 --- a/java/ql/test/kotlin/library-tests/classes/interfaces.expected +++ b/java/ql/test/kotlin/library-tests/classes/interfaces.expected @@ -1,2 +1,1222 @@ | classes.kt:20:1:22:1 | IF1 | | classes.kt:24:1:26:1 | IF2 | +| file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | AnnotatedType | +| file://:0:0:0:0 | Annotation | +| file://:0:0:0:0 | Annotation | +| file://:0:0:0:0 | Appendable | +| file://:0:0:0:0 | AsynchronousChannel | +| file://:0:0:0:0 | AttributeView | +| file://:0:0:0:0 | AttributedCharacterIterator | +| file://:0:0:0:0 | AutoCloseable | +| file://:0:0:0:0 | BaseStream | +| file://:0:0:0:0 | BaseStream | +| file://:0:0:0:0 | BaseStream | +| file://:0:0:0:0 | BaseStream | +| file://:0:0:0:0 | BaseStream | +| file://:0:0:0:0 | BaseType | +| file://:0:0:0:0 | BasicFileAttributes | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiConsumer | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BiFunction | +| file://:0:0:0:0 | BinaryOperator | +| file://:0:0:0:0 | BinaryOperator | +| file://:0:0:0:0 | BinaryOperator | +| file://:0:0:0:0 | BinaryOperator | +| file://:0:0:0:0 | BinaryOperator | +| file://:0:0:0:0 | BinaryOperator | +| file://:0:0:0:0 | BinaryOperator | +| file://:0:0:0:0 | BinaryOperator | +| file://:0:0:0:0 | BinaryOperator | +| file://:0:0:0:0 | Builder | +| file://:0:0:0:0 | Builder | +| file://:0:0:0:0 | Builder | +| file://:0:0:0:0 | Builder | +| file://:0:0:0:0 | Builder | +| file://:0:0:0:0 | Builder | +| file://:0:0:0:0 | ByteChannel | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Callable | +| file://:0:0:0:0 | Channel | +| file://:0:0:0:0 | CharSequence | +| file://:0:0:0:0 | CharSequence | +| file://:0:0:0:0 | CharacterIterator | +| file://:0:0:0:0 | ChronoLocalDate | +| file://:0:0:0:0 | ChronoLocalDateTime | +| file://:0:0:0:0 | ChronoLocalDateTime | +| file://:0:0:0:0 | ChronoLocalDateTime | +| file://:0:0:0:0 | ChronoLocalDateTime | +| file://:0:0:0:0 | ChronoLocalDateTime | +| file://:0:0:0:0 | ChronoLocalDateTime | +| file://:0:0:0:0 | ChronoPeriod | +| file://:0:0:0:0 | ChronoZonedDateTime | +| file://:0:0:0:0 | ChronoZonedDateTime | +| file://:0:0:0:0 | ChronoZonedDateTime | +| file://:0:0:0:0 | ChronoZonedDateTime | +| file://:0:0:0:0 | ChronoZonedDateTime | +| file://:0:0:0:0 | ChronoZonedDateTime | +| file://:0:0:0:0 | Chronology | +| file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Closeable | +| file://:0:0:0:0 | ClosedRange | +| file://:0:0:0:0 | ClosedRange | +| file://:0:0:0:0 | ClosedRange | +| file://:0:0:0:0 | ClosedRange | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | Collector | +| file://:0:0:0:0 | Collector | +| file://:0:0:0:0 | Collector | +| file://:0:0:0:0 | Collector | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | Comparator | +| file://:0:0:0:0 | CompletionHandler | +| file://:0:0:0:0 | CompletionHandler | +| file://:0:0:0:0 | CompletionHandler | +| file://:0:0:0:0 | CompletionHandler | +| file://:0:0:0:0 | CompletionHandler | +| file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | Condition | +| file://:0:0:0:0 | ConstructorAccessor | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | Consumer | +| file://:0:0:0:0 | ContentHandlerFactory | +| file://:0:0:0:0 | CopyOption | +| file://:0:0:0:0 | DataInput | +| file://:0:0:0:0 | DataOutput | +| file://:0:0:0:0 | DateTimePrinterParser | +| file://:0:0:0:0 | Deque | +| file://:0:0:0:0 | Deque | +| file://:0:0:0:0 | DirectoryStream | +| file://:0:0:0:0 | DirectoryStream | +| file://:0:0:0:0 | DomainCombiner | +| file://:0:0:0:0 | DoubleBinaryOperator | +| file://:0:0:0:0 | DoubleConsumer | +| file://:0:0:0:0 | DoubleFunction | +| file://:0:0:0:0 | DoubleFunction | +| file://:0:0:0:0 | DoubleFunction | +| file://:0:0:0:0 | DoublePredicate | +| file://:0:0:0:0 | DoubleStream | +| file://:0:0:0:0 | DoubleSupplier | +| file://:0:0:0:0 | DoubleToIntFunction | +| file://:0:0:0:0 | DoubleToLongFunction | +| file://:0:0:0:0 | DoubleUnaryOperator | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | Era | +| file://:0:0:0:0 | Executor | +| file://:0:0:0:0 | ExecutorService | +| file://:0:0:0:0 | FieldAccessor | +| file://:0:0:0:0 | FieldDelegate | +| file://:0:0:0:0 | FieldTypeSignature | +| file://:0:0:0:0 | FileAttribute | +| file://:0:0:0:0 | FileAttribute | +| file://:0:0:0:0 | FileAttributeView | +| file://:0:0:0:0 | FileFilter | +| file://:0:0:0:0 | FileNameMap | +| file://:0:0:0:0 | FileStoreAttributeView | +| file://:0:0:0:0 | FilenameFilter | +| file://:0:0:0:0 | Filter | +| file://:0:0:0:0 | Filter | +| file://:0:0:0:0 | FilterInfo | +| file://:0:0:0:0 | Flushable | +| file://:0:0:0:0 | ForkJoinWorkerThreadFactory | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function | +| file://:0:0:0:0 | Function1 | +| file://:0:0:0:0 | Function1 | +| file://:0:0:0:0 | Function1 | +| file://:0:0:0:0 | Function1 | +| file://:0:0:0:0 | Function1 | +| file://:0:0:0:0 | Function1 | +| file://:0:0:0:0 | Function1 | +| file://:0:0:0:0 | Function1 | +| file://:0:0:0:0 | Function1 | +| file://:0:0:0:0 | Function1 | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | Future | +| file://:0:0:0:0 | GatheringByteChannel | +| file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | GenericsFactory | +| file://:0:0:0:0 | GroupPrincipal | +| file://:0:0:0:0 | Guard | +| file://:0:0:0:0 | InetAddressImpl | +| file://:0:0:0:0 | IntBinaryOperator | +| file://:0:0:0:0 | IntConsumer | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntFunction | +| file://:0:0:0:0 | IntPredicate | +| file://:0:0:0:0 | IntStream | +| file://:0:0:0:0 | IntSupplier | +| file://:0:0:0:0 | IntToDoubleFunction | +| file://:0:0:0:0 | IntToLongFunction | +| file://:0:0:0:0 | IntUnaryOperator | +| file://:0:0:0:0 | Interruptible | +| file://:0:0:0:0 | InterruptibleChannel | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | Key | +| file://:0:0:0:0 | Kind | +| file://:0:0:0:0 | Kind | +| file://:0:0:0:0 | Kind | +| file://:0:0:0:0 | LangReflectAccess | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | List | +| file://:0:0:0:0 | ListIterator | +| file://:0:0:0:0 | ListIterator | +| file://:0:0:0:0 | ListIterator | +| file://:0:0:0:0 | ListIterator | +| file://:0:0:0:0 | ListIterator | +| file://:0:0:0:0 | ListIterator | +| file://:0:0:0:0 | ListIterator | +| file://:0:0:0:0 | ListIterator | +| file://:0:0:0:0 | Lock | +| file://:0:0:0:0 | LongBinaryOperator | +| file://:0:0:0:0 | LongConsumer | +| file://:0:0:0:0 | LongFunction | +| file://:0:0:0:0 | LongFunction | +| file://:0:0:0:0 | LongFunction | +| file://:0:0:0:0 | LongPredicate | +| file://:0:0:0:0 | LongStream | +| file://:0:0:0:0 | LongSupplier | +| file://:0:0:0:0 | LongToDoubleFunction | +| file://:0:0:0:0 | LongToIntFunction | +| file://:0:0:0:0 | LongUnaryOperator | +| file://:0:0:0:0 | ManagedBlocker | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Member | +| file://:0:0:0:0 | MethodAccessor | +| file://:0:0:0:0 | Modifier | +| file://:0:0:0:0 | ModuleFinder | +| file://:0:0:0:0 | ModuleReader | +| file://:0:0:0:0 | MutableCollection | +| file://:0:0:0:0 | MutableEntry | +| file://:0:0:0:0 | MutableIterable | +| file://:0:0:0:0 | MutableIterator | +| file://:0:0:0:0 | MutableList | +| file://:0:0:0:0 | MutableListIterator | +| file://:0:0:0:0 | MutableMap | +| file://:0:0:0:0 | MutableSet | +| file://:0:0:0:0 | ObjDoubleConsumer | +| file://:0:0:0:0 | ObjDoubleConsumer | +| file://:0:0:0:0 | ObjIntConsumer | +| file://:0:0:0:0 | ObjIntConsumer | +| file://:0:0:0:0 | ObjLongConsumer | +| file://:0:0:0:0 | ObjLongConsumer | +| file://:0:0:0:0 | ObjectInput | +| file://:0:0:0:0 | ObjectInputFilter | +| file://:0:0:0:0 | ObjectInputValidation | +| file://:0:0:0:0 | ObjectOutput | +| file://:0:0:0:0 | ObjectStreamConstants | +| file://:0:0:0:0 | OfDouble | +| file://:0:0:0:0 | OfDouble | +| file://:0:0:0:0 | OfInt | +| file://:0:0:0:0 | OfInt | +| file://:0:0:0:0 | OfLong | +| file://:0:0:0:0 | OfLong | +| file://:0:0:0:0 | OfPrimitive | +| file://:0:0:0:0 | OfPrimitive | +| file://:0:0:0:0 | OfPrimitive | +| file://:0:0:0:0 | OfPrimitive | +| file://:0:0:0:0 | OpenOption | +| file://:0:0:0:0 | ParameterizedType | +| file://:0:0:0:0 | Path | +| file://:0:0:0:0 | PathMatcher | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | Predicate | +| file://:0:0:0:0 | PrimitiveIterator | +| file://:0:0:0:0 | PrimitiveIterator | +| file://:0:0:0:0 | PrimitiveIterator | +| file://:0:0:0:0 | PrimitiveIterator | +| file://:0:0:0:0 | Principal | +| file://:0:0:0:0 | PrivilegedAction | +| file://:0:0:0:0 | PrivilegedAction | +| file://:0:0:0:0 | PrivilegedAction | +| file://:0:0:0:0 | PrivilegedAction | +| file://:0:0:0:0 | PrivilegedExceptionAction | +| file://:0:0:0:0 | PrivilegedExceptionAction | +| file://:0:0:0:0 | PrivilegedExceptionAction | +| file://:0:0:0:0 | PublicKey | +| file://:0:0:0:0 | Queue | +| file://:0:0:0:0 | Queue | +| file://:0:0:0:0 | RandomAccess | +| file://:0:0:0:0 | Readable | +| file://:0:0:0:0 | ReadableByteChannel | +| file://:0:0:0:0 | ReturnType | +| file://:0:0:0:0 | Runnable | +| file://:0:0:0:0 | RunnableFuture | +| file://:0:0:0:0 | RunnableFuture | +| file://:0:0:0:0 | RunnableFuture | +| file://:0:0:0:0 | RunnableFuture | +| file://:0:0:0:0 | RunnableFuture | +| file://:0:0:0:0 | RunnableFuture | +| file://:0:0:0:0 | RunnableFuture | +| file://:0:0:0:0 | RunnableFuture | +| file://:0:0:0:0 | ScatteringByteChannel | +| file://:0:0:0:0 | SeekableByteChannel | +| file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Set | +| file://:0:0:0:0 | Signature | +| file://:0:0:0:0 | SortedMap | +| file://:0:0:0:0 | SortedMap | +| file://:0:0:0:0 | SortedMap | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | StackFrame | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Stream | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Supplier | +| file://:0:0:0:0 | Temporal | +| file://:0:0:0:0 | TemporalAccessor | +| file://:0:0:0:0 | TemporalAdjuster | +| file://:0:0:0:0 | TemporalAmount | +| file://:0:0:0:0 | TemporalField | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalQuery | +| file://:0:0:0:0 | TemporalUnit | +| file://:0:0:0:0 | ThreadFactory | +| file://:0:0:0:0 | ToDoubleBiFunction | +| file://:0:0:0:0 | ToDoubleBiFunction | +| file://:0:0:0:0 | ToDoubleBiFunction | +| file://:0:0:0:0 | ToDoubleFunction | +| file://:0:0:0:0 | ToDoubleFunction | +| file://:0:0:0:0 | ToDoubleFunction | +| file://:0:0:0:0 | ToDoubleFunction | +| file://:0:0:0:0 | ToDoubleFunction | +| file://:0:0:0:0 | ToDoubleFunction | +| file://:0:0:0:0 | ToDoubleFunction | +| file://:0:0:0:0 | ToDoubleFunction | +| file://:0:0:0:0 | ToDoubleFunction | +| file://:0:0:0:0 | ToDoubleFunction | +| file://:0:0:0:0 | ToIntBiFunction | +| file://:0:0:0:0 | ToIntBiFunction | +| file://:0:0:0:0 | ToIntBiFunction | +| file://:0:0:0:0 | ToIntFunction | +| file://:0:0:0:0 | ToIntFunction | +| file://:0:0:0:0 | ToIntFunction | +| file://:0:0:0:0 | ToIntFunction | +| file://:0:0:0:0 | ToIntFunction | +| file://:0:0:0:0 | ToIntFunction | +| file://:0:0:0:0 | ToIntFunction | +| file://:0:0:0:0 | ToIntFunction | +| file://:0:0:0:0 | ToIntFunction | +| file://:0:0:0:0 | ToIntFunction | +| file://:0:0:0:0 | ToLongBiFunction | +| file://:0:0:0:0 | ToLongBiFunction | +| file://:0:0:0:0 | ToLongBiFunction | +| file://:0:0:0:0 | ToLongFunction | +| file://:0:0:0:0 | ToLongFunction | +| file://:0:0:0:0 | ToLongFunction | +| file://:0:0:0:0 | ToLongFunction | +| file://:0:0:0:0 | ToLongFunction | +| file://:0:0:0:0 | ToLongFunction | +| file://:0:0:0:0 | ToLongFunction | +| file://:0:0:0:0 | ToLongFunction | +| file://:0:0:0:0 | ToLongFunction | +| file://:0:0:0:0 | ToLongFunction | +| file://:0:0:0:0 | Tree | +| file://:0:0:0:0 | Type | +| file://:0:0:0:0 | TypeArgument | +| file://:0:0:0:0 | TypeSignature | +| file://:0:0:0:0 | TypeTree | +| file://:0:0:0:0 | TypeTreeVisitor | +| file://:0:0:0:0 | TypeTreeVisitor | +| file://:0:0:0:0 | TypeTreeVisitor | +| file://:0:0:0:0 | TypeTreeVisitor | +| file://:0:0:0:0 | TypeVariable | +| file://:0:0:0:0 | TypeVariable | +| file://:0:0:0:0 | TypeVariable | +| file://:0:0:0:0 | TypeVariable | +| file://:0:0:0:0 | TypeVariable | +| file://:0:0:0:0 | URLStreamHandlerFactory | +| file://:0:0:0:0 | UnaryOperator | +| file://:0:0:0:0 | UnaryOperator | +| file://:0:0:0:0 | UnaryOperator | +| file://:0:0:0:0 | UnaryOperator | +| file://:0:0:0:0 | UnaryOperator | +| file://:0:0:0:0 | UnaryOperator | +| file://:0:0:0:0 | UnaryOperator | +| file://:0:0:0:0 | UnaryOperator | +| file://:0:0:0:0 | UnaryOperator | +| file://:0:0:0:0 | UncaughtExceptionHandler | +| file://:0:0:0:0 | UserPrincipal | +| file://:0:0:0:0 | Visitor | +| file://:0:0:0:0 | Visitor | +| file://:0:0:0:0 | WatchEvent | +| file://:0:0:0:0 | WatchEvent | +| file://:0:0:0:0 | WatchKey | +| file://:0:0:0:0 | WatchService | +| file://:0:0:0:0 | Watchable | +| file://:0:0:0:0 | WildcardType | +| file://:0:0:0:0 | WritableByteChannel | diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.expected b/java/ql/test/kotlin/library-tests/classes/superTypes.expected index 836d713758b..425b55f5953 100644 --- a/java/ql/test/kotlin/library-tests/classes/superTypes.expected +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.expected @@ -1,10 +1,2546 @@ -| classes.kt:2:1:2:18 | ClassOne | file://:0:0:0:0 | Any | -| classes.kt:4:1:6:1 | ClassTwo | file://:0:0:0:0 | Any | -| classes.kt:8:1:10:1 | ClassThree | file://:0:0:0:0 | Any | +| classes.kt:2:1:2:18 | ClassOne | file://:0:0:0:0 | Object | +| classes.kt:4:1:6:1 | ClassTwo | file://:0:0:0:0 | Object | +| classes.kt:8:1:10:1 | ClassThree | file://:0:0:0:0 | Object | | classes.kt:12:1:15:1 | ClassFour | classes.kt:8:1:10:1 | ClassThree | | classes.kt:17:1:18:1 | ClassFive | classes.kt:12:1:15:1 | ClassFour | | classes.kt:28:1:30:1 | ClassSix | classes.kt:12:1:15:1 | ClassFour | | classes.kt:28:1:30:1 | ClassSix | classes.kt:20:1:22:1 | IF1 | | classes.kt:28:1:30:1 | ClassSix | classes.kt:24:1:26:1 | IF2 | -| classes.kt:34:1:47:1 | ClassSeven | file://:0:0:0:0 | Any | -| file://:0:0:0:0 | Unit | file://:0:0:0:0 | Any | +| classes.kt:34:1:47:1 | ClassSeven | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | AbstractChronology | file://:0:0:0:0 | Chronology | +| file://:0:0:0:0 | AbstractCollection | file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | AbstractCollection | file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | AbstractCollection | file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | AbstractExecutorService | file://:0:0:0:0 | ExecutorService | +| file://:0:0:0:0 | AbstractInterruptibleChannel | file://:0:0:0:0 | Channel | +| file://:0:0:0:0 | AbstractInterruptibleChannel | file://:0:0:0:0 | InterruptibleChannel | +| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | AbstractCollection | +| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | AbstractCollection | +| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | AbstractCollection | +| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | List | +| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | List | +| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | List | +| file://:0:0:0:0 | AbstractMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | AbstractMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | AbstractMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | AbstractOwnableSynchronizer | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | AbstractQueuedSynchronizer | file://:0:0:0:0 | AbstractOwnableSynchronizer | +| file://:0:0:0:0 | AbstractQueuedSynchronizer | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | AbstractRepository | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | AbstractRepository | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | AbstractSet | file://:0:0:0:0 | AbstractCollection | +| file://:0:0:0:0 | AbstractSet | file://:0:0:0:0 | AbstractCollection | +| file://:0:0:0:0 | AbstractSet | file://:0:0:0:0 | Set | +| file://:0:0:0:0 | AbstractSet | file://:0:0:0:0 | Set | +| file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | Appendable | +| file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | CharSequence | +| file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | AccessDescriptor | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | AccessType | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | AccessibleObject | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | AdaptedCallable | file://:0:0:0:0 | ForkJoinTask | +| file://:0:0:0:0 | AdaptedCallable | file://:0:0:0:0 | RunnableFuture | +| file://:0:0:0:0 | AdaptedRunnable | file://:0:0:0:0 | ForkJoinTask | +| file://:0:0:0:0 | AdaptedRunnable | file://:0:0:0:0 | RunnableFuture | +| file://:0:0:0:0 | AdaptedRunnableAction | file://:0:0:0:0 | ForkJoinTask | +| file://:0:0:0:0 | AdaptedRunnableAction | file://:0:0:0:0 | RunnableFuture | +| file://:0:0:0:0 | AnnotationType | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | AnnotationVisitor | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | file://:0:0:0:0 | IndexOutOfBoundsException | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | AbstractList | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | AbstractList | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | AbstractList | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | List | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | List | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | List | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | RandomAccess | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | RandomAccess | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | RandomAccess | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ArrayListSpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | ArrayListSpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | ArrayTypeSignature | file://:0:0:0:0 | FieldTypeSignature | +| file://:0:0:0:0 | AsynchronousFileChannel | file://:0:0:0:0 | AsynchronousChannel | +| file://:0:0:0:0 | AtomicInteger | file://:0:0:0:0 | Number | +| file://:0:0:0:0 | AtomicInteger | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Attribute | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Attribute | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | BasicPermission | +| file://:0:0:0:0 | AuthPermissionHolder | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | BaseIterator | file://:0:0:0:0 | Traverser | +| file://:0:0:0:0 | BaseIterator | file://:0:0:0:0 | Traverser | +| file://:0:0:0:0 | BaseIterator | file://:0:0:0:0 | Traverser | +| file://:0:0:0:0 | BaseIterator | file://:0:0:0:0 | Traverser | +| file://:0:0:0:0 | BaseLocale | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | BasicPermission | file://:0:0:0:0 | Permission | +| file://:0:0:0:0 | BasicPermission | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | BasicType | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | Number | +| file://:0:0:0:0 | Boolean | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Boolean | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Boolean | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Boolean | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | BooleanSignature | file://:0:0:0:0 | BaseType | +| file://:0:0:0:0 | BottomSignature | file://:0:0:0:0 | FieldTypeSignature | +| file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | MethodHandle | +| file://:0:0:0:0 | Buffer | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | BufferedWriter | file://:0:0:0:0 | Writer | +| file://:0:0:0:0 | Builder | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Builder | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | Buffer | +| file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | ByteIterator | file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | ByteOrder | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ByteSignature | file://:0:0:0:0 | BaseType | +| file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | CallSite | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | CaseInsensitiveChar | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | CaseInsensitiveString | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Category | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | CertPath | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | CertPathRep | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Certificate | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | CertificateRep | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Char | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Char | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | CharArray | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | CharArray | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | CharArray | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | Appendable | +| file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | Buffer | +| file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | CharSequence | +| file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | Readable | +| file://:0:0:0:0 | CharIterator | file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | CharProgression | file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | CharRange | file://:0:0:0:0 | CharProgression | +| file://:0:0:0:0 | CharRange | file://:0:0:0:0 | ClosedRange | +| file://:0:0:0:0 | CharSignature | file://:0:0:0:0 | BaseType | +| file://:0:0:0:0 | Character | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Character | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Characteristics | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Charset | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | CharsetDecoder | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | CharsetEncoder | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | TemporalField | +| file://:0:0:0:0 | ChronoUnit | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | ChronoUnit | file://:0:0:0:0 | TemporalUnit | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | +| file://:0:0:0:0 | ClassDataSlot | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassNotFoundException | file://:0:0:0:0 | ReflectiveOperationException | +| file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassSignature | file://:0:0:0:0 | Signature | +| file://:0:0:0:0 | ClassSpecializer | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassSpecializer | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassSpecializer | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassTypeSignature | file://:0:0:0:0 | FieldTypeSignature | +| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassValueMap | file://:0:0:0:0 | WeakHashMap | +| file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | ClassVisitor | +| file://:0:0:0:0 | ClassicFormat | file://:0:0:0:0 | Format | +| file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | CleanerCleanable | file://:0:0:0:0 | PhantomCleanable | +| file://:0:0:0:0 | CleanerImpl | file://:0:0:0:0 | Runnable | +| file://:0:0:0:0 | Clock | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | CodeSigner | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | CodeSource | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | CoderResult | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Compiled | file://:0:0:0:0 | Annotation | +| file://:0:0:0:0 | CompositePrinterParser | file://:0:0:0:0 | DateTimePrinterParser | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ConcurrentWeakInternSet | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ConcurrentWeakInternSet | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | Condition | +| file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Config | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Configuration | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ConstantPool | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | ConstructorRepository | file://:0:0:0:0 | GenericDeclRepository | +| file://:0:0:0:0 | ContentHandler | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Controller | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | ForkJoinTask | +| file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | ForkJoinTask | +| file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | ForkJoinTask | +| file://:0:0:0:0 | CounterCell | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Date | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Date | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Date | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | DateTimeParseContext | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | DateTimePrintContext | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | TemporalAccessor | +| file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | TemporalAdjuster | +| file://:0:0:0:0 | Debug | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | DecimalStyle | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Dictionary | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Dictionary | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Double | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Double | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Double | file://:0:0:0:0 | Number | +| file://:0:0:0:0 | Double | file://:0:0:0:0 | Number | +| file://:0:0:0:0 | Double | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | DoubleBuffer | file://:0:0:0:0 | Buffer | +| file://:0:0:0:0 | DoubleBuffer | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | DoubleIterator | file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | DoubleSignature | file://:0:0:0:0 | BaseType | +| file://:0:0:0:0 | DoubleSummaryStatistics | file://:0:0:0:0 | DoubleConsumer | +| file://:0:0:0:0 | Duration | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Duration | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Duration | file://:0:0:0:0 | TemporalAmount | +| file://:0:0:0:0 | Edge | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | EntryIterator | file://:0:0:0:0 | BaseIterator | +| file://:0:0:0:0 | EntryIterator | file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | EntrySetView | file://:0:0:0:0 | CollectionView | +| file://:0:0:0:0 | EntrySetView | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EntrySetView | file://:0:0:0:0 | Set | +| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Traverser | +| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Traverser | +| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | +| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Exception | file://:0:0:0:0 | Throwable | +| file://:0:0:0:0 | ExceptionNode | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | Executable | file://:0:0:0:0 | AccessibleObject | +| file://:0:0:0:0 | Executable | file://:0:0:0:0 | GenericDeclaration | +| file://:0:0:0:0 | Executable | file://:0:0:0:0 | Member | +| file://:0:0:0:0 | Exports | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | ExtendedOption | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Extension | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Factory | file://:0:0:0:0 | Factory | +| file://:0:0:0:0 | Factory | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Factory | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Factory | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Factory | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | FairSync | file://:0:0:0:0 | Sync | +| file://:0:0:0:0 | Field | file://:0:0:0:0 | AccessibleObject | +| file://:0:0:0:0 | Field | file://:0:0:0:0 | Attribute | +| file://:0:0:0:0 | Field | file://:0:0:0:0 | Member | +| file://:0:0:0:0 | FieldPosition | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | FieldVisitor | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | FieldWriter | file://:0:0:0:0 | FieldVisitor | +| file://:0:0:0:0 | File | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | File | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | FileChannel | file://:0:0:0:0 | AbstractInterruptibleChannel | +| file://:0:0:0:0 | FileChannel | file://:0:0:0:0 | GatheringByteChannel | +| file://:0:0:0:0 | FileChannel | file://:0:0:0:0 | ScatteringByteChannel | +| file://:0:0:0:0 | FileChannel | file://:0:0:0:0 | SeekableByteChannel | +| file://:0:0:0:0 | FileDescriptor | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | FileLock | file://:0:0:0:0 | AutoCloseable | +| file://:0:0:0:0 | FileStore | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | FileSystem | file://:0:0:0:0 | Closeable | +| file://:0:0:0:0 | FileSystemProvider | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | FileTime | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | FilterOutputStream | file://:0:0:0:0 | OutputStream | +| file://:0:0:0:0 | FilterValues | file://:0:0:0:0 | FilterInfo | +| file://:0:0:0:0 | FilteringMode | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | FixedClock | file://:0:0:0:0 | Clock | +| file://:0:0:0:0 | FixedClock | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | FloatBuffer | file://:0:0:0:0 | Buffer | +| file://:0:0:0:0 | FloatBuffer | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | FloatIterator | file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | FloatSignature | file://:0:0:0:0 | BaseType | +| file://:0:0:0:0 | ForEachEntryTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ForEachKeyTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ForEachMappingTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ForEachTransformedEntryTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ForEachTransformedKeyTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ForEachTransformedMappingTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ForEachTransformedValueTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ForEachValueTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | AbstractExecutorService | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ForkJoinWorkerThread | file://:0:0:0:0 | Thread | +| file://:0:0:0:0 | FormalTypeParameter | file://:0:0:0:0 | TypeTree | +| file://:0:0:0:0 | Format | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Format | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | ForwardingNode | file://:0:0:0:0 | Node | +| file://:0:0:0:0 | Frame | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | GenericDeclRepository | file://:0:0:0:0 | AbstractRepository | +| file://:0:0:0:0 | GenericDeclRepository | file://:0:0:0:0 | AbstractRepository | +| file://:0:0:0:0 | GetField | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | GetReflectionFactoryAction | file://:0:0:0:0 | PrivilegedAction | +| file://:0:0:0:0 | Global | file://:0:0:0:0 | ObjectInputFilter | +| file://:0:0:0:0 | Handle | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Dictionary | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Dictionary | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Dictionary | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Dictionary | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Hidden | file://:0:0:0:0 | Annotation | +| file://:0:0:0:0 | IOException | file://:0:0:0:0 | Exception | +| file://:0:0:0:0 | Identity | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | IllegalAccessException | file://:0:0:0:0 | ReflectiveOperationException | +| file://:0:0:0:0 | IllegalArgumentException | file://:0:0:0:0 | RuntimeException | +| file://:0:0:0:0 | IndexOutOfBoundsException | file://:0:0:0:0 | RuntimeException | +| file://:0:0:0:0 | InetAddress | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | InetAddressHolder | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | InnocuousForkJoinWorkerThread | file://:0:0:0:0 | ForkJoinWorkerThread | +| file://:0:0:0:0 | InnocuousThreadFactory | file://:0:0:0:0 | ThreadFactory | +| file://:0:0:0:0 | InputStream | file://:0:0:0:0 | Closeable | +| file://:0:0:0:0 | Instant | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Instant | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Instant | file://:0:0:0:0 | Temporal | +| file://:0:0:0:0 | Instant | file://:0:0:0:0 | TemporalAdjuster | +| file://:0:0:0:0 | Int | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Int | file://:0:0:0:0 | Number | +| file://:0:0:0:0 | Int | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | IntArray | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | IntArray | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | IntArray | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | IntBuffer | file://:0:0:0:0 | Buffer | +| file://:0:0:0:0 | IntBuffer | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | IntIterator | file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | IntProgression | file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | IntRange | file://:0:0:0:0 | ClosedRange | +| file://:0:0:0:0 | IntRange | file://:0:0:0:0 | IntProgression | +| file://:0:0:0:0 | IntSignature | file://:0:0:0:0 | BaseType | +| file://:0:0:0:0 | IntSummaryStatistics | file://:0:0:0:0 | IntConsumer | +| file://:0:0:0:0 | Integer | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Integer | file://:0:0:0:0 | Number | +| file://:0:0:0:0 | InterfaceAddress | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Intrinsic | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Invokers | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | IsoChronology | file://:0:0:0:0 | AbstractChronology | +| file://:0:0:0:0 | IsoChronology | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | IsoCountryCode | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | IsoEra | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | IsoEra | file://:0:0:0:0 | Era | +| file://:0:0:0:0 | Item | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Key | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | KeyIterator | file://:0:0:0:0 | BaseIterator | +| file://:0:0:0:0 | KeyIterator | file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | KeyIterator | file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | CollectionView | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | CollectionView | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | CollectionView | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | CollectionView | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Set | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Set | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Set | +| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Set | +| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Traverser | +| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Traverser | +| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | +| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | +| file://:0:0:0:0 | Kind | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Label | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | LambdaFormEditor | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | LanguageRange | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Level | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | LineReader | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | LinkOption | file://:0:0:0:0 | CopyOption | +| file://:0:0:0:0 | LinkOption | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | LinkOption | file://:0:0:0:0 | OpenOption | +| file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | ChronoLocalDate | +| file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | Temporal | +| file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | TemporalAdjuster | +| file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | ChronoLocalDateTime | +| file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | Temporal | +| file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | TemporalAdjuster | +| file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | Temporal | +| file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | TemporalAdjuster | +| file://:0:0:0:0 | Locale | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | Locale | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | LocaleExtensions | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Long | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Long | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Long | file://:0:0:0:0 | Number | +| file://:0:0:0:0 | Long | file://:0:0:0:0 | Number | +| file://:0:0:0:0 | Long | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | LongArray | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | LongArray | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | LongArray | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | LongBuffer | file://:0:0:0:0 | Buffer | +| file://:0:0:0:0 | LongBuffer | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | LongIterator | file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | LongProgression | file://:0:0:0:0 | Iterable | +| file://:0:0:0:0 | LongRange | file://:0:0:0:0 | ClosedRange | +| file://:0:0:0:0 | LongRange | file://:0:0:0:0 | LongProgression | +| file://:0:0:0:0 | LongSignature | file://:0:0:0:0 | BaseType | +| file://:0:0:0:0 | LongSummaryStatistics | file://:0:0:0:0 | IntConsumer | +| file://:0:0:0:0 | LongSummaryStatistics | file://:0:0:0:0 | LongConsumer | +| file://:0:0:0:0 | MapEntry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | MapMode | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | MapReduceEntriesTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceEntriesTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceEntriesToIntTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceEntriesToIntTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceEntriesToLongTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceEntriesToLongTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceKeysTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceKeysTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceKeysToDoubleTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceKeysToDoubleTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceKeysToIntTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceKeysToIntTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceKeysToLongTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceKeysToLongTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceMappingsTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceMappingsTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceMappingsToIntTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceMappingsToIntTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceMappingsToLongTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceMappingsToLongTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceValuesTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceValuesTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceValuesToDoubleTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceValuesToDoubleTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceValuesToIntTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceValuesToIntTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceValuesToLongTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MapReduceValuesToLongTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | MappedByteBuffer | file://:0:0:0:0 | ByteBuffer | +| file://:0:0:0:0 | MemberName | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | MemberName | file://:0:0:0:0 | Member | +| file://:0:0:0:0 | Method | file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | MethodRepository | file://:0:0:0:0 | ConstructorRepository | +| file://:0:0:0:0 | MethodType | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | MethodTypeForm | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | MethodTypeSignature | file://:0:0:0:0 | Signature | +| file://:0:0:0:0 | MethodVisitor | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | MethodWriter | file://:0:0:0:0 | MethodVisitor | +| file://:0:0:0:0 | Modifier | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Modifier | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Modifier | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Modifier | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Module | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | ModuleDescriptor | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | ModuleLayer | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ModuleReference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ModuleVisitor | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Month | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Month | file://:0:0:0:0 | TemporalAccessor | +| file://:0:0:0:0 | Month | file://:0:0:0:0 | TemporalAdjuster | +| file://:0:0:0:0 | Name | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | NamedFunction | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | NamedPackage | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | NativeLibrary | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | NestHost | file://:0:0:0:0 | Attribute | +| file://:0:0:0:0 | NestMembers | file://:0:0:0:0 | Attribute | +| file://:0:0:0:0 | NetworkInterface | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Node | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | NonfairSync | file://:0:0:0:0 | Sync | +| file://:0:0:0:0 | Number | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Number | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Number | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | InputStream | +| file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | ObjectInput | +| file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | ObjectStreamConstants | +| file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | ObjectOutput | +| file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | ObjectStreamConstants | +| file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | OutputStream | +| file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ObjectStreamException | file://:0:0:0:0 | IOException | +| file://:0:0:0:0 | ObjectStreamField | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | OffsetClock | file://:0:0:0:0 | Clock | +| file://:0:0:0:0 | OffsetClock | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | Temporal | +| file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | TemporalAdjuster | +| file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | Temporal | +| file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | TemporalAdjuster | +| file://:0:0:0:0 | Opens | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Option | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | OptionalDataException | file://:0:0:0:0 | ObjectStreamException | +| file://:0:0:0:0 | OptionalDouble | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | OptionalInt | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | OptionalLong | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | Closeable | +| file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | Flushable | +| file://:0:0:0:0 | Package | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | Package | file://:0:0:0:0 | NamedPackage | +| file://:0:0:0:0 | Parameter | file://:0:0:0:0 | AnnotatedElement | +| file://:0:0:0:0 | ParsePosition | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Parsed | file://:0:0:0:0 | TemporalAccessor | +| file://:0:0:0:0 | Period | file://:0:0:0:0 | ChronoPeriod | +| file://:0:0:0:0 | Period | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Permission | file://:0:0:0:0 | Guard | +| file://:0:0:0:0 | Permission | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | PermissionCollection | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | PhantomReference | +| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | PhantomReference | +| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | PhantomReference | +| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | PhantomReference | +| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | PhantomReference | +| file://:0:0:0:0 | PhantomCleanableRef | file://:0:0:0:0 | PhantomCleanable | +| file://:0:0:0:0 | PhantomReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | PhantomReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | PolymorphicSignature | file://:0:0:0:0 | Annotation | +| file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | Appendable | +| file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | Closeable | +| file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | FilterOutputStream | +| file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | Writer | +| file://:0:0:0:0 | Properties | file://:0:0:0:0 | Hashtable | +| file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Provider | file://:0:0:0:0 | Properties | +| file://:0:0:0:0 | Provides | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Proxy | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | PutField | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Random | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | RandomAccessSpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | RandomDoublesSpliterator | file://:0:0:0:0 | OfDouble | +| file://:0:0:0:0 | RandomIntsSpliterator | file://:0:0:0:0 | OfInt | +| file://:0:0:0:0 | RandomLongsSpliterator | file://:0:0:0:0 | OfLong | +| file://:0:0:0:0 | Reader | file://:0:0:0:0 | Closeable | +| file://:0:0:0:0 | Reader | file://:0:0:0:0 | Readable | +| file://:0:0:0:0 | ReduceEntriesTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ReduceEntriesTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ReduceKeysTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ReduceKeysTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ReduceValuesTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ReduceValuesTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | Lock | +| file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ReflectiveOperationException | file://:0:0:0:0 | Exception | +| file://:0:0:0:0 | Reifier | file://:0:0:0:0 | TypeTreeVisitor | +| file://:0:0:0:0 | Requires | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | ReservationNode | file://:0:0:0:0 | Node | +| file://:0:0:0:0 | ResolvedModule | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | RetentionPolicy | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | RunnableExecuteAction | file://:0:0:0:0 | ForkJoinTask | +| file://:0:0:0:0 | RuntimeException | file://:0:0:0:0 | Exception | +| file://:0:0:0:0 | RuntimePermission | file://:0:0:0:0 | BasicPermission | +| file://:0:0:0:0 | SearchEntriesTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | SearchKeysTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | SearchMappingsTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | SearchValuesTask | file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | Segment | file://:0:0:0:0 | ReentrantLock | +| file://:0:0:0:0 | Segment | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | BasicPermission | +| file://:0:0:0:0 | Service | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ServiceProvider | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ServicesCatalog | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | Cloneable | +| file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ShortBuffer | file://:0:0:0:0 | Buffer | +| file://:0:0:0:0 | ShortBuffer | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | ShortIterator | file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | ShortSignature | file://:0:0:0:0 | BaseType | +| file://:0:0:0:0 | SimpleClassTypeSignature | file://:0:0:0:0 | FieldTypeSignature | +| file://:0:0:0:0 | SimpleEntry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | SimpleEntry | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | SimpleImmutableEntry | file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | SimpleImmutableEntry | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | SocketAddress | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | SoftReference | +| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | SoftReference | +| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | SoftReference | +| file://:0:0:0:0 | SoftCleanableRef | file://:0:0:0:0 | SoftCleanable | +| file://:0:0:0:0 | SoftReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | SoftReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | SoftReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | SoftReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | Specializer | file://:0:0:0:0 | ClassSpecializer | +| file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | SpeciesData | +| file://:0:0:0:0 | StackFrameInfo | file://:0:0:0:0 | StackFrame | +| file://:0:0:0:0 | StackTraceElement | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | StackWalker | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | State | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Status | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | String | file://:0:0:0:0 | CharSequence | +| file://:0:0:0:0 | String | file://:0:0:0:0 | CharSequence | +| file://:0:0:0:0 | String | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | String | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | String | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | String | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | AbstractStringBuilder | +| file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | CharSequence | +| file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | AbstractStringBuilder | +| file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | CharSequence | +| file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Subject | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Subset | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | SuppliedThreadLocal | file://:0:0:0:0 | ThreadLocal | +| file://:0:0:0:0 | Sync | file://:0:0:0:0 | AbstractQueuedSynchronizer | +| file://:0:0:0:0 | SystemClock | file://:0:0:0:0 | Clock | +| file://:0:0:0:0 | SystemClock | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Tag | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Thread | file://:0:0:0:0 | Runnable | +| file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | UncaughtExceptionHandler | +| file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Throwable | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Throwable | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Throwable | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | TickClock | file://:0:0:0:0 | Clock | +| file://:0:0:0:0 | TickClock | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | TimeDefinition | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Timestamp | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | Traverser | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Traverser | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Traverser | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Traverser | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Traverser | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TreeBin | file://:0:0:0:0 | Node | +| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | +| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | +| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | +| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | +| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | +| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | +| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | +| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | +| file://:0:0:0:0 | Type | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Type | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TypePath | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | TypeVariableSignature | file://:0:0:0:0 | FieldTypeSignature | +| file://:0:0:0:0 | TypesAndInvokers | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | URI | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | URI | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | URL | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | URLConnection | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | URLStreamHandler | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | Subset | +| file://:0:0:0:0 | UnicodeScript | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Unloader | file://:0:0:0:0 | Runnable | +| file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | UserPrincipalLookupService | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ValueIterator | file://:0:0:0:0 | BaseIterator | +| file://:0:0:0:0 | ValueIterator | file://:0:0:0:0 | Enumeration | +| file://:0:0:0:0 | ValueIterator | file://:0:0:0:0 | Iterator | +| file://:0:0:0:0 | ValueRange | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Spliterator | +| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Traverser | +| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Traverser | +| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | +| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | +| file://:0:0:0:0 | ValuesView | file://:0:0:0:0 | Collection | +| file://:0:0:0:0 | ValuesView | file://:0:0:0:0 | CollectionView | +| file://:0:0:0:0 | ValuesView | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | VarForm | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Version | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | Version | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Version | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Version | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Version | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | VersionInfo | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Void | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | VoidDescriptor | file://:0:0:0:0 | ReturnType | +| file://:0:0:0:0 | WeakClassKey | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | WeakClassKey | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | Cleanable | +| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | WeakCleanableRef | file://:0:0:0:0 | WeakCleanable | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | +| file://:0:0:0:0 | WeakHashMapSpliterator | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | WeakHashMapSpliterator | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | WeakHashMapSpliterator | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | WeakHashMapSpliterator | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | Wildcard | file://:0:0:0:0 | TypeArgument | +| file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | Object | +| file://:0:0:0:0 | Wrapper | file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Writer | file://:0:0:0:0 | Appendable | +| file://:0:0:0:0 | Writer | file://:0:0:0:0 | Closeable | +| file://:0:0:0:0 | Writer | file://:0:0:0:0 | Flushable | +| file://:0:0:0:0 | WrongMethodTypeException | file://:0:0:0:0 | RuntimeException | +| file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | TemporalAccessor | +| file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | TemporalAdjuster | +| file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | ZoneId | +| file://:0:0:0:0 | ZoneOffsetTransition | file://:0:0:0:0 | Comparable | +| file://:0:0:0:0 | ZoneOffsetTransition | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ZoneOffsetTransitionRule | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ZoneRules | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ZonedDateTime | file://:0:0:0:0 | ChronoZonedDateTime | +| file://:0:0:0:0 | ZonedDateTime | file://:0:0:0:0 | Serializable | +| file://:0:0:0:0 | ZonedDateTime | file://:0:0:0:0 | Temporal | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index 0542c17488c..4a06e13f8d7 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -1,10 +1,13922 @@ methods +| file://:0:0:0:0 | Help | +| file://:0:0:0:0 | UTC | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abnormalCompletion | +| file://:0:0:0:0 | abs | +| file://:0:0:0:0 | abs | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | accept | +| file://:0:0:0:0 | access$000 | +| file://:0:0:0:0 | accessModeType | +| file://:0:0:0:0 | accessModeType | +| file://:0:0:0:0 | accessModeTypeUncached | +| file://:0:0:0:0 | accumulateAndGet | +| file://:0:0:0:0 | accumulateAndGet | +| file://:0:0:0:0 | accumulator | +| file://:0:0:0:0 | acquire | +| file://:0:0:0:0 | acquire | +| file://:0:0:0:0 | acquire | +| file://:0:0:0:0 | acquire | +| file://:0:0:0:0 | acquireFence | +| file://:0:0:0:0 | acquireInterruptibly | +| file://:0:0:0:0 | acquireInterruptibly | +| file://:0:0:0:0 | acquireInterruptibly | +| file://:0:0:0:0 | acquireInterruptibly | +| file://:0:0:0:0 | acquireQueued | +| file://:0:0:0:0 | acquireQueued | +| file://:0:0:0:0 | acquireQueued | +| file://:0:0:0:0 | acquireQueued | +| file://:0:0:0:0 | acquireShared | +| file://:0:0:0:0 | acquireShared | +| file://:0:0:0:0 | acquireShared | +| file://:0:0:0:0 | acquireShared | +| file://:0:0:0:0 | acquireSharedInterruptibly | +| file://:0:0:0:0 | acquireSharedInterruptibly | +| file://:0:0:0:0 | acquireSharedInterruptibly | +| file://:0:0:0:0 | acquireSharedInterruptibly | +| file://:0:0:0:0 | acquiredBy | +| file://:0:0:0:0 | activeCount | +| file://:0:0:0:0 | activeCount | +| file://:0:0:0:0 | activeCount | +| file://:0:0:0:0 | activeCount | +| file://:0:0:0:0 | activeGroupCount | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | adapt | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | add | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAll | +| file://:0:0:0:0 | addAndGet | +| file://:0:0:0:0 | addArgumentForm | +| file://:0:0:0:0 | addAttribute | +| file://:0:0:0:0 | addChronoChangedListener | +| file://:0:0:0:0 | addClass | +| file://:0:0:0:0 | addEntry | +| file://:0:0:0:0 | addEntry | +| file://:0:0:0:0 | addExports | +| file://:0:0:0:0 | addExports | +| file://:0:0:0:0 | addFieldValue | +| file://:0:0:0:0 | addFieldValue | +| file://:0:0:0:0 | addFirst | +| file://:0:0:0:0 | addLast | +| file://:0:0:0:0 | addOne | +| file://:0:0:0:0 | addOpens | +| file://:0:0:0:0 | addOpens | +| file://:0:0:0:0 | addProvider | +| file://:0:0:0:0 | addRange | +| file://:0:0:0:0 | addReads | +| file://:0:0:0:0 | addReads | +| file://:0:0:0:0 | addRequestProperty | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addSuppressed | +| file://:0:0:0:0 | addTo | +| file://:0:0:0:0 | addTo | +| file://:0:0:0:0 | addTo | +| file://:0:0:0:0 | addTo | +| file://:0:0:0:0 | addTo | +| file://:0:0:0:0 | addTo | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToPendingCount | +| file://:0:0:0:0 | addToSubroutine | +| file://:0:0:0:0 | addType | +| file://:0:0:0:0 | addUnicodeLocaleAttribute | +| file://:0:0:0:0 | addUninitializedType | +| file://:0:0:0:0 | addUnstarted | +| file://:0:0:0:0 | addUses | +| file://:0:0:0:0 | addWaiter | +| file://:0:0:0:0 | addWaiter | +| file://:0:0:0:0 | addWaiter | +| file://:0:0:0:0 | address | +| file://:0:0:0:0 | addressSize | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | adjustInto | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | advance | +| file://:0:0:0:0 | after | +| file://:0:0:0:0 | afterTopLevelExec | +| file://:0:0:0:0 | afterTopLevelExec | +| file://:0:0:0:0 | aliases | +| file://:0:0:0:0 | alignedSlice | +| file://:0:0:0:0 | alignedSlice | +| file://:0:0:0:0 | alignmentOffset | +| file://:0:0:0:0 | alignmentOffset | +| file://:0:0:0:0 | allMatch | +| file://:0:0:0:0 | allMatch | +| file://:0:0:0:0 | allMatch | +| file://:0:0:0:0 | allMatch | +| file://:0:0:0:0 | allOf | +| file://:0:0:0:0 | allocate | +| file://:0:0:0:0 | allocate | +| file://:0:0:0:0 | allocate | +| file://:0:0:0:0 | allocate | +| file://:0:0:0:0 | allocate | +| file://:0:0:0:0 | allocate | +| file://:0:0:0:0 | allocate | +| file://:0:0:0:0 | allocate | +| file://:0:0:0:0 | allocateDirect | +| file://:0:0:0:0 | allocateDirect | +| file://:0:0:0:0 | allocateInstance | +| file://:0:0:0:0 | allocateMemory | +| file://:0:0:0:0 | allocateUninitializedArray | +| file://:0:0:0:0 | allowThreadSuspension | +| file://:0:0:0:0 | and | +| file://:0:0:0:0 | and | +| file://:0:0:0:0 | and | +| file://:0:0:0:0 | and | +| file://:0:0:0:0 | and | +| file://:0:0:0:0 | and | +| file://:0:0:0:0 | and | +| file://:0:0:0:0 | and | +| file://:0:0:0:0 | andNot | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | andThen | +| file://:0:0:0:0 | annotateClass | +| file://:0:0:0:0 | annotateProxyClass | +| file://:0:0:0:0 | annotationType | +| file://:0:0:0:0 | anyLocalAddress | +| file://:0:0:0:0 | anyLocalAddress | +| file://:0:0:0:0 | anyMatch | +| file://:0:0:0:0 | anyMatch | +| file://:0:0:0:0 | anyMatch | +| file://:0:0:0:0 | anyMatch | +| file://:0:0:0:0 | apparentlyFirstQueuedIsExclusive | +| file://:0:0:0:0 | apparentlyFirstQueuedIsExclusive | +| file://:0:0:0:0 | apparentlyFirstQueuedIsExclusive | +| file://:0:0:0:0 | apparentlyFirstQueuedIsExclusive | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | append | +| file://:0:0:0:0 | appendChars | +| file://:0:0:0:0 | appendChars | +| file://:0:0:0:0 | appendChars | +| file://:0:0:0:0 | appendChars | +| file://:0:0:0:0 | appendClassSignature | +| file://:0:0:0:0 | appendCodePoint | +| file://:0:0:0:0 | appendCodePoint | +| file://:0:0:0:0 | appendCodePoint | +| file://:0:0:0:0 | appendNull | +| file://:0:0:0:0 | appendNull | +| file://:0:0:0:0 | appendParameterTypes | +| file://:0:0:0:0 | appendParameterTypes | +| file://:0:0:0:0 | apply | +| file://:0:0:0:0 | apply | +| file://:0:0:0:0 | apply | +| file://:0:0:0:0 | apply | +| file://:0:0:0:0 | apply | +| file://:0:0:0:0 | apply | +| file://:0:0:0:0 | apply | +| file://:0:0:0:0 | applyAsDouble | +| file://:0:0:0:0 | applyAsDouble | +| file://:0:0:0:0 | applyAsDouble | +| file://:0:0:0:0 | applyAsDouble | +| file://:0:0:0:0 | applyAsDouble | +| file://:0:0:0:0 | applyAsDouble | +| file://:0:0:0:0 | applyAsInt | +| file://:0:0:0:0 | applyAsInt | +| file://:0:0:0:0 | applyAsInt | +| file://:0:0:0:0 | applyAsInt | +| file://:0:0:0:0 | applyAsInt | +| file://:0:0:0:0 | applyAsInt | +| file://:0:0:0:0 | applyAsLong | +| file://:0:0:0:0 | applyAsLong | +| file://:0:0:0:0 | applyAsLong | +| file://:0:0:0:0 | applyAsLong | +| file://:0:0:0:0 | applyAsLong | +| file://:0:0:0:0 | applyAsLong | +| file://:0:0:0:0 | arg | +| file://:0:0:0:0 | argSlotToParameter | +| file://:0:0:0:0 | argument | +| file://:0:0:0:0 | arguments | +| file://:0:0:0:0 | arity | +| file://:0:0:0:0 | arity | +| file://:0:0:0:0 | array | +| file://:0:0:0:0 | array | +| file://:0:0:0:0 | array | +| file://:0:0:0:0 | array | +| file://:0:0:0:0 | array | +| file://:0:0:0:0 | array | +| file://:0:0:0:0 | array | +| file://:0:0:0:0 | array | +| file://:0:0:0:0 | array | +| file://:0:0:0:0 | arrayBaseOffset | +| file://:0:0:0:0 | arrayIndexScale | +| file://:0:0:0:0 | arrayLength | +| file://:0:0:0:0 | arrayLength | +| file://:0:0:0:0 | arrayOffset | +| file://:0:0:0:0 | arrayOffset | +| file://:0:0:0:0 | arrayOffset | +| file://:0:0:0:0 | arrayOffset | +| file://:0:0:0:0 | arrayOffset | +| file://:0:0:0:0 | arrayOffset | +| file://:0:0:0:0 | arrayOffset | +| file://:0:0:0:0 | arrayOffset | +| file://:0:0:0:0 | arrayOffset | +| file://:0:0:0:0 | arrayType | +| file://:0:0:0:0 | asCharBuffer | +| file://:0:0:0:0 | asCharBuffer | +| file://:0:0:0:0 | asCollector | +| file://:0:0:0:0 | asCollector | +| file://:0:0:0:0 | asCollector | +| file://:0:0:0:0 | asCollector | +| file://:0:0:0:0 | asCollectorChecks | +| file://:0:0:0:0 | asCollectorChecks | +| file://:0:0:0:0 | asCollectorType | +| file://:0:0:0:0 | asConstructor | +| file://:0:0:0:0 | asDoubleBuffer | +| file://:0:0:0:0 | asDoubleBuffer | +| file://:0:0:0:0 | asDoubleStream | +| file://:0:0:0:0 | asDoubleStream | +| file://:0:0:0:0 | asFixedArity | +| file://:0:0:0:0 | asFixedArity | +| file://:0:0:0:0 | asFloatBuffer | +| file://:0:0:0:0 | asFloatBuffer | +| file://:0:0:0:0 | asIntBuffer | +| file://:0:0:0:0 | asIntBuffer | +| file://:0:0:0:0 | asIterator | +| file://:0:0:0:0 | asIterator | +| file://:0:0:0:0 | asIterator | +| file://:0:0:0:0 | asLongBuffer | +| file://:0:0:0:0 | asLongBuffer | +| file://:0:0:0:0 | asLongStream | +| file://:0:0:0:0 | asNormal | +| file://:0:0:0:0 | asNormalOriginal | +| file://:0:0:0:0 | asPrimitiveType | +| file://:0:0:0:0 | asReadOnlyBuffer | +| file://:0:0:0:0 | asReadOnlyBuffer | +| file://:0:0:0:0 | asReadOnlyBuffer | +| file://:0:0:0:0 | asReadOnlyBuffer | +| file://:0:0:0:0 | asReadOnlyBuffer | +| file://:0:0:0:0 | asReadOnlyBuffer | +| file://:0:0:0:0 | asReadOnlyBuffer | +| file://:0:0:0:0 | asReadOnlyBuffer | +| file://:0:0:0:0 | asSetter | +| file://:0:0:0:0 | asShortBuffer | +| file://:0:0:0:0 | asShortBuffer | +| file://:0:0:0:0 | asSpecial | +| file://:0:0:0:0 | asSpreader | +| file://:0:0:0:0 | asSpreader | +| file://:0:0:0:0 | asSpreader | +| file://:0:0:0:0 | asSpreader | +| file://:0:0:0:0 | asSpreaderChecks | +| file://:0:0:0:0 | asSpreaderType | +| file://:0:0:0:0 | asStandalone | +| file://:0:0:0:0 | asSubclass | +| file://:0:0:0:0 | asType | +| file://:0:0:0:0 | asType | +| file://:0:0:0:0 | asTypeCached | +| file://:0:0:0:0 | asTypeUncached | +| file://:0:0:0:0 | asTypeUncached | +| file://:0:0:0:0 | asVarargsCollector | +| file://:0:0:0:0 | asVarargsCollector | +| file://:0:0:0:0 | asWrapperType | +| file://:0:0:0:0 | associateWithDebugName | +| file://:0:0:0:0 | atDate | +| file://:0:0:0:0 | atDate | +| file://:0:0:0:0 | atOffset | +| file://:0:0:0:0 | atOffset | +| file://:0:0:0:0 | atOffset | +| file://:0:0:0:0 | atStartOfDay | +| file://:0:0:0:0 | atStartOfDay | +| file://:0:0:0:0 | atTime | +| file://:0:0:0:0 | atTime | +| file://:0:0:0:0 | atTime | +| file://:0:0:0:0 | atTime | +| file://:0:0:0:0 | atTime | +| file://:0:0:0:0 | atTime | +| file://:0:0:0:0 | atZone | +| file://:0:0:0:0 | atZone | +| file://:0:0:0:0 | atZone | +| file://:0:0:0:0 | atZoneSameInstant | +| file://:0:0:0:0 | atZoneSimilarLocal | +| file://:0:0:0:0 | attach | +| file://:0:0:0:0 | auditSubclass | +| file://:0:0:0:0 | auditSubclass | +| file://:0:0:0:0 | available | +| file://:0:0:0:0 | available | +| file://:0:0:0:0 | available | +| file://:0:0:0:0 | availableCharsets | +| file://:0:0:0:0 | average | +| file://:0:0:0:0 | average | +| file://:0:0:0:0 | average | +| file://:0:0:0:0 | averageBytesPerChar | +| file://:0:0:0:0 | averageCharsPerByte | +| file://:0:0:0:0 | await | +| file://:0:0:0:0 | await | +| file://:0:0:0:0 | await | +| file://:0:0:0:0 | await | +| file://:0:0:0:0 | awaitJoin | +| file://:0:0:0:0 | awaitNanos | +| file://:0:0:0:0 | awaitNanos | +| file://:0:0:0:0 | awaitQuiescence | +| file://:0:0:0:0 | awaitTermination | +| file://:0:0:0:0 | awaitTermination | +| file://:0:0:0:0 | awaitTermination | +| file://:0:0:0:0 | awaitUninterruptibly | +| file://:0:0:0:0 | awaitUninterruptibly | +| file://:0:0:0:0 | awaitUntil | +| file://:0:0:0:0 | awaitUntil | +| file://:0:0:0:0 | balanceDeletion | +| file://:0:0:0:0 | balanceInsertion | +| file://:0:0:0:0 | base | +| file://:0:0:0:0 | base | +| file://:0:0:0:0 | base | +| file://:0:0:0:0 | base | +| file://:0:0:0:0 | base | +| file://:0:0:0:0 | base | +| file://:0:0:0:0 | base | +| file://:0:0:0:0 | base | +| file://:0:0:0:0 | base | +| file://:0:0:0:0 | baseConstructorType | +| file://:0:0:0:0 | baseConstructorType | +| file://:0:0:0:0 | basicInvoker | +| file://:0:0:0:0 | basicMethodType | +| file://:0:0:0:0 | basicType | +| file://:0:0:0:0 | basicType | +| file://:0:0:0:0 | basicType | +| file://:0:0:0:0 | basicType | +| file://:0:0:0:0 | basicType | +| file://:0:0:0:0 | basicType | +| file://:0:0:0:0 | basicTypeChar | +| file://:0:0:0:0 | basicTypeChar | +| file://:0:0:0:0 | basicTypeChar | +| file://:0:0:0:0 | basicTypeChar | +| file://:0:0:0:0 | basicTypeClass | +| file://:0:0:0:0 | basicTypeDesc | +| file://:0:0:0:0 | basicTypeOrds | +| file://:0:0:0:0 | basicTypeSignature | +| file://:0:0:0:0 | basicTypeSignature | +| file://:0:0:0:0 | basicTypeSlots | +| file://:0:0:0:0 | basicTypeWrapper | +| file://:0:0:0:0 | basicTypes | +| file://:0:0:0:0 | basicTypesOrd | +| file://:0:0:0:0 | batchFor | +| file://:0:0:0:0 | batchRemove | +| file://:0:0:0:0 | before | +| file://:0:0:0:0 | begin | +| file://:0:0:0:0 | begin | +| file://:0:0:0:0 | between | +| file://:0:0:0:0 | between | +| file://:0:0:0:0 | between | +| file://:0:0:0:0 | between | +| file://:0:0:0:0 | between | +| file://:0:0:0:0 | bindArgumentD | +| file://:0:0:0:0 | bindArgumentD | +| file://:0:0:0:0 | bindArgumentF | +| file://:0:0:0:0 | bindArgumentF | +| file://:0:0:0:0 | bindArgumentForm | +| file://:0:0:0:0 | bindArgumentI | +| file://:0:0:0:0 | bindArgumentI | +| file://:0:0:0:0 | bindArgumentJ | +| file://:0:0:0:0 | bindArgumentJ | +| file://:0:0:0:0 | bindArgumentL | +| file://:0:0:0:0 | bindArgumentL | +| file://:0:0:0:0 | bindArgumentL | +| file://:0:0:0:0 | bindSingle | +| file://:0:0:0:0 | bindSingle | +| file://:0:0:0:0 | bindTo | +| file://:0:0:0:0 | bindTo | +| file://:0:0:0:0 | bindToLoader | +| file://:0:0:0:0 | bitCount | +| file://:0:0:0:0 | bitCount | +| file://:0:0:0:0 | bitCount | +| file://:0:0:0:0 | bitLength | +| file://:0:0:0:0 | bitLengthForInt | +| file://:0:0:0:0 | bitWidth | +| file://:0:0:0:0 | block | +| file://:0:0:0:0 | blockedOn | +| file://:0:0:0:0 | blockedOn | +| file://:0:0:0:0 | blockedOn | +| file://:0:0:0:0 | blockedOn | +| file://:0:0:0:0 | blockedOn | +| file://:0:0:0:0 | booleanValue | +| file://:0:0:0:0 | boot | +| file://:0:0:0:0 | boxed | +| file://:0:0:0:0 | boxed | +| file://:0:0:0:0 | boxed | +| file://:0:0:0:0 | build | +| file://:0:0:0:0 | build | +| file://:0:0:0:0 | build | +| file://:0:0:0:0 | build | +| file://:0:0:0:0 | build | +| file://:0:0:0:0 | build | +| file://:0:0:0:0 | builder | +| file://:0:0:0:0 | builder | +| file://:0:0:0:0 | builder | +| file://:0:0:0:0 | builder | +| file://:0:0:0:0 | bumpVersion | +| file://:0:0:0:0 | byteValue | +| file://:0:0:0:0 | byteValueExact | +| file://:0:0:0:0 | cachedLambdaForm | +| file://:0:0:0:0 | cachedMethodHandle | +| file://:0:0:0:0 | call | +| file://:0:0:0:0 | callSiteForm | +| file://:0:0:0:0 | canAccess | +| file://:0:0:0:0 | canAccess | +| file://:0:0:0:0 | canAccess | +| file://:0:0:0:0 | canAccess | +| file://:0:0:0:0 | canAccess | +| file://:0:0:0:0 | canBeStaticallyBound | +| file://:0:0:0:0 | canConvert | +| file://:0:0:0:0 | canEncode | +| file://:0:0:0:0 | canEncode | +| file://:0:0:0:0 | canEncode | +| file://:0:0:0:0 | canExecute | +| file://:0:0:0:0 | canRead | +| file://:0:0:0:0 | canRead | +| file://:0:0:0:0 | canUse | +| file://:0:0:0:0 | canWrite | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancel | +| file://:0:0:0:0 | cancelAcquire | +| file://:0:0:0:0 | cancelAcquire | +| file://:0:0:0:0 | cancelAcquire | +| file://:0:0:0:0 | cancelAll | +| file://:0:0:0:0 | cancelAll | +| file://:0:0:0:0 | cancelAll | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | cancelIgnoringExceptions | +| file://:0:0:0:0 | canonicalize | +| file://:0:0:0:0 | canonicalize | +| file://:0:0:0:0 | canonicalizeAll | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | capacity | +| file://:0:0:0:0 | casAnnotationType | +| file://:0:0:0:0 | casTabAt | +| file://:0:0:0:0 | cast | +| file://:0:0:0:0 | cast | +| file://:0:0:0:0 | castEntry | +| file://:0:0:0:0 | changeEntry | +| file://:0:0:0:0 | changeParameterType | +| file://:0:0:0:0 | changeReturnType | +| file://:0:0:0:0 | channel | +| file://:0:0:0:0 | charAt | +| file://:0:0:0:0 | charCount | +| file://:0:0:0:0 | charEquals | +| file://:0:0:0:0 | charEqualsIgnoreCase | +| file://:0:0:0:0 | charRegionOrder | +| file://:0:0:0:0 | charValue | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | characteristics | +| file://:0:0:0:0 | chars | +| file://:0:0:0:0 | chars | +| file://:0:0:0:0 | chars | +| file://:0:0:0:0 | chars | +| file://:0:0:0:0 | chars | +| file://:0:0:0:0 | chars | +| file://:0:0:0:0 | chars | +| file://:0:0:0:0 | chars | +| file://:0:0:0:0 | charset | +| file://:0:0:0:0 | charset | +| file://:0:0:0:0 | checkAbstractListModCount | +| file://:0:0:0:0 | checkAccess | +| file://:0:0:0:0 | checkAccess | +| file://:0:0:0:0 | checkAccess | +| file://:0:0:0:0 | checkAccess | +| file://:0:0:0:0 | checkAccess | +| file://:0:0:0:0 | checkAccess | +| file://:0:0:0:0 | checkAccess | +| file://:0:0:0:0 | checkAccess | +| file://:0:0:0:0 | checkAccess | +| file://:0:0:0:0 | checkAccess | +| file://:0:0:0:0 | checkBounds | +| file://:0:0:0:0 | checkBounds | +| file://:0:0:0:0 | checkBounds | +| file://:0:0:0:0 | checkBounds | +| file://:0:0:0:0 | checkBounds | +| file://:0:0:0:0 | checkBounds | +| file://:0:0:0:0 | checkBounds | +| file://:0:0:0:0 | checkBounds | +| file://:0:0:0:0 | checkBounds | +| file://:0:0:0:0 | checkBoundsBeginEnd | +| file://:0:0:0:0 | checkBoundsOffCount | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkCanSetAccessible | +| file://:0:0:0:0 | checkClassLoaderPermission | +| file://:0:0:0:0 | checkCustomized | +| file://:0:0:0:0 | checkDefaultSerialize | +| file://:0:0:0:0 | checkDeserialize | +| file://:0:0:0:0 | checkError | +| file://:0:0:0:0 | checkError | +| file://:0:0:0:0 | checkExactType | +| file://:0:0:0:0 | checkForTypeAlias | +| file://:0:0:0:0 | checkGenericType | +| file://:0:0:0:0 | checkGuard | +| file://:0:0:0:0 | checkGuard | +| file://:0:0:0:0 | checkGuard | +| file://:0:0:0:0 | checkGuard | +| file://:0:0:0:0 | checkGuard | +| file://:0:0:0:0 | checkGuard | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkIndex | +| file://:0:0:0:0 | checkInitialized | +| file://:0:0:0:0 | checkInput | +| file://:0:0:0:0 | checkInput | +| file://:0:0:0:0 | checkInvariants | +| file://:0:0:0:0 | checkInvariants | +| file://:0:0:0:0 | checkObjFieldValueTypes | +| file://:0:0:0:0 | checkOffset | +| file://:0:0:0:0 | checkPermission | +| file://:0:0:0:0 | checkPermission | +| file://:0:0:0:0 | checkPermission | +| file://:0:0:0:0 | checkPermission | +| file://:0:0:0:0 | checkPermission | +| file://:0:0:0:0 | checkPermission | +| file://:0:0:0:0 | checkRange | +| file://:0:0:0:0 | checkRange | +| file://:0:0:0:0 | checkRangeSIOOBE | +| file://:0:0:0:0 | checkRangeSIOOBE | +| file://:0:0:0:0 | checkSerialize | +| file://:0:0:0:0 | checkSlotCount | +| file://:0:0:0:0 | checkTargetChange | +| file://:0:0:0:0 | checkValidIntValue | +| file://:0:0:0:0 | checkValidIntValue | +| file://:0:0:0:0 | checkValidValue | +| file://:0:0:0:0 | checkValidValue | +| file://:0:0:0:0 | checkVarHandleExactType | +| file://:0:0:0:0 | checkVarHandleGenericType | +| file://:0:0:0:0 | childValue | +| file://:0:0:0:0 | childValue | +| file://:0:0:0:0 | chooseFieldName | +| file://:0:0:0:0 | chooseFieldName | +| file://:0:0:0:0 | classBCName | +| file://:0:0:0:0 | classBCName | +| file://:0:0:0:0 | classBCName | +| file://:0:0:0:0 | classBCName | +| file://:0:0:0:0 | className | +| file://:0:0:0:0 | className | +| file://:0:0:0:0 | classSig | +| file://:0:0:0:0 | classSig | +| file://:0:0:0:0 | classSig | +| file://:0:0:0:0 | classSig | +| file://:0:0:0:0 | classValue | +| file://:0:0:0:0 | classValueOrNull | +| file://:0:0:0:0 | clean | +| file://:0:0:0:0 | clean | +| file://:0:0:0:0 | clean | +| file://:0:0:0:0 | clean | +| file://:0:0:0:0 | clean | +| file://:0:0:0:0 | clean | +| file://:0:0:0:0 | clean | +| file://:0:0:0:0 | clean | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clear | +| file://:0:0:0:0 | clearAssertionStatus | +| file://:0:0:0:0 | clearBit | +| file://:0:0:0:0 | clearError | +| file://:0:0:0:0 | clearError | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExceptionalCompletion | +| file://:0:0:0:0 | clearExtensions | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | clone | +| file://:0:0:0:0 | cloneHashtable | +| file://:0:0:0:0 | cloneHashtable | +| file://:0:0:0:0 | cloneHashtable | +| file://:0:0:0:0 | cloneWithIndex | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | close | +| file://:0:0:0:0 | closeAll | +| file://:0:0:0:0 | codePointAt | +| file://:0:0:0:0 | codePointAt | +| file://:0:0:0:0 | codePointAt | +| file://:0:0:0:0 | codePointAt | +| file://:0:0:0:0 | codePointAt | +| file://:0:0:0:0 | codePointAt | +| file://:0:0:0:0 | codePointAt | +| file://:0:0:0:0 | codePointAtImpl | +| file://:0:0:0:0 | codePointBefore | +| file://:0:0:0:0 | codePointBefore | +| file://:0:0:0:0 | codePointBefore | +| file://:0:0:0:0 | codePointBefore | +| file://:0:0:0:0 | codePointBefore | +| file://:0:0:0:0 | codePointBefore | +| file://:0:0:0:0 | codePointBefore | +| file://:0:0:0:0 | codePointBeforeImpl | +| file://:0:0:0:0 | codePointCount | +| file://:0:0:0:0 | codePointCount | +| file://:0:0:0:0 | codePointCount | +| file://:0:0:0:0 | codePointCount | +| file://:0:0:0:0 | codePointCount | +| file://:0:0:0:0 | codePointCount | +| file://:0:0:0:0 | codePointCountImpl | +| file://:0:0:0:0 | codePointOf | +| file://:0:0:0:0 | codePoints | +| file://:0:0:0:0 | codePoints | +| file://:0:0:0:0 | codePoints | +| file://:0:0:0:0 | codePoints | +| file://:0:0:0:0 | codePoints | +| file://:0:0:0:0 | codePoints | +| file://:0:0:0:0 | codePoints | +| file://:0:0:0:0 | codePoints | +| file://:0:0:0:0 | coder | +| file://:0:0:0:0 | collect | +| file://:0:0:0:0 | collect | +| file://:0:0:0:0 | collect | +| file://:0:0:0:0 | collect | +| file://:0:0:0:0 | collect | +| file://:0:0:0:0 | collectArgumentArrayForm | +| file://:0:0:0:0 | collectArgumentsForm | +| file://:0:0:0:0 | combine | +| file://:0:0:0:0 | combine | +| file://:0:0:0:0 | combine | +| file://:0:0:0:0 | combine | +| file://:0:0:0:0 | combiner | +| file://:0:0:0:0 | commonPool | +| file://:0:0:0:0 | commonSubmitterQueue | +| file://:0:0:0:0 | compact | +| file://:0:0:0:0 | compact | +| file://:0:0:0:0 | compact | +| file://:0:0:0:0 | compact | +| file://:0:0:0:0 | compact | +| file://:0:0:0:0 | compact | +| file://:0:0:0:0 | compact | +| file://:0:0:0:0 | compact | +| file://:0:0:0:0 | comparableClassFor | +| file://:0:0:0:0 | comparator | +| file://:0:0:0:0 | compare | +| file://:0:0:0:0 | compare | +| file://:0:0:0:0 | compare | +| file://:0:0:0:0 | compare | +| file://:0:0:0:0 | compare | +| file://:0:0:0:0 | compare | +| file://:0:0:0:0 | compare | +| file://:0:0:0:0 | compare | +| file://:0:0:0:0 | compareAndExchange | +| file://:0:0:0:0 | compareAndExchange | +| file://:0:0:0:0 | compareAndExchange | +| file://:0:0:0:0 | compareAndExchangeAcquire | +| file://:0:0:0:0 | compareAndExchangeAcquire | +| file://:0:0:0:0 | compareAndExchangeAcquire | +| file://:0:0:0:0 | compareAndExchangeBoolean | +| file://:0:0:0:0 | compareAndExchangeBooleanAcquire | +| file://:0:0:0:0 | compareAndExchangeBooleanRelease | +| file://:0:0:0:0 | compareAndExchangeByte | +| file://:0:0:0:0 | compareAndExchangeByteAcquire | +| file://:0:0:0:0 | compareAndExchangeByteRelease | +| file://:0:0:0:0 | compareAndExchangeChar | +| file://:0:0:0:0 | compareAndExchangeCharAcquire | +| file://:0:0:0:0 | compareAndExchangeCharRelease | +| file://:0:0:0:0 | compareAndExchangeDouble | +| file://:0:0:0:0 | compareAndExchangeDoubleAcquire | +| file://:0:0:0:0 | compareAndExchangeDoubleRelease | +| file://:0:0:0:0 | compareAndExchangeFloat | +| file://:0:0:0:0 | compareAndExchangeFloatAcquire | +| file://:0:0:0:0 | compareAndExchangeFloatRelease | +| file://:0:0:0:0 | compareAndExchangeInt | +| file://:0:0:0:0 | compareAndExchangeIntAcquire | +| file://:0:0:0:0 | compareAndExchangeIntRelease | +| file://:0:0:0:0 | compareAndExchangeLong | +| file://:0:0:0:0 | compareAndExchangeLongAcquire | +| file://:0:0:0:0 | compareAndExchangeLongRelease | +| file://:0:0:0:0 | compareAndExchangeObject | +| file://:0:0:0:0 | compareAndExchangeObjectAcquire | +| file://:0:0:0:0 | compareAndExchangeObjectRelease | +| file://:0:0:0:0 | compareAndExchangeRelease | +| file://:0:0:0:0 | compareAndExchangeRelease | +| file://:0:0:0:0 | compareAndExchangeRelease | +| file://:0:0:0:0 | compareAndExchangeShort | +| file://:0:0:0:0 | compareAndExchangeShortAcquire | +| file://:0:0:0:0 | compareAndExchangeShortRelease | +| file://:0:0:0:0 | compareAndSet | +| file://:0:0:0:0 | compareAndSet | +| file://:0:0:0:0 | compareAndSet | +| file://:0:0:0:0 | compareAndSetBoolean | +| file://:0:0:0:0 | compareAndSetByte | +| file://:0:0:0:0 | compareAndSetChar | +| file://:0:0:0:0 | compareAndSetDouble | +| file://:0:0:0:0 | compareAndSetFloat | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | +| file://:0:0:0:0 | compareAndSetInt | +| file://:0:0:0:0 | compareAndSetLong | +| file://:0:0:0:0 | compareAndSetNext | +| file://:0:0:0:0 | compareAndSetObject | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetPendingCount | +| file://:0:0:0:0 | compareAndSetShort | +| file://:0:0:0:0 | compareAndSetState | +| file://:0:0:0:0 | compareAndSetState | +| file://:0:0:0:0 | compareAndSetState | +| file://:0:0:0:0 | compareAndSetState | +| file://:0:0:0:0 | compareAndSetTail | +| file://:0:0:0:0 | compareAndSetTail | +| file://:0:0:0:0 | compareAndSetTail | +| file://:0:0:0:0 | compareAndSetWaitStatus | +| file://:0:0:0:0 | compareComparables | +| file://:0:0:0:0 | compareMagnitude | +| file://:0:0:0:0 | compareMagnitude | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo | +| file://:0:0:0:0 | compareTo0 | +| file://:0:0:0:0 | compareToIgnoreCase | +| file://:0:0:0:0 | compareUnsigned | +| file://:0:0:0:0 | compareUnsigned | +| file://:0:0:0:0 | comparing | +| file://:0:0:0:0 | comparing | +| file://:0:0:0:0 | comparingByKey | +| file://:0:0:0:0 | comparingByKey | +| file://:0:0:0:0 | comparingByValue | +| file://:0:0:0:0 | comparingByValue | +| file://:0:0:0:0 | comparingDouble | +| file://:0:0:0:0 | comparingInt | +| file://:0:0:0:0 | comparingLong | +| file://:0:0:0:0 | compileToBytecode | +| file://:0:0:0:0 | compiledVersion | +| file://:0:0:0:0 | complement | +| file://:0:0:0:0 | complementOf | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | complete | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completeExceptionally | +| file://:0:0:0:0 | completed | +| file://:0:0:0:0 | compose | +| file://:0:0:0:0 | compose | +| file://:0:0:0:0 | compose | +| file://:0:0:0:0 | compose | +| file://:0:0:0:0 | compose | +| file://:0:0:0:0 | compose | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | compute | +| file://:0:0:0:0 | computeExceptionTypes | +| file://:0:0:0:0 | computeIfAbsent | +| file://:0:0:0:0 | computeIfAbsent | +| file://:0:0:0:0 | computeIfAbsent | +| file://:0:0:0:0 | computeIfAbsent | +| file://:0:0:0:0 | computeIfAbsent | +| file://:0:0:0:0 | computeIfAbsent | +| file://:0:0:0:0 | computeIfAbsent | +| file://:0:0:0:0 | computeIfAbsent | +| file://:0:0:0:0 | computeIfAbsent | +| file://:0:0:0:0 | computeIfAbsent | +| file://:0:0:0:0 | computeIfAbsent | +| file://:0:0:0:0 | computeIfPresent | +| file://:0:0:0:0 | computeIfPresent | +| file://:0:0:0:0 | computeIfPresent | +| file://:0:0:0:0 | computeIfPresent | +| file://:0:0:0:0 | computeIfPresent | +| file://:0:0:0:0 | computeIfPresent | +| file://:0:0:0:0 | computeIfPresent | +| file://:0:0:0:0 | computeIfPresent | +| file://:0:0:0:0 | computeIfPresent | +| file://:0:0:0:0 | computeIfPresent | +| file://:0:0:0:0 | computeIfPresent | +| file://:0:0:0:0 | computeParameterTypes | +| file://:0:0:0:0 | computeTypeParameters | +| file://:0:0:0:0 | computeTypeParameters | +| file://:0:0:0:0 | computeValue | +| file://:0:0:0:0 | concat | +| file://:0:0:0:0 | concat | +| file://:0:0:0:0 | concat | +| file://:0:0:0:0 | concat | +| file://:0:0:0:0 | concat | +| file://:0:0:0:0 | configuration | +| file://:0:0:0:0 | configuration | +| file://:0:0:0:0 | configurations | +| file://:0:0:0:0 | configure | +| file://:0:0:0:0 | connect | +| file://:0:0:0:0 | constantZero | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | contains | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsAll | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsKey | +| file://:0:0:0:0 | containsNullValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | containsValue | +| file://:0:0:0:0 | contentEquals | +| file://:0:0:0:0 | contentEquals | +| file://:0:0:0:0 | context | +| file://:0:0:0:0 | contextWithPermissions | +| file://:0:0:0:0 | convert | +| file://:0:0:0:0 | convert | +| file://:0:0:0:0 | convert | +| file://:0:0:0:0 | convertNumberToI18N | +| file://:0:0:0:0 | convertToDigit | +| file://:0:0:0:0 | coordinateTypes | +| file://:0:0:0:0 | copy | +| file://:0:0:0:0 | copy | +| file://:0:0:0:0 | copy | +| file://:0:0:0:0 | copy | +| file://:0:0:0:0 | copy | +| file://:0:0:0:0 | copy | +| file://:0:0:0:0 | copyArrayBoxing | +| file://:0:0:0:0 | copyArrayUnboxing | +| file://:0:0:0:0 | copyConstructor | +| file://:0:0:0:0 | copyConstructor | +| file://:0:0:0:0 | copyField | +| file://:0:0:0:0 | copyField | +| file://:0:0:0:0 | copyMemory | +| file://:0:0:0:0 | copyMemory | +| file://:0:0:0:0 | copyMethod | +| file://:0:0:0:0 | copyMethod | +| file://:0:0:0:0 | copyOf | +| file://:0:0:0:0 | copyOf | +| file://:0:0:0:0 | copyOf | +| file://:0:0:0:0 | copyOf | +| file://:0:0:0:0 | copyOf | +| file://:0:0:0:0 | copyPool | +| file://:0:0:0:0 | copySwapMemory | +| file://:0:0:0:0 | copySwapMemory | +| file://:0:0:0:0 | copyValueOf | +| file://:0:0:0:0 | copyValueOf | +| file://:0:0:0:0 | copyWith | +| file://:0:0:0:0 | copyWith | +| file://:0:0:0:0 | copyWithExtendD | +| file://:0:0:0:0 | copyWithExtendF | +| file://:0:0:0:0 | copyWithExtendI | +| file://:0:0:0:0 | copyWithExtendJ | +| file://:0:0:0:0 | copyWithExtendL | +| file://:0:0:0:0 | count | +| file://:0:0:0:0 | count | +| file://:0:0:0:0 | count | +| file://:0:0:0:0 | count | +| file://:0:0:0:0 | count | +| file://:0:0:0:0 | countStackFrames | +| file://:0:0:0:0 | countStackFrames | +| file://:0:0:0:0 | countStackFrames | +| file://:0:0:0:0 | create | +| file://:0:0:0:0 | create | +| file://:0:0:0:0 | create | +| file://:0:0:0:0 | create | +| file://:0:0:0:0 | createAttributedCharacterIterator | +| file://:0:0:0:0 | createAttributedCharacterIterator | +| file://:0:0:0:0 | createAttributedCharacterIterator | +| file://:0:0:0:0 | createAttributedCharacterIterator | +| file://:0:0:0:0 | createAttributedCharacterIterator | +| file://:0:0:0:0 | createAttributedCharacterIterator | +| file://:0:0:0:0 | createAttributedCharacterIterator | +| file://:0:0:0:0 | createAttributedCharacterIterator | +| file://:0:0:0:0 | createCapacityException | +| file://:0:0:0:0 | createCapacityException | +| file://:0:0:0:0 | createCapacityException | +| file://:0:0:0:0 | createCapacityException | +| file://:0:0:0:0 | createCapacityException | +| file://:0:0:0:0 | createCapacityException | +| file://:0:0:0:0 | createCapacityException | +| file://:0:0:0:0 | createCapacityException | +| file://:0:0:0:0 | createCapacityException | +| file://:0:0:0:0 | createContentHandler | +| file://:0:0:0:0 | createCountryCodeSet | +| file://:0:0:0:0 | createDateTime | +| file://:0:0:0:0 | createDirectory | +| file://:0:0:0:0 | createFilter | +| file://:0:0:0:0 | createFilter | +| file://:0:0:0:0 | createFilter2 | +| file://:0:0:0:0 | createInheritedMap | +| file://:0:0:0:0 | createInheritedMap | +| file://:0:0:0:0 | createInstance | +| file://:0:0:0:0 | createLimitException | +| file://:0:0:0:0 | createLimitException | +| file://:0:0:0:0 | createLimitException | +| file://:0:0:0:0 | createLimitException | +| file://:0:0:0:0 | createLimitException | +| file://:0:0:0:0 | createLimitException | +| file://:0:0:0:0 | createLimitException | +| file://:0:0:0:0 | createLimitException | +| file://:0:0:0:0 | createLink | +| file://:0:0:0:0 | createMap | +| file://:0:0:0:0 | createMap | +| file://:0:0:0:0 | createNewFile | +| file://:0:0:0:0 | createOrGetClassLoaderValueMap | +| file://:0:0:0:0 | createPositionException | +| file://:0:0:0:0 | createPositionException | +| file://:0:0:0:0 | createPositionException | +| file://:0:0:0:0 | createPositionException | +| file://:0:0:0:0 | createPositionException | +| file://:0:0:0:0 | createPositionException | +| file://:0:0:0:0 | createPositionException | +| file://:0:0:0:0 | createPositionException | +| file://:0:0:0:0 | createSameBufferException | +| file://:0:0:0:0 | createSameBufferException | +| file://:0:0:0:0 | createSameBufferException | +| file://:0:0:0:0 | createSameBufferException | +| file://:0:0:0:0 | createSameBufferException | +| file://:0:0:0:0 | createSameBufferException | +| file://:0:0:0:0 | createSameBufferException | +| file://:0:0:0:0 | createSameBufferException | +| file://:0:0:0:0 | createSameBufferException | +| file://:0:0:0:0 | createSymbolicLink | +| file://:0:0:0:0 | createTempFile | +| file://:0:0:0:0 | createTempFile | +| file://:0:0:0:0 | createTransition | +| file://:0:0:0:0 | createURLStreamHandler | +| file://:0:0:0:0 | creationTime | +| file://:0:0:0:0 | current | +| file://:0:0:0:0 | current | +| file://:0:0:0:0 | currentThread | +| file://:0:0:0:0 | currentThread | +| file://:0:0:0:0 | currentThread | +| file://:0:0:0:0 | customize | +| file://:0:0:0:0 | customize | +| file://:0:0:0:0 | customize | +| file://:0:0:0:0 | date | +| file://:0:0:0:0 | date | +| file://:0:0:0:0 | date | +| file://:0:0:0:0 | date | +| file://:0:0:0:0 | date | +| file://:0:0:0:0 | date | +| file://:0:0:0:0 | date | +| file://:0:0:0:0 | date | +| file://:0:0:0:0 | date | +| file://:0:0:0:0 | dateEpochDay | +| file://:0:0:0:0 | dateEpochDay | +| file://:0:0:0:0 | dateEpochDay | +| file://:0:0:0:0 | dateNow | +| file://:0:0:0:0 | dateNow | +| file://:0:0:0:0 | dateNow | +| file://:0:0:0:0 | dateNow | +| file://:0:0:0:0 | dateNow | +| file://:0:0:0:0 | dateNow | +| file://:0:0:0:0 | dateNow | +| file://:0:0:0:0 | dateNow | +| file://:0:0:0:0 | dateNow | +| file://:0:0:0:0 | dateYearDay | +| file://:0:0:0:0 | dateYearDay | +| file://:0:0:0:0 | dateYearDay | +| file://:0:0:0:0 | dateYearDay | +| file://:0:0:0:0 | dateYearDay | +| file://:0:0:0:0 | dateYearDay | +| file://:0:0:0:0 | datesUntil | +| file://:0:0:0:0 | datesUntil | +| file://:0:0:0:0 | daysUntil | +| file://:0:0:0:0 | debugNames | +| file://:0:0:0:0 | debugString | +| file://:0:0:0:0 | debugString | +| file://:0:0:0:0 | debugString | +| file://:0:0:0:0 | dec | +| file://:0:0:0:0 | dec | +| file://:0:0:0:0 | dec | +| file://:0:0:0:0 | dec | +| file://:0:0:0:0 | declaredAnnotations | +| file://:0:0:0:0 | declaredAnnotations | +| file://:0:0:0:0 | declaringClass | +| file://:0:0:0:0 | decode | +| file://:0:0:0:0 | decode | +| file://:0:0:0:0 | decode | +| file://:0:0:0:0 | decode | +| file://:0:0:0:0 | decode | +| file://:0:0:0:0 | decodeLoop | +| file://:0:0:0:0 | decrementAndGet | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | decrementPendingCountUnlessZero | +| file://:0:0:0:0 | defaultCharset | +| file://:0:0:0:0 | defaultReadObject | +| file://:0:0:0:0 | defaultWriteHashtable | +| file://:0:0:0:0 | defaultWriteHashtable | +| file://:0:0:0:0 | defaultWriteHashtable | +| file://:0:0:0:0 | defaultWriteObject | +| file://:0:0:0:0 | defaulted | +| file://:0:0:0:0 | defineAnonymousClass | +| file://:0:0:0:0 | defineClass | +| file://:0:0:0:0 | defineClass | +| file://:0:0:0:0 | defineClass | +| file://:0:0:0:0 | defineClass | +| file://:0:0:0:0 | defineClass | +| file://:0:0:0:0 | defineClass0 | +| file://:0:0:0:0 | defineClass1 | +| file://:0:0:0:0 | defineClass2 | +| file://:0:0:0:0 | defineModules | +| file://:0:0:0:0 | defineModules | +| file://:0:0:0:0 | defineModules | +| file://:0:0:0:0 | defineModulesWithManyLoaders | +| file://:0:0:0:0 | defineModulesWithManyLoaders | +| file://:0:0:0:0 | defineModulesWithOneLoader | +| file://:0:0:0:0 | defineModulesWithOneLoader | +| file://:0:0:0:0 | definePackage | +| file://:0:0:0:0 | definePackage | +| file://:0:0:0:0 | definePackage | +| file://:0:0:0:0 | delete | +| file://:0:0:0:0 | delete | +| file://:0:0:0:0 | delete | +| file://:0:0:0:0 | delete | +| file://:0:0:0:0 | delete | +| file://:0:0:0:0 | deleteCharAt | +| file://:0:0:0:0 | deleteCharAt | +| file://:0:0:0:0 | deleteCharAt | +| file://:0:0:0:0 | deleteIfExists | +| file://:0:0:0:0 | deleteOnExit | +| file://:0:0:0:0 | depth | +| file://:0:0:0:0 | depth | +| file://:0:0:0:0 | deregisterWorker | +| file://:0:0:0:0 | deriveClassName | +| file://:0:0:0:0 | deriveClassName | +| file://:0:0:0:0 | deriveFieldTypes | +| file://:0:0:0:0 | deriveFieldTypes | +| file://:0:0:0:0 | deriveSuperClass | +| file://:0:0:0:0 | deriveSuperClass | +| file://:0:0:0:0 | deriveTransformHelper | +| file://:0:0:0:0 | deriveTransformHelper | +| file://:0:0:0:0 | deriveTransformHelperArguments | +| file://:0:0:0:0 | deriveTransformHelperArguments | +| file://:0:0:0:0 | deriveTypeString | +| file://:0:0:0:0 | deriveTypeString | +| file://:0:0:0:0 | descendingIterator | +| file://:0:0:0:0 | descriptor | +| file://:0:0:0:0 | descriptor | +| file://:0:0:0:0 | descriptors | +| file://:0:0:0:0 | desiredAssertionStatus | +| file://:0:0:0:0 | desiredAssertionStatus | +| file://:0:0:0:0 | destroy | +| file://:0:0:0:0 | detailString | +| file://:0:0:0:0 | detectedCharset | +| file://:0:0:0:0 | digit | +| file://:0:0:0:0 | digit | +| file://:0:0:0:0 | discardMark | +| file://:0:0:0:0 | discardMark | +| file://:0:0:0:0 | discardMark | +| file://:0:0:0:0 | discardMark | +| file://:0:0:0:0 | discardMark | +| file://:0:0:0:0 | discardMark | +| file://:0:0:0:0 | discardMark | +| file://:0:0:0:0 | discardMark | +| file://:0:0:0:0 | discardMark | +| file://:0:0:0:0 | dispatchUncaughtException | +| file://:0:0:0:0 | dispatchUncaughtException | +| file://:0:0:0:0 | displayName | +| file://:0:0:0:0 | displayName | +| file://:0:0:0:0 | distinct | +| file://:0:0:0:0 | distinct | +| file://:0:0:0:0 | distinct | +| file://:0:0:0:0 | distinct | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | div | +| file://:0:0:0:0 | divide | +| file://:0:0:0:0 | divideAndRemainder | +| file://:0:0:0:0 | divideUnsigned | +| file://:0:0:0:0 | divideUnsigned | +| file://:0:0:0:0 | dividedBy | +| file://:0:0:0:0 | dividedBy | +| file://:0:0:0:0 | doAcquireInterruptibly | +| file://:0:0:0:0 | doAcquireInterruptibly | +| file://:0:0:0:0 | doAcquireInterruptibly | +| file://:0:0:0:0 | doAcquireNanos | +| file://:0:0:0:0 | doAcquireNanos | +| file://:0:0:0:0 | doAcquireNanos | +| file://:0:0:0:0 | doAcquireShared | +| file://:0:0:0:0 | doAcquireShared | +| file://:0:0:0:0 | doAcquireShared | +| file://:0:0:0:0 | doAcquireSharedInterruptibly | +| file://:0:0:0:0 | doAcquireSharedInterruptibly | +| file://:0:0:0:0 | doAcquireSharedInterruptibly | +| file://:0:0:0:0 | doAcquireSharedNanos | +| file://:0:0:0:0 | doAcquireSharedNanos | +| file://:0:0:0:0 | doAcquireSharedNanos | +| file://:0:0:0:0 | doAs | +| file://:0:0:0:0 | doAs | +| file://:0:0:0:0 | doAsPrivileged | +| file://:0:0:0:0 | doAsPrivileged | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doExec | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvoke | +| file://:0:0:0:0 | doInvokeAny | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doJoin | +| file://:0:0:0:0 | doReleaseShared | +| file://:0:0:0:0 | doReleaseShared | +| file://:0:0:0:0 | doReleaseShared | +| file://:0:0:0:0 | doubleToLongBits | +| file://:0:0:0:0 | doubleToRawLongBits | +| file://:0:0:0:0 | doubleValue | +| file://:0:0:0:0 | doubles | +| file://:0:0:0:0 | doubles | +| file://:0:0:0:0 | doubles | +| file://:0:0:0:0 | doubles | +| file://:0:0:0:0 | drain | +| file://:0:0:0:0 | drainTasksTo | +| file://:0:0:0:0 | dropParameterTypes | +| file://:0:0:0:0 | dropWhile | +| file://:0:0:0:0 | dropWhile | +| file://:0:0:0:0 | dropWhile | +| file://:0:0:0:0 | dropWhile | +| file://:0:0:0:0 | dumpStack | +| file://:0:0:0:0 | dumpStack | +| file://:0:0:0:0 | dumpStack | +| file://:0:0:0:0 | dumpThreads | +| file://:0:0:0:0 | dumpThreads | +| file://:0:0:0:0 | dupArgumentForm | +| file://:0:0:0:0 | duplicate | +| file://:0:0:0:0 | duplicate | +| file://:0:0:0:0 | duplicate | +| file://:0:0:0:0 | duplicate | +| file://:0:0:0:0 | duplicate | +| file://:0:0:0:0 | duplicate | +| file://:0:0:0:0 | duplicate | +| file://:0:0:0:0 | duplicate | +| file://:0:0:0:0 | duplicate | +| file://:0:0:0:0 | dynamicInvoker | +| file://:0:0:0:0 | editor | +| file://:0:0:0:0 | editor | +| file://:0:0:0:0 | effectivelyIdenticalParameters | +| file://:0:0:0:0 | element | +| file://:0:0:0:0 | element | +| file://:0:0:0:0 | elementAt | +| file://:0:0:0:0 | elementData | +| file://:0:0:0:0 | elements | +| file://:0:0:0:0 | elements | +| file://:0:0:0:0 | elements | +| file://:0:0:0:0 | elements | +| file://:0:0:0:0 | elements | +| file://:0:0:0:0 | elements | +| file://:0:0:0:0 | elementsAsStream | +| file://:0:0:0:0 | emitIntConstant | +| file://:0:0:0:0 | empty | +| file://:0:0:0:0 | empty | +| file://:0:0:0:0 | empty | +| file://:0:0:0:0 | empty | +| file://:0:0:0:0 | empty | +| file://:0:0:0:0 | empty | +| file://:0:0:0:0 | empty | +| file://:0:0:0:0 | empty | +| file://:0:0:0:0 | empty | +| file://:0:0:0:0 | empty | +| file://:0:0:0:0 | enableReplaceObject | +| file://:0:0:0:0 | enableResolveObject | +| file://:0:0:0:0 | encode | +| file://:0:0:0:0 | encode | +| file://:0:0:0:0 | encode | +| file://:0:0:0:0 | encode | +| file://:0:0:0:0 | encodeLoop | +| file://:0:0:0:0 | encodeUTF8 | +| file://:0:0:0:0 | end | +| file://:0:0:0:0 | end | +| file://:0:0:0:0 | endOptional | +| file://:0:0:0:0 | endOptional | +| file://:0:0:0:0 | endsWith | +| file://:0:0:0:0 | endsWith | +| file://:0:0:0:0 | endsWith | +| file://:0:0:0:0 | enq | +| file://:0:0:0:0 | enq | +| file://:0:0:0:0 | enq | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | enqueue | +| file://:0:0:0:0 | ensureCapacity | +| file://:0:0:0:0 | ensureCapacity | +| file://:0:0:0:0 | ensureCapacity | +| file://:0:0:0:0 | ensureCapacity | +| file://:0:0:0:0 | ensureCapacityInternal | +| file://:0:0:0:0 | ensureCapacityInternal | +| file://:0:0:0:0 | ensureClassInitialized | +| file://:0:0:0:0 | entry | +| file://:0:0:0:0 | entrySet | +| file://:0:0:0:0 | enumConstantDirectory | +| file://:0:0:0:0 | enumerate | +| file://:0:0:0:0 | enumerate | +| file://:0:0:0:0 | enumerate | +| file://:0:0:0:0 | enumerate | +| file://:0:0:0:0 | enumerate | +| file://:0:0:0:0 | enumerate | +| file://:0:0:0:0 | enumerate | +| file://:0:0:0:0 | enumerate | +| file://:0:0:0:0 | enumerateStringProperties | +| file://:0:0:0:0 | epochSecond | +| file://:0:0:0:0 | epochSecond | +| file://:0:0:0:0 | epochSecond | +| file://:0:0:0:0 | epochSecond | +| file://:0:0:0:0 | epochSecond | +| file://:0:0:0:0 | epochSecond | +| file://:0:0:0:0 | eq | +| file://:0:0:0:0 | eq | +| file://:0:0:0:0 | equalParamTypes | +| file://:0:0:0:0 | equalParamTypes | +| file://:0:0:0:0 | equalParamTypes | | file://:0:0:0:0 | equals | | file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equals | +| file://:0:0:0:0 | equalsIgnoreCase | +| file://:0:0:0:0 | equalsRange | +| file://:0:0:0:0 | eraOf | +| file://:0:0:0:0 | eraOf | +| file://:0:0:0:0 | eraOf | +| file://:0:0:0:0 | eras | +| file://:0:0:0:0 | eras | +| file://:0:0:0:0 | eras | +| file://:0:0:0:0 | erase | +| file://:0:0:0:0 | erasedType | +| file://:0:0:0:0 | estimateDepth | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | estimateSize | +| file://:0:0:0:0 | exactInvoker | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | exec | +| file://:0:0:0:0 | execute | +| file://:0:0:0:0 | execute | +| file://:0:0:0:0 | execute | +| file://:0:0:0:0 | execute | +| file://:0:0:0:0 | execute | +| file://:0:0:0:0 | execute | +| file://:0:0:0:0 | exists | +| file://:0:0:0:0 | exit | +| file://:0:0:0:0 | exit | +| file://:0:0:0:0 | explicitCastEquivalentToAsType | +| file://:0:0:0:0 | exports | +| file://:0:0:0:0 | exports | +| file://:0:0:0:0 | exports | +| file://:0:0:0:0 | exports | +| file://:0:0:0:0 | exports | +| file://:0:0:0:0 | exports | +| file://:0:0:0:0 | exprString | +| file://:0:0:0:0 | expressionCount | +| file://:0:0:0:0 | expungeStaleEntries | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | expungeStaleExceptions | +| file://:0:0:0:0 | extendWith | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalAwaitDone | +| file://:0:0:0:0 | externalHelpComplete | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalInterruptibleAwaitDone | +| file://:0:0:0:0 | externalPush | +| file://:0:0:0:0 | factory | +| file://:0:0:0:0 | factory | +| file://:0:0:0:0 | factory | +| file://:0:0:0:0 | factory | +| file://:0:0:0:0 | factory | +| file://:0:0:0:0 | failed | +| file://:0:0:0:0 | fastUUID | +| file://:0:0:0:0 | fieldCount | +| file://:0:0:0:0 | fieldCount | +| file://:0:0:0:0 | fieldCount | +| file://:0:0:0:0 | fieldTypes | +| file://:0:0:0:0 | fieldTypes | +| file://:0:0:0:0 | fileKey | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | fillInStackTrace | +| file://:0:0:0:0 | filter | +| file://:0:0:0:0 | filter | +| file://:0:0:0:0 | filter | +| file://:0:0:0:0 | filter | +| file://:0:0:0:0 | filter | +| file://:0:0:0:0 | filter | +| file://:0:0:0:0 | filter | +| file://:0:0:0:0 | filterArgumentForm | +| file://:0:0:0:0 | filterLog | +| file://:0:0:0:0 | filterReturnForm | +| file://:0:0:0:0 | filterTags | +| file://:0:0:0:0 | filterTags | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | finalize | +| file://:0:0:0:0 | find | +| file://:0:0:0:0 | find | +| file://:0:0:0:0 | find | +| file://:0:0:0:0 | find | +| file://:0:0:0:0 | find | +| file://:0:0:0:0 | find | +| file://:0:0:0:0 | find | +| file://:0:0:0:0 | findAll | +| file://:0:0:0:0 | findAny | +| file://:0:0:0:0 | findAny | +| file://:0:0:0:0 | findAny | +| file://:0:0:0:0 | findAny | +| file://:0:0:0:0 | findBootstrapClassOrNull | +| file://:0:0:0:0 | findClass | +| file://:0:0:0:0 | findClass | +| file://:0:0:0:0 | findEntry | +| file://:0:0:0:0 | findFactories | +| file://:0:0:0:0 | findFactory | +| file://:0:0:0:0 | findFactory | +| file://:0:0:0:0 | findFirst | +| file://:0:0:0:0 | findFirst | +| file://:0:0:0:0 | findFirst | +| file://:0:0:0:0 | findFirst | +| file://:0:0:0:0 | findForm | +| file://:0:0:0:0 | findGetter | +| file://:0:0:0:0 | findGetters | +| file://:0:0:0:0 | findLibrary | +| file://:0:0:0:0 | findLoadedClass | +| file://:0:0:0:0 | findLoader | +| file://:0:0:0:0 | findModule | +| file://:0:0:0:0 | findModule | +| file://:0:0:0:0 | findNodeFromTail | +| file://:0:0:0:0 | findNodeFromTail | +| file://:0:0:0:0 | findNodeFromTail | +| file://:0:0:0:0 | findPrimitiveType | +| file://:0:0:0:0 | findResource | +| file://:0:0:0:0 | findResource | +| file://:0:0:0:0 | findResources | +| file://:0:0:0:0 | findServices | +| file://:0:0:0:0 | findSpecies | +| file://:0:0:0:0 | findSpecies | +| file://:0:0:0:0 | findSystemClass | +| file://:0:0:0:0 | findTreeNode | +| file://:0:0:0:0 | findTypeVariable | +| file://:0:0:0:0 | findWrapperType | +| file://:0:0:0:0 | finishEntry | +| file://:0:0:0:0 | finishToArray | +| file://:0:0:0:0 | finishToArray | +| file://:0:0:0:0 | finishToArray | +| file://:0:0:0:0 | finishToArray | +| file://:0:0:0:0 | finisher | +| file://:0:0:0:0 | first | +| file://:0:0:0:0 | first | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstComplete | +| file://:0:0:0:0 | firstDayOfYear | +| file://:0:0:0:0 | firstKey | +| file://:0:0:0:0 | firstMonthOfQuarter | +| file://:0:0:0:0 | fixed | +| file://:0:0:0:0 | fixed | +| file://:0:0:0:0 | fixed | +| file://:0:0:0:0 | fixed | +| file://:0:0:0:0 | fixed | +| file://:0:0:0:0 | flatMap | +| file://:0:0:0:0 | flatMap | +| file://:0:0:0:0 | flatMap | +| file://:0:0:0:0 | flatMap | +| file://:0:0:0:0 | flatMap | +| file://:0:0:0:0 | flatMapToDouble | +| file://:0:0:0:0 | flatMapToInt | +| file://:0:0:0:0 | flatMapToLong | +| file://:0:0:0:0 | flip | +| file://:0:0:0:0 | flip | +| file://:0:0:0:0 | flip | +| file://:0:0:0:0 | flip | +| file://:0:0:0:0 | flip | +| file://:0:0:0:0 | flip | +| file://:0:0:0:0 | flip | +| file://:0:0:0:0 | flip | +| file://:0:0:0:0 | flip | +| file://:0:0:0:0 | flipBit | +| file://:0:0:0:0 | floatValue | +| file://:0:0:0:0 | flush | +| file://:0:0:0:0 | flush | +| file://:0:0:0:0 | flush | +| file://:0:0:0:0 | flush | +| file://:0:0:0:0 | flush | +| file://:0:0:0:0 | flush | +| file://:0:0:0:0 | flush | +| file://:0:0:0:0 | flush | +| file://:0:0:0:0 | flush | +| file://:0:0:0:0 | flush | +| file://:0:0:0:0 | flush | +| file://:0:0:0:0 | flushBuffer | +| file://:0:0:0:0 | foldArgumentsForm | +| file://:0:0:0:0 | foldArgumentsForm | +| file://:0:0:0:0 | forBasicType | +| file://:0:0:0:0 | forBasicType | +| file://:0:0:0:0 | forClass | +| file://:0:0:0:0 | forDigit | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEach | +| file://:0:0:0:0 | forEachEntry | +| file://:0:0:0:0 | forEachEntry | +| file://:0:0:0:0 | forEachKey | +| file://:0:0:0:0 | forEachKey | +| file://:0:0:0:0 | forEachOrdered | +| file://:0:0:0:0 | forEachOrdered | +| file://:0:0:0:0 | forEachOrdered | +| file://:0:0:0:0 | forEachOrdered | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachRemaining | +| file://:0:0:0:0 | forEachValue | +| file://:0:0:0:0 | forEachValue | +| file://:0:0:0:0 | forLanguageTag | +| file://:0:0:0:0 | forName | +| file://:0:0:0:0 | forName | +| file://:0:0:0:0 | forName | +| file://:0:0:0:0 | forName | +| file://:0:0:0:0 | forName | +| file://:0:0:0:0 | forName | +| file://:0:0:0:0 | forPrimitiveType | +| file://:0:0:0:0 | forPrimitiveType | +| file://:0:0:0:0 | forWrapperType | +| file://:0:0:0:0 | force | +| file://:0:0:0:0 | force | +| file://:0:0:0:0 | force | +| file://:0:0:0:0 | forceType | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | fork | +| file://:0:0:0:0 | form | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | format | +| file://:0:0:0:0 | formatTo | +| file://:0:0:0:0 | formatToCharacterIterator | +| file://:0:0:0:0 | formatToCharacterIterator | +| file://:0:0:0:0 | formatUnsignedInt | +| file://:0:0:0:0 | formatUnsignedInt | +| file://:0:0:0:0 | formatUnsignedLong0 | +| file://:0:0:0:0 | formatted | +| file://:0:0:0:0 | formatted | +| file://:0:0:0:0 | freeMemory | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | from | +| file://:0:0:0:0 | fromClosedRange | +| file://:0:0:0:0 | fromClosedRange | +| file://:0:0:0:0 | fromClosedRange | +| file://:0:0:0:0 | fromDescriptor | +| file://:0:0:0:0 | fromMethodDescriptorString | +| file://:0:0:0:0 | fromMillis | +| file://:0:0:0:0 | fromString | +| file://:0:0:0:0 | fromURI | +| file://:0:0:0:0 | fullFence | +| file://:0:0:0:0 | fullFence | +| file://:0:0:0:0 | fullGetFirstQueuedThread | +| file://:0:0:0:0 | fullGetFirstQueuedThread | +| file://:0:0:0:0 | fullGetFirstQueuedThread | +| file://:0:0:0:0 | fullyRelease | +| file://:0:0:0:0 | fullyRelease | +| file://:0:0:0:0 | fullyRelease | +| file://:0:0:0:0 | fullyRelease | +| file://:0:0:0:0 | gcd | +| file://:0:0:0:0 | generate | +| file://:0:0:0:0 | generate | +| file://:0:0:0:0 | generate | +| file://:0:0:0:0 | generate | +| file://:0:0:0:0 | generateConcreteSpeciesCode | +| file://:0:0:0:0 | generateConcreteSpeciesCode | +| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | +| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | +| file://:0:0:0:0 | generic | +| file://:0:0:0:0 | genericInvoker | +| file://:0:0:0:0 | genericMethodType | +| file://:0:0:0:0 | genericMethodType | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | get | +| file://:0:0:0:0 | getAbsoluteFile | +| file://:0:0:0:0 | getAbsolutePath | +| file://:0:0:0:0 | getAccess | +| file://:0:0:0:0 | getAcquire | +| file://:0:0:0:0 | getAcquire | +| file://:0:0:0:0 | getAcquire | +| file://:0:0:0:0 | getActions | +| file://:0:0:0:0 | getActions | +| file://:0:0:0:0 | getActions | +| file://:0:0:0:0 | getActions | +| file://:0:0:0:0 | getActions | +| file://:0:0:0:0 | getActiveThreadCount | +| file://:0:0:0:0 | getActualTypeArguments | +| file://:0:0:0:0 | getAddress | +| file://:0:0:0:0 | getAddress | +| file://:0:0:0:0 | getAddress | +| file://:0:0:0:0 | getAddress | +| file://:0:0:0:0 | getAddress | +| file://:0:0:0:0 | getAddressesFromNameService | +| file://:0:0:0:0 | getAlgorithm | +| file://:0:0:0:0 | getAlgorithm | +| file://:0:0:0:0 | getAlgorithm | +| file://:0:0:0:0 | getAllAttributeKeys | +| file://:0:0:0:0 | getAllByName | +| file://:0:0:0:0 | getAllByName0 | +| file://:0:0:0:0 | getAllGenericParameterTypes | +| file://:0:0:0:0 | getAllGenericParameterTypes | +| file://:0:0:0:0 | getAllGenericParameterTypes | +| file://:0:0:0:0 | getAllStackTraces | +| file://:0:0:0:0 | getAllStackTraces | +| file://:0:0:0:0 | getAllStackTraces | +| file://:0:0:0:0 | getAllowUserInteraction | +| file://:0:0:0:0 | getAndAccumulate | +| file://:0:0:0:0 | getAndAccumulate | +| file://:0:0:0:0 | getAndAdd | +| file://:0:0:0:0 | getAndAdd | +| file://:0:0:0:0 | getAndAddAcquire | +| file://:0:0:0:0 | getAndAddByte | +| file://:0:0:0:0 | getAndAddByteAcquire | +| file://:0:0:0:0 | getAndAddByteRelease | +| file://:0:0:0:0 | getAndAddChar | +| file://:0:0:0:0 | getAndAddCharAcquire | +| file://:0:0:0:0 | getAndAddCharRelease | +| file://:0:0:0:0 | getAndAddDouble | +| file://:0:0:0:0 | getAndAddDoubleAcquire | +| file://:0:0:0:0 | getAndAddDoubleRelease | +| file://:0:0:0:0 | getAndAddFloat | +| file://:0:0:0:0 | getAndAddFloatAcquire | +| file://:0:0:0:0 | getAndAddFloatRelease | +| file://:0:0:0:0 | getAndAddInt | +| file://:0:0:0:0 | getAndAddIntAcquire | +| file://:0:0:0:0 | getAndAddIntRelease | +| file://:0:0:0:0 | getAndAddLong | +| file://:0:0:0:0 | getAndAddLongAcquire | +| file://:0:0:0:0 | getAndAddLongRelease | +| file://:0:0:0:0 | getAndAddRelease | +| file://:0:0:0:0 | getAndAddShort | +| file://:0:0:0:0 | getAndAddShortAcquire | +| file://:0:0:0:0 | getAndAddShortRelease | +| file://:0:0:0:0 | getAndBitwiseAnd | +| file://:0:0:0:0 | getAndBitwiseAndAcquire | +| file://:0:0:0:0 | getAndBitwiseAndBoolean | +| file://:0:0:0:0 | getAndBitwiseAndBooleanAcquire | +| file://:0:0:0:0 | getAndBitwiseAndBooleanRelease | +| file://:0:0:0:0 | getAndBitwiseAndByte | +| file://:0:0:0:0 | getAndBitwiseAndByteAcquire | +| file://:0:0:0:0 | getAndBitwiseAndByteRelease | +| file://:0:0:0:0 | getAndBitwiseAndChar | +| file://:0:0:0:0 | getAndBitwiseAndCharAcquire | +| file://:0:0:0:0 | getAndBitwiseAndCharRelease | +| file://:0:0:0:0 | getAndBitwiseAndInt | +| file://:0:0:0:0 | getAndBitwiseAndIntAcquire | +| file://:0:0:0:0 | getAndBitwiseAndIntRelease | +| file://:0:0:0:0 | getAndBitwiseAndLong | +| file://:0:0:0:0 | getAndBitwiseAndLongAcquire | +| file://:0:0:0:0 | getAndBitwiseAndLongRelease | +| file://:0:0:0:0 | getAndBitwiseAndRelease | +| file://:0:0:0:0 | getAndBitwiseAndShort | +| file://:0:0:0:0 | getAndBitwiseAndShortAcquire | +| file://:0:0:0:0 | getAndBitwiseAndShortRelease | +| file://:0:0:0:0 | getAndBitwiseOr | +| file://:0:0:0:0 | getAndBitwiseOrAcquire | +| file://:0:0:0:0 | getAndBitwiseOrBoolean | +| file://:0:0:0:0 | getAndBitwiseOrBooleanAcquire | +| file://:0:0:0:0 | getAndBitwiseOrBooleanRelease | +| file://:0:0:0:0 | getAndBitwiseOrByte | +| file://:0:0:0:0 | getAndBitwiseOrByteAcquire | +| file://:0:0:0:0 | getAndBitwiseOrByteRelease | +| file://:0:0:0:0 | getAndBitwiseOrChar | +| file://:0:0:0:0 | getAndBitwiseOrCharAcquire | +| file://:0:0:0:0 | getAndBitwiseOrCharRelease | +| file://:0:0:0:0 | getAndBitwiseOrInt | +| file://:0:0:0:0 | getAndBitwiseOrIntAcquire | +| file://:0:0:0:0 | getAndBitwiseOrIntRelease | +| file://:0:0:0:0 | getAndBitwiseOrLong | +| file://:0:0:0:0 | getAndBitwiseOrLongAcquire | +| file://:0:0:0:0 | getAndBitwiseOrLongRelease | +| file://:0:0:0:0 | getAndBitwiseOrRelease | +| file://:0:0:0:0 | getAndBitwiseOrShort | +| file://:0:0:0:0 | getAndBitwiseOrShortAcquire | +| file://:0:0:0:0 | getAndBitwiseOrShortRelease | +| file://:0:0:0:0 | getAndBitwiseXor | +| file://:0:0:0:0 | getAndBitwiseXorAcquire | +| file://:0:0:0:0 | getAndBitwiseXorBoolean | +| file://:0:0:0:0 | getAndBitwiseXorBooleanAcquire | +| file://:0:0:0:0 | getAndBitwiseXorBooleanRelease | +| file://:0:0:0:0 | getAndBitwiseXorByte | +| file://:0:0:0:0 | getAndBitwiseXorByteAcquire | +| file://:0:0:0:0 | getAndBitwiseXorByteRelease | +| file://:0:0:0:0 | getAndBitwiseXorChar | +| file://:0:0:0:0 | getAndBitwiseXorCharAcquire | +| file://:0:0:0:0 | getAndBitwiseXorCharRelease | +| file://:0:0:0:0 | getAndBitwiseXorInt | +| file://:0:0:0:0 | getAndBitwiseXorIntAcquire | +| file://:0:0:0:0 | getAndBitwiseXorIntRelease | +| file://:0:0:0:0 | getAndBitwiseXorLong | +| file://:0:0:0:0 | getAndBitwiseXorLongAcquire | +| file://:0:0:0:0 | getAndBitwiseXorLongRelease | +| file://:0:0:0:0 | getAndBitwiseXorRelease | +| file://:0:0:0:0 | getAndBitwiseXorShort | +| file://:0:0:0:0 | getAndBitwiseXorShortAcquire | +| file://:0:0:0:0 | getAndBitwiseXorShortRelease | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndClearReferencePendingList | +| file://:0:0:0:0 | getAndDecrement | +| file://:0:0:0:0 | getAndIncrement | +| file://:0:0:0:0 | getAndSet | +| file://:0:0:0:0 | getAndSet | +| file://:0:0:0:0 | getAndSet | +| file://:0:0:0:0 | getAndSetAcquire | +| file://:0:0:0:0 | getAndSetBoolean | +| file://:0:0:0:0 | getAndSetBooleanAcquire | +| file://:0:0:0:0 | getAndSetBooleanRelease | +| file://:0:0:0:0 | getAndSetByte | +| file://:0:0:0:0 | getAndSetByteAcquire | +| file://:0:0:0:0 | getAndSetByteRelease | +| file://:0:0:0:0 | getAndSetChar | +| file://:0:0:0:0 | getAndSetCharAcquire | +| file://:0:0:0:0 | getAndSetCharRelease | +| file://:0:0:0:0 | getAndSetDouble | +| file://:0:0:0:0 | getAndSetDoubleAcquire | +| file://:0:0:0:0 | getAndSetDoubleRelease | +| file://:0:0:0:0 | getAndSetFloat | +| file://:0:0:0:0 | getAndSetFloatAcquire | +| file://:0:0:0:0 | getAndSetFloatRelease | +| file://:0:0:0:0 | getAndSetInt | +| file://:0:0:0:0 | getAndSetIntAcquire | +| file://:0:0:0:0 | getAndSetIntRelease | +| file://:0:0:0:0 | getAndSetLong | +| file://:0:0:0:0 | getAndSetLongAcquire | +| file://:0:0:0:0 | getAndSetLongRelease | +| file://:0:0:0:0 | getAndSetObject | +| file://:0:0:0:0 | getAndSetObjectAcquire | +| file://:0:0:0:0 | getAndSetObjectRelease | +| file://:0:0:0:0 | getAndSetRelease | +| file://:0:0:0:0 | getAndSetShort | +| file://:0:0:0:0 | getAndSetShortAcquire | +| file://:0:0:0:0 | getAndSetShortRelease | +| file://:0:0:0:0 | getAndUpdate | +| file://:0:0:0:0 | getAndUpdate | +| file://:0:0:0:0 | getAnnotatedBounds | +| file://:0:0:0:0 | getAnnotatedExceptionTypes | +| file://:0:0:0:0 | getAnnotatedExceptionTypes | +| file://:0:0:0:0 | getAnnotatedExceptionTypes | +| file://:0:0:0:0 | getAnnotatedInterfaces | +| file://:0:0:0:0 | getAnnotatedOwnerType | +| file://:0:0:0:0 | getAnnotatedParameterTypes | +| file://:0:0:0:0 | getAnnotatedParameterTypes | +| file://:0:0:0:0 | getAnnotatedParameterTypes | +| file://:0:0:0:0 | getAnnotatedReceiverType | +| file://:0:0:0:0 | getAnnotatedReceiverType | +| file://:0:0:0:0 | getAnnotatedReceiverType | +| file://:0:0:0:0 | getAnnotatedReturnType | +| file://:0:0:0:0 | getAnnotatedReturnType | +| file://:0:0:0:0 | getAnnotatedReturnType | +| file://:0:0:0:0 | getAnnotatedReturnType0 | +| file://:0:0:0:0 | getAnnotatedReturnType0 | +| file://:0:0:0:0 | getAnnotatedReturnType0 | +| file://:0:0:0:0 | getAnnotatedSuperclass | +| file://:0:0:0:0 | getAnnotatedType | +| file://:0:0:0:0 | getAnnotatedType | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotation | +| file://:0:0:0:0 | getAnnotationBytes | +| file://:0:0:0:0 | getAnnotationBytes | +| file://:0:0:0:0 | getAnnotationBytes | +| file://:0:0:0:0 | getAnnotationType | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotations | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getAnnotationsByType | +| file://:0:0:0:0 | getArgumentTypes | +| file://:0:0:0:0 | getArgumentTypes | +| file://:0:0:0:0 | getArgumentTypes | +| file://:0:0:0:0 | getArgumentsAndReturnSizes | +| file://:0:0:0:0 | getArgumentsAndReturnSizes | +| file://:0:0:0:0 | getAsDouble | +| file://:0:0:0:0 | getAsDouble | +| file://:0:0:0:0 | getAsInt | +| file://:0:0:0:0 | getAsInt | +| file://:0:0:0:0 | getAsLong | +| file://:0:0:0:0 | getAsLong | +| file://:0:0:0:0 | getAssignedCombiner | +| file://:0:0:0:0 | getAsyncMode | +| file://:0:0:0:0 | getAttribute | +| file://:0:0:0:0 | getAttribute | +| file://:0:0:0:0 | getAttribute | +| file://:0:0:0:0 | getAttributes | +| file://:0:0:0:0 | getAuthority | +| file://:0:0:0:0 | getAuthority | +| file://:0:0:0:0 | getAvailableChronologies | +| file://:0:0:0:0 | getAvailableChronologies | +| file://:0:0:0:0 | getAvailableChronologies | +| file://:0:0:0:0 | getAvailableLocales | +| file://:0:0:0:0 | getAvailableLocales | +| file://:0:0:0:0 | getAvailableZoneIds | +| file://:0:0:0:0 | getAvailableZoneIds | +| file://:0:0:0:0 | getAverage | +| file://:0:0:0:0 | getAverage | +| file://:0:0:0:0 | getAverage | +| file://:0:0:0:0 | getBaseLocale | +| file://:0:0:0:0 | getBaseUnit | +| file://:0:0:0:0 | getBaseUnit | +| file://:0:0:0:0 | getBeginIndex | +| file://:0:0:0:0 | getBeginIndex | +| file://:0:0:0:0 | getBeginIndex | +| file://:0:0:0:0 | getBlockSize | +| file://:0:0:0:0 | getBoolean | +| file://:0:0:0:0 | getBoolean | +| file://:0:0:0:0 | getBoolean | +| file://:0:0:0:0 | getBoolean | +| file://:0:0:0:0 | getBooleanAcquire | +| file://:0:0:0:0 | getBooleanOpaque | +| file://:0:0:0:0 | getBooleanVolatile | +| file://:0:0:0:0 | getBounds | +| file://:0:0:0:0 | getBounds | +| file://:0:0:0:0 | getBroadcast | +| file://:0:0:0:0 | getBuiltinAppClassLoader | +| file://:0:0:0:0 | getBuiltinPlatformClassLoader | +| file://:0:0:0:0 | getByAddress | +| file://:0:0:0:0 | getByAddress | +| file://:0:0:0:0 | getByIndex | +| file://:0:0:0:0 | getByInetAddress | +| file://:0:0:0:0 | getByName | +| file://:0:0:0:0 | getByName | +| file://:0:0:0:0 | getByte | +| file://:0:0:0:0 | getByte | +| file://:0:0:0:0 | getByte | +| file://:0:0:0:0 | getByte | +| file://:0:0:0:0 | getByteAcquire | +| file://:0:0:0:0 | getByteCodeIndex | +| file://:0:0:0:0 | getByteCodeIndex | +| file://:0:0:0:0 | getByteOpaque | +| file://:0:0:0:0 | getByteVolatile | +| file://:0:0:0:0 | getBytes | +| file://:0:0:0:0 | getBytes | +| file://:0:0:0:0 | getBytes | +| file://:0:0:0:0 | getBytes | +| file://:0:0:0:0 | getBytes | +| file://:0:0:0:0 | getBytes | +| file://:0:0:0:0 | getBytes | +| file://:0:0:0:0 | getBytes | +| file://:0:0:0:0 | getCache | +| file://:0:0:0:0 | getCalendarType | +| file://:0:0:0:0 | getCalendarType | +| file://:0:0:0:0 | getCalendarType | +| file://:0:0:0:0 | getCallSiteTarget | +| file://:0:0:0:0 | getCallerClass | +| file://:0:0:0:0 | getCanonicalFile | +| file://:0:0:0:0 | getCanonicalHostName | +| file://:0:0:0:0 | getCanonicalName | +| file://:0:0:0:0 | getCanonicalName | +| file://:0:0:0:0 | getCanonicalName | +| file://:0:0:0:0 | getCanonicalName | +| file://:0:0:0:0 | getCanonicalName | +| file://:0:0:0:0 | getCanonicalPath | +| file://:0:0:0:0 | getCause | +| file://:0:0:0:0 | getCertificates | +| file://:0:0:0:0 | getCertificates | +| file://:0:0:0:0 | getChar | +| file://:0:0:0:0 | getChar | +| file://:0:0:0:0 | getChar | +| file://:0:0:0:0 | getChar | +| file://:0:0:0:0 | getChar | +| file://:0:0:0:0 | getChar | +| file://:0:0:0:0 | getChar | +| file://:0:0:0:0 | getChar | +| file://:0:0:0:0 | getCharAcquire | +| file://:0:0:0:0 | getCharOpaque | +| file://:0:0:0:0 | getCharUnaligned | +| file://:0:0:0:0 | getCharUnaligned | +| file://:0:0:0:0 | getCharVolatile | +| file://:0:0:0:0 | getChars | +| file://:0:0:0:0 | getChars | +| file://:0:0:0:0 | getChars | +| file://:0:0:0:0 | getChars | +| file://:0:0:0:0 | getChars | +| file://:0:0:0:0 | getChars | +| file://:0:0:0:0 | getChronology | +| file://:0:0:0:0 | getChronology | +| file://:0:0:0:0 | getChronology | +| file://:0:0:0:0 | getChronology | +| file://:0:0:0:0 | getChronology | +| file://:0:0:0:0 | getChronology | +| file://:0:0:0:0 | getChronology | +| file://:0:0:0:0 | getChronology | +| file://:0:0:0:0 | getChronology | +| file://:0:0:0:0 | getClass | +| file://:0:0:0:0 | getClassAt | +| file://:0:0:0:0 | getClassAtIfLoaded | +| file://:0:0:0:0 | getClassDataLayout | +| file://:0:0:0:0 | getClassLoader | +| file://:0:0:0:0 | getClassLoader | +| file://:0:0:0:0 | getClassLoader | +| file://:0:0:0:0 | getClassLoader | +| file://:0:0:0:0 | getClassLoader | +| file://:0:0:0:0 | getClassLoader0 | +| file://:0:0:0:0 | getClassLoaderName | +| file://:0:0:0:0 | getClassLoadingLock | +| file://:0:0:0:0 | getClassName | +| file://:0:0:0:0 | getClassName | +| file://:0:0:0:0 | getClassName | +| file://:0:0:0:0 | getClassName | +| file://:0:0:0:0 | getClassName | +| file://:0:0:0:0 | getClassName | +| file://:0:0:0:0 | getClassRefIndexAt | +| file://:0:0:0:0 | getClassSignature | +| file://:0:0:0:0 | getClasses | +| file://:0:0:0:0 | getCleanerImpl | +| file://:0:0:0:0 | getCodeSigners | +| file://:0:0:0:0 | getCodeSource | +| file://:0:0:0:0 | getCoder | +| file://:0:0:0:0 | getCoder | +| file://:0:0:0:0 | getCoder | +| file://:0:0:0:0 | getCombiner | +| file://:0:0:0:0 | getCommonPoolParallelism | +| file://:0:0:0:0 | getCommonSuperClass | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getComparator | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getCompleter | +| file://:0:0:0:0 | getComponentType | +| file://:0:0:0:0 | getComponentType | +| file://:0:0:0:0 | getConnectTimeout | +| file://:0:0:0:0 | getConstantPool | +| file://:0:0:0:0 | getConstructor | +| file://:0:0:0:0 | getConstructorAccessor | +| file://:0:0:0:0 | getConstructorAccessor | +| file://:0:0:0:0 | getConstructorAccessor | +| file://:0:0:0:0 | getConstructorAnnotations | +| file://:0:0:0:0 | getConstructorDescriptor | +| file://:0:0:0:0 | getConstructorParameterAnnotations | +| file://:0:0:0:0 | getConstructorSignature | +| file://:0:0:0:0 | getConstructorSlot | +| file://:0:0:0:0 | getConstructors | +| file://:0:0:0:0 | getConstructors | +| file://:0:0:0:0 | getContent | +| file://:0:0:0:0 | getContent | +| file://:0:0:0:0 | getContent | +| file://:0:0:0:0 | getContent | +| file://:0:0:0:0 | getContent | +| file://:0:0:0:0 | getContent | +| file://:0:0:0:0 | getContentEncoding | +| file://:0:0:0:0 | getContentLength | +| file://:0:0:0:0 | getContentLengthLong | +| file://:0:0:0:0 | getContentType | +| file://:0:0:0:0 | getContentTypeFor | +| file://:0:0:0:0 | getContext | +| file://:0:0:0:0 | getContextClassLoader | +| file://:0:0:0:0 | getContextClassLoader | +| file://:0:0:0:0 | getContextClassLoader | +| file://:0:0:0:0 | getCount | +| file://:0:0:0:0 | getCount | +| file://:0:0:0:0 | getCount | +| file://:0:0:0:0 | getCount | +| file://:0:0:0:0 | getCount | +| file://:0:0:0:0 | getCount | +| file://:0:0:0:0 | getCountry | +| file://:0:0:0:0 | getDate | +| file://:0:0:0:0 | getDate | +| file://:0:0:0:0 | getDateTimeAfter | +| file://:0:0:0:0 | getDateTimeBefore | +| file://:0:0:0:0 | getDay | +| file://:0:0:0:0 | getDayOfMonth | +| file://:0:0:0:0 | getDayOfMonth | +| file://:0:0:0:0 | getDayOfMonth | +| file://:0:0:0:0 | getDayOfMonth | +| file://:0:0:0:0 | getDayOfMonthIndicator | +| file://:0:0:0:0 | getDayOfWeek | +| file://:0:0:0:0 | getDayOfWeek | +| file://:0:0:0:0 | getDayOfWeek | +| file://:0:0:0:0 | getDayOfWeek | +| file://:0:0:0:0 | getDayOfWeek | +| file://:0:0:0:0 | getDayOfYear | +| file://:0:0:0:0 | getDayOfYear | +| file://:0:0:0:0 | getDayOfYear | +| file://:0:0:0:0 | getDayOfYear | +| file://:0:0:0:0 | getDaylightSavings | +| file://:0:0:0:0 | getDays | +| file://:0:0:0:0 | getDebug | +| file://:0:0:0:0 | getDecimalSeparator | +| file://:0:0:0:0 | getDecimalStyle | +| file://:0:0:0:0 | getDecimalStyle | +| file://:0:0:0:0 | getDecimalStyle | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotation | +| file://:0:0:0:0 | getDeclaredAnnotationMap | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotations | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | +| file://:0:0:0:0 | getDeclaredClasses | +| file://:0:0:0:0 | getDeclaredConstructor | +| file://:0:0:0:0 | getDeclaredConstructors | +| file://:0:0:0:0 | getDeclaredField | +| file://:0:0:0:0 | getDeclaredFields | +| file://:0:0:0:0 | getDeclaredMethod | +| file://:0:0:0:0 | getDeclaredMethods | +| file://:0:0:0:0 | getDeclaredPublicMethods | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringClass | +| file://:0:0:0:0 | getDeclaringExecutable | +| file://:0:0:0:0 | getDefault | +| file://:0:0:0:0 | getDefault | +| file://:0:0:0:0 | getDefault | +| file://:0:0:0:0 | getDefaultAllowUserInteraction | +| file://:0:0:0:0 | getDefaultPort | +| file://:0:0:0:0 | getDefaultPort | +| file://:0:0:0:0 | getDefaultRequestProperty | +| file://:0:0:0:0 | getDefaultSecureRandomService | +| file://:0:0:0:0 | getDefaultUncaughtExceptionHandler | +| file://:0:0:0:0 | getDefaultUncaughtExceptionHandler | +| file://:0:0:0:0 | getDefaultUncaughtExceptionHandler | +| file://:0:0:0:0 | getDefaultUseCaches | +| file://:0:0:0:0 | getDefaultUseCaches | +| file://:0:0:0:0 | getDefaultValue | +| file://:0:0:0:0 | getDefinedPackage | +| file://:0:0:0:0 | getDefinedPackages | +| file://:0:0:0:0 | getDefinition | +| file://:0:0:0:0 | getDesc | +| file://:0:0:0:0 | getDescriptor | +| file://:0:0:0:0 | getDescriptor | +| file://:0:0:0:0 | getDescriptor | +| file://:0:0:0:0 | getDescriptor | +| file://:0:0:0:0 | getDescriptor | +| file://:0:0:0:0 | getDimensions | +| file://:0:0:0:0 | getDirectionality | +| file://:0:0:0:0 | getDirectionality | +| file://:0:0:0:0 | getDisplayCountry | +| file://:0:0:0:0 | getDisplayCountry | +| file://:0:0:0:0 | getDisplayLanguage | +| file://:0:0:0:0 | getDisplayLanguage | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayName | +| file://:0:0:0:0 | getDisplayScript | +| file://:0:0:0:0 | getDisplayScript | +| file://:0:0:0:0 | getDisplayVariant | +| file://:0:0:0:0 | getDisplayVariant | +| file://:0:0:0:0 | getDoInput | +| file://:0:0:0:0 | getDoOutput | +| file://:0:0:0:0 | getDollar | +| file://:0:0:0:0 | getDomainCombiner | +| file://:0:0:0:0 | getDouble | +| file://:0:0:0:0 | getDouble | +| file://:0:0:0:0 | getDouble | +| file://:0:0:0:0 | getDouble | +| file://:0:0:0:0 | getDouble | +| file://:0:0:0:0 | getDouble | +| file://:0:0:0:0 | getDouble | +| file://:0:0:0:0 | getDouble | +| file://:0:0:0:0 | getDoubleAcquire | +| file://:0:0:0:0 | getDoubleAt | +| file://:0:0:0:0 | getDoubleOpaque | +| file://:0:0:0:0 | getDoubleVolatile | +| file://:0:0:0:0 | getDuration | +| file://:0:0:0:0 | getDuration | +| file://:0:0:0:0 | getDuration | +| file://:0:0:0:0 | getEffectiveChronology | +| file://:0:0:0:0 | getElementType | +| file://:0:0:0:0 | getEnclosingClass | +| file://:0:0:0:0 | getEnclosingConstructor | +| file://:0:0:0:0 | getEnclosingMethod | +| file://:0:0:0:0 | getEncoded | +| file://:0:0:0:0 | getEncoded | +| file://:0:0:0:0 | getEncoded | +| file://:0:0:0:0 | getEncoded | +| file://:0:0:0:0 | getEncoded | +| file://:0:0:0:0 | getEncodings | +| file://:0:0:0:0 | getEndIndex | +| file://:0:0:0:0 | getEndIndex | +| file://:0:0:0:0 | getEndIndex | +| file://:0:0:0:0 | getEntry | +| file://:0:0:0:0 | getEntry | +| file://:0:0:0:0 | getEnumConstants | +| file://:0:0:0:0 | getEnumConstantsShared | +| file://:0:0:0:0 | getEnumeration | +| file://:0:0:0:0 | getEnumeration | +| file://:0:0:0:0 | getEpochSecond | +| file://:0:0:0:0 | getEra | +| file://:0:0:0:0 | getEra | +| file://:0:0:0:0 | getErrorIndex | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getExactSizeIfKnown | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getException | +| file://:0:0:0:0 | getExceptionTypes | +| file://:0:0:0:0 | getExceptionTypes | +| file://:0:0:0:0 | getExceptionTypes | +| file://:0:0:0:0 | getExceptionTypes | +| file://:0:0:0:0 | getExceptionTypes | +| file://:0:0:0:0 | getExceptionTypes | +| file://:0:0:0:0 | getExclusiveOwnerThread | +| file://:0:0:0:0 | getExclusiveOwnerThread | +| file://:0:0:0:0 | getExclusiveOwnerThread | +| file://:0:0:0:0 | getExclusiveOwnerThread | +| file://:0:0:0:0 | getExclusiveOwnerThread | +| file://:0:0:0:0 | getExclusiveQueuedThreads | +| file://:0:0:0:0 | getExclusiveQueuedThreads | +| file://:0:0:0:0 | getExclusiveQueuedThreads | +| file://:0:0:0:0 | getExclusiveQueuedThreads | +| file://:0:0:0:0 | getExecutableSharedParameterTypes | +| file://:0:0:0:0 | getExecutableSharedParameterTypes | +| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | +| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | +| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | +| file://:0:0:0:0 | getExpiration | +| file://:0:0:0:0 | getExtension | +| file://:0:0:0:0 | getExtension | +| file://:0:0:0:0 | getExtensionKeys | +| file://:0:0:0:0 | getExtensionValue | +| file://:0:0:0:0 | getFactory | +| file://:0:0:0:0 | getFactory | +| file://:0:0:0:0 | getFactory | +| file://:0:0:0:0 | getFactory | +| file://:0:0:0:0 | getFactory | +| file://:0:0:0:0 | getFamily | +| file://:0:0:0:0 | getFence | +| file://:0:0:0:0 | getFence | +| file://:0:0:0:0 | getFence | +| file://:0:0:0:0 | getFence | +| file://:0:0:0:0 | getField | +| file://:0:0:0:0 | getField | +| file://:0:0:0:0 | getField | +| file://:0:0:0:0 | getField | +| file://:0:0:0:0 | getField | +| file://:0:0:0:0 | getFieldAt | +| file://:0:0:0:0 | getFieldAtIfLoaded | +| file://:0:0:0:0 | getFieldAttribute | +| file://:0:0:0:0 | getFieldDelegate | +| file://:0:0:0:0 | getFieldType | +| file://:0:0:0:0 | getFields | +| file://:0:0:0:0 | getFields | +| file://:0:0:0:0 | getFields | +| file://:0:0:0:0 | getFields | +| file://:0:0:0:0 | getFields | +| file://:0:0:0:0 | getFile | +| file://:0:0:0:0 | getFileAttributeView | +| file://:0:0:0:0 | getFileName | +| file://:0:0:0:0 | getFileName | +| file://:0:0:0:0 | getFileName | +| file://:0:0:0:0 | getFileName | +| file://:0:0:0:0 | getFileNameMap | +| file://:0:0:0:0 | getFileStore | +| file://:0:0:0:0 | getFileStoreAttributeView | +| file://:0:0:0:0 | getFileStores | +| file://:0:0:0:0 | getFileSystem | +| file://:0:0:0:0 | getFileSystem | +| file://:0:0:0:0 | getFirst | +| file://:0:0:0:0 | getFirst | +| file://:0:0:0:0 | getFirstQueuedThread | +| file://:0:0:0:0 | getFirstQueuedThread | +| file://:0:0:0:0 | getFirstQueuedThread | +| file://:0:0:0:0 | getFirstQueuedThread | +| file://:0:0:0:0 | getFloat | +| file://:0:0:0:0 | getFloat | +| file://:0:0:0:0 | getFloat | +| file://:0:0:0:0 | getFloat | +| file://:0:0:0:0 | getFloat | +| file://:0:0:0:0 | getFloat | +| file://:0:0:0:0 | getFloat | +| file://:0:0:0:0 | getFloat | +| file://:0:0:0:0 | getFloatAcquire | +| file://:0:0:0:0 | getFloatAt | +| file://:0:0:0:0 | getFloatOpaque | +| file://:0:0:0:0 | getFloatVolatile | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getForkJoinTaskTag | +| file://:0:0:0:0 | getFormalTypeParameters | +| file://:0:0:0:0 | getFormalTypeParameters | +| file://:0:0:0:0 | getFormalTypeParameters | +| file://:0:0:0:0 | getFormat | +| file://:0:0:0:0 | getFormat | +| file://:0:0:0:0 | getFragment | +| file://:0:0:0:0 | getFreeSpace | +| file://:0:0:0:0 | getFrom | +| file://:0:0:0:0 | getFrom | +| file://:0:0:0:0 | getFromClass | +| file://:0:0:0:0 | getGenericDeclaration | +| file://:0:0:0:0 | getGenericExceptionTypes | +| file://:0:0:0:0 | getGenericExceptionTypes | +| file://:0:0:0:0 | getGenericExceptionTypes | +| file://:0:0:0:0 | getGenericInfo | +| file://:0:0:0:0 | getGenericInfo | +| file://:0:0:0:0 | getGenericInfo | +| file://:0:0:0:0 | getGenericInterfaces | +| file://:0:0:0:0 | getGenericParameterTypes | +| file://:0:0:0:0 | getGenericParameterTypes | +| file://:0:0:0:0 | getGenericParameterTypes | +| file://:0:0:0:0 | getGenericReturnType | +| file://:0:0:0:0 | getGenericSuperclass | +| file://:0:0:0:0 | getGenericType | +| file://:0:0:0:0 | getHardwareAddress | +| file://:0:0:0:0 | getHeaderField | +| file://:0:0:0:0 | getHeaderField | +| file://:0:0:0:0 | getHeaderFieldDate | +| file://:0:0:0:0 | getHeaderFieldInt | +| file://:0:0:0:0 | getHeaderFieldKey | +| file://:0:0:0:0 | getHeaderFieldLong | +| file://:0:0:0:0 | getHeaderFields | +| file://:0:0:0:0 | getHoldCount | +| file://:0:0:0:0 | getHoldCount | +| file://:0:0:0:0 | getHoldCount | +| file://:0:0:0:0 | getHoldCount | +| file://:0:0:0:0 | getHoldCount | +| file://:0:0:0:0 | getHost | +| file://:0:0:0:0 | getHost | +| file://:0:0:0:0 | getHostAddress | +| file://:0:0:0:0 | getHostAddress | +| file://:0:0:0:0 | getHostAddress | +| file://:0:0:0:0 | getHostByAddr | +| file://:0:0:0:0 | getHostName | +| file://:0:0:0:0 | getHostName | +| file://:0:0:0:0 | getHostName | +| file://:0:0:0:0 | getHour | +| file://:0:0:0:0 | getHour | +| file://:0:0:0:0 | getHour | +| file://:0:0:0:0 | getHour | +| file://:0:0:0:0 | getHour | +| file://:0:0:0:0 | getHours | +| file://:0:0:0:0 | getID | +| file://:0:0:0:0 | getID | +| file://:0:0:0:0 | getISO3Country | +| file://:0:0:0:0 | getISO3Language | +| file://:0:0:0:0 | getISOCountries | +| file://:0:0:0:0 | getISOCountries | +| file://:0:0:0:0 | getISOLanguages | +| file://:0:0:0:0 | getId | +| file://:0:0:0:0 | getId | +| file://:0:0:0:0 | getId | +| file://:0:0:0:0 | getId | +| file://:0:0:0:0 | getId | +| file://:0:0:0:0 | getId | +| file://:0:0:0:0 | getId | +| file://:0:0:0:0 | getId | +| file://:0:0:0:0 | getIdentifier | +| file://:0:0:0:0 | getIfModifiedSince | +| file://:0:0:0:0 | getImplementationTitle | +| file://:0:0:0:0 | getImplementationVendor | +| file://:0:0:0:0 | getImplementationVersion | +| file://:0:0:0:0 | getIndex | +| file://:0:0:0:0 | getIndex | +| file://:0:0:0:0 | getIndex | +| file://:0:0:0:0 | getIndex | +| file://:0:0:0:0 | getInetAddresses | +| file://:0:0:0:0 | getInfo | +| file://:0:0:0:0 | getInputStream | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstance | +| file://:0:0:0:0 | getInstant | +| file://:0:0:0:0 | getInt | +| file://:0:0:0:0 | getInt | +| file://:0:0:0:0 | getInt | +| file://:0:0:0:0 | getInt | +| file://:0:0:0:0 | getInt | +| file://:0:0:0:0 | getInt | +| file://:0:0:0:0 | getInt | +| file://:0:0:0:0 | getInt | +| file://:0:0:0:0 | getIntAcquire | +| file://:0:0:0:0 | getIntAt | +| file://:0:0:0:0 | getIntOpaque | +| file://:0:0:0:0 | getIntUnaligned | +| file://:0:0:0:0 | getIntUnaligned | +| file://:0:0:0:0 | getIntVolatile | +| file://:0:0:0:0 | getInteger | +| file://:0:0:0:0 | getInteger | +| file://:0:0:0:0 | getInteger | +| file://:0:0:0:0 | getInterfaceAddresses | +| file://:0:0:0:0 | getInterfaces | +| file://:0:0:0:0 | getInterfaces | +| file://:0:0:0:0 | getInternalName | +| file://:0:0:0:0 | getInternalName | +| file://:0:0:0:0 | getInvocationType | +| file://:0:0:0:0 | getItem | +| file://:0:0:0:0 | getItemCount | +| file://:0:0:0:0 | getIterator | +| file://:0:0:0:0 | getIterator | +| file://:0:0:0:0 | getKey | +| file://:0:0:0:0 | getKey | +| file://:0:0:0:0 | getKeys | +| file://:0:0:0:0 | getLabels | +| file://:0:0:0:0 | getLabels | +| file://:0:0:0:0 | getLabels | +| file://:0:0:0:0 | getLanguage | +| file://:0:0:0:0 | getLanguage | +| file://:0:0:0:0 | getLargestMinimum | +| file://:0:0:0:0 | getLast | +| file://:0:0:0:0 | getLastModified | +| file://:0:0:0:0 | getLayer | +| file://:0:0:0:0 | getLength | +| file://:0:0:0:0 | getLineNumber | +| file://:0:0:0:0 | getLineNumber | +| file://:0:0:0:0 | getLineNumber | +| file://:0:0:0:0 | getLoadAverage | +| file://:0:0:0:0 | getLocalDesc | +| file://:0:0:0:0 | getLocalHost | +| file://:0:0:0:0 | getLocalHostName | +| file://:0:0:0:0 | getLocalTime | +| file://:0:0:0:0 | getLocale | +| file://:0:0:0:0 | getLocale | +| file://:0:0:0:0 | getLocale | +| file://:0:0:0:0 | getLocaleExtensions | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocalizedMessage | +| file://:0:0:0:0 | getLocation | +| file://:0:0:0:0 | getLocationNoFragString | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLong | +| file://:0:0:0:0 | getLongAcquire | +| file://:0:0:0:0 | getLongAt | +| file://:0:0:0:0 | getLongOpaque | +| file://:0:0:0:0 | getLongUnaligned | +| file://:0:0:0:0 | getLongUnaligned | +| file://:0:0:0:0 | getLongVolatile | +| file://:0:0:0:0 | getLoopbackAddress | +| file://:0:0:0:0 | getLowerBounds | +| file://:0:0:0:0 | getLowerBounds | +| file://:0:0:0:0 | getLowestSetBit | +| file://:0:0:0:0 | getMTU | +| file://:0:0:0:0 | getMap | +| file://:0:0:0:0 | getMap | +| file://:0:0:0:0 | getMap | +| file://:0:0:0:0 | getMap | +| file://:0:0:0:0 | getMap | +| file://:0:0:0:0 | getMap | +| file://:0:0:0:0 | getMappedValue | +| file://:0:0:0:0 | getMax | +| file://:0:0:0:0 | getMax | +| file://:0:0:0:0 | getMax | +| file://:0:0:0:0 | getMaxPriority | +| file://:0:0:0:0 | getMaxStringLength | +| file://:0:0:0:0 | getMaximum | +| file://:0:0:0:0 | getMemberName | +| file://:0:0:0:0 | getMemberName | +| file://:0:0:0:0 | getMemberRefInfoAt | +| file://:0:0:0:0 | getMembers | +| file://:0:0:0:0 | getMergedType | +| file://:0:0:0:0 | getMessage | +| file://:0:0:0:0 | getMethod | +| file://:0:0:0:0 | getMethodAccessor | +| file://:0:0:0:0 | getMethodAccessor | +| file://:0:0:0:0 | getMethodAccessor | +| file://:0:0:0:0 | getMethodAt | +| file://:0:0:0:0 | getMethodAtIfLoaded | +| file://:0:0:0:0 | getMethodDescriptor | +| file://:0:0:0:0 | getMethodDescriptor | +| file://:0:0:0:0 | getMethodDescriptor | +| file://:0:0:0:0 | getMethodHandle | +| file://:0:0:0:0 | getMethodName | +| file://:0:0:0:0 | getMethodName | +| file://:0:0:0:0 | getMethodName | +| file://:0:0:0:0 | getMethodOrFieldType | +| file://:0:0:0:0 | getMethodType | +| file://:0:0:0:0 | getMethodType | +| file://:0:0:0:0 | getMethodType | +| file://:0:0:0:0 | getMethodType | +| file://:0:0:0:0 | getMethodType | +| file://:0:0:0:0 | getMethodType | +| file://:0:0:0:0 | getMethodType_V | +| file://:0:0:0:0 | getMethodType_V_init | +| file://:0:0:0:0 | getMethods | +| file://:0:0:0:0 | getMethods | +| file://:0:0:0:0 | getMethods | +| file://:0:0:0:0 | getMillisOf | +| file://:0:0:0:0 | getMin | +| file://:0:0:0:0 | getMin | +| file://:0:0:0:0 | getMin | +| file://:0:0:0:0 | getMinimum | +| file://:0:0:0:0 | getMinute | +| file://:0:0:0:0 | getMinute | +| file://:0:0:0:0 | getMinute | +| file://:0:0:0:0 | getMinute | +| file://:0:0:0:0 | getMinute | +| file://:0:0:0:0 | getMinutes | +| file://:0:0:0:0 | getModifiers | +| file://:0:0:0:0 | getModifiers | +| file://:0:0:0:0 | getModifiers | +| file://:0:0:0:0 | getModifiers | +| file://:0:0:0:0 | getModifiers | +| file://:0:0:0:0 | getModifiers | +| file://:0:0:0:0 | getModifiers | +| file://:0:0:0:0 | getModifiers | +| file://:0:0:0:0 | getModule | +| file://:0:0:0:0 | getModuleName | +| file://:0:0:0:0 | getModuleVersion | +| file://:0:0:0:0 | getMonth | +| file://:0:0:0:0 | getMonth | +| file://:0:0:0:0 | getMonth | +| file://:0:0:0:0 | getMonth | +| file://:0:0:0:0 | getMonth | +| file://:0:0:0:0 | getMonth | +| file://:0:0:0:0 | getMonthValue | +| file://:0:0:0:0 | getMonthValue | +| file://:0:0:0:0 | getMonthValue | +| file://:0:0:0:0 | getMonthValue | +| file://:0:0:0:0 | getMonths | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getName | +| file://:0:0:0:0 | getNameAndTypeRefIndexAt | +| file://:0:0:0:0 | getNameAndTypeRefInfoAt | +| file://:0:0:0:0 | getNameCount | +| file://:0:0:0:0 | getNano | +| file://:0:0:0:0 | getNano | +| file://:0:0:0:0 | getNano | +| file://:0:0:0:0 | getNano | +| file://:0:0:0:0 | getNano | +| file://:0:0:0:0 | getNano | +| file://:0:0:0:0 | getNano | +| file://:0:0:0:0 | getNegativeSign | +| file://:0:0:0:0 | getNestHost | +| file://:0:0:0:0 | getNestMembers | +| file://:0:0:0:0 | getNestedTypes | +| file://:0:0:0:0 | getNetworkInterfaces | +| file://:0:0:0:0 | getNetworkPrefixLength | +| file://:0:0:0:0 | getNumObjFields | +| file://:0:0:0:0 | getNumericValue | +| file://:0:0:0:0 | getNumericValue | +| file://:0:0:0:0 | getObjFieldValues | +| file://:0:0:0:0 | getObject | +| file://:0:0:0:0 | getObjectAcquire | +| file://:0:0:0:0 | getObjectInputFilter | +| file://:0:0:0:0 | getObjectOpaque | +| file://:0:0:0:0 | getObjectStreamClass | +| file://:0:0:0:0 | getObjectType | +| file://:0:0:0:0 | getObjectVolatile | +| file://:0:0:0:0 | getOffset | +| file://:0:0:0:0 | getOffset | +| file://:0:0:0:0 | getOffset | +| file://:0:0:0:0 | getOffset | +| file://:0:0:0:0 | getOffset | +| file://:0:0:0:0 | getOffset | +| file://:0:0:0:0 | getOffset | +| file://:0:0:0:0 | getOffset | +| file://:0:0:0:0 | getOffsetAfter | +| file://:0:0:0:0 | getOffsetAfter | +| file://:0:0:0:0 | getOffsetBefore | +| file://:0:0:0:0 | getOffsetBefore | +| file://:0:0:0:0 | getOpaque | +| file://:0:0:0:0 | getOpaque | +| file://:0:0:0:0 | getOpaque | +| file://:0:0:0:0 | getOpcode | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOrDefault | +| file://:0:0:0:0 | getOriginalHostName | +| file://:0:0:0:0 | getOutputStream | +| file://:0:0:0:0 | getOwner | +| file://:0:0:0:0 | getOwner | +| file://:0:0:0:0 | getOwner | +| file://:0:0:0:0 | getOwner | +| file://:0:0:0:0 | getOwner | +| file://:0:0:0:0 | getOwner | +| file://:0:0:0:0 | getOwnerType | +| file://:0:0:0:0 | getPackage | +| file://:0:0:0:0 | getPackage | +| file://:0:0:0:0 | getPackage | +| file://:0:0:0:0 | getPackageName | +| file://:0:0:0:0 | getPackages | +| file://:0:0:0:0 | getPackages | +| file://:0:0:0:0 | getPackages | +| file://:0:0:0:0 | getParallelism | +| file://:0:0:0:0 | getParameterAnnotations | +| file://:0:0:0:0 | getParameterAnnotations | +| file://:0:0:0:0 | getParameterAnnotations | +| file://:0:0:0:0 | getParameterCount | +| file://:0:0:0:0 | getParameterCount | +| file://:0:0:0:0 | getParameterCount | +| file://:0:0:0:0 | getParameterTypes | +| file://:0:0:0:0 | getParameterTypes | +| file://:0:0:0:0 | getParameterTypes | +| file://:0:0:0:0 | getParameterTypes | +| file://:0:0:0:0 | getParameterTypes | +| file://:0:0:0:0 | getParameterTypes | +| file://:0:0:0:0 | getParameterTypes | +| file://:0:0:0:0 | getParameterizedType | +| file://:0:0:0:0 | getParameters | +| file://:0:0:0:0 | getParameters | +| file://:0:0:0:0 | getParameters | +| file://:0:0:0:0 | getParameters0 | +| file://:0:0:0:0 | getParameters0 | +| file://:0:0:0:0 | getParent | +| file://:0:0:0:0 | getParent | +| file://:0:0:0:0 | getParent | +| file://:0:0:0:0 | getParent | +| file://:0:0:0:0 | getParent | +| file://:0:0:0:0 | getParentFile | +| file://:0:0:0:0 | getParsed | +| file://:0:0:0:0 | getPath | +| file://:0:0:0:0 | getPath | +| file://:0:0:0:0 | getPath | +| file://:0:0:0:0 | getPath | +| file://:0:0:0:0 | getPath | +| file://:0:0:0:0 | getPath | +| file://:0:0:0:0 | getPathMatcher | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPendingCount | +| file://:0:0:0:0 | getPermission | +| file://:0:0:0:0 | getPermissions | +| file://:0:0:0:0 | getPlain | +| file://:0:0:0:0 | getPlain | +| file://:0:0:0:0 | getPlatformClassLoader | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPool | +| file://:0:0:0:0 | getPoolIndex | +| file://:0:0:0:0 | getPoolIndex | +| file://:0:0:0:0 | getPoolIndex | +| file://:0:0:0:0 | getPoolSize | +| file://:0:0:0:0 | getPort | +| file://:0:0:0:0 | getPort | +| file://:0:0:0:0 | getPositiveSign | +| file://:0:0:0:0 | getPrefixLength | +| file://:0:0:0:0 | getPrimDataSize | +| file://:0:0:0:0 | getPrimFieldValues | +| file://:0:0:0:0 | getPrimitiveClass | +| file://:0:0:0:0 | getPrincipals | +| file://:0:0:0:0 | getPrincipals | +| file://:0:0:0:0 | getPrincipals | +| file://:0:0:0:0 | getPrintStream | +| file://:0:0:0:0 | getPriority | +| file://:0:0:0:0 | getPriority | +| file://:0:0:0:0 | getPriority | +| file://:0:0:0:0 | getPrivateCredentials | +| file://:0:0:0:0 | getPrivateCredentials | +| file://:0:0:0:0 | getProperty | +| file://:0:0:0:0 | getProperty | +| file://:0:0:0:0 | getProperty | +| file://:0:0:0:0 | getProperty | +| file://:0:0:0:0 | getProtectionDomain | +| file://:0:0:0:0 | getProtocol | +| file://:0:0:0:0 | getProtocolVersion | +| file://:0:0:0:0 | getProvider | +| file://:0:0:0:0 | getPublicCredentials | +| file://:0:0:0:0 | getPublicCredentials | +| file://:0:0:0:0 | getPublicKey | +| file://:0:0:0:0 | getQuery | +| file://:0:0:0:0 | getQuery | +| file://:0:0:0:0 | getQueueLength | +| file://:0:0:0:0 | getQueueLength | +| file://:0:0:0:0 | getQueueLength | +| file://:0:0:0:0 | getQueueLength | +| file://:0:0:0:0 | getQueueLength | +| file://:0:0:0:0 | getQueueLength | +| file://:0:0:0:0 | getQueuedSubmissionCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedTaskCount | +| file://:0:0:0:0 | getQueuedThreads | +| file://:0:0:0:0 | getQueuedThreads | +| file://:0:0:0:0 | getQueuedThreads | +| file://:0:0:0:0 | getQueuedThreads | +| file://:0:0:0:0 | getQueuedThreads | +| file://:0:0:0:0 | getQueuedThreads | +| file://:0:0:0:0 | getRange | +| file://:0:0:0:0 | getRangeUnit | +| file://:0:0:0:0 | getRangeUnit | +| file://:0:0:0:0 | getRawAnnotations | +| file://:0:0:0:0 | getRawAnnotations | +| file://:0:0:0:0 | getRawAuthority | +| file://:0:0:0:0 | getRawFragment | +| file://:0:0:0:0 | getRawParameterAnnotations | +| file://:0:0:0:0 | getRawPath | +| file://:0:0:0:0 | getRawQuery | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawResult | +| file://:0:0:0:0 | getRawSchemeSpecificPart | +| file://:0:0:0:0 | getRawType | +| file://:0:0:0:0 | getRawTypeAnnotations | +| file://:0:0:0:0 | getRawUserInfo | +| file://:0:0:0:0 | getReadTimeout | +| file://:0:0:0:0 | getRealName | +| file://:0:0:0:0 | getRef | +| file://:0:0:0:0 | getReferenceKind | +| file://:0:0:0:0 | getReflectionFactory | +| file://:0:0:0:0 | getRegion | +| file://:0:0:0:0 | getReifier | +| file://:0:0:0:0 | getReifier | +| file://:0:0:0:0 | getReifier | +| file://:0:0:0:0 | getReifier | +| file://:0:0:0:0 | getRequestProperties | +| file://:0:0:0:0 | getRequestProperty | +| file://:0:0:0:0 | getResolveException | +| file://:0:0:0:0 | getResolverFields | +| file://:0:0:0:0 | getResolverStyle | +| file://:0:0:0:0 | getResource | +| file://:0:0:0:0 | getResource | +| file://:0:0:0:0 | getResourceAsStream | +| file://:0:0:0:0 | getResourceAsStream | +| file://:0:0:0:0 | getResourceAsStream | +| file://:0:0:0:0 | getResources | +| file://:0:0:0:0 | getResult | +| file://:0:0:0:0 | getResult | +| file://:0:0:0:0 | getResult | +| file://:0:0:0:0 | getReturnType | +| file://:0:0:0:0 | getReturnType | +| file://:0:0:0:0 | getReturnType | +| file://:0:0:0:0 | getReturnType | +| file://:0:0:0:0 | getReturnType | +| file://:0:0:0:0 | getReturnType | +| file://:0:0:0:0 | getReturnType | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRoot | +| file://:0:0:0:0 | getRootDirectories | +| file://:0:0:0:0 | getRules | +| file://:0:0:0:0 | getRules | +| file://:0:0:0:0 | getRunLimit | +| file://:0:0:0:0 | getRunLimit | +| file://:0:0:0:0 | getRunLimit | +| file://:0:0:0:0 | getRunStart | +| file://:0:0:0:0 | getRunStart | +| file://:0:0:0:0 | getRunStart | +| file://:0:0:0:0 | getRunningThreadCount | +| file://:0:0:0:0 | getScheme | +| file://:0:0:0:0 | getScheme | +| file://:0:0:0:0 | getSchemeSpecificPart | +| file://:0:0:0:0 | getScript | +| file://:0:0:0:0 | getScript | +| file://:0:0:0:0 | getSecond | +| file://:0:0:0:0 | getSecond | +| file://:0:0:0:0 | getSecond | +| file://:0:0:0:0 | getSecond | +| file://:0:0:0:0 | getSecond | +| file://:0:0:0:0 | getSeconds | +| file://:0:0:0:0 | getSeconds | +| file://:0:0:0:0 | getSeparator | +| file://:0:0:0:0 | getSerialFilter | +| file://:0:0:0:0 | getSerialVersionUID | +| file://:0:0:0:0 | getService | +| file://:0:0:0:0 | getServices | +| file://:0:0:0:0 | getServicesCatalog | +| file://:0:0:0:0 | getServicesCatalog | +| file://:0:0:0:0 | getServicesCatalogOrNull | +| file://:0:0:0:0 | getSeverity | +| file://:0:0:0:0 | getSharedExceptionTypes | +| file://:0:0:0:0 | getSharedExceptionTypes | +| file://:0:0:0:0 | getSharedExceptionTypes | +| file://:0:0:0:0 | getSharedParameterTypes | +| file://:0:0:0:0 | getSharedParameterTypes | +| file://:0:0:0:0 | getSharedParameterTypes | +| file://:0:0:0:0 | getSharedQueuedThreads | +| file://:0:0:0:0 | getSharedQueuedThreads | +| file://:0:0:0:0 | getSharedQueuedThreads | +| file://:0:0:0:0 | getSharedQueuedThreads | +| file://:0:0:0:0 | getShort | +| file://:0:0:0:0 | getShort | +| file://:0:0:0:0 | getShort | +| file://:0:0:0:0 | getShort | +| file://:0:0:0:0 | getShort | +| file://:0:0:0:0 | getShort | +| file://:0:0:0:0 | getShort | +| file://:0:0:0:0 | getShort | +| file://:0:0:0:0 | getShortAcquire | +| file://:0:0:0:0 | getShortOpaque | +| file://:0:0:0:0 | getShortUnaligned | +| file://:0:0:0:0 | getShortUnaligned | +| file://:0:0:0:0 | getShortVolatile | +| file://:0:0:0:0 | getSignature | +| file://:0:0:0:0 | getSignature | +| file://:0:0:0:0 | getSignature | +| file://:0:0:0:0 | getSignerCertPath | +| file://:0:0:0:0 | getSignerCertPath | +| file://:0:0:0:0 | getSigners | +| file://:0:0:0:0 | getSimpleName | +| file://:0:0:0:0 | getSize | +| file://:0:0:0:0 | getSize | +| file://:0:0:0:0 | getSize | +| file://:0:0:0:0 | getSize | +| file://:0:0:0:0 | getSize | +| file://:0:0:0:0 | getSize | +| file://:0:0:0:0 | getSize | +| file://:0:0:0:0 | getSlot | +| file://:0:0:0:0 | getSmallestMaximum | +| file://:0:0:0:0 | getSort | +| file://:0:0:0:0 | getSpecificationTitle | +| file://:0:0:0:0 | getSpecificationVendor | +| file://:0:0:0:0 | getSpecificationVersion | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStackTrace | +| file://:0:0:0:0 | getStandardOffset | +| file://:0:0:0:0 | getStandardOffset | +| file://:0:0:0:0 | getState | +| file://:0:0:0:0 | getState | +| file://:0:0:0:0 | getState | +| file://:0:0:0:0 | getState | +| file://:0:0:0:0 | getState | +| file://:0:0:0:0 | getState | +| file://:0:0:0:0 | getState | +| file://:0:0:0:0 | getStealCount | +| file://:0:0:0:0 | getStep | +| file://:0:0:0:0 | getStepArgument | +| file://:0:0:0:0 | getStringAt | +| file://:0:0:0:0 | getSubInterfaces | +| file://:0:0:0:0 | getSubject | +| file://:0:0:0:0 | getSum | +| file://:0:0:0:0 | getSum | +| file://:0:0:0:0 | getSum | +| file://:0:0:0:0 | getSuperDesc | +| file://:0:0:0:0 | getSuperInterfaces | +| file://:0:0:0:0 | getSuperName | +| file://:0:0:0:0 | getSuperclass | +| file://:0:0:0:0 | getSuperclass | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSuppressed | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSurplusQueuedTaskCount | +| file://:0:0:0:0 | getSystemClassLoader | +| file://:0:0:0:0 | getSystemResource | +| file://:0:0:0:0 | getSystemResourceAsStream | +| file://:0:0:0:0 | getSystemResources | +| file://:0:0:0:0 | getTable | +| file://:0:0:0:0 | getTag | +| file://:0:0:0:0 | getTagAt | +| file://:0:0:0:0 | getTarget | +| file://:0:0:0:0 | getTargetVolatile | +| file://:0:0:0:0 | getTemporal | +| file://:0:0:0:0 | getThreadGroup | +| file://:0:0:0:0 | getThreadGroup | +| file://:0:0:0:0 | getThreadGroup | +| file://:0:0:0:0 | getThreads | +| file://:0:0:0:0 | getThreads | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getThrowableException | +| file://:0:0:0:0 | getTime | +| file://:0:0:0:0 | getTimeDefinition | +| file://:0:0:0:0 | getTimestamp | +| file://:0:0:0:0 | getTimestamp | +| file://:0:0:0:0 | getTimezoneOffset | +| file://:0:0:0:0 | getTotalSeconds | +| file://:0:0:0:0 | getTotalSpace | +| file://:0:0:0:0 | getTotalSpace | +| file://:0:0:0:0 | getTransition | +| file://:0:0:0:0 | getTransitionRules | +| file://:0:0:0:0 | getTransitions | +| file://:0:0:0:0 | getTree | +| file://:0:0:0:0 | getTree | +| file://:0:0:0:0 | getTree | +| file://:0:0:0:0 | getTree | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getType | +| file://:0:0:0:0 | getTypeAnnotationBytes | +| file://:0:0:0:0 | getTypeAnnotationBytes | +| file://:0:0:0:0 | getTypeAnnotationBytes | +| file://:0:0:0:0 | getTypeAnnotationBytes0 | +| file://:0:0:0:0 | getTypeAnnotationBytes0 | +| file://:0:0:0:0 | getTypeAnnotationBytes0 | +| file://:0:0:0:0 | getTypeArguments | +| file://:0:0:0:0 | getTypeCode | +| file://:0:0:0:0 | getTypeName | +| file://:0:0:0:0 | getTypeName | +| file://:0:0:0:0 | getTypeName | +| file://:0:0:0:0 | getTypeName | +| file://:0:0:0:0 | getTypeName | +| file://:0:0:0:0 | getTypeParameters | +| file://:0:0:0:0 | getTypeParameters | +| file://:0:0:0:0 | getTypeParameters | +| file://:0:0:0:0 | getTypeParameters | +| file://:0:0:0:0 | getTypeParameters | +| file://:0:0:0:0 | getTypeParameters | +| file://:0:0:0:0 | getTypeParameters | +| file://:0:0:0:0 | getTypeParameters | +| file://:0:0:0:0 | getTypeString | +| file://:0:0:0:0 | getURL | +| file://:0:0:0:0 | getURLStreamHandler | +| file://:0:0:0:0 | getUTF8At | +| file://:0:0:0:0 | getUnallocatedSpace | +| file://:0:0:0:0 | getUncaughtExceptionHandler | +| file://:0:0:0:0 | getUncaughtExceptionHandler | +| file://:0:0:0:0 | getUncaughtExceptionHandler | +| file://:0:0:0:0 | getUncaughtExceptionHandler | +| file://:0:0:0:0 | getUnchecked | +| file://:0:0:0:0 | getUncompressedObject | +| file://:0:0:0:0 | getUnicodeLocaleAttributes | +| file://:0:0:0:0 | getUnicodeLocaleAttributes | +| file://:0:0:0:0 | getUnicodeLocaleKeys | +| file://:0:0:0:0 | getUnicodeLocaleKeys | +| file://:0:0:0:0 | getUnicodeLocaleType | +| file://:0:0:0:0 | getUnicodeLocaleType | +| file://:0:0:0:0 | getUnits | +| file://:0:0:0:0 | getUnits | +| file://:0:0:0:0 | getUnits | +| file://:0:0:0:0 | getUnits | +| file://:0:0:0:0 | getUnnamedModule | +| file://:0:0:0:0 | getUnsafe | +| file://:0:0:0:0 | getUpperBounds | +| file://:0:0:0:0 | getUpperBounds | +| file://:0:0:0:0 | getUsableSpace | +| file://:0:0:0:0 | getUsableSpace | +| file://:0:0:0:0 | getUseCaches | +| file://:0:0:0:0 | getUserInfo | +| file://:0:0:0:0 | getUserInfo | +| file://:0:0:0:0 | getUserPrincipalLookupService | +| file://:0:0:0:0 | getValidOffsets | +| file://:0:0:0:0 | getValidOffsets | +| file://:0:0:0:0 | getValue | +| file://:0:0:0:0 | getValue | +| file://:0:0:0:0 | getValue | +| file://:0:0:0:0 | getValue | +| file://:0:0:0:0 | getValue | +| file://:0:0:0:0 | getValue | +| file://:0:0:0:0 | getValue | +| file://:0:0:0:0 | getValue | +| file://:0:0:0:0 | getValue | +| file://:0:0:0:0 | getValue | +| file://:0:0:0:0 | getValue | +| file://:0:0:0:0 | getVariant | +| file://:0:0:0:0 | getVariant | +| file://:0:0:0:0 | getVersion | +| file://:0:0:0:0 | getVersionStr | +| file://:0:0:0:0 | getVolatile | +| file://:0:0:0:0 | getWaitQueueLength | +| file://:0:0:0:0 | getWaitQueueLength | +| file://:0:0:0:0 | getWaitQueueLength | +| file://:0:0:0:0 | getWaitQueueLength | +| file://:0:0:0:0 | getWaitQueueLength | +| file://:0:0:0:0 | getWaitQueueLength | +| file://:0:0:0:0 | getWaitQueueLength | +| file://:0:0:0:0 | getWaitingThreads | +| file://:0:0:0:0 | getWaitingThreads | +| file://:0:0:0:0 | getWaitingThreads | +| file://:0:0:0:0 | getWaitingThreads | +| file://:0:0:0:0 | getWaitingThreads | +| file://:0:0:0:0 | getWaitingThreads | +| file://:0:0:0:0 | getWaitingThreads | +| file://:0:0:0:0 | getWeight | +| file://:0:0:0:0 | getYear | +| file://:0:0:0:0 | getYear | +| file://:0:0:0:0 | getYear | +| file://:0:0:0:0 | getYear | +| file://:0:0:0:0 | getYear | +| file://:0:0:0:0 | getYears | +| file://:0:0:0:0 | getZeroDigit | +| file://:0:0:0:0 | getZone | +| file://:0:0:0:0 | getZone | +| file://:0:0:0:0 | getZone | +| file://:0:0:0:0 | getZone | +| file://:0:0:0:0 | getZone | +| file://:0:0:0:0 | getZone | +| file://:0:0:0:0 | getZone | +| file://:0:0:0:0 | getZone | +| file://:0:0:0:0 | getter | +| file://:0:0:0:0 | getter | +| file://:0:0:0:0 | getterFunction | +| file://:0:0:0:0 | getterFunction | +| file://:0:0:0:0 | getterFunctions | +| file://:0:0:0:0 | getterFunctions | +| file://:0:0:0:0 | getters | +| file://:0:0:0:0 | getters | +| file://:0:0:0:0 | growArray | +| file://:0:0:0:0 | guessContentTypeFromName | +| file://:0:0:0:0 | guessContentTypeFromStream | +| file://:0:0:0:0 | handleParameterNumberMismatch | +| file://:0:0:0:0 | handleParameterNumberMismatch | +| file://:0:0:0:0 | handleParameterNumberMismatch | +| file://:0:0:0:0 | hasArray | +| file://:0:0:0:0 | hasArray | +| file://:0:0:0:0 | hasArray | +| file://:0:0:0:0 | hasArray | +| file://:0:0:0:0 | hasArray | +| file://:0:0:0:0 | hasArray | +| file://:0:0:0:0 | hasArray | +| file://:0:0:0:0 | hasArray | +| file://:0:0:0:0 | hasArray | +| file://:0:0:0:0 | hasBlockExternalData | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasCharacteristics | +| file://:0:0:0:0 | hasContended | +| file://:0:0:0:0 | hasContended | +| file://:0:0:0:0 | hasContended | +| file://:0:0:0:0 | hasContended | +| file://:0:0:0:0 | hasExtensions | +| file://:0:0:0:0 | hasGenericInformation | +| file://:0:0:0:0 | hasGenericInformation | +| file://:0:0:0:0 | hasGenericInformation | +| file://:0:0:0:0 | hasLocalsOperandsOption | +| file://:0:0:0:0 | hasLongPrimitives | +| file://:0:0:0:0 | hasMoreElements | +| file://:0:0:0:0 | hasMoreElements | +| file://:0:0:0:0 | hasMoreElements | +| file://:0:0:0:0 | hasMoreElements | +| file://:0:0:0:0 | hasMoreElements | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNext | +| file://:0:0:0:0 | hasNonVoidPrimitives | +| file://:0:0:0:0 | hasOption | +| file://:0:0:0:0 | hasPrevious | +| file://:0:0:0:0 | hasPrevious | +| file://:0:0:0:0 | hasPrevious | +| file://:0:0:0:0 | hasPrimitives | +| file://:0:0:0:0 | hasPrimitives | +| file://:0:0:0:0 | hasQueuedPredecessors | +| file://:0:0:0:0 | hasQueuedPredecessors | +| file://:0:0:0:0 | hasQueuedPredecessors | +| file://:0:0:0:0 | hasQueuedPredecessors | +| file://:0:0:0:0 | hasQueuedSubmissions | +| file://:0:0:0:0 | hasQueuedThread | +| file://:0:0:0:0 | hasQueuedThread | +| file://:0:0:0:0 | hasQueuedThreads | +| file://:0:0:0:0 | hasQueuedThreads | +| file://:0:0:0:0 | hasQueuedThreads | +| file://:0:0:0:0 | hasQueuedThreads | +| file://:0:0:0:0 | hasQueuedThreads | +| file://:0:0:0:0 | hasQueuedThreads | +| file://:0:0:0:0 | hasReadObjectMethod | +| file://:0:0:0:0 | hasReadObjectNoDataMethod | +| file://:0:0:0:0 | hasReadResolveMethod | +| file://:0:0:0:0 | hasRealParameterData | +| file://:0:0:0:0 | hasRealParameterData | +| file://:0:0:0:0 | hasRealParameterData | +| file://:0:0:0:0 | hasReceiverTypeDispatch | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasReferencePendingList | +| file://:0:0:0:0 | hasRemaining | +| file://:0:0:0:0 | hasRemaining | +| file://:0:0:0:0 | hasRemaining | +| file://:0:0:0:0 | hasRemaining | +| file://:0:0:0:0 | hasRemaining | +| file://:0:0:0:0 | hasRemaining | +| file://:0:0:0:0 | hasRemaining | +| file://:0:0:0:0 | hasRemaining | +| file://:0:0:0:0 | hasRemaining | +| file://:0:0:0:0 | hasStaticInitializerForSerialization | +| file://:0:0:0:0 | hasWaiters | +| file://:0:0:0:0 | hasWaiters | +| file://:0:0:0:0 | hasWaiters | +| file://:0:0:0:0 | hasWaiters | +| file://:0:0:0:0 | hasWaiters | +| file://:0:0:0:0 | hasWaiters | +| file://:0:0:0:0 | hasWaiters | +| file://:0:0:0:0 | hasWrappers | +| file://:0:0:0:0 | hasWriteObjectData | +| file://:0:0:0:0 | hasWriteObjectMethod | +| file://:0:0:0:0 | hasWriteReplaceMethod | +| file://:0:0:0:0 | hash | +| file://:0:0:0:0 | hash | | file://:0:0:0:0 | hashCode | | file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCode | +| file://:0:0:0:0 | hashCodeRange | +| file://:0:0:0:0 | headMap | +| file://:0:0:0:0 | helpAsyncBlocker | +| file://:0:0:0:0 | helpAsyncBlocker | +| file://:0:0:0:0 | helpCC | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpComplete | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpExpungeStaleExceptions | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiesce | +| file://:0:0:0:0 | helpQuiescePool | +| file://:0:0:0:0 | helpTransfer | +| file://:0:0:0:0 | highSurrogate | +| file://:0:0:0:0 | highestOneBit | +| file://:0:0:0:0 | highestOneBit | +| file://:0:0:0:0 | holder | +| file://:0:0:0:0 | holdsLock | +| file://:0:0:0:0 | holdsLock | +| file://:0:0:0:0 | holdsLock | +| file://:0:0:0:0 | hostsEqual | +| file://:0:0:0:0 | hugeCapacity | +| file://:0:0:0:0 | hugeCapacity | +| file://:0:0:0:0 | hugeCapacity | +| file://:0:0:0:0 | hugeCapacity | +| file://:0:0:0:0 | hugeCapacity | +| file://:0:0:0:0 | identity | +| file://:0:0:0:0 | identity | +| file://:0:0:0:0 | identity | +| file://:0:0:0:0 | identity | +| file://:0:0:0:0 | identity | +| file://:0:0:0:0 | identity | +| file://:0:0:0:0 | identityForm | +| file://:0:0:0:0 | ifPresent | +| file://:0:0:0:0 | ifPresent | +| file://:0:0:0:0 | ifPresent | +| file://:0:0:0:0 | ifPresent | +| file://:0:0:0:0 | ifPresentOrElse | +| file://:0:0:0:0 | ifPresentOrElse | +| file://:0:0:0:0 | ifPresentOrElse | +| file://:0:0:0:0 | ifPresentOrElse | +| file://:0:0:0:0 | implAddExports | +| file://:0:0:0:0 | implAddExports | +| file://:0:0:0:0 | implAddExportsNoSync | +| file://:0:0:0:0 | implAddExportsNoSync | +| file://:0:0:0:0 | implAddExportsToAllUnnamed | +| file://:0:0:0:0 | implAddOpens | +| file://:0:0:0:0 | implAddOpens | +| file://:0:0:0:0 | implAddOpensToAllUnnamed | +| file://:0:0:0:0 | implAddOpensToAllUnnamed | +| file://:0:0:0:0 | implAddReads | +| file://:0:0:0:0 | implAddReadsAllUnnamed | +| file://:0:0:0:0 | implAddReadsNoSync | +| file://:0:0:0:0 | implAddUses | +| file://:0:0:0:0 | implCloseChannel | +| file://:0:0:0:0 | implCloseChannel | +| file://:0:0:0:0 | implFlush | +| file://:0:0:0:0 | implFlush | +| file://:0:0:0:0 | implOnMalformedInput | +| file://:0:0:0:0 | implOnMalformedInput | +| file://:0:0:0:0 | implOnUnmappableCharacter | +| file://:0:0:0:0 | implOnUnmappableCharacter | +| file://:0:0:0:0 | implReplaceWith | +| file://:0:0:0:0 | implReplaceWith | +| file://:0:0:0:0 | implReset | +| file://:0:0:0:0 | implReset | +| file://:0:0:0:0 | implies | +| file://:0:0:0:0 | implies | +| file://:0:0:0:0 | implies | +| file://:0:0:0:0 | implies | +| file://:0:0:0:0 | implies | +| file://:0:0:0:0 | implies | +| file://:0:0:0:0 | implies | +| file://:0:0:0:0 | implies | +| file://:0:0:0:0 | implies | +| file://:0:0:0:0 | implies | +| file://:0:0:0:0 | implies | +| file://:0:0:0:0 | impliesCreateAccessControlContext | +| file://:0:0:0:0 | impliesWithAltFilePerm | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inForkJoinPool | +| file://:0:0:0:0 | inSameSubroutine | +| file://:0:0:0:0 | inSubroutine | +| file://:0:0:0:0 | inc | +| file://:0:0:0:0 | inc | +| file://:0:0:0:0 | inc | +| file://:0:0:0:0 | inc | +| file://:0:0:0:0 | incrementAndGet | +| file://:0:0:0:0 | index | +| file://:0:0:0:0 | indexFor | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOf | +| file://:0:0:0:0 | indexOfRange | +| file://:0:0:0:0 | inetAddresses | +| file://:0:0:0:0 | inflate | +| file://:0:0:0:0 | inflate | +| file://:0:0:0:0 | inflationThreshold | +| file://:0:0:0:0 | init | +| file://:0:0:0:0 | init | +| file://:0:0:0:0 | init | +| file://:0:0:0:0 | init | +| file://:0:0:0:0 | initBytes | +| file://:0:0:0:0 | initBytes | +| file://:0:0:0:0 | initBytes | +| file://:0:0:0:0 | initCache | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initCause | +| file://:0:0:0:0 | initIndex | +| file://:0:0:0:0 | initInputFrame | +| file://:0:0:0:0 | initLibraryPaths | +| file://:0:0:0:0 | initNonProxy | +| file://:0:0:0:0 | initProxy | +| file://:0:0:0:0 | initResolved | +| file://:0:0:0:0 | initSystemClassLoader | +| file://:0:0:0:0 | initialValue | +| file://:0:0:0:0 | initialValue | +| file://:0:0:0:0 | initializeSyncQueue | +| file://:0:0:0:0 | initializeSyncQueue | +| file://:0:0:0:0 | initializeSyncQueue | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insert | +| file://:0:0:0:0 | insertParameterTypes | +| file://:0:0:0:0 | insertParameterTypes | +| file://:0:0:0:0 | installedProviders | +| file://:0:0:0:0 | instant | +| file://:0:0:0:0 | instant | +| file://:0:0:0:0 | instant | +| file://:0:0:0:0 | instant | +| file://:0:0:0:0 | instant | +| file://:0:0:0:0 | intValue | +| file://:0:0:0:0 | intValueExact | +| file://:0:0:0:0 | intern | +| file://:0:0:0:0 | internArgument | +| file://:0:0:0:0 | internArguments | +| file://:0:0:0:0 | internalCallerClass | +| file://:0:0:0:0 | internalCallerClass | +| file://:0:0:0:0 | internalForm | +| file://:0:0:0:0 | internalForm | +| file://:0:0:0:0 | internalMemberName | +| file://:0:0:0:0 | internalMemberName | +| file://:0:0:0:0 | internalNextDouble | +| file://:0:0:0:0 | internalNextInt | +| file://:0:0:0:0 | internalNextLong | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalPropagateException | +| file://:0:0:0:0 | internalProperties | +| file://:0:0:0:0 | internalProperties | +| file://:0:0:0:0 | internalValues | +| file://:0:0:0:0 | internalValues | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | internalWait | +| file://:0:0:0:0 | interpretName | +| file://:0:0:0:0 | interpretWithArguments | +| file://:0:0:0:0 | interpretWithArgumentsTracing | +| file://:0:0:0:0 | interrupt | +| file://:0:0:0:0 | interrupt | +| file://:0:0:0:0 | interrupt | +| file://:0:0:0:0 | interrupt | +| file://:0:0:0:0 | interrupt | +| file://:0:0:0:0 | interrupt0 | +| file://:0:0:0:0 | interrupt0 | +| file://:0:0:0:0 | interrupted | +| file://:0:0:0:0 | interrupted | +| file://:0:0:0:0 | interrupted | +| file://:0:0:0:0 | intrinsicName | +| file://:0:0:0:0 | intrinsicName | +| file://:0:0:0:0 | intrinsicName | +| file://:0:0:0:0 | ints | +| file://:0:0:0:0 | ints | +| file://:0:0:0:0 | ints | +| file://:0:0:0:0 | ints | +| file://:0:0:0:0 | inv | +| file://:0:0:0:0 | inv | +| file://:0:0:0:0 | invocationHandlerReturnType | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invoke | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAll | +| file://:0:0:0:0 | invokeAny | +| file://:0:0:0:0 | invokeAny | +| file://:0:0:0:0 | invokeAny | +| file://:0:0:0:0 | invokeAny | +| file://:0:0:0:0 | invokeAny | +| file://:0:0:0:0 | invokeAny | +| file://:0:0:0:0 | invokeBasic | +| file://:0:0:0:0 | invokeBasic | +| file://:0:0:0:0 | invokeBasicMethod | +| file://:0:0:0:0 | invokeExact | +| file://:0:0:0:0 | invokeExact | +| file://:0:0:0:0 | invokeHandleForm | +| file://:0:0:0:0 | invokeReadObject | +| file://:0:0:0:0 | invokeReadObjectNoData | +| file://:0:0:0:0 | invokeReadResolve | +| file://:0:0:0:0 | invokeWithArguments | +| file://:0:0:0:0 | invokeWithArguments | +| file://:0:0:0:0 | invokeWithArguments | +| file://:0:0:0:0 | invokeWithArguments | +| file://:0:0:0:0 | invokeWithArguments | +| file://:0:0:0:0 | invokeWithArgumentsTracing | +| file://:0:0:0:0 | invokeWriteObject | +| file://:0:0:0:0 | invokeWriteReplace | +| file://:0:0:0:0 | invokerType | +| file://:0:0:0:0 | invokers | +| file://:0:0:0:0 | isAbsolute | +| file://:0:0:0:0 | isAbsolute | +| file://:0:0:0:0 | isAbsolute | +| file://:0:0:0:0 | isAbstract | +| file://:0:0:0:0 | isAccessModeSupported | +| file://:0:0:0:0 | isAccessible | +| file://:0:0:0:0 | isAccessible | +| file://:0:0:0:0 | isAccessible | +| file://:0:0:0:0 | isAccessible | +| file://:0:0:0:0 | isAccessible | +| file://:0:0:0:0 | isAccessibleFrom | +| file://:0:0:0:0 | isAfter | +| file://:0:0:0:0 | isAfter | +| file://:0:0:0:0 | isAfter | +| file://:0:0:0:0 | isAfter | +| file://:0:0:0:0 | isAfter | +| file://:0:0:0:0 | isAfter | +| file://:0:0:0:0 | isAfter | +| file://:0:0:0:0 | isAfter | +| file://:0:0:0:0 | isAfter | +| file://:0:0:0:0 | isAfter | +| file://:0:0:0:0 | isAlive | +| file://:0:0:0:0 | isAlive | +| file://:0:0:0:0 | isAlive | +| file://:0:0:0:0 | isAlphabetic | +| file://:0:0:0:0 | isAncestor | +| file://:0:0:0:0 | isAnnotation | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnnotationPresent | +| file://:0:0:0:0 | isAnonymousClass | +| file://:0:0:0:0 | isAnyLocalAddress | +| file://:0:0:0:0 | isApparentlyUnblocked | +| file://:0:0:0:0 | isArgBasicTypeChar | +| file://:0:0:0:0 | isArray | +| file://:0:0:0:0 | isAssignableFrom | +| file://:0:0:0:0 | isAuthorized | +| file://:0:0:0:0 | isAutoDetecting | +| file://:0:0:0:0 | isAutomatic | +| file://:0:0:0:0 | isBasicTypeChar | +| file://:0:0:0:0 | isBefore | +| file://:0:0:0:0 | isBefore | +| file://:0:0:0:0 | isBefore | +| file://:0:0:0:0 | isBefore | +| file://:0:0:0:0 | isBefore | +| file://:0:0:0:0 | isBefore | +| file://:0:0:0:0 | isBefore | +| file://:0:0:0:0 | isBefore | +| file://:0:0:0:0 | isBefore | +| file://:0:0:0:0 | isBefore | +| file://:0:0:0:0 | isBigEndian | +| file://:0:0:0:0 | isBlank | +| file://:0:0:0:0 | isBmpCodePoint | +| file://:0:0:0:0 | isBridge | +| file://:0:0:0:0 | isBridge | +| file://:0:0:0:0 | isBuiltinStreamHandler | +| file://:0:0:0:0 | isCCLOverridden | +| file://:0:0:0:0 | isCCLOverridden | +| file://:0:0:0:0 | isCallerSensitive | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCancelled | +| file://:0:0:0:0 | isCaseSensitive | +| file://:0:0:0:0 | isCharsetDetected | +| file://:0:0:0:0 | isCodeAttribute | +| file://:0:0:0:0 | isCodeAttribute | +| file://:0:0:0:0 | isCodeAttribute | +| file://:0:0:0:0 | isCompatibleWith | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedAbnormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isCompletedNormally | +| file://:0:0:0:0 | isConfigured | +| file://:0:0:0:0 | isConstantZero | +| file://:0:0:0:0 | isConstantZero | +| file://:0:0:0:0 | isConstructor | +| file://:0:0:0:0 | isConvertibleFrom | +| file://:0:0:0:0 | isConvertibleTo | +| file://:0:0:0:0 | isDaemon | +| file://:0:0:0:0 | isDaemon | +| file://:0:0:0:0 | isDaemon | +| file://:0:0:0:0 | isDaemon | +| file://:0:0:0:0 | isDateBased | +| file://:0:0:0:0 | isDateBased | +| file://:0:0:0:0 | isDateBased | +| file://:0:0:0:0 | isDateBased | +| file://:0:0:0:0 | isDaylightSavings | +| file://:0:0:0:0 | isDefault | +| file://:0:0:0:0 | isDefined | +| file://:0:0:0:0 | isDefined | +| file://:0:0:0:0 | isDestroyed | +| file://:0:0:0:0 | isDigit | +| file://:0:0:0:0 | isDigit | +| file://:0:0:0:0 | isDirect | +| file://:0:0:0:0 | isDirect | +| file://:0:0:0:0 | isDirect | +| file://:0:0:0:0 | isDirect | +| file://:0:0:0:0 | isDirect | +| file://:0:0:0:0 | isDirect | +| file://:0:0:0:0 | isDirect | +| file://:0:0:0:0 | isDirect | +| file://:0:0:0:0 | isDirect | +| file://:0:0:0:0 | isDirectory | +| file://:0:0:0:0 | isDirectory | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDone | +| file://:0:0:0:0 | isDoubleWord | +| file://:0:0:0:0 | isDurationEstimated | +| file://:0:0:0:0 | isDurationEstimated | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEmpty | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnqueued | +| file://:0:0:0:0 | isEnum | +| file://:0:0:0:0 | isEnum | +| file://:0:0:0:0 | isEnumConstant | +| file://:0:0:0:0 | isEqual | +| file://:0:0:0:0 | isEqual | +| file://:0:0:0:0 | isEqual | +| file://:0:0:0:0 | isEqual | +| file://:0:0:0:0 | isEqual | +| file://:0:0:0:0 | isEqual | +| file://:0:0:0:0 | isEqual | +| file://:0:0:0:0 | isEqual | +| file://:0:0:0:0 | isEqual | +| file://:0:0:0:0 | isEqualTo | +| file://:0:0:0:0 | isError | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExceptionalStatus | +| file://:0:0:0:0 | isExported | +| file://:0:0:0:0 | isExported | +| file://:0:0:0:0 | isExternalizable | +| file://:0:0:0:0 | isFair | +| file://:0:0:0:0 | isFair | +| file://:0:0:0:0 | isField | +| file://:0:0:0:0 | isFieldOrMethod | +| file://:0:0:0:0 | isFile | +| file://:0:0:0:0 | isFinal | +| file://:0:0:0:0 | isFinite | +| file://:0:0:0:0 | isFixed | +| file://:0:0:0:0 | isFixedOffset | +| file://:0:0:0:0 | isFloating | +| file://:0:0:0:0 | isGap | +| file://:0:0:0:0 | isGeneric | +| file://:0:0:0:0 | isGetter | +| file://:0:0:0:0 | isGuardWithCatch | +| file://:0:0:0:0 | isHeldByCurrentThread | +| file://:0:0:0:0 | isHeldByCurrentThread | +| file://:0:0:0:0 | isHeldExclusively | +| file://:0:0:0:0 | isHeldExclusively | +| file://:0:0:0:0 | isHeldExclusively | +| file://:0:0:0:0 | isHeldExclusively | +| file://:0:0:0:0 | isHidden | +| file://:0:0:0:0 | isHidden | +| file://:0:0:0:0 | isHighSurrogate | +| file://:0:0:0:0 | isISOControl | +| file://:0:0:0:0 | isISOControl | +| file://:0:0:0:0 | isIdentifierIgnorable | +| file://:0:0:0:0 | isIdentifierIgnorable | +| file://:0:0:0:0 | isIdentity | +| file://:0:0:0:0 | isIdeographic | +| file://:0:0:0:0 | isImplicit | +| file://:0:0:0:0 | isInfinite | +| file://:0:0:0:0 | isInfinite | +| file://:0:0:0:0 | isInherited | +| file://:0:0:0:0 | isInstance | +| file://:0:0:0:0 | isInstantiable | +| file://:0:0:0:0 | isIntValue | +| file://:0:0:0:0 | isIntegral | +| file://:0:0:0:0 | isInterface | +| file://:0:0:0:0 | isInterface | +| file://:0:0:0:0 | isInterrupted | +| file://:0:0:0:0 | isInterrupted | +| file://:0:0:0:0 | isInterrupted | +| file://:0:0:0:0 | isInterrupted | +| file://:0:0:0:0 | isInterrupted | +| file://:0:0:0:0 | isInvalid | +| file://:0:0:0:0 | isInvocable | +| file://:0:0:0:0 | isInvokeBasic | +| file://:0:0:0:0 | isInvokeSpecial | +| file://:0:0:0:0 | isInvokeSpecial | +| file://:0:0:0:0 | isJavaIdentifierPart | +| file://:0:0:0:0 | isJavaIdentifierPart | +| file://:0:0:0:0 | isJavaIdentifierStart | +| file://:0:0:0:0 | isJavaIdentifierStart | +| file://:0:0:0:0 | isJavaLetter | +| file://:0:0:0:0 | isJavaLetterOrDigit | +| file://:0:0:0:0 | isLatin1 | +| file://:0:0:0:0 | isLatin1 | +| file://:0:0:0:0 | isLatin1 | +| file://:0:0:0:0 | isLeapYear | +| file://:0:0:0:0 | isLeapYear | +| file://:0:0:0:0 | isLeapYear | +| file://:0:0:0:0 | isLeapYear | +| file://:0:0:0:0 | isLeapYear | +| file://:0:0:0:0 | isLegalReplacement | +| file://:0:0:0:0 | isLetter | +| file://:0:0:0:0 | isLetter | +| file://:0:0:0:0 | isLetterOrDigit | +| file://:0:0:0:0 | isLetterOrDigit | +| file://:0:0:0:0 | isLinkLocalAddress | +| file://:0:0:0:0 | isLinkerMethodInvoke | +| file://:0:0:0:0 | isListEmpty | +| file://:0:0:0:0 | isListEmpty | +| file://:0:0:0:0 | isListEmpty | +| file://:0:0:0:0 | isListEmpty | +| file://:0:0:0:0 | isListEmpty | +| file://:0:0:0:0 | isListEmpty | +| file://:0:0:0:0 | isListEmpty | +| file://:0:0:0:0 | isLive | +| file://:0:0:0:0 | isLive | +| file://:0:0:0:0 | isLoaded | +| file://:0:0:0:0 | isLocalClass | +| file://:0:0:0:0 | isLocked | +| file://:0:0:0:0 | isLocked | +| file://:0:0:0:0 | isLocked | +| file://:0:0:0:0 | isLocked | +| file://:0:0:0:0 | isLocked | +| file://:0:0:0:0 | isLoop | +| file://:0:0:0:0 | isLoopback | +| file://:0:0:0:0 | isLoopbackAddress | +| file://:0:0:0:0 | isLowSurrogate | +| file://:0:0:0:0 | isLowerCase | +| file://:0:0:0:0 | isLowerCase | +| file://:0:0:0:0 | isMCGlobal | +| file://:0:0:0:0 | isMCLinkLocal | +| file://:0:0:0:0 | isMCNodeLocal | +| file://:0:0:0:0 | isMCOrgLocal | +| file://:0:0:0:0 | isMCSiteLocal | +| file://:0:0:0:0 | isMalformed | +| file://:0:0:0:0 | isMemberClass | +| file://:0:0:0:0 | isMethod | +| file://:0:0:0:0 | isMethodHandleInvoke | +| file://:0:0:0:0 | isMethodHandleInvokeName | +| file://:0:0:0:0 | isMidnightEndOfDay | +| file://:0:0:0:0 | isMirrored | +| file://:0:0:0:0 | isMirrored | +| file://:0:0:0:0 | isMulticastAddress | +| file://:0:0:0:0 | isNaN | +| file://:0:0:0:0 | isNaN | +| file://:0:0:0:0 | isNamePresent | +| file://:0:0:0:0 | isNamed | +| file://:0:0:0:0 | isNative | +| file://:0:0:0:0 | isNativeMethod | +| file://:0:0:0:0 | isNativeMethod | +| file://:0:0:0:0 | isNativeMethod | +| file://:0:0:0:0 | isNegative | +| file://:0:0:0:0 | isNegative | +| file://:0:0:0:0 | isNegative | +| file://:0:0:0:0 | isNestmateOf | +| file://:0:0:0:0 | isNumeric | +| file://:0:0:0:0 | isOn | +| file://:0:0:0:0 | isOnSyncQueue | +| file://:0:0:0:0 | isOnSyncQueue | +| file://:0:0:0:0 | isOnSyncQueue | +| file://:0:0:0:0 | isOnSyncQueue | +| file://:0:0:0:0 | isOpaque | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOpen | +| file://:0:0:0:0 | isOther | +| file://:0:0:0:0 | isOther | +| file://:0:0:0:0 | isOverflow | +| file://:0:0:0:0 | isOverlap | +| file://:0:0:0:0 | isOverrideable | +| file://:0:0:0:0 | isOwnedBy | +| file://:0:0:0:0 | isPackage | +| file://:0:0:0:0 | isParallel | +| file://:0:0:0:0 | isParallel | +| file://:0:0:0:0 | isParallel | +| file://:0:0:0:0 | isParallel | +| file://:0:0:0:0 | isParallel | +| file://:0:0:0:0 | isParam | +| file://:0:0:0:0 | isPointToPoint | +| file://:0:0:0:0 | isPresent | +| file://:0:0:0:0 | isPresent | +| file://:0:0:0:0 | isPresent | +| file://:0:0:0:0 | isPresent | +| file://:0:0:0:0 | isPresent | +| file://:0:0:0:0 | isPresent | +| file://:0:0:0:0 | isPrimitive | +| file://:0:0:0:0 | isPrimitive | +| file://:0:0:0:0 | isPrimitiveType | +| file://:0:0:0:0 | isPrivate | +| file://:0:0:0:0 | isPrivileged | +| file://:0:0:0:0 | isProbablePrime | +| file://:0:0:0:0 | isPromise | +| file://:0:0:0:0 | isProtected | +| file://:0:0:0:0 | isProxy | +| file://:0:0:0:0 | isPublic | +| file://:0:0:0:0 | isQualified | +| file://:0:0:0:0 | isQualified | +| file://:0:0:0:0 | isQueued | +| file://:0:0:0:0 | isQueued | +| file://:0:0:0:0 | isQueued | +| file://:0:0:0:0 | isQueued | +| file://:0:0:0:0 | isQuiescent | +| file://:0:0:0:0 | isReachable | +| file://:0:0:0:0 | isReachable | +| file://:0:0:0:0 | isReachable | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReadOnly | +| file://:0:0:0:0 | isReflectivelyExported | +| file://:0:0:0:0 | isReflectivelyOpened | +| file://:0:0:0:0 | isRegistered | +| file://:0:0:0:0 | isRegisteredAsParallelCapable | +| file://:0:0:0:0 | isRegularFile | +| file://:0:0:0:0 | isReleasable | +| file://:0:0:0:0 | isResolved | +| file://:0:0:0:0 | isResolved | +| file://:0:0:0:0 | isResolved | +| file://:0:0:0:0 | isSameFile | +| file://:0:0:0:0 | isSealed | +| file://:0:0:0:0 | isSealed | +| file://:0:0:0:0 | isSelectAlternative | +| file://:0:0:0:0 | isSerializable | +| file://:0:0:0:0 | isSetter | +| file://:0:0:0:0 | isShared | +| file://:0:0:0:0 | isShared | +| file://:0:0:0:0 | isShutdown | +| file://:0:0:0:0 | isShutdown | +| file://:0:0:0:0 | isShutdown | +| file://:0:0:0:0 | isSigned | +| file://:0:0:0:0 | isSingleWord | +| file://:0:0:0:0 | isSiteLocalAddress | +| file://:0:0:0:0 | isSpace | +| file://:0:0:0:0 | isSpaceChar | +| file://:0:0:0:0 | isSpaceChar | +| file://:0:0:0:0 | isStandalone | +| file://:0:0:0:0 | isStatic | +| file://:0:0:0:0 | isStrict | +| file://:0:0:0:0 | isSubclassOf | +| file://:0:0:0:0 | isSubclassOf | +| file://:0:0:0:0 | isSubclassOf | +| file://:0:0:0:0 | isSubclassOf | +| file://:0:0:0:0 | isSubwordOrInt | +| file://:0:0:0:0 | isSupplementaryCodePoint | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupported | +| file://:0:0:0:0 | isSupportedBy | +| file://:0:0:0:0 | isSupportedBy | +| file://:0:0:0:0 | isSupportedBy | +| file://:0:0:0:0 | isSupportedBy | +| file://:0:0:0:0 | isSurrogate | +| file://:0:0:0:0 | isSurrogatePair | +| file://:0:0:0:0 | isSymbolicLink | +| file://:0:0:0:0 | isSynthetic | +| file://:0:0:0:0 | isSynthetic | +| file://:0:0:0:0 | isSynthetic | +| file://:0:0:0:0 | isSynthetic | +| file://:0:0:0:0 | isSynthetic | +| file://:0:0:0:0 | isSynthetic | +| file://:0:0:0:0 | isSynthetic | +| file://:0:0:0:0 | isSynthetic | +| file://:0:0:0:0 | isTerminated | +| file://:0:0:0:0 | isTerminated | +| file://:0:0:0:0 | isTerminated | +| file://:0:0:0:0 | isTerminating | +| file://:0:0:0:0 | isTimeBased | +| file://:0:0:0:0 | isTimeBased | +| file://:0:0:0:0 | isTimeBased | +| file://:0:0:0:0 | isTimeBased | +| file://:0:0:0:0 | isTitleCase | +| file://:0:0:0:0 | isTitleCase | +| file://:0:0:0:0 | isTryFinally | +| file://:0:0:0:0 | isType | +| file://:0:0:0:0 | isUnderflow | +| file://:0:0:0:0 | isUnicodeIdentifierPart | +| file://:0:0:0:0 | isUnicodeIdentifierPart | +| file://:0:0:0:0 | isUnicodeIdentifierStart | +| file://:0:0:0:0 | isUnicodeIdentifierStart | +| file://:0:0:0:0 | isUnknown | +| file://:0:0:0:0 | isUnknown | +| file://:0:0:0:0 | isUnknown | +| file://:0:0:0:0 | isUnmappable | +| file://:0:0:0:0 | isUnshared | +| file://:0:0:0:0 | isUnsigned | +| file://:0:0:0:0 | isUp | +| file://:0:0:0:0 | isUpperCase | +| file://:0:0:0:0 | isUpperCase | +| file://:0:0:0:0 | isValid | +| file://:0:0:0:0 | isValid | +| file://:0:0:0:0 | isValidCodePoint | +| file://:0:0:0:0 | isValidIntValue | +| file://:0:0:0:0 | isValidKey | +| file://:0:0:0:0 | isValidOffset | +| file://:0:0:0:0 | isValidOffset | +| file://:0:0:0:0 | isValidSignature | +| file://:0:0:0:0 | isValidUnicodeLocaleKey | +| file://:0:0:0:0 | isValidValue | +| file://:0:0:0:0 | isVarArgs | +| file://:0:0:0:0 | isVarArgs | +| file://:0:0:0:0 | isVarArgs | +| file://:0:0:0:0 | isVarArgs | +| file://:0:0:0:0 | isVarHandleMethodInvoke | +| file://:0:0:0:0 | isVarHandleMethodInvokeName | +| file://:0:0:0:0 | isVarargs | +| file://:0:0:0:0 | isVarargsCollector | +| file://:0:0:0:0 | isVarargsCollector | +| file://:0:0:0:0 | isVerbose | +| file://:0:0:0:0 | isViewableAs | +| file://:0:0:0:0 | isVirtual | +| file://:0:0:0:0 | isVolatile | +| file://:0:0:0:0 | isWhitespace | +| file://:0:0:0:0 | isWhitespace | +| file://:0:0:0:0 | isWrapperType | +| file://:0:0:0:0 | isZero | +| file://:0:0:0:0 | isZero | +| file://:0:0:0:0 | isZero | +| file://:0:0:0:0 | iterate | +| file://:0:0:0:0 | iterate | +| file://:0:0:0:0 | iterate | +| file://:0:0:0:0 | iterate | +| file://:0:0:0:0 | iterate | +| file://:0:0:0:0 | iterate | +| file://:0:0:0:0 | iterate | +| file://:0:0:0:0 | iterate | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | iterator | +| file://:0:0:0:0 | javaIncrement | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | join | +| file://:0:0:0:0 | key | +| file://:0:0:0:0 | key | +| file://:0:0:0:0 | keySet | +| file://:0:0:0:0 | keySet | +| file://:0:0:0:0 | keyType | +| file://:0:0:0:0 | keyType | +| file://:0:0:0:0 | keys | +| file://:0:0:0:0 | keys | +| file://:0:0:0:0 | keys | +| file://:0:0:0:0 | keys | +| file://:0:0:0:0 | keys | +| file://:0:0:0:0 | kind | +| file://:0:0:0:0 | lambdaFormEditor | +| file://:0:0:0:0 | lambdaName | +| file://:0:0:0:0 | last | +| file://:0:0:0:0 | last | +| file://:0:0:0:0 | lastAccessTime | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOf | +| file://:0:0:0:0 | lastIndexOfRange | +| file://:0:0:0:0 | lastKey | +| file://:0:0:0:0 | lastModified | +| file://:0:0:0:0 | lastModifiedTime | +| file://:0:0:0:0 | lastParameterType | +| file://:0:0:0:0 | lastUseIndex | +| file://:0:0:0:0 | lastUseIndex | +| file://:0:0:0:0 | layer | +| file://:0:0:0:0 | layers | +| file://:0:0:0:0 | layers | +| file://:0:0:0:0 | lazySet | +| file://:0:0:0:0 | lazySet | +| file://:0:0:0:0 | leadingReferenceParameter | +| file://:0:0:0:0 | leafCopy | +| file://:0:0:0:0 | leafCopyMethod | +| file://:0:0:0:0 | leafCopyMethod | +| file://:0:0:0:0 | length | +| file://:0:0:0:0 | length | +| file://:0:0:0:0 | length | +| file://:0:0:0:0 | length | +| file://:0:0:0:0 | lengthOfMonth | +| file://:0:0:0:0 | lengthOfMonth | +| file://:0:0:0:0 | lengthOfYear | +| file://:0:0:0:0 | lengthOfYear | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | limit | +| file://:0:0:0:0 | lines | +| file://:0:0:0:0 | linkCodeToSpeciesData | +| file://:0:0:0:0 | linkCodeToSpeciesData | +| file://:0:0:0:0 | linkSpeciesDataToCode | +| file://:0:0:0:0 | linkSpeciesDataToCode | +| file://:0:0:0:0 | linkToCallSiteMethod | +| file://:0:0:0:0 | linkToInterface | +| file://:0:0:0:0 | linkToInterface | +| file://:0:0:0:0 | linkToSpecial | +| file://:0:0:0:0 | linkToSpecial | +| file://:0:0:0:0 | linkToStatic | +| file://:0:0:0:0 | linkToStatic | +| file://:0:0:0:0 | linkToTargetMethod | +| file://:0:0:0:0 | linkToVirtual | +| file://:0:0:0:0 | linkToVirtual | +| file://:0:0:0:0 | list | +| file://:0:0:0:0 | list | +| file://:0:0:0:0 | list | +| file://:0:0:0:0 | list | +| file://:0:0:0:0 | list | +| file://:0:0:0:0 | list | +| file://:0:0:0:0 | list | +| file://:0:0:0:0 | list | +| file://:0:0:0:0 | list | +| file://:0:0:0:0 | listFiles | +| file://:0:0:0:0 | listFiles | +| file://:0:0:0:0 | listFiles | +| file://:0:0:0:0 | listIterator | +| file://:0:0:0:0 | listIterator | +| file://:0:0:0:0 | listIterator | +| file://:0:0:0:0 | listIterator | +| file://:0:0:0:0 | listIterator | +| file://:0:0:0:0 | listIterator | +| file://:0:0:0:0 | listIterator | +| file://:0:0:0:0 | listIterator | +| file://:0:0:0:0 | listIterator | +| file://:0:0:0:0 | listIterator | +| file://:0:0:0:0 | listRoots | +| file://:0:0:0:0 | load | +| file://:0:0:0:0 | load | +| file://:0:0:0:0 | load | +| file://:0:0:0:0 | load | +| file://:0:0:0:0 | load | +| file://:0:0:0:0 | load | +| file://:0:0:0:0 | load0 | +| file://:0:0:0:0 | load0 | +| file://:0:0:0:0 | loadClass | +| file://:0:0:0:0 | loadClass | +| file://:0:0:0:0 | loadClass | +| file://:0:0:0:0 | loadConvert | +| file://:0:0:0:0 | loadFence | +| file://:0:0:0:0 | loadFromCache | +| file://:0:0:0:0 | loadFromXML | +| file://:0:0:0:0 | loadFromXML | +| file://:0:0:0:0 | loadImpl | +| file://:0:0:0:0 | loadLibrary | +| file://:0:0:0:0 | loadLibrary | +| file://:0:0:0:0 | loadLoadFence | +| file://:0:0:0:0 | loadLoadFence | +| file://:0:0:0:0 | loadSpecies | +| file://:0:0:0:0 | loadSpecies | +| file://:0:0:0:0 | loadSpeciesDataFromCode | +| file://:0:0:0:0 | loadSpeciesDataFromCode | +| file://:0:0:0:0 | localDateTime | +| file://:0:0:0:0 | localDateTime | +| file://:0:0:0:0 | localDateTime | +| file://:0:0:0:0 | localizedBy | +| file://:0:0:0:0 | location | +| file://:0:0:0:0 | location | +| file://:0:0:0:0 | location | +| file://:0:0:0:0 | lock | +| file://:0:0:0:0 | lock | +| file://:0:0:0:0 | lock | +| file://:0:0:0:0 | lock | +| file://:0:0:0:0 | lock | +| file://:0:0:0:0 | lock | +| file://:0:0:0:0 | lock | +| file://:0:0:0:0 | lock | +| file://:0:0:0:0 | lock | +| file://:0:0:0:0 | lockInterruptibly | +| file://:0:0:0:0 | lockInterruptibly | +| file://:0:0:0:0 | lockInterruptibly | +| file://:0:0:0:0 | lockedPush | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | +| file://:0:0:0:0 | logicalAnd | +| file://:0:0:0:0 | logicalOr | +| file://:0:0:0:0 | logicalXor | +| file://:0:0:0:0 | longBitsToDouble | +| file://:0:0:0:0 | longPrimitiveParameterCount | +| file://:0:0:0:0 | longPrimitiveReturnCount | +| file://:0:0:0:0 | longValue | +| file://:0:0:0:0 | longValueExact | +| file://:0:0:0:0 | longs | +| file://:0:0:0:0 | longs | +| file://:0:0:0:0 | longs | +| file://:0:0:0:0 | longs | +| file://:0:0:0:0 | lookup | +| file://:0:0:0:0 | lookup | +| file://:0:0:0:0 | lookup | +| file://:0:0:0:0 | lookupAllHostAddr | +| file://:0:0:0:0 | lookupAny | +| file://:0:0:0:0 | lookupPrincipalByGroupName | +| file://:0:0:0:0 | lookupPrincipalByName | +| file://:0:0:0:0 | lookupTag | +| file://:0:0:0:0 | loopbackAddress | +| file://:0:0:0:0 | lowSurrogate | +| file://:0:0:0:0 | lowestOneBit | +| file://:0:0:0:0 | lowestOneBit | +| file://:0:0:0:0 | mainClass | +| file://:0:0:0:0 | mainClass | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | make | +| file://:0:0:0:0 | makeAccessException | +| file://:0:0:0:0 | makeAccessException | +| file://:0:0:0:0 | makeArray | +| file://:0:0:0:0 | makeArrayType | +| file://:0:0:0:0 | makeBool | +| file://:0:0:0:0 | makeByte | +| file://:0:0:0:0 | makeChar | +| file://:0:0:0:0 | makeDouble | +| file://:0:0:0:0 | makeDynamicInvoker | +| file://:0:0:0:0 | makeEntry | +| file://:0:0:0:0 | makeFactory | +| file://:0:0:0:0 | makeFactory | +| file://:0:0:0:0 | makeFloat | +| file://:0:0:0:0 | makeImpl | +| file://:0:0:0:0 | makeInt | +| file://:0:0:0:0 | makeLong | +| file://:0:0:0:0 | makeMethodHandleInvoke | +| file://:0:0:0:0 | makeMethodHandleInvoke | +| file://:0:0:0:0 | makeNamedType | +| file://:0:0:0:0 | makeNominalGetters | +| file://:0:0:0:0 | makeNominalGetters | +| file://:0:0:0:0 | makeParameterizedType | +| file://:0:0:0:0 | makeReinvoker | +| file://:0:0:0:0 | makeShort | +| file://:0:0:0:0 | makeSite | +| file://:0:0:0:0 | makeTypeVariable | +| file://:0:0:0:0 | makeVarHandleMethodInvoke | +| file://:0:0:0:0 | makeVarHandleMethodInvoke | +| file://:0:0:0:0 | makeVoid | +| file://:0:0:0:0 | makeWildcard | +| file://:0:0:0:0 | malformedForLength | +| file://:0:0:0:0 | malformedInputAction | +| file://:0:0:0:0 | malformedInputAction | +| file://:0:0:0:0 | managedBlock | +| file://:0:0:0:0 | map | +| file://:0:0:0:0 | map | +| file://:0:0:0:0 | map | +| file://:0:0:0:0 | map | +| file://:0:0:0:0 | map | +| file://:0:0:0:0 | map | +| file://:0:0:0:0 | mapEquivalents | +| file://:0:0:0:0 | mapToDouble | +| file://:0:0:0:0 | mapToDouble | +| file://:0:0:0:0 | mapToDouble | +| file://:0:0:0:0 | mapToInt | +| file://:0:0:0:0 | mapToInt | +| file://:0:0:0:0 | mapToInt | +| file://:0:0:0:0 | mapToLong | +| file://:0:0:0:0 | mapToLong | +| file://:0:0:0:0 | mapToLong | +| file://:0:0:0:0 | mapToObj | +| file://:0:0:0:0 | mapToObj | +| file://:0:0:0:0 | mapToObj | +| file://:0:0:0:0 | mappingCount | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | mark | +| file://:0:0:0:0 | markSupported | +| file://:0:0:0:0 | markSupported | +| file://:0:0:0:0 | markSupported | +| file://:0:0:0:0 | markValue | +| file://:0:0:0:0 | markValue | +| file://:0:0:0:0 | markValue | +| file://:0:0:0:0 | markValue | +| file://:0:0:0:0 | markValue | +| file://:0:0:0:0 | markValue | +| file://:0:0:0:0 | markValue | +| file://:0:0:0:0 | markValue | +| file://:0:0:0:0 | markValue | +| file://:0:0:0:0 | maskNull | +| file://:0:0:0:0 | match | +| file://:0:0:0:0 | matchCerts | +| file://:0:0:0:0 | matches | +| file://:0:0:0:0 | matches | +| file://:0:0:0:0 | max | +| file://:0:0:0:0 | max | +| file://:0:0:0:0 | max | +| file://:0:0:0:0 | max | +| file://:0:0:0:0 | max | +| file://:0:0:0:0 | max | +| file://:0:0:0:0 | max | +| file://:0:0:0:0 | max | +| file://:0:0:0:0 | maxBy | +| file://:0:0:0:0 | maxBytesPerChar | +| file://:0:0:0:0 | maxCharsPerByte | +| file://:0:0:0:0 | maxLength | +| file://:0:0:0:0 | maybeCustomize | +| file://:0:0:0:0 | member | +| file://:0:0:0:0 | memberDeclaringClassOrNull | +| file://:0:0:0:0 | memberDefaults | +| file://:0:0:0:0 | memberTypes | +| file://:0:0:0:0 | members | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | merge | +| file://:0:0:0:0 | metaType | +| file://:0:0:0:0 | metaType | +| file://:0:0:0:0 | methodHandleInvokeLinkerMethod | +| file://:0:0:0:0 | methodName | +| file://:0:0:0:0 | methodSig | +| file://:0:0:0:0 | methodSig | +| file://:0:0:0:0 | methodType | +| file://:0:0:0:0 | methodType | +| file://:0:0:0:0 | methodType | +| file://:0:0:0:0 | methodType | +| file://:0:0:0:0 | methodType | +| file://:0:0:0:0 | methodType | +| file://:0:0:0:0 | methodType | +| file://:0:0:0:0 | methodType | +| file://:0:0:0:0 | millis | +| file://:0:0:0:0 | millis | +| file://:0:0:0:0 | millis | +| file://:0:0:0:0 | millis | +| file://:0:0:0:0 | millis | +| file://:0:0:0:0 | min | +| file://:0:0:0:0 | min | +| file://:0:0:0:0 | min | +| file://:0:0:0:0 | min | +| file://:0:0:0:0 | min | +| file://:0:0:0:0 | min | +| file://:0:0:0:0 | min | +| file://:0:0:0:0 | min | +| file://:0:0:0:0 | minBy | +| file://:0:0:0:0 | minLength | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minus | +| file://:0:0:0:0 | minusDays | +| file://:0:0:0:0 | minusDays | +| file://:0:0:0:0 | minusDays | +| file://:0:0:0:0 | minusDays | +| file://:0:0:0:0 | minusDays | +| file://:0:0:0:0 | minusDays | +| file://:0:0:0:0 | minusHours | +| file://:0:0:0:0 | minusHours | +| file://:0:0:0:0 | minusHours | +| file://:0:0:0:0 | minusHours | +| file://:0:0:0:0 | minusHours | +| file://:0:0:0:0 | minusHours | +| file://:0:0:0:0 | minusMillis | +| file://:0:0:0:0 | minusMillis | +| file://:0:0:0:0 | minusMinutes | +| file://:0:0:0:0 | minusMinutes | +| file://:0:0:0:0 | minusMinutes | +| file://:0:0:0:0 | minusMinutes | +| file://:0:0:0:0 | minusMinutes | +| file://:0:0:0:0 | minusMinutes | +| file://:0:0:0:0 | minusMonths | +| file://:0:0:0:0 | minusMonths | +| file://:0:0:0:0 | minusMonths | +| file://:0:0:0:0 | minusMonths | +| file://:0:0:0:0 | minusMonths | +| file://:0:0:0:0 | minusNanos | +| file://:0:0:0:0 | minusNanos | +| file://:0:0:0:0 | minusNanos | +| file://:0:0:0:0 | minusNanos | +| file://:0:0:0:0 | minusNanos | +| file://:0:0:0:0 | minusNanos | +| file://:0:0:0:0 | minusNanos | +| file://:0:0:0:0 | minusSeconds | +| file://:0:0:0:0 | minusSeconds | +| file://:0:0:0:0 | minusSeconds | +| file://:0:0:0:0 | minusSeconds | +| file://:0:0:0:0 | minusSeconds | +| file://:0:0:0:0 | minusSeconds | +| file://:0:0:0:0 | minusSeconds | +| file://:0:0:0:0 | minusWeeks | +| file://:0:0:0:0 | minusWeeks | +| file://:0:0:0:0 | minusWeeks | +| file://:0:0:0:0 | minusWeeks | +| file://:0:0:0:0 | minusYears | +| file://:0:0:0:0 | minusYears | +| file://:0:0:0:0 | minusYears | +| file://:0:0:0:0 | minusYears | +| file://:0:0:0:0 | minusYears | +| file://:0:0:0:0 | mismatch | +| file://:0:0:0:0 | mismatch | +| file://:0:0:0:0 | mismatch | +| file://:0:0:0:0 | mismatch | +| file://:0:0:0:0 | mismatch | +| file://:0:0:0:0 | mismatch | +| file://:0:0:0:0 | mismatch | +| file://:0:0:0:0 | mismatch | +| file://:0:0:0:0 | mkdir | +| file://:0:0:0:0 | mkdirs | +| file://:0:0:0:0 | mod | +| file://:0:0:0:0 | modInverse | +| file://:0:0:0:0 | modPow | +| file://:0:0:0:0 | modifiers | +| file://:0:0:0:0 | modifiers | +| file://:0:0:0:0 | modifiers | +| file://:0:0:0:0 | modifiers | +| file://:0:0:0:0 | module | +| file://:0:0:0:0 | module | +| file://:0:0:0:0 | module | +| file://:0:0:0:0 | modules | +| file://:0:0:0:0 | modules | +| file://:0:0:0:0 | move | +| file://:0:0:0:0 | mulAdd | +| file://:0:0:0:0 | multipliedBy | +| file://:0:0:0:0 | multipliedBy | +| file://:0:0:0:0 | multipliedBy | +| file://:0:0:0:0 | multiply | +| file://:0:0:0:0 | multiply | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | name | +| file://:0:0:0:0 | nameRefsAreLegal | +| file://:0:0:0:0 | nativeOrder | +| file://:0:0:0:0 | naturalOrder | +| file://:0:0:0:0 | negate | +| file://:0:0:0:0 | negate | +| file://:0:0:0:0 | negate | +| file://:0:0:0:0 | negate | +| file://:0:0:0:0 | negate | +| file://:0:0:0:0 | negated | +| file://:0:0:0:0 | negated | +| file://:0:0:0:0 | negated | +| file://:0:0:0:0 | networkInterfaces | +| file://:0:0:0:0 | newAsynchronousFileChannel | +| file://:0:0:0:0 | newAutomaticModule | +| file://:0:0:0:0 | newByteChannel | +| file://:0:0:0:0 | newCapacity | +| file://:0:0:0:0 | newCapacity | +| file://:0:0:0:0 | newClass | +| file://:0:0:0:0 | newCondition | +| file://:0:0:0:0 | newCondition | +| file://:0:0:0:0 | newCondition | +| file://:0:0:0:0 | newCondition | +| file://:0:0:0:0 | newCondition | +| file://:0:0:0:0 | newCondition | +| file://:0:0:0:0 | newConst | +| file://:0:0:0:0 | newConstItem | +| file://:0:0:0:0 | newConstructor | +| file://:0:0:0:0 | newConstructor | +| file://:0:0:0:0 | newConstructorAccessor | +| file://:0:0:0:0 | newConstructorForExternalization | +| file://:0:0:0:0 | newConstructorForSerialization | +| file://:0:0:0:0 | newConstructorForSerialization | +| file://:0:0:0:0 | newDecoder | +| file://:0:0:0:0 | newDirectoryStream | +| file://:0:0:0:0 | newDouble | +| file://:0:0:0:0 | newEncoder | +| file://:0:0:0:0 | newField | +| file://:0:0:0:0 | newField | +| file://:0:0:0:0 | newField | +| file://:0:0:0:0 | newFieldAccessor | +| file://:0:0:0:0 | newFieldItem | +| file://:0:0:0:0 | newFileChannel | +| file://:0:0:0:0 | newFileSystem | +| file://:0:0:0:0 | newFileSystem | +| file://:0:0:0:0 | newFloat | +| file://:0:0:0:0 | newHandle | +| file://:0:0:0:0 | newHandle | +| file://:0:0:0:0 | newHandleItem | +| file://:0:0:0:0 | newIAE | +| file://:0:0:0:0 | newIndex | +| file://:0:0:0:0 | newInputStream | +| file://:0:0:0:0 | newInstance | +| file://:0:0:0:0 | newInstance | +| file://:0:0:0:0 | newInstance | +| file://:0:0:0:0 | newInstance | +| file://:0:0:0:0 | newInstance | +| file://:0:0:0:0 | newInstance | +| file://:0:0:0:0 | newInteger | +| file://:0:0:0:0 | newInvokeDynamic | +| file://:0:0:0:0 | newInvokeDynamicItem | +| file://:0:0:0:0 | newKeySet | +| file://:0:0:0:0 | newKeySet | +| file://:0:0:0:0 | newLine | +| file://:0:0:0:0 | newLong | +| file://:0:0:0:0 | newMethod | +| file://:0:0:0:0 | newMethod | +| file://:0:0:0:0 | newMethod | +| file://:0:0:0:0 | newMethodAccessor | +| file://:0:0:0:0 | newMethodItem | +| file://:0:0:0:0 | newMethodType | +| file://:0:0:0:0 | newModule | +| file://:0:0:0:0 | newModule | +| file://:0:0:0:0 | newModule | +| file://:0:0:0:0 | newNameType | +| file://:0:0:0:0 | newNameTypeItem | +| file://:0:0:0:0 | newOpenModule | +| file://:0:0:0:0 | newOptionalDataExceptionForSerialization | +| file://:0:0:0:0 | newOutputStream | +| file://:0:0:0:0 | newPackage | +| file://:0:0:0:0 | newPermissionCollection | +| file://:0:0:0:0 | newPermissionCollection | +| file://:0:0:0:0 | newPermissionCollection | +| file://:0:0:0:0 | newPermissionCollection | +| file://:0:0:0:0 | newPermissionCollection | +| file://:0:0:0:0 | newSpeciesData | +| file://:0:0:0:0 | newSpeciesData | +| file://:0:0:0:0 | newStringishItem | +| file://:0:0:0:0 | newTable | +| file://:0:0:0:0 | newTaskFor | +| file://:0:0:0:0 | newTaskFor | +| file://:0:0:0:0 | newTaskFor | +| file://:0:0:0:0 | newTaskFor | +| file://:0:0:0:0 | newThread | +| file://:0:0:0:0 | newThread | +| file://:0:0:0:0 | newThread | +| file://:0:0:0:0 | newUTF8 | +| file://:0:0:0:0 | newWatchService | +| file://:0:0:0:0 | newWrongMethodTypeException | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | next | +| file://:0:0:0:0 | nextBoolean | +| file://:0:0:0:0 | nextByte | +| file://:0:0:0:0 | nextBytes | +| file://:0:0:0:0 | nextChar | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextComplete | +| file://:0:0:0:0 | nextDouble | +| file://:0:0:0:0 | nextDouble | +| file://:0:0:0:0 | nextDouble | +| file://:0:0:0:0 | nextElement | +| file://:0:0:0:0 | nextElement | +| file://:0:0:0:0 | nextElement | +| file://:0:0:0:0 | nextFloat | +| file://:0:0:0:0 | nextFloat | +| file://:0:0:0:0 | nextGaussian | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextGetIndex | +| file://:0:0:0:0 | nextHashCode | +| file://:0:0:0:0 | nextIndex | +| file://:0:0:0:0 | nextIndex | +| file://:0:0:0:0 | nextIndex | +| file://:0:0:0:0 | nextInt | +| file://:0:0:0:0 | nextInt | +| file://:0:0:0:0 | nextInt | +| file://:0:0:0:0 | nextInt | +| file://:0:0:0:0 | nextLocalTask | +| file://:0:0:0:0 | nextLong | +| file://:0:0:0:0 | nextLong | +| file://:0:0:0:0 | nextLong | +| file://:0:0:0:0 | nextProbablePrime | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextPutIndex | +| file://:0:0:0:0 | nextShort | +| file://:0:0:0:0 | nextTaskFor | +| file://:0:0:0:0 | nextThreadID | +| file://:0:0:0:0 | nextThreadID | +| file://:0:0:0:0 | nextThreadNum | +| file://:0:0:0:0 | nextThreadNum | +| file://:0:0:0:0 | nextTransition | +| file://:0:0:0:0 | noneMatch | +| file://:0:0:0:0 | noneMatch | +| file://:0:0:0:0 | noneMatch | +| file://:0:0:0:0 | noneMatch | +| file://:0:0:0:0 | noneOf | +| file://:0:0:0:0 | nonfairTryAcquire | +| file://:0:0:0:0 | nonfairTryAcquire | +| file://:0:0:0:0 | nonfairTryAcquire | +| file://:0:0:0:0 | normalize | +| file://:0:0:0:0 | normalize | +| file://:0:0:0:0 | normalized | +| file://:0:0:0:0 | normalized | +| file://:0:0:0:0 | normalized | +| file://:0:0:0:0 | normalized | +| file://:0:0:0:0 | not | +| file://:0:0:0:0 | not | +| file://:0:0:0:0 | not | +| file://:0:0:0:0 | noteLoopLocalTypesForm | +| file://:0:0:0:0 | notify | +| file://:0:0:0:0 | notifyAll | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | now | +| file://:0:0:0:0 | nullInputStream | +| file://:0:0:0:0 | nullInputStream | +| file://:0:0:0:0 | nullOutputStream | +| file://:0:0:0:0 | nullOutputStream | +| file://:0:0:0:0 | nullOutputStream | +| file://:0:0:0:0 | nullOutputStream | +| file://:0:0:0:0 | nullReader | +| file://:0:0:0:0 | nullWriter | +| file://:0:0:0:0 | nullWriter | +| file://:0:0:0:0 | nullWriter | +| file://:0:0:0:0 | nullsFirst | +| file://:0:0:0:0 | nullsLast | +| file://:0:0:0:0 | numberOfLeadingZeros | +| file://:0:0:0:0 | numberOfLeadingZeros | +| file://:0:0:0:0 | numberOfTrailingZeros | +| file://:0:0:0:0 | numberOfTrailingZeros | +| file://:0:0:0:0 | objectFieldOffset | +| file://:0:0:0:0 | objectFieldOffset | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of | +| file://:0:0:0:0 | of0 | +| file://:0:0:0:0 | ofDays | +| file://:0:0:0:0 | ofDays | +| file://:0:0:0:0 | ofDefaultLocale | +| file://:0:0:0:0 | ofEntries | +| file://:0:0:0:0 | ofEpochDay | +| file://:0:0:0:0 | ofEpochMilli | +| file://:0:0:0:0 | ofEpochSecond | +| file://:0:0:0:0 | ofEpochSecond | +| file://:0:0:0:0 | ofEpochSecond | +| file://:0:0:0:0 | ofHours | +| file://:0:0:0:0 | ofHours | +| file://:0:0:0:0 | ofHoursMinutes | +| file://:0:0:0:0 | ofHoursMinutesSeconds | +| file://:0:0:0:0 | ofInstant | +| file://:0:0:0:0 | ofInstant | +| file://:0:0:0:0 | ofInstant | +| file://:0:0:0:0 | ofInstant | +| file://:0:0:0:0 | ofInstant | +| file://:0:0:0:0 | ofInstant | +| file://:0:0:0:0 | ofInstant | +| file://:0:0:0:0 | ofLocal | +| file://:0:0:0:0 | ofLocale | +| file://:0:0:0:0 | ofLocale | +| file://:0:0:0:0 | ofLocale | +| file://:0:0:0:0 | ofLocalizedDate | +| file://:0:0:0:0 | ofLocalizedDateTime | +| file://:0:0:0:0 | ofLocalizedDateTime | +| file://:0:0:0:0 | ofLocalizedTime | +| file://:0:0:0:0 | ofMillis | +| file://:0:0:0:0 | ofMinutes | +| file://:0:0:0:0 | ofMonths | +| file://:0:0:0:0 | ofNanoOfDay | +| file://:0:0:0:0 | ofNanos | +| file://:0:0:0:0 | ofNullable | +| file://:0:0:0:0 | ofNullable | +| file://:0:0:0:0 | ofOffset | +| file://:0:0:0:0 | ofOffset | +| file://:0:0:0:0 | ofPattern | +| file://:0:0:0:0 | ofPattern | +| file://:0:0:0:0 | ofSecondOfDay | +| file://:0:0:0:0 | ofSeconds | +| file://:0:0:0:0 | ofSeconds | +| file://:0:0:0:0 | ofStrict | +| file://:0:0:0:0 | ofSystem | +| file://:0:0:0:0 | ofTotalSeconds | +| file://:0:0:0:0 | ofWeeks | +| file://:0:0:0:0 | ofWithPrefix | +| file://:0:0:0:0 | ofYearDay | +| file://:0:0:0:0 | ofYears | +| file://:0:0:0:0 | offer | +| file://:0:0:0:0 | offer | +| file://:0:0:0:0 | offerFirst | +| file://:0:0:0:0 | offerLast | +| file://:0:0:0:0 | offset | +| file://:0:0:0:0 | offset | +| file://:0:0:0:0 | offset | +| file://:0:0:0:0 | offset | +| file://:0:0:0:0 | offset | +| file://:0:0:0:0 | offsetByCodePoints | +| file://:0:0:0:0 | offsetByCodePoints | +| file://:0:0:0:0 | offsetByCodePoints | +| file://:0:0:0:0 | offsetByCodePoints | +| file://:0:0:0:0 | offsetByCodePoints | +| file://:0:0:0:0 | offsetByCodePoints | +| file://:0:0:0:0 | offsetByCodePointsImpl | +| file://:0:0:0:0 | onClose | +| file://:0:0:0:0 | onClose | +| file://:0:0:0:0 | onClose | +| file://:0:0:0:0 | onClose | +| file://:0:0:0:0 | onClose | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onExceptionalCompletion | +| file://:0:0:0:0 | onMalformedInput | +| file://:0:0:0:0 | onMalformedInput | +| file://:0:0:0:0 | onSpinWait | +| file://:0:0:0:0 | onSpinWait | +| file://:0:0:0:0 | onSpinWait | +| file://:0:0:0:0 | onStart | +| file://:0:0:0:0 | onStart | +| file://:0:0:0:0 | onTermination | +| file://:0:0:0:0 | onTermination | +| file://:0:0:0:0 | onUnmappableCharacter | +| file://:0:0:0:0 | onUnmappableCharacter | +| file://:0:0:0:0 | open | +| file://:0:0:0:0 | open | +| file://:0:0:0:0 | open | +| file://:0:0:0:0 | open | +| file://:0:0:0:0 | open | +| file://:0:0:0:0 | open | +| file://:0:0:0:0 | openConnection | +| file://:0:0:0:0 | openConnection | +| file://:0:0:0:0 | openConnection | +| file://:0:0:0:0 | openConnection | +| file://:0:0:0:0 | openStream | +| file://:0:0:0:0 | opens | +| file://:0:0:0:0 | opens | +| file://:0:0:0:0 | opens | +| file://:0:0:0:0 | opens | +| file://:0:0:0:0 | opens | +| file://:0:0:0:0 | opens | +| file://:0:0:0:0 | optimize | +| file://:0:0:0:0 | or | +| file://:0:0:0:0 | or | +| file://:0:0:0:0 | or | +| file://:0:0:0:0 | or | +| file://:0:0:0:0 | or | +| file://:0:0:0:0 | or | +| file://:0:0:0:0 | or | +| file://:0:0:0:0 | or | +| file://:0:0:0:0 | or | +| file://:0:0:0:0 | orElse | +| file://:0:0:0:0 | orElse | +| file://:0:0:0:0 | orElse | +| file://:0:0:0:0 | orElse | +| file://:0:0:0:0 | orElseGet | +| file://:0:0:0:0 | orElseGet | +| file://:0:0:0:0 | orElseGet | +| file://:0:0:0:0 | orElseGet | +| file://:0:0:0:0 | orElseThrow | +| file://:0:0:0:0 | orElseThrow | +| file://:0:0:0:0 | orElseThrow | +| file://:0:0:0:0 | orElseThrow | +| file://:0:0:0:0 | orElseThrow | +| file://:0:0:0:0 | orElseThrow | +| file://:0:0:0:0 | orElseThrow | +| file://:0:0:0:0 | orElseThrow | +| file://:0:0:0:0 | order | +| file://:0:0:0:0 | order | +| file://:0:0:0:0 | order | +| file://:0:0:0:0 | order | +| file://:0:0:0:0 | order | +| file://:0:0:0:0 | order | +| file://:0:0:0:0 | order | +| file://:0:0:0:0 | order | +| file://:0:0:0:0 | order | +| file://:0:0:0:0 | order | +| file://:0:0:0:0 | ordinal | +| file://:0:0:0:0 | outer | +| file://:0:0:0:0 | outer | +| file://:0:0:0:0 | overlaps | +| file://:0:0:0:0 | owns | +| file://:0:0:0:0 | owns | +| file://:0:0:0:0 | owns | +| file://:0:0:0:0 | owns | +| file://:0:0:0:0 | packageName | +| file://:0:0:0:0 | packageName | +| file://:0:0:0:0 | packages | +| file://:0:0:0:0 | packages | +| file://:0:0:0:0 | packages | +| file://:0:0:0:0 | packages | +| file://:0:0:0:0 | pageSize | +| file://:0:0:0:0 | parallel | +| file://:0:0:0:0 | parallel | +| file://:0:0:0:0 | parallel | +| file://:0:0:0:0 | parallel | +| file://:0:0:0:0 | parallel | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | parallelStream | +| file://:0:0:0:0 | paramString | +| file://:0:0:0:0 | parameter | +| file://:0:0:0:0 | parameterArray | +| file://:0:0:0:0 | parameterConstraint | +| file://:0:0:0:0 | parameterCount | +| file://:0:0:0:0 | parameterCount | +| file://:0:0:0:0 | parameterList | +| file://:0:0:0:0 | parameterSlotCount | +| file://:0:0:0:0 | parameterSlotCount | +| file://:0:0:0:0 | parameterSlotDepth | +| file://:0:0:0:0 | parameterToArgSlot | +| file://:0:0:0:0 | parameterType | +| file://:0:0:0:0 | parameterType | +| file://:0:0:0:0 | parameterType | +| file://:0:0:0:0 | parentOf | +| file://:0:0:0:0 | parents | +| file://:0:0:0:0 | parents | +| file://:0:0:0:0 | park | +| file://:0:0:0:0 | parkAndCheckInterrupt | +| file://:0:0:0:0 | parkAndCheckInterrupt | +| file://:0:0:0:0 | parkAndCheckInterrupt | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parse | +| file://:0:0:0:0 | parseBest | +| file://:0:0:0:0 | parseBoolean | +| file://:0:0:0:0 | parseDouble | +| file://:0:0:0:0 | parseInt | +| file://:0:0:0:0 | parseInt | +| file://:0:0:0:0 | parseInt | +| file://:0:0:0:0 | parseLong | +| file://:0:0:0:0 | parseLong | +| file://:0:0:0:0 | parseLong | +| file://:0:0:0:0 | parseObject | +| file://:0:0:0:0 | parseObject | +| file://:0:0:0:0 | parseObject | +| file://:0:0:0:0 | parseObject | +| file://:0:0:0:0 | parseParameterAnnotations | +| file://:0:0:0:0 | parseParameterAnnotations | +| file://:0:0:0:0 | parseParameterAnnotations | +| file://:0:0:0:0 | parseServerAuthority | +| file://:0:0:0:0 | parseURL | +| file://:0:0:0:0 | parseUnresolved | +| file://:0:0:0:0 | parseUnsignedInt | +| file://:0:0:0:0 | parseUnsignedInt | +| file://:0:0:0:0 | parseUnsignedInt | +| file://:0:0:0:0 | parseUnsignedLong | +| file://:0:0:0:0 | parseUnsignedLong | +| file://:0:0:0:0 | parseUnsignedLong | +| file://:0:0:0:0 | parsedExcessDays | +| file://:0:0:0:0 | parsedLeapSecond | +| file://:0:0:0:0 | peek | +| file://:0:0:0:0 | peek | +| file://:0:0:0:0 | peek | +| file://:0:0:0:0 | peek | +| file://:0:0:0:0 | peek | +| file://:0:0:0:0 | peek | +| file://:0:0:0:0 | peek | +| file://:0:0:0:0 | peekFirst | +| file://:0:0:0:0 | peekLast | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | peekNextLocalTask | +| file://:0:0:0:0 | performCleanup | +| file://:0:0:0:0 | performCleanup | +| file://:0:0:0:0 | performCleanup | +| file://:0:0:0:0 | performCleanup | +| file://:0:0:0:0 | performCleanup | +| file://:0:0:0:0 | performCleanup | +| file://:0:0:0:0 | performCleanup | +| file://:0:0:0:0 | period | +| file://:0:0:0:0 | period | +| file://:0:0:0:0 | period | +| file://:0:0:0:0 | permuteArgumentsForm | +| file://:0:0:0:0 | permutedTypesMatch | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plus | +| file://:0:0:0:0 | plusDays | +| file://:0:0:0:0 | plusDays | +| file://:0:0:0:0 | plusDays | +| file://:0:0:0:0 | plusDays | +| file://:0:0:0:0 | plusDays | +| file://:0:0:0:0 | plusDays | +| file://:0:0:0:0 | plusHours | +| file://:0:0:0:0 | plusHours | +| file://:0:0:0:0 | plusHours | +| file://:0:0:0:0 | plusHours | +| file://:0:0:0:0 | plusHours | +| file://:0:0:0:0 | plusHours | +| file://:0:0:0:0 | plusMillis | +| file://:0:0:0:0 | plusMillis | +| file://:0:0:0:0 | plusMinutes | +| file://:0:0:0:0 | plusMinutes | +| file://:0:0:0:0 | plusMinutes | +| file://:0:0:0:0 | plusMinutes | +| file://:0:0:0:0 | plusMinutes | +| file://:0:0:0:0 | plusMinutes | +| file://:0:0:0:0 | plusMonths | +| file://:0:0:0:0 | plusMonths | +| file://:0:0:0:0 | plusMonths | +| file://:0:0:0:0 | plusMonths | +| file://:0:0:0:0 | plusMonths | +| file://:0:0:0:0 | plusNanos | +| file://:0:0:0:0 | plusNanos | +| file://:0:0:0:0 | plusNanos | +| file://:0:0:0:0 | plusNanos | +| file://:0:0:0:0 | plusNanos | +| file://:0:0:0:0 | plusNanos | +| file://:0:0:0:0 | plusNanos | +| file://:0:0:0:0 | plusSeconds | +| file://:0:0:0:0 | plusSeconds | +| file://:0:0:0:0 | plusSeconds | +| file://:0:0:0:0 | plusSeconds | +| file://:0:0:0:0 | plusSeconds | +| file://:0:0:0:0 | plusSeconds | +| file://:0:0:0:0 | plusSeconds | +| file://:0:0:0:0 | plusWeeks | +| file://:0:0:0:0 | plusWeeks | +| file://:0:0:0:0 | plusWeeks | +| file://:0:0:0:0 | plusWeeks | +| file://:0:0:0:0 | plusYears | +| file://:0:0:0:0 | plusYears | +| file://:0:0:0:0 | plusYears | +| file://:0:0:0:0 | plusYears | +| file://:0:0:0:0 | plusYears | +| file://:0:0:0:0 | poll | +| file://:0:0:0:0 | poll | +| file://:0:0:0:0 | poll | +| file://:0:0:0:0 | poll | +| file://:0:0:0:0 | poll | +| file://:0:0:0:0 | poll | +| file://:0:0:0:0 | pollEvents | +| file://:0:0:0:0 | pollFirst | +| file://:0:0:0:0 | pollLast | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollNextLocalTask | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollSubmission | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pollTask | +| file://:0:0:0:0 | pop | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | position | +| file://:0:0:0:0 | pow | +| file://:0:0:0:0 | predecessor | +| file://:0:0:0:0 | prepare | +| file://:0:0:0:0 | previous | +| file://:0:0:0:0 | previous | +| file://:0:0:0:0 | previous | +| file://:0:0:0:0 | previous | +| file://:0:0:0:0 | previous | +| file://:0:0:0:0 | previousIndex | +| file://:0:0:0:0 | previousIndex | +| file://:0:0:0:0 | previousIndex | +| file://:0:0:0:0 | previousTransition | +| file://:0:0:0:0 | primeToCertainty | +| file://:0:0:0:0 | primitiveLeftShift | +| file://:0:0:0:0 | primitiveParameterCount | +| file://:0:0:0:0 | primitiveReturnCount | +| file://:0:0:0:0 | primitiveRightShift | +| file://:0:0:0:0 | primitiveSimpleName | +| file://:0:0:0:0 | primitiveType | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | print | +| file://:0:0:0:0 | printModifiersIfNonzero | +| file://:0:0:0:0 | printModifiersIfNonzero | +| file://:0:0:0:0 | printModifiersIfNonzero | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTrace | +| file://:0:0:0:0 | printStackTraceWhenAccessFails | +| file://:0:0:0:0 | printStackTraceWhenAccessFails | +| file://:0:0:0:0 | printStackTraceWhenAccessFails | +| file://:0:0:0:0 | printStackTraceWhenAccessFails | +| file://:0:0:0:0 | printf | +| file://:0:0:0:0 | printf | +| file://:0:0:0:0 | printf | +| file://:0:0:0:0 | printf | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | println | +| file://:0:0:0:0 | privateGetParameters | +| file://:0:0:0:0 | privateGetParameters | +| file://:0:0:0:0 | probablePrime | +| file://:0:0:0:0 | probeBackupLocations | +| file://:0:0:0:0 | probeHomeLocation | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processPendingReferences | +| file://:0:0:0:0 | processQueue | +| file://:0:0:0:0 | processQueue | +| file://:0:0:0:0 | processQueue | +| file://:0:0:0:0 | processQueue | +| file://:0:0:0:0 | prolepticYear | +| file://:0:0:0:0 | prolepticYear | +| file://:0:0:0:0 | prolepticYear | +| file://:0:0:0:0 | promise | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propagateCompletion | +| file://:0:0:0:0 | propertyNames | +| file://:0:0:0:0 | propertyNames | +| file://:0:0:0:0 | provider | +| file://:0:0:0:0 | providerName | +| file://:0:0:0:0 | providers | +| file://:0:0:0:0 | provides | +| file://:0:0:0:0 | provides | +| file://:0:0:0:0 | provides | +| file://:0:0:0:0 | ptypes | +| file://:0:0:0:0 | push | +| file://:0:0:0:0 | push | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | pushState | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put | +| file://:0:0:0:0 | put11 | +| file://:0:0:0:0 | put12 | +| file://:0:0:0:0 | putAddress | +| file://:0:0:0:0 | putAddress | +| file://:0:0:0:0 | putAll | +| file://:0:0:0:0 | putAll | +| file://:0:0:0:0 | putAll | +| file://:0:0:0:0 | putAll | +| file://:0:0:0:0 | putAll | +| file://:0:0:0:0 | putAll | +| file://:0:0:0:0 | putAll | +| file://:0:0:0:0 | putAll | +| file://:0:0:0:0 | putAll | +| file://:0:0:0:0 | putAll | +| file://:0:0:0:0 | putAll | +| file://:0:0:0:0 | putBoolean | +| file://:0:0:0:0 | putBooleanOpaque | +| file://:0:0:0:0 | putBooleanRelease | +| file://:0:0:0:0 | putBooleanVolatile | +| file://:0:0:0:0 | putByte | +| file://:0:0:0:0 | putByte | +| file://:0:0:0:0 | putByte | +| file://:0:0:0:0 | putByteArray | +| file://:0:0:0:0 | putByteOpaque | +| file://:0:0:0:0 | putByteRelease | +| file://:0:0:0:0 | putByteVolatile | +| file://:0:0:0:0 | putChar | +| file://:0:0:0:0 | putChar | +| file://:0:0:0:0 | putChar | +| file://:0:0:0:0 | putChar | +| file://:0:0:0:0 | putChar | +| file://:0:0:0:0 | putChar | +| file://:0:0:0:0 | putCharOpaque | +| file://:0:0:0:0 | putCharRelease | +| file://:0:0:0:0 | putCharUnaligned | +| file://:0:0:0:0 | putCharUnaligned | +| file://:0:0:0:0 | putCharVolatile | +| file://:0:0:0:0 | putCharsAt | +| file://:0:0:0:0 | putCharsAt | +| file://:0:0:0:0 | putCharsAt | +| file://:0:0:0:0 | putCharsAt | +| file://:0:0:0:0 | putDouble | +| file://:0:0:0:0 | putDouble | +| file://:0:0:0:0 | putDouble | +| file://:0:0:0:0 | putDouble | +| file://:0:0:0:0 | putDouble | +| file://:0:0:0:0 | putDouble | +| file://:0:0:0:0 | putDoubleOpaque | +| file://:0:0:0:0 | putDoubleRelease | +| file://:0:0:0:0 | putDoubleVolatile | +| file://:0:0:0:0 | putFields | +| file://:0:0:0:0 | putFloat | +| file://:0:0:0:0 | putFloat | +| file://:0:0:0:0 | putFloat | +| file://:0:0:0:0 | putFloat | +| file://:0:0:0:0 | putFloat | +| file://:0:0:0:0 | putFloat | +| file://:0:0:0:0 | putFloatOpaque | +| file://:0:0:0:0 | putFloatRelease | +| file://:0:0:0:0 | putFloatVolatile | +| file://:0:0:0:0 | putIfAbsent | +| file://:0:0:0:0 | putIfAbsent | +| file://:0:0:0:0 | putIfAbsent | +| file://:0:0:0:0 | putIfAbsent | +| file://:0:0:0:0 | putIfAbsent | +| file://:0:0:0:0 | putIfAbsent | +| file://:0:0:0:0 | putIfAbsent | +| file://:0:0:0:0 | putIfAbsent | +| file://:0:0:0:0 | putIfAbsent | +| file://:0:0:0:0 | putIfAbsent | +| file://:0:0:0:0 | putIfAbsent | +| file://:0:0:0:0 | putInt | +| file://:0:0:0:0 | putInt | +| file://:0:0:0:0 | putInt | +| file://:0:0:0:0 | putInt | +| file://:0:0:0:0 | putInt | +| file://:0:0:0:0 | putInt | +| file://:0:0:0:0 | putInt | +| file://:0:0:0:0 | putIntOpaque | +| file://:0:0:0:0 | putIntRelease | +| file://:0:0:0:0 | putIntUnaligned | +| file://:0:0:0:0 | putIntUnaligned | +| file://:0:0:0:0 | putIntVolatile | +| file://:0:0:0:0 | putLong | +| file://:0:0:0:0 | putLong | +| file://:0:0:0:0 | putLong | +| file://:0:0:0:0 | putLong | +| file://:0:0:0:0 | putLong | +| file://:0:0:0:0 | putLong | +| file://:0:0:0:0 | putLong | +| file://:0:0:0:0 | putLongOpaque | +| file://:0:0:0:0 | putLongRelease | +| file://:0:0:0:0 | putLongUnaligned | +| file://:0:0:0:0 | putLongUnaligned | +| file://:0:0:0:0 | putLongVolatile | +| file://:0:0:0:0 | putObject | +| file://:0:0:0:0 | putObjectOpaque | +| file://:0:0:0:0 | putObjectRelease | +| file://:0:0:0:0 | putObjectVolatile | +| file://:0:0:0:0 | putService | +| file://:0:0:0:0 | putShort | +| file://:0:0:0:0 | putShort | +| file://:0:0:0:0 | putShort | +| file://:0:0:0:0 | putShort | +| file://:0:0:0:0 | putShort | +| file://:0:0:0:0 | putShort | +| file://:0:0:0:0 | putShort | +| file://:0:0:0:0 | putShortOpaque | +| file://:0:0:0:0 | putShortRelease | +| file://:0:0:0:0 | putShortUnaligned | +| file://:0:0:0:0 | putShortUnaligned | +| file://:0:0:0:0 | putShortVolatile | +| file://:0:0:0:0 | putStringAt | +| file://:0:0:0:0 | putStringAt | +| file://:0:0:0:0 | putTreeVal | +| file://:0:0:0:0 | putUTF8 | +| file://:0:0:0:0 | putVal | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | query | +| file://:0:0:0:0 | queryFrom | +| file://:0:0:0:0 | queueSize | +| file://:0:0:0:0 | quiesceCommonPool | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyComplete | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyCompleteRoot | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyInvoke | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | quietlyJoin | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | range | +| file://:0:0:0:0 | rangeClosed | +| file://:0:0:0:0 | rangeClosed | +| file://:0:0:0:0 | rangeRefinedBy | +| file://:0:0:0:0 | rangeRefinedBy | +| file://:0:0:0:0 | rangeTo | +| file://:0:0:0:0 | rangeTo | +| file://:0:0:0:0 | rangeTo | +| file://:0:0:0:0 | rangeTo | +| file://:0:0:0:0 | rangeTo | +| file://:0:0:0:0 | rangeTo | +| file://:0:0:0:0 | rangeTo | +| file://:0:0:0:0 | rangeTo | +| file://:0:0:0:0 | rangeTo | +| file://:0:0:0:0 | rawCompiledVersion | +| file://:0:0:0:0 | rawVersion | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | reachabilityFence | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | read | +| file://:0:0:0:0 | readAllBytes | +| file://:0:0:0:0 | readAllBytes | +| file://:0:0:0:0 | readAttributes | +| file://:0:0:0:0 | readAttributes | +| file://:0:0:0:0 | readBoolean | +| file://:0:0:0:0 | readBoolean | +| file://:0:0:0:0 | readBoolean | +| file://:0:0:0:0 | readByte | +| file://:0:0:0:0 | readByte | +| file://:0:0:0:0 | readByte | +| file://:0:0:0:0 | readByte | +| file://:0:0:0:0 | readChar | +| file://:0:0:0:0 | readChar | +| file://:0:0:0:0 | readChar | +| file://:0:0:0:0 | readClass | +| file://:0:0:0:0 | readClassDescriptor | +| file://:0:0:0:0 | readConst | +| file://:0:0:0:0 | readDouble | +| file://:0:0:0:0 | readDouble | +| file://:0:0:0:0 | readDouble | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readExternal | +| file://:0:0:0:0 | readFields | +| file://:0:0:0:0 | readFloat | +| file://:0:0:0:0 | readFloat | +| file://:0:0:0:0 | readFloat | +| file://:0:0:0:0 | readFully | +| file://:0:0:0:0 | readFully | +| file://:0:0:0:0 | readFully | +| file://:0:0:0:0 | readFully | +| file://:0:0:0:0 | readFully | +| file://:0:0:0:0 | readFully | +| file://:0:0:0:0 | readHashtable | +| file://:0:0:0:0 | readHashtable | +| file://:0:0:0:0 | readHashtable | +| file://:0:0:0:0 | readInt | +| file://:0:0:0:0 | readInt | +| file://:0:0:0:0 | readInt | +| file://:0:0:0:0 | readInt | +| file://:0:0:0:0 | readLabel | +| file://:0:0:0:0 | readLine | +| file://:0:0:0:0 | readLine | +| file://:0:0:0:0 | readLine | +| file://:0:0:0:0 | readLine | +| file://:0:0:0:0 | readLong | +| file://:0:0:0:0 | readLong | +| file://:0:0:0:0 | readLong | +| file://:0:0:0:0 | readLong | +| file://:0:0:0:0 | readModule | +| file://:0:0:0:0 | readNBytes | +| file://:0:0:0:0 | readNBytes | +| file://:0:0:0:0 | readNBytes | +| file://:0:0:0:0 | readNBytes | +| file://:0:0:0:0 | readNonProxy | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObject | +| file://:0:0:0:0 | readObjectForSerialization | +| file://:0:0:0:0 | readObjectNoDataForSerialization | +| file://:0:0:0:0 | readObjectOverride | +| file://:0:0:0:0 | readPackage | +| file://:0:0:0:0 | readResolve | +| file://:0:0:0:0 | readResolve | +| file://:0:0:0:0 | readResolve | +| file://:0:0:0:0 | readResolve | +| file://:0:0:0:0 | readResolveForSerialization | +| file://:0:0:0:0 | readShort | +| file://:0:0:0:0 | readShort | +| file://:0:0:0:0 | readShort | +| file://:0:0:0:0 | readShort | +| file://:0:0:0:0 | readSpeciesDataFromCode | +| file://:0:0:0:0 | readStreamHeader | +| file://:0:0:0:0 | readSymbolicLink | +| file://:0:0:0:0 | readTypeString | +| file://:0:0:0:0 | readUTF | +| file://:0:0:0:0 | readUTF | +| file://:0:0:0:0 | readUTF | +| file://:0:0:0:0 | readUTF8 | +| file://:0:0:0:0 | readUnshared | +| file://:0:0:0:0 | readUnsignedByte | +| file://:0:0:0:0 | readUnsignedByte | +| file://:0:0:0:0 | readUnsignedByte | +| file://:0:0:0:0 | readUnsignedShort | +| file://:0:0:0:0 | readUnsignedShort | +| file://:0:0:0:0 | readUnsignedShort | +| file://:0:0:0:0 | readUnsignedShort | +| file://:0:0:0:0 | reads | +| file://:0:0:0:0 | reads | +| file://:0:0:0:0 | ready | +| file://:0:0:0:0 | reallocateMemory | +| file://:0:0:0:0 | rebind | +| file://:0:0:0:0 | rebind | +| file://:0:0:0:0 | reconstitutionPut | +| file://:0:0:0:0 | reconstitutionPut | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recordExceptionalCompletion | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | recoverState | +| file://:0:0:0:0 | reduce | +| file://:0:0:0:0 | reduce | +| file://:0:0:0:0 | reduce | +| file://:0:0:0:0 | reduce | +| file://:0:0:0:0 | reduce | +| file://:0:0:0:0 | reduce | +| file://:0:0:0:0 | reduce | +| file://:0:0:0:0 | reduce | +| file://:0:0:0:0 | reduce | +| file://:0:0:0:0 | reduce | +| file://:0:0:0:0 | reduceEntries | +| file://:0:0:0:0 | reduceEntries | +| file://:0:0:0:0 | reduceEntriesToDouble | +| file://:0:0:0:0 | reduceEntriesToInt | +| file://:0:0:0:0 | reduceEntriesToLong | +| file://:0:0:0:0 | reduceKeys | +| file://:0:0:0:0 | reduceKeys | +| file://:0:0:0:0 | reduceKeysToDouble | +| file://:0:0:0:0 | reduceKeysToInt | +| file://:0:0:0:0 | reduceKeysToLong | +| file://:0:0:0:0 | reduceToDouble | +| file://:0:0:0:0 | reduceToInt | +| file://:0:0:0:0 | reduceToLong | +| file://:0:0:0:0 | reduceValues | +| file://:0:0:0:0 | reduceValues | +| file://:0:0:0:0 | reduceValuesToDouble | +| file://:0:0:0:0 | reduceValuesToInt | +| file://:0:0:0:0 | reduceValuesToLong | +| file://:0:0:0:0 | reference | +| file://:0:0:0:0 | referenceKindIsConsistentWith | +| file://:0:0:0:0 | references | +| file://:0:0:0:0 | references | +| file://:0:0:0:0 | refersTo | +| file://:0:0:0:0 | refersTo | +| file://:0:0:0:0 | reflectConstructor | +| file://:0:0:0:0 | reflectConstructor | +| file://:0:0:0:0 | reflectField | +| file://:0:0:0:0 | reflectField | +| file://:0:0:0:0 | reflectSDField | +| file://:0:0:0:0 | refreshVersion | +| file://:0:0:0:0 | regionMatches | +| file://:0:0:0:0 | regionMatches | +| file://:0:0:0:0 | register | +| file://:0:0:0:0 | register | +| file://:0:0:0:0 | register | +| file://:0:0:0:0 | register | +| file://:0:0:0:0 | register | +| file://:0:0:0:0 | register | +| file://:0:0:0:0 | registerAsParallelCapable | +| file://:0:0:0:0 | registerChrono | +| file://:0:0:0:0 | registerChrono | +| file://:0:0:0:0 | registerChrono | +| file://:0:0:0:0 | registerChrono | +| file://:0:0:0:0 | registerCleanup | +| file://:0:0:0:0 | registerNatives | +| file://:0:0:0:0 | registerNatives | +| file://:0:0:0:0 | registerValidation | +| file://:0:0:0:0 | registerWorker | +| file://:0:0:0:0 | rehash | +| file://:0:0:0:0 | rehash | +| file://:0:0:0:0 | rehash | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | reinitialize | +| file://:0:0:0:0 | relativize | +| file://:0:0:0:0 | relativize | +| file://:0:0:0:0 | release | +| file://:0:0:0:0 | release | +| file://:0:0:0:0 | release | +| file://:0:0:0:0 | release | +| file://:0:0:0:0 | release | +| file://:0:0:0:0 | release | +| file://:0:0:0:0 | releaseFence | +| file://:0:0:0:0 | releasePhaseLock | +| file://:0:0:0:0 | releaseShared | +| file://:0:0:0:0 | releaseShared | +| file://:0:0:0:0 | releaseShared | +| file://:0:0:0:0 | releaseShared | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | rem | +| file://:0:0:0:0 | remainder | +| file://:0:0:0:0 | remainderUnsigned | +| file://:0:0:0:0 | remainderUnsigned | +| file://:0:0:0:0 | remaining | +| file://:0:0:0:0 | remaining | +| file://:0:0:0:0 | remaining | +| file://:0:0:0:0 | remaining | +| file://:0:0:0:0 | remaining | +| file://:0:0:0:0 | remaining | +| file://:0:0:0:0 | remaining | +| file://:0:0:0:0 | remaining | +| file://:0:0:0:0 | remaining | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | remove | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAll | +| file://:0:0:0:0 | removeAt | +| file://:0:0:0:0 | removeAt | +| file://:0:0:0:0 | removeAt | +| file://:0:0:0:0 | removeEntry | +| file://:0:0:0:0 | removeEntryIf | +| file://:0:0:0:0 | removeFirst | +| file://:0:0:0:0 | removeFirstOccurrence | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeIf | +| file://:0:0:0:0 | removeLast | +| file://:0:0:0:0 | removeLastOccurrence | +| file://:0:0:0:0 | removeMapping | +| file://:0:0:0:0 | removeMapping | +| file://:0:0:0:0 | removeRange | +| file://:0:0:0:0 | removeRange | +| file://:0:0:0:0 | removeService | +| file://:0:0:0:0 | removeTreeNode | +| file://:0:0:0:0 | removeUnicodeLocaleAttribute | +| file://:0:0:0:0 | removeValueIf | +| file://:0:0:0:0 | renameTo | +| file://:0:0:0:0 | repeat | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replace | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceAll | +| file://:0:0:0:0 | replaceFirst | +| file://:0:0:0:0 | replaceName | +| file://:0:0:0:0 | replaceNames | +| file://:0:0:0:0 | replaceNode | +| file://:0:0:0:0 | replaceObject | +| file://:0:0:0:0 | replaceParameterTypes | +| file://:0:0:0:0 | replaceWith | +| file://:0:0:0:0 | replaceWith | +| file://:0:0:0:0 | replacement | +| file://:0:0:0:0 | replacement | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | reportException | +| file://:0:0:0:0 | requires | +| file://:0:0:0:0 | requires | +| file://:0:0:0:0 | requires | +| file://:0:0:0:0 | requires | +| file://:0:0:0:0 | requires | +| file://:0:0:0:0 | requires | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | reset | +| file://:0:0:0:0 | resize | +| file://:0:0:0:0 | resize | +| file://:0:0:0:0 | resizeStamp | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolve | +| file://:0:0:0:0 | resolveAligned | +| file://:0:0:0:0 | resolveAligned | +| file://:0:0:0:0 | resolveAndBind | +| file://:0:0:0:0 | resolveAndBind | +| file://:0:0:0:0 | resolveAndBind | +| file://:0:0:0:0 | resolveClass | +| file://:0:0:0:0 | resolveClass | +| file://:0:0:0:0 | resolveDate | +| file://:0:0:0:0 | resolveDate | +| file://:0:0:0:0 | resolveDate | +| file://:0:0:0:0 | resolveObject | +| file://:0:0:0:0 | resolveOrFail | +| file://:0:0:0:0 | resolveOrNull | +| file://:0:0:0:0 | resolveProlepticMonth | +| file://:0:0:0:0 | resolveProlepticMonth | +| file://:0:0:0:0 | resolveProxyClass | +| file://:0:0:0:0 | resolveSibling | +| file://:0:0:0:0 | resolveSibling | +| file://:0:0:0:0 | resolveYAA | +| file://:0:0:0:0 | resolveYAA | +| file://:0:0:0:0 | resolveYAD | +| file://:0:0:0:0 | resolveYAD | +| file://:0:0:0:0 | resolveYD | +| file://:0:0:0:0 | resolveYD | +| file://:0:0:0:0 | resolveYMAA | +| file://:0:0:0:0 | resolveYMAA | +| file://:0:0:0:0 | resolveYMAD | +| file://:0:0:0:0 | resolveYMAD | +| file://:0:0:0:0 | resolveYMD | +| file://:0:0:0:0 | resolveYMD | +| file://:0:0:0:0 | resolveYearOfEra | +| file://:0:0:0:0 | resolveYearOfEra | +| file://:0:0:0:0 | resolvedHandle | +| file://:0:0:0:0 | resources | +| file://:0:0:0:0 | resume | +| file://:0:0:0:0 | resume | +| file://:0:0:0:0 | resume | +| file://:0:0:0:0 | resume | +| file://:0:0:0:0 | resume0 | +| file://:0:0:0:0 | resume0 | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retainAll | +| file://:0:0:0:0 | retention | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | rethrow | +| file://:0:0:0:0 | retrieveISOCountryCodes | +| file://:0:0:0:0 | returnCount | +| file://:0:0:0:0 | returnSlotCount | +| file://:0:0:0:0 | returnSlotCount | +| file://:0:0:0:0 | returnType | +| file://:0:0:0:0 | returnType | +| file://:0:0:0:0 | returnType | +| file://:0:0:0:0 | reverse | +| file://:0:0:0:0 | reverse | +| file://:0:0:0:0 | reverse | +| file://:0:0:0:0 | reverse | +| file://:0:0:0:0 | reverse | +| file://:0:0:0:0 | reverseBytes | +| file://:0:0:0:0 | reverseBytes | +| file://:0:0:0:0 | reverseBytes | +| file://:0:0:0:0 | reverseOrder | +| file://:0:0:0:0 | reversed | +| file://:0:0:0:0 | rewind | +| file://:0:0:0:0 | rewind | +| file://:0:0:0:0 | rewind | +| file://:0:0:0:0 | rewind | +| file://:0:0:0:0 | rewind | +| file://:0:0:0:0 | rewind | +| file://:0:0:0:0 | rewind | +| file://:0:0:0:0 | rewind | +| file://:0:0:0:0 | rewind | +| file://:0:0:0:0 | rotateLeft | +| file://:0:0:0:0 | rotateLeft | +| file://:0:0:0:0 | rotateLeft | +| file://:0:0:0:0 | rotateRight | +| file://:0:0:0:0 | rotateRight | +| file://:0:0:0:0 | rotateRight | +| file://:0:0:0:0 | rtype | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | run | +| file://:0:0:0:0 | runWorker | +| file://:0:0:0:0 | sameFile | +| file://:0:0:0:0 | sameFile | +| file://:0:0:0:0 | save | +| file://:0:0:0:0 | save | +| file://:0:0:0:0 | saveConvert | +| file://:0:0:0:0 | search | +| file://:0:0:0:0 | searchEntries | +| file://:0:0:0:0 | searchKeys | +| file://:0:0:0:0 | searchValues | +| file://:0:0:0:0 | selfInterrupt | +| file://:0:0:0:0 | selfInterrupt | +| file://:0:0:0:0 | selfInterrupt | +| file://:0:0:0:0 | selfInterrupt | +| file://:0:0:0:0 | sequential | +| file://:0:0:0:0 | sequential | +| file://:0:0:0:0 | sequential | +| file://:0:0:0:0 | sequential | +| file://:0:0:0:0 | sequential | +| file://:0:0:0:0 | serialClass | +| file://:0:0:0:0 | serialClass | +| file://:0:0:0:0 | service | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | set | +| file://:0:0:0:0 | setAccessible | +| file://:0:0:0:0 | setAccessible | +| file://:0:0:0:0 | setAccessible | +| file://:0:0:0:0 | setAccessible | +| file://:0:0:0:0 | setAccessible | +| file://:0:0:0:0 | setAccessible | +| file://:0:0:0:0 | setAccessible | +| file://:0:0:0:0 | setAccessible | +| file://:0:0:0:0 | setAccessible | +| file://:0:0:0:0 | setAccessible | +| file://:0:0:0:0 | setAccessible0 | +| file://:0:0:0:0 | setAccessible0 | +| file://:0:0:0:0 | setAccessible0 | +| file://:0:0:0:0 | setAccessible0 | +| file://:0:0:0:0 | setAccessible0 | +| file://:0:0:0:0 | setAllowUserInteraction | +| file://:0:0:0:0 | setAttribute | +| file://:0:0:0:0 | setBeginIndex | +| file://:0:0:0:0 | setBit | +| file://:0:0:0:0 | setBoolean | +| file://:0:0:0:0 | setBoolean | +| file://:0:0:0:0 | setByte | +| file://:0:0:0:0 | setByte | +| file://:0:0:0:0 | setCachedLambdaForm | +| file://:0:0:0:0 | setCachedMethodHandle | +| file://:0:0:0:0 | setCaseSensitive | +| file://:0:0:0:0 | setChar | +| file://:0:0:0:0 | setChar | +| file://:0:0:0:0 | setCharAt | +| file://:0:0:0:0 | setCharAt | +| file://:0:0:0:0 | setCharAt | +| file://:0:0:0:0 | setClassAssertionStatus | +| file://:0:0:0:0 | setCleanerImplAccess | +| file://:0:0:0:0 | setConnectTimeout | +| file://:0:0:0:0 | setConstructorAccessor | +| file://:0:0:0:0 | setConstructorAccessor | +| file://:0:0:0:0 | setConstructorAccessor | +| file://:0:0:0:0 | setContentHandlerFactory | +| file://:0:0:0:0 | setContextClassLoader | +| file://:0:0:0:0 | setContextClassLoader | +| file://:0:0:0:0 | setContextClassLoader | +| file://:0:0:0:0 | setDaemon | +| file://:0:0:0:0 | setDaemon | +| file://:0:0:0:0 | setDaemon | +| file://:0:0:0:0 | setDaemon | +| file://:0:0:0:0 | setDate | +| file://:0:0:0:0 | setDefault | +| file://:0:0:0:0 | setDefault | +| file://:0:0:0:0 | setDefaultAllowUserInteraction | +| file://:0:0:0:0 | setDefaultAssertionStatus | +| file://:0:0:0:0 | setDefaultRequestProperty | +| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | +| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | +| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | +| file://:0:0:0:0 | setDefaultUseCaches | +| file://:0:0:0:0 | setDefaultUseCaches | +| file://:0:0:0:0 | setDoInput | +| file://:0:0:0:0 | setDoOutput | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDone | +| file://:0:0:0:0 | setDouble | +| file://:0:0:0:0 | setDouble | +| file://:0:0:0:0 | setEndIndex | +| file://:0:0:0:0 | setError | +| file://:0:0:0:0 | setError | +| file://:0:0:0:0 | setErrorIndex | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExceptionalCompletion | +| file://:0:0:0:0 | setExclusiveOwnerThread | +| file://:0:0:0:0 | setExclusiveOwnerThread | +| file://:0:0:0:0 | setExclusiveOwnerThread | +| file://:0:0:0:0 | setExclusiveOwnerThread | +| file://:0:0:0:0 | setExclusiveOwnerThread | +| file://:0:0:0:0 | setExecutable | +| file://:0:0:0:0 | setExecutable | +| file://:0:0:0:0 | setExtension | +| file://:0:0:0:0 | setFileNameMap | +| file://:0:0:0:0 | setFloat | +| file://:0:0:0:0 | setFloat | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForkJoinTaskTag | +| file://:0:0:0:0 | setForm | +| file://:0:0:0:0 | setHandle | +| file://:0:0:0:0 | setHead | +| file://:0:0:0:0 | setHead | +| file://:0:0:0:0 | setHead | +| file://:0:0:0:0 | setHeadAndPropagate | +| file://:0:0:0:0 | setHeadAndPropagate | +| file://:0:0:0:0 | setHeadAndPropagate | +| file://:0:0:0:0 | setHours | +| file://:0:0:0:0 | setIfModifiedSince | +| file://:0:0:0:0 | setIndex | +| file://:0:0:0:0 | setIndex | +| file://:0:0:0:0 | setIndex | +| file://:0:0:0:0 | setInitialValue | +| file://:0:0:0:0 | setInt | +| file://:0:0:0:0 | setInt | +| file://:0:0:0:0 | setLangReflectAccess | +| file://:0:0:0:0 | setLanguage | +| file://:0:0:0:0 | setLanguageTag | +| file://:0:0:0:0 | setLastModified | +| file://:0:0:0:0 | setLength | +| file://:0:0:0:0 | setLength | +| file://:0:0:0:0 | setLength | +| file://:0:0:0:0 | setLocale | +| file://:0:0:0:0 | setLong | +| file://:0:0:0:0 | setLong | +| file://:0:0:0:0 | setMaxPriority | +| file://:0:0:0:0 | setMemory | +| file://:0:0:0:0 | setMemory | +| file://:0:0:0:0 | setMethodAccessor | +| file://:0:0:0:0 | setMethodAccessor | +| file://:0:0:0:0 | setMethodAccessor | +| file://:0:0:0:0 | setMinutes | +| file://:0:0:0:0 | setMonth | +| file://:0:0:0:0 | setName | +| file://:0:0:0:0 | setName | +| file://:0:0:0:0 | setName | +| file://:0:0:0:0 | setNativeName | +| file://:0:0:0:0 | setNativeName | +| file://:0:0:0:0 | setObjFieldValues | +| file://:0:0:0:0 | setObjectInputFilter | +| file://:0:0:0:0 | setOffset | +| file://:0:0:0:0 | setOpaque | +| file://:0:0:0:0 | setOpaque | +| file://:0:0:0:0 | setOpaque | +| file://:0:0:0:0 | setPackageAssertionStatus | +| file://:0:0:0:0 | setParsed | +| file://:0:0:0:0 | setParsed | +| file://:0:0:0:0 | setParsedField | +| file://:0:0:0:0 | setParsedLeapSecond | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPendingCount | +| file://:0:0:0:0 | setPlain | +| file://:0:0:0:0 | setPlain | +| file://:0:0:0:0 | setPrevRelaxed | +| file://:0:0:0:0 | setPrimFieldValues | +| file://:0:0:0:0 | setPriority | +| file://:0:0:0:0 | setPriority | +| file://:0:0:0:0 | setPriority | +| file://:0:0:0:0 | setPriority0 | +| file://:0:0:0:0 | setPriority0 | +| file://:0:0:0:0 | setProperty | +| file://:0:0:0:0 | setProperty | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setRawResult | +| file://:0:0:0:0 | setReadOnly | +| file://:0:0:0:0 | setReadOnly | +| file://:0:0:0:0 | setReadOnly | +| file://:0:0:0:0 | setReadTimeout | +| file://:0:0:0:0 | setReadable | +| file://:0:0:0:0 | setReadable | +| file://:0:0:0:0 | setRegion | +| file://:0:0:0:0 | setRelease | +| file://:0:0:0:0 | setRelease | +| file://:0:0:0:0 | setRelease | +| file://:0:0:0:0 | setRequestProperty | +| file://:0:0:0:0 | setScript | +| file://:0:0:0:0 | setSeconds | +| file://:0:0:0:0 | setSeed | +| file://:0:0:0:0 | setSerialFilter | +| file://:0:0:0:0 | setShort | +| file://:0:0:0:0 | setShort | +| file://:0:0:0:0 | setSigners | +| file://:0:0:0:0 | setSigners | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setStackTrace | +| file://:0:0:0:0 | setState | +| file://:0:0:0:0 | setState | +| file://:0:0:0:0 | setState | +| file://:0:0:0:0 | setState | +| file://:0:0:0:0 | setStrict | +| file://:0:0:0:0 | setTabAt | +| file://:0:0:0:0 | setTarget | +| file://:0:0:0:0 | setTargetNormal | +| file://:0:0:0:0 | setTargetVolatile | +| file://:0:0:0:0 | setTime | +| file://:0:0:0:0 | setURL | +| file://:0:0:0:0 | setURL | +| file://:0:0:0:0 | setURLStreamHandlerFactory | +| file://:0:0:0:0 | setUncaughtExceptionHandler | +| file://:0:0:0:0 | setUncaughtExceptionHandler | +| file://:0:0:0:0 | setUncaughtExceptionHandler | +| file://:0:0:0:0 | setUnicodeLocaleKeyword | +| file://:0:0:0:0 | setUseCaches | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setValue | +| file://:0:0:0:0 | setVarargs | +| file://:0:0:0:0 | setVarargs | +| file://:0:0:0:0 | setVariant | +| file://:0:0:0:0 | setVolatile | +| file://:0:0:0:0 | setWritable | +| file://:0:0:0:0 | setWritable | +| file://:0:0:0:0 | setYear | +| file://:0:0:0:0 | sharedGetParameterAnnotations | +| file://:0:0:0:0 | sharedGetParameterAnnotations | +| file://:0:0:0:0 | sharedGetParameterAnnotations | +| file://:0:0:0:0 | sharedToGenericString | +| file://:0:0:0:0 | sharedToGenericString | +| file://:0:0:0:0 | sharedToGenericString | +| file://:0:0:0:0 | sharedToString | +| file://:0:0:0:0 | sharedToString | +| file://:0:0:0:0 | sharedToString | +| file://:0:0:0:0 | shift | +| file://:0:0:0:0 | shift | +| file://:0:0:0:0 | shiftLeft | +| file://:0:0:0:0 | shiftRight | +| file://:0:0:0:0 | shl | +| file://:0:0:0:0 | shl | +| file://:0:0:0:0 | shortValue | +| file://:0:0:0:0 | shortValueExact | +| file://:0:0:0:0 | shortenSignature | +| file://:0:0:0:0 | shouldBeInitialized | +| file://:0:0:0:0 | shouldParkAfterFailedAcquire | +| file://:0:0:0:0 | shouldParkAfterFailedAcquire | +| file://:0:0:0:0 | shouldParkAfterFailedAcquire | +| file://:0:0:0:0 | shr | +| file://:0:0:0:0 | shr | +| file://:0:0:0:0 | shutdown | +| file://:0:0:0:0 | shutdown | +| file://:0:0:0:0 | shutdown | +| file://:0:0:0:0 | shutdownNow | +| file://:0:0:0:0 | shutdownNow | +| file://:0:0:0:0 | shutdownNow | +| file://:0:0:0:0 | signal | +| file://:0:0:0:0 | signal | +| file://:0:0:0:0 | signalAll | +| file://:0:0:0:0 | signalAll | +| file://:0:0:0:0 | signalWork | +| file://:0:0:0:0 | signatureArity | +| file://:0:0:0:0 | signatureReturn | +| file://:0:0:0:0 | signatureType | +| file://:0:0:0:0 | signum | +| file://:0:0:0:0 | signum | +| file://:0:0:0:0 | signum | +| file://:0:0:0:0 | size | +| file://:0:0:0:0 | size | +| file://:0:0:0:0 | size | +| file://:0:0:0:0 | size | +| file://:0:0:0:0 | size | +| file://:0:0:0:0 | size | +| file://:0:0:0:0 | size | +| file://:0:0:0:0 | size | +| file://:0:0:0:0 | skip | +| file://:0:0:0:0 | skip | +| file://:0:0:0:0 | skip | +| file://:0:0:0:0 | skip | +| file://:0:0:0:0 | skip | +| file://:0:0:0:0 | skip | +| file://:0:0:0:0 | skip | +| file://:0:0:0:0 | skip | +| file://:0:0:0:0 | skipBytes | +| file://:0:0:0:0 | skipBytes | +| file://:0:0:0:0 | skipBytes | +| file://:0:0:0:0 | sleep | +| file://:0:0:0:0 | sleep | +| file://:0:0:0:0 | sleep | +| file://:0:0:0:0 | sleep | +| file://:0:0:0:0 | sleep | +| file://:0:0:0:0 | sleep | +| file://:0:0:0:0 | sleep | +| file://:0:0:0:0 | slice | +| file://:0:0:0:0 | slice | +| file://:0:0:0:0 | slice | +| file://:0:0:0:0 | slice | +| file://:0:0:0:0 | slice | +| file://:0:0:0:0 | slice | +| file://:0:0:0:0 | slice | +| file://:0:0:0:0 | slice | +| file://:0:0:0:0 | slice | +| file://:0:0:0:0 | slice | +| file://:0:0:0:0 | slice | +| file://:0:0:0:0 | slowVerifyAccess | +| file://:0:0:0:0 | slowVerifyAccess | +| file://:0:0:0:0 | slowVerifyAccess | +| file://:0:0:0:0 | slowVerifyAccess | +| file://:0:0:0:0 | sort | +| file://:0:0:0:0 | sort | +| file://:0:0:0:0 | sort | +| file://:0:0:0:0 | sort | +| file://:0:0:0:0 | sorted | +| file://:0:0:0:0 | sorted | +| file://:0:0:0:0 | sorted | +| file://:0:0:0:0 | sorted | +| file://:0:0:0:0 | sorted | +| file://:0:0:0:0 | source | +| file://:0:0:0:0 | source | +| file://:0:0:0:0 | speciesCode | +| file://:0:0:0:0 | speciesCode | +| file://:0:0:0:0 | speciesData | +| file://:0:0:0:0 | speciesDataFor | +| file://:0:0:0:0 | speciesData_L | +| file://:0:0:0:0 | speciesData_LL | +| file://:0:0:0:0 | speciesData_LLL | +| file://:0:0:0:0 | speciesData_LLLL | +| file://:0:0:0:0 | speciesData_LLLLL | +| file://:0:0:0:0 | specificToGenericStringHeader | +| file://:0:0:0:0 | specificToGenericStringHeader | +| file://:0:0:0:0 | specificToGenericStringHeader | +| file://:0:0:0:0 | specificToStringHeader | +| file://:0:0:0:0 | specificToStringHeader | +| file://:0:0:0:0 | specificToStringHeader | +| file://:0:0:0:0 | split | +| file://:0:0:0:0 | split | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spliterator | +| file://:0:0:0:0 | spread | +| file://:0:0:0:0 | spreadArgumentsForm | +| file://:0:0:0:0 | spreadArrayChecks | +| file://:0:0:0:0 | spreadInvoker | +| file://:0:0:0:0 | sqrt | +| file://:0:0:0:0 | sqrtAndRemainder | +| file://:0:0:0:0 | stackSlots | +| file://:0:0:0:0 | standardString | +| file://:0:0:0:0 | standardString | +| file://:0:0:0:0 | start | +| file://:0:0:0:0 | start | +| file://:0:0:0:0 | start | +| file://:0:0:0:0 | start | +| file://:0:0:0:0 | start0 | +| file://:0:0:0:0 | start0 | +| file://:0:0:0:0 | startEntry | +| file://:0:0:0:0 | startOptional | +| file://:0:0:0:0 | startOptional | +| file://:0:0:0:0 | startsWith | +| file://:0:0:0:0 | startsWith | +| file://:0:0:0:0 | startsWith | +| file://:0:0:0:0 | startsWith | +| file://:0:0:0:0 | staticFieldBase | +| file://:0:0:0:0 | staticFieldOffset | +| file://:0:0:0:0 | staticPermissionsOnly | +| file://:0:0:0:0 | stop | +| file://:0:0:0:0 | stop | +| file://:0:0:0:0 | stop | +| file://:0:0:0:0 | stop | +| file://:0:0:0:0 | stop0 | +| file://:0:0:0:0 | stop0 | +| file://:0:0:0:0 | store | +| file://:0:0:0:0 | store | +| file://:0:0:0:0 | store | +| file://:0:0:0:0 | store | +| file://:0:0:0:0 | store0 | +| file://:0:0:0:0 | storeFence | +| file://:0:0:0:0 | storeStoreFence | +| file://:0:0:0:0 | storeStoreFence | +| file://:0:0:0:0 | storeToXML | +| file://:0:0:0:0 | storeToXML | +| file://:0:0:0:0 | storeToXML | +| file://:0:0:0:0 | storeToXML | +| file://:0:0:0:0 | storeToXML | +| file://:0:0:0:0 | storeToXML | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | stream | +| file://:0:0:0:0 | streamBytes | +| file://:0:0:0:0 | streamBytes | +| file://:0:0:0:0 | stringPropertyNames | +| file://:0:0:0:0 | stringPropertyNames | +| file://:0:0:0:0 | stringSize | +| file://:0:0:0:0 | stringSize | +| file://:0:0:0:0 | strip | +| file://:0:0:0:0 | strip | +| file://:0:0:0:0 | stripExtensions | +| file://:0:0:0:0 | stripLeading | +| file://:0:0:0:0 | stripLeading | +| file://:0:0:0:0 | stripTrailing | +| file://:0:0:0:0 | stripTrailing | +| file://:0:0:0:0 | subInterfaces | +| file://:0:0:0:0 | subList | +| file://:0:0:0:0 | subList | +| file://:0:0:0:0 | subList | +| file://:0:0:0:0 | subList | +| file://:0:0:0:0 | subList | +| file://:0:0:0:0 | subListRangeCheck | +| file://:0:0:0:0 | subListRangeCheck | +| file://:0:0:0:0 | subMap | +| file://:0:0:0:0 | subSequence | +| file://:0:0:0:0 | subSequence | +| file://:0:0:0:0 | subSequence | +| file://:0:0:0:0 | subSequence | +| file://:0:0:0:0 | subSequence | +| file://:0:0:0:0 | subSequence | +| file://:0:0:0:0 | subSequence | +| file://:0:0:0:0 | subSequence | +| file://:0:0:0:0 | subSequenceEquals | +| file://:0:0:0:0 | submit | +| file://:0:0:0:0 | submit | +| file://:0:0:0:0 | submit | +| file://:0:0:0:0 | submit | +| file://:0:0:0:0 | submit | +| file://:0:0:0:0 | submit | +| file://:0:0:0:0 | submit | +| file://:0:0:0:0 | submit | +| file://:0:0:0:0 | submit | +| file://:0:0:0:0 | submit | +| file://:0:0:0:0 | subpath | +| file://:0:0:0:0 | substring | +| file://:0:0:0:0 | substring | +| file://:0:0:0:0 | substring | +| file://:0:0:0:0 | substring | +| file://:0:0:0:0 | substring | +| file://:0:0:0:0 | substring | +| file://:0:0:0:0 | substring | +| file://:0:0:0:0 | substring | +| file://:0:0:0:0 | subtract | +| file://:0:0:0:0 | subtractFrom | +| file://:0:0:0:0 | subtractFrom | +| file://:0:0:0:0 | subtractFrom | +| file://:0:0:0:0 | subtractFrom | +| file://:0:0:0:0 | sum | +| file://:0:0:0:0 | sum | +| file://:0:0:0:0 | sum | +| file://:0:0:0:0 | sum | +| file://:0:0:0:0 | sum | +| file://:0:0:0:0 | sum | +| file://:0:0:0:0 | sumCount | +| file://:0:0:0:0 | summaryStatistics | +| file://:0:0:0:0 | summaryStatistics | +| file://:0:0:0:0 | summaryStatistics | +| file://:0:0:0:0 | supplier | +| file://:0:0:0:0 | supportedFileAttributeViews | +| file://:0:0:0:0 | supportsFileAttributeView | +| file://:0:0:0:0 | supportsFileAttributeView | +| file://:0:0:0:0 | supportsMulticast | +| file://:0:0:0:0 | supportsParameter | +| file://:0:0:0:0 | suspend | +| file://:0:0:0:0 | suspend | +| file://:0:0:0:0 | suspend | +| file://:0:0:0:0 | suspend | +| file://:0:0:0:0 | suspend0 | +| file://:0:0:0:0 | suspend0 | +| file://:0:0:0:0 | sync | +| file://:0:0:0:0 | synthesizeAllParams | +| file://:0:0:0:0 | synthesizeAllParams | +| file://:0:0:0:0 | system | +| file://:0:0:0:0 | system | +| file://:0:0:0:0 | system | +| file://:0:0:0:0 | system | +| file://:0:0:0:0 | system | +| file://:0:0:0:0 | systemDefault | +| file://:0:0:0:0 | systemDefault | +| file://:0:0:0:0 | systemDefaultZone | +| file://:0:0:0:0 | systemDefaultZone | +| file://:0:0:0:0 | systemDefaultZone | +| file://:0:0:0:0 | systemDefaultZone | +| file://:0:0:0:0 | systemDefaultZone | +| file://:0:0:0:0 | systemUTC | +| file://:0:0:0:0 | systemUTC | +| file://:0:0:0:0 | systemUTC | +| file://:0:0:0:0 | systemUTC | +| file://:0:0:0:0 | systemUTC | +| file://:0:0:0:0 | tabAt | +| file://:0:0:0:0 | tailMap | +| file://:0:0:0:0 | take | +| file://:0:0:0:0 | takeWhile | +| file://:0:0:0:0 | takeWhile | +| file://:0:0:0:0 | takeWhile | +| file://:0:0:0:0 | takeWhile | +| file://:0:0:0:0 | targetPlatform | +| file://:0:0:0:0 | targets | +| file://:0:0:0:0 | targets | +| file://:0:0:0:0 | test | +| file://:0:0:0:0 | test | +| file://:0:0:0:0 | test | +| file://:0:0:0:0 | test | +| file://:0:0:0:0 | testBit | +| file://:0:0:0:0 | thenComparing | +| file://:0:0:0:0 | thenComparing | +| file://:0:0:0:0 | thenComparing | +| file://:0:0:0:0 | thenComparingDouble | +| file://:0:0:0:0 | thenComparingInt | +| file://:0:0:0:0 | thenComparingLong | +| file://:0:0:0:0 | threadStartFailed | +| file://:0:0:0:0 | threadTerminated | +| file://:0:0:0:0 | throwException | +| file://:0:0:0:0 | throwException | +| file://:0:0:0:0 | tick | +| file://:0:0:0:0 | tick | +| file://:0:0:0:0 | tick | +| file://:0:0:0:0 | tick | +| file://:0:0:0:0 | tick | +| file://:0:0:0:0 | tickMillis | +| file://:0:0:0:0 | tickMillis | +| file://:0:0:0:0 | tickMillis | +| file://:0:0:0:0 | tickMillis | +| file://:0:0:0:0 | tickMillis | +| file://:0:0:0:0 | tickMinutes | +| file://:0:0:0:0 | tickMinutes | +| file://:0:0:0:0 | tickMinutes | +| file://:0:0:0:0 | tickMinutes | +| file://:0:0:0:0 | tickMinutes | +| file://:0:0:0:0 | tickSeconds | +| file://:0:0:0:0 | tickSeconds | +| file://:0:0:0:0 | tickSeconds | +| file://:0:0:0:0 | tickSeconds | +| file://:0:0:0:0 | tickSeconds | +| file://:0:0:0:0 | tieBreakOrder | +| file://:0:0:0:0 | timeLineOrder | +| file://:0:0:0:0 | timeLineOrder | +| file://:0:0:0:0 | timeLineOrder | +| file://:0:0:0:0 | timeLineOrder | +| file://:0:0:0:0 | timedJoin | +| file://:0:0:0:0 | timedWait | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | times | +| file://:0:0:0:0 | to | +| file://:0:0:0:0 | toASCIIString | +| file://:0:0:0:0 | toAbsolutePath | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toArray | +| file://:0:0:0:0 | toBinaryString | +| file://:0:0:0:0 | toBinaryString | +| file://:0:0:0:0 | toByte | +| file://:0:0:0:0 | toByte | +| file://:0:0:0:0 | toByte | +| file://:0:0:0:0 | toByte | +| file://:0:0:0:0 | toByte | +| file://:0:0:0:0 | toByte | +| file://:0:0:0:0 | toByte | +| file://:0:0:0:0 | toByte | +| file://:0:0:0:0 | toByte | +| file://:0:0:0:0 | toByte | +| file://:0:0:0:0 | toByteArray | +| file://:0:0:0:0 | toByteArray | +| file://:0:0:0:0 | toCalendarStyle | +| file://:0:0:0:0 | toChar | +| file://:0:0:0:0 | toChar | +| file://:0:0:0:0 | toChar | +| file://:0:0:0:0 | toChar | +| file://:0:0:0:0 | toChar | +| file://:0:0:0:0 | toChar | +| file://:0:0:0:0 | toChar | +| file://:0:0:0:0 | toChar | +| file://:0:0:0:0 | toChar | +| file://:0:0:0:0 | toChar | +| file://:0:0:0:0 | toCharArray | +| file://:0:0:0:0 | toChars | +| file://:0:0:0:0 | toChars | +| file://:0:0:0:0 | toChronoUnit | +| file://:0:0:0:0 | toCodePoint | +| file://:0:0:0:0 | toDays | +| file://:0:0:0:0 | toDays | +| file://:0:0:0:0 | toDaysPart | +| file://:0:0:0:0 | toDouble | +| file://:0:0:0:0 | toDouble | +| file://:0:0:0:0 | toDouble | +| file://:0:0:0:0 | toDouble | +| file://:0:0:0:0 | toDouble | +| file://:0:0:0:0 | toDouble | +| file://:0:0:0:0 | toDouble | +| file://:0:0:0:0 | toDouble | +| file://:0:0:0:0 | toDouble | +| file://:0:0:0:0 | toDouble | +| file://:0:0:0:0 | toEpochDay | +| file://:0:0:0:0 | toEpochDay | +| file://:0:0:0:0 | toEpochMilli | +| file://:0:0:0:0 | toEpochSecond | +| file://:0:0:0:0 | toEpochSecond | +| file://:0:0:0:0 | toEpochSecond | +| file://:0:0:0:0 | toEpochSecond | +| file://:0:0:0:0 | toEpochSecond | +| file://:0:0:0:0 | toEpochSecond | +| file://:0:0:0:0 | toEpochSecond | +| file://:0:0:0:0 | toEpochSecond | +| file://:0:0:0:0 | toEpochSecond | +| file://:0:0:0:0 | toExternalForm | +| file://:0:0:0:0 | toExternalForm | +| file://:0:0:0:0 | toFieldDescriptorString | +| file://:0:0:0:0 | toFile | +| file://:0:0:0:0 | toFloat | +| file://:0:0:0:0 | toFloat | +| file://:0:0:0:0 | toFloat | +| file://:0:0:0:0 | toFloat | +| file://:0:0:0:0 | toFloat | +| file://:0:0:0:0 | toFloat | +| file://:0:0:0:0 | toFloat | +| file://:0:0:0:0 | toFloat | +| file://:0:0:0:0 | toFloat | +| file://:0:0:0:0 | toFloat | +| file://:0:0:0:0 | toFormat | +| file://:0:0:0:0 | toFormat | +| file://:0:0:0:0 | toGMTString | +| file://:0:0:0:0 | toGenericString | +| file://:0:0:0:0 | toGenericString | +| file://:0:0:0:0 | toGenericString | +| file://:0:0:0:0 | toGenericString | +| file://:0:0:0:0 | toGenericString | +| file://:0:0:0:0 | toHex | +| file://:0:0:0:0 | toHexString | +| file://:0:0:0:0 | toHexString | +| file://:0:0:0:0 | toHexString | +| file://:0:0:0:0 | toHexString | +| file://:0:0:0:0 | toHours | +| file://:0:0:0:0 | toHours | +| file://:0:0:0:0 | toHoursPart | +| file://:0:0:0:0 | toInstant | +| file://:0:0:0:0 | toInstant | +| file://:0:0:0:0 | toInstant | +| file://:0:0:0:0 | toInstant | +| file://:0:0:0:0 | toInstant | +| file://:0:0:0:0 | toInstant | +| file://:0:0:0:0 | toInstant | +| file://:0:0:0:0 | toInt | +| file://:0:0:0:0 | toInt | +| file://:0:0:0:0 | toInt | +| file://:0:0:0:0 | toInt | +| file://:0:0:0:0 | toInt | +| file://:0:0:0:0 | toInt | +| file://:0:0:0:0 | toInt | +| file://:0:0:0:0 | toInt | +| file://:0:0:0:0 | toInt | +| file://:0:0:0:0 | toInt | +| file://:0:0:0:0 | toLanguageTag | +| file://:0:0:0:0 | toLocalDate | +| file://:0:0:0:0 | toLocalDate | +| file://:0:0:0:0 | toLocalDate | +| file://:0:0:0:0 | toLocalDate | +| file://:0:0:0:0 | toLocalDate | +| file://:0:0:0:0 | toLocalDateTime | +| file://:0:0:0:0 | toLocalDateTime | +| file://:0:0:0:0 | toLocalDateTime | +| file://:0:0:0:0 | toLocalTime | +| file://:0:0:0:0 | toLocalTime | +| file://:0:0:0:0 | toLocalTime | +| file://:0:0:0:0 | toLocalTime | +| file://:0:0:0:0 | toLocalTime | +| file://:0:0:0:0 | toLocalTime | +| file://:0:0:0:0 | toLocaleString | +| file://:0:0:0:0 | toLong | +| file://:0:0:0:0 | toLong | +| file://:0:0:0:0 | toLong | +| file://:0:0:0:0 | toLong | +| file://:0:0:0:0 | toLong | +| file://:0:0:0:0 | toLong | +| file://:0:0:0:0 | toLong | +| file://:0:0:0:0 | toLong | +| file://:0:0:0:0 | toLong | +| file://:0:0:0:0 | toLong | +| file://:0:0:0:0 | toLowerCase | +| file://:0:0:0:0 | toLowerCase | +| file://:0:0:0:0 | toLowerCase | +| file://:0:0:0:0 | toLowerCase | +| file://:0:0:0:0 | toLowerCase | +| file://:0:0:0:0 | toMethodDescriptorString | +| file://:0:0:0:0 | toMethodHandle | +| file://:0:0:0:0 | toMicros | +| file://:0:0:0:0 | toMillis | +| file://:0:0:0:0 | toMillis | +| file://:0:0:0:0 | toMillis | +| file://:0:0:0:0 | toMillisPart | +| file://:0:0:0:0 | toMinutes | +| file://:0:0:0:0 | toMinutes | +| file://:0:0:0:0 | toMinutesPart | +| file://:0:0:0:0 | toNameAndVersion | +| file://:0:0:0:0 | toNanoOfDay | +| file://:0:0:0:0 | toNanos | +| file://:0:0:0:0 | toNanos | +| file://:0:0:0:0 | toNanosPart | +| file://:0:0:0:0 | toOctalString | +| file://:0:0:0:0 | toOctalString | +| file://:0:0:0:0 | toOffsetDateTime | +| file://:0:0:0:0 | toOffsetTime | +| file://:0:0:0:0 | toPackage | +| file://:0:0:0:0 | toPackage | +| file://:0:0:0:0 | toPath | +| file://:0:0:0:0 | toPrinterParser | +| file://:0:0:0:0 | toRealPath | +| file://:0:0:0:0 | toResolved | +| file://:0:0:0:0 | toSecondOfDay | +| file://:0:0:0:0 | toSeconds | +| file://:0:0:0:0 | toSeconds | +| file://:0:0:0:0 | toSecondsPart | +| file://:0:0:0:0 | toShort | +| file://:0:0:0:0 | toShort | +| file://:0:0:0:0 | toShort | +| file://:0:0:0:0 | toShort | +| file://:0:0:0:0 | toShort | +| file://:0:0:0:0 | toShort | +| file://:0:0:0:0 | toShort | +| file://:0:0:0:0 | toShort | +| file://:0:0:0:0 | toShort | +| file://:0:0:0:0 | toShort | +| file://:0:0:0:0 | toShortString | +| file://:0:0:0:0 | toShortString | +| file://:0:0:0:0 | toShortString | +| file://:0:0:0:0 | toShortString | +| file://:0:0:0:0 | toShortString | +| file://:0:0:0:0 | toStackTraceElement | +| file://:0:0:0:0 | toStackTraceElement | | file://:0:0:0:0 | toString | | file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toString | +| file://:0:0:0:0 | toSurrogates | +| file://:0:0:0:0 | toTemporal | +| file://:0:0:0:0 | toTitleCase | +| file://:0:0:0:0 | toTitleCase | +| file://:0:0:0:0 | toTotalMonths | +| file://:0:0:0:0 | toURI | +| file://:0:0:0:0 | toURI | +| file://:0:0:0:0 | toURL | +| file://:0:0:0:0 | toURL | +| file://:0:0:0:0 | toUnresolved | +| file://:0:0:0:0 | toUnsignedLong | +| file://:0:0:0:0 | toUnsignedString | +| file://:0:0:0:0 | toUnsignedString | +| file://:0:0:0:0 | toUnsignedString | +| file://:0:0:0:0 | toUnsignedString | +| file://:0:0:0:0 | toUnsignedString0 | +| file://:0:0:0:0 | toUpperCase | +| file://:0:0:0:0 | toUpperCase | +| file://:0:0:0:0 | toUpperCase | +| file://:0:0:0:0 | toUpperCase | +| file://:0:0:0:0 | toUpperCaseCharArray | +| file://:0:0:0:0 | toUpperCaseEx | +| file://:0:0:0:0 | toUri | +| file://:0:0:0:0 | toZonedDateTime | +| file://:0:0:0:0 | topClass | +| file://:0:0:0:0 | topClass | +| file://:0:0:0:0 | topLevelExec | +| file://:0:0:0:0 | topSpecies | +| file://:0:0:0:0 | topSpecies | +| file://:0:0:0:0 | topSpeciesKey | +| file://:0:0:0:0 | topSpeciesKey | +| file://:0:0:0:0 | traceInterpreter | +| file://:0:0:0:0 | traceInterpreter | +| file://:0:0:0:0 | transfer | +| file://:0:0:0:0 | transferAfterCancelledWait | +| file://:0:0:0:0 | transferAfterCancelledWait | +| file://:0:0:0:0 | transferAfterCancelledWait | +| file://:0:0:0:0 | transferAfterCancelledWait | +| file://:0:0:0:0 | transferForSignal | +| file://:0:0:0:0 | transferForSignal | +| file://:0:0:0:0 | transferForSignal | +| file://:0:0:0:0 | transferForSignal | +| file://:0:0:0:0 | transferFrom | +| file://:0:0:0:0 | transferTo | +| file://:0:0:0:0 | transferTo | +| file://:0:0:0:0 | transferTo | +| file://:0:0:0:0 | transferTo | +| file://:0:0:0:0 | transformHelper | +| file://:0:0:0:0 | transformHelper | +| file://:0:0:0:0 | transformHelperType | +| file://:0:0:0:0 | transformMethods | +| file://:0:0:0:0 | transformMethods | +| file://:0:0:0:0 | trim | +| file://:0:0:0:0 | trimToSize | +| file://:0:0:0:0 | trimToSize | +| file://:0:0:0:0 | trimToSize | +| file://:0:0:0:0 | trimToSize | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncate | +| file://:0:0:0:0 | truncatedTo | +| file://:0:0:0:0 | truncatedTo | +| file://:0:0:0:0 | truncatedTo | +| file://:0:0:0:0 | truncatedTo | +| file://:0:0:0:0 | truncatedTo | +| file://:0:0:0:0 | truncatedTo | +| file://:0:0:0:0 | truncatedTo | +| file://:0:0:0:0 | tryAcquire | +| file://:0:0:0:0 | tryAcquire | +| file://:0:0:0:0 | tryAcquire | +| file://:0:0:0:0 | tryAcquire | +| file://:0:0:0:0 | tryAcquireNanos | +| file://:0:0:0:0 | tryAcquireNanos | +| file://:0:0:0:0 | tryAcquireNanos | +| file://:0:0:0:0 | tryAcquireNanos | +| file://:0:0:0:0 | tryAcquireShared | +| file://:0:0:0:0 | tryAcquireShared | +| file://:0:0:0:0 | tryAcquireShared | +| file://:0:0:0:0 | tryAcquireShared | +| file://:0:0:0:0 | tryAcquireSharedNanos | +| file://:0:0:0:0 | tryAcquireSharedNanos | +| file://:0:0:0:0 | tryAcquireSharedNanos | +| file://:0:0:0:0 | tryAcquireSharedNanos | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryAdvance | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryComplete | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalHelp | +| file://:0:0:0:0 | tryExternalUnpush | +| file://:0:0:0:0 | tryLock | +| file://:0:0:0:0 | tryLock | +| file://:0:0:0:0 | tryLock | +| file://:0:0:0:0 | tryLock | +| file://:0:0:0:0 | tryLock | +| file://:0:0:0:0 | tryLock | +| file://:0:0:0:0 | tryLock | +| file://:0:0:0:0 | tryLock | +| file://:0:0:0:0 | tryLock | +| file://:0:0:0:0 | tryLock | +| file://:0:0:0:0 | tryLockPhase | +| file://:0:0:0:0 | tryLockedUnpush | +| file://:0:0:0:0 | tryRelease | +| file://:0:0:0:0 | tryRelease | +| file://:0:0:0:0 | tryRelease | +| file://:0:0:0:0 | tryRelease | +| file://:0:0:0:0 | tryReleaseShared | +| file://:0:0:0:0 | tryReleaseShared | +| file://:0:0:0:0 | tryReleaseShared | +| file://:0:0:0:0 | tryReleaseShared | +| file://:0:0:0:0 | tryRemoveAndExec | +| file://:0:0:0:0 | trySetAccessible | +| file://:0:0:0:0 | trySetAccessible | +| file://:0:0:0:0 | trySetAccessible | +| file://:0:0:0:0 | trySetAccessible | +| file://:0:0:0:0 | trySetAccessible | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | trySplit | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnfork | +| file://:0:0:0:0 | tryUnpush | +| file://:0:0:0:0 | type | +| file://:0:0:0:0 | type | +| file://:0:0:0:0 | type | +| file://:0:0:0:0 | type | +| file://:0:0:0:0 | type | +| file://:0:0:0:0 | type | +| file://:0:0:0:0 | type | +| file://:0:0:0:0 | type | +| file://:0:0:0:0 | typeChar | +| file://:0:0:0:0 | typeCheck | +| file://:0:0:0:0 | typeLoadOp | +| file://:0:0:0:0 | unalignedAccess | +| file://:0:0:0:0 | unaryMinus | +| file://:0:0:0:0 | unaryMinus | +| file://:0:0:0:0 | unaryMinus | +| file://:0:0:0:0 | unaryPlus | +| file://:0:0:0:0 | unaryPlus | +| file://:0:0:0:0 | unaryPlus | +| file://:0:0:0:0 | uncaughtException | +| file://:0:0:0:0 | uncaughtException | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncheckedThrow | +| file://:0:0:0:0 | uncustomize | +| file://:0:0:0:0 | unload | +| file://:0:0:0:0 | unlock | +| file://:0:0:0:0 | unlock | +| file://:0:0:0:0 | unlock | +| file://:0:0:0:0 | unmappableCharacterAction | +| file://:0:0:0:0 | unmappableCharacterAction | +| file://:0:0:0:0 | unmappableForLength | +| file://:0:0:0:0 | unmaskNull | +| file://:0:0:0:0 | unmaskNull | +| file://:0:0:0:0 | unordered | +| file://:0:0:0:0 | unordered | +| file://:0:0:0:0 | unordered | +| file://:0:0:0:0 | unordered | +| file://:0:0:0:0 | unordered | +| file://:0:0:0:0 | unpark | +| file://:0:0:0:0 | unparkSuccessor | +| file://:0:0:0:0 | unparkSuccessor | +| file://:0:0:0:0 | unparkSuccessor | +| file://:0:0:0:0 | unregisterCleanup | +| file://:0:0:0:0 | unsupported | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | until | +| file://:0:0:0:0 | untreeify | +| file://:0:0:0:0 | unwrap | +| file://:0:0:0:0 | updateAndGet | +| file://:0:0:0:0 | updateAndGet | +| file://:0:0:0:0 | updateForm | +| file://:0:0:0:0 | updateForm | +| file://:0:0:0:0 | updateVarForm | +| file://:0:0:0:0 | useCount | +| file://:0:0:0:0 | useCount | +| file://:0:0:0:0 | useProtocolVersion | +| file://:0:0:0:0 | uses | +| file://:0:0:0:0 | uses | +| file://:0:0:0:0 | ushr | +| file://:0:0:0:0 | ushr | +| file://:0:0:0:0 | valid | +| file://:0:0:0:0 | validateObject | +| file://:0:0:0:0 | value | +| file://:0:0:0:0 | value | +| file://:0:0:0:0 | value | +| file://:0:0:0:0 | value | +| file://:0:0:0:0 | value | +| file://:0:0:0:0 | valueFromMethodName | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOf | +| file://:0:0:0:0 | valueOfCodePoint | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | values | +| file://:0:0:0:0 | varHandleInvokeLinkerMethod | +| file://:0:0:0:0 | varHandleMethodExactInvoker | +| file://:0:0:0:0 | varHandleMethodInvoker | +| file://:0:0:0:0 | varType | +| file://:0:0:0:0 | verify | +| file://:0:0:0:0 | verify | +| file://:0:0:0:0 | verify | +| file://:0:0:0:0 | verifyAccess | +| file://:0:0:0:0 | verifyAccess | +| file://:0:0:0:0 | verifyAccess | +| file://:0:0:0:0 | verifyAccess | +| file://:0:0:0:0 | verifyAccess | +| file://:0:0:0:0 | verifyParameters | +| file://:0:0:0:0 | verifyParameters | +| file://:0:0:0:0 | version | +| file://:0:0:0:0 | version | +| file://:0:0:0:0 | version | +| file://:0:0:0:0 | version | +| file://:0:0:0:0 | version | +| file://:0:0:0:0 | viewAsType | +| file://:0:0:0:0 | viewAsType | +| file://:0:0:0:0 | viewAsTypeChecks | +| file://:0:0:0:0 | viewAsTypeChecks | +| file://:0:0:0:0 | visit | +| file://:0:0:0:0 | visit | +| file://:0:0:0:0 | visit | +| file://:0:0:0:0 | visitAnnotation | +| file://:0:0:0:0 | visitAnnotation | +| file://:0:0:0:0 | visitAnnotation | +| file://:0:0:0:0 | visitAnnotation | +| file://:0:0:0:0 | visitAnnotation | +| file://:0:0:0:0 | visitAnnotation | +| file://:0:0:0:0 | visitAnnotation | +| file://:0:0:0:0 | visitAnnotationDefault | +| file://:0:0:0:0 | visitAnnotationDefault | +| file://:0:0:0:0 | visitArray | +| file://:0:0:0:0 | visitArrayTypeSignature | +| file://:0:0:0:0 | visitArrayTypeSignature | +| file://:0:0:0:0 | visitArrayTypeSignature | +| file://:0:0:0:0 | visitAttribute | +| file://:0:0:0:0 | visitAttribute | +| file://:0:0:0:0 | visitAttribute | +| file://:0:0:0:0 | visitAttribute | +| file://:0:0:0:0 | visitAttribute | +| file://:0:0:0:0 | visitAttribute | +| file://:0:0:0:0 | visitBooleanSignature | +| file://:0:0:0:0 | visitBooleanSignature | +| file://:0:0:0:0 | visitBooleanSignature | +| file://:0:0:0:0 | visitBottomSignature | +| file://:0:0:0:0 | visitBottomSignature | +| file://:0:0:0:0 | visitBottomSignature | +| file://:0:0:0:0 | visitByteSignature | +| file://:0:0:0:0 | visitByteSignature | +| file://:0:0:0:0 | visitByteSignature | +| file://:0:0:0:0 | visitCharSignature | +| file://:0:0:0:0 | visitCharSignature | +| file://:0:0:0:0 | visitCharSignature | +| file://:0:0:0:0 | visitClassSignature | +| file://:0:0:0:0 | visitClassTypeSignature | +| file://:0:0:0:0 | visitClassTypeSignature | +| file://:0:0:0:0 | visitClassTypeSignature | +| file://:0:0:0:0 | visitCode | +| file://:0:0:0:0 | visitCode | +| file://:0:0:0:0 | visitDoubleSignature | +| file://:0:0:0:0 | visitDoubleSignature | +| file://:0:0:0:0 | visitDoubleSignature | +| file://:0:0:0:0 | visitEnd | +| file://:0:0:0:0 | visitEnd | +| file://:0:0:0:0 | visitEnd | +| file://:0:0:0:0 | visitEnd | +| file://:0:0:0:0 | visitEnd | +| file://:0:0:0:0 | visitEnd | +| file://:0:0:0:0 | visitEnd | +| file://:0:0:0:0 | visitEnd | +| file://:0:0:0:0 | visitEnum | +| file://:0:0:0:0 | visitExport | +| file://:0:0:0:0 | visitField | +| file://:0:0:0:0 | visitField | +| file://:0:0:0:0 | visitFieldInsn | +| file://:0:0:0:0 | visitFieldInsn | +| file://:0:0:0:0 | visitFloatSignature | +| file://:0:0:0:0 | visitFloatSignature | +| file://:0:0:0:0 | visitFloatSignature | +| file://:0:0:0:0 | visitFormalTypeParameter | +| file://:0:0:0:0 | visitFormalTypeParameter | +| file://:0:0:0:0 | visitFormalTypeParameter | +| file://:0:0:0:0 | visitFrame | +| file://:0:0:0:0 | visitFrame | +| file://:0:0:0:0 | visitIincInsn | +| file://:0:0:0:0 | visitIincInsn | +| file://:0:0:0:0 | visitInnerClass | +| file://:0:0:0:0 | visitInnerClass | +| file://:0:0:0:0 | visitInsn | +| file://:0:0:0:0 | visitInsn | +| file://:0:0:0:0 | visitInsnAnnotation | +| file://:0:0:0:0 | visitInsnAnnotation | +| file://:0:0:0:0 | visitIntInsn | +| file://:0:0:0:0 | visitIntInsn | +| file://:0:0:0:0 | visitIntSignature | +| file://:0:0:0:0 | visitIntSignature | +| file://:0:0:0:0 | visitIntSignature | +| file://:0:0:0:0 | visitInvokeDynamicInsn | +| file://:0:0:0:0 | visitInvokeDynamicInsn | +| file://:0:0:0:0 | visitJumpInsn | +| file://:0:0:0:0 | visitJumpInsn | +| file://:0:0:0:0 | visitLabel | +| file://:0:0:0:0 | visitLabel | +| file://:0:0:0:0 | visitLdcInsn | +| file://:0:0:0:0 | visitLdcInsn | +| file://:0:0:0:0 | visitLineNumber | +| file://:0:0:0:0 | visitLineNumber | +| file://:0:0:0:0 | visitLocalVariable | +| file://:0:0:0:0 | visitLocalVariable | +| file://:0:0:0:0 | visitLocalVariableAnnotation | +| file://:0:0:0:0 | visitLocalVariableAnnotation | +| file://:0:0:0:0 | visitLongSignature | +| file://:0:0:0:0 | visitLongSignature | +| file://:0:0:0:0 | visitLongSignature | +| file://:0:0:0:0 | visitLookupSwitchInsn | +| file://:0:0:0:0 | visitLookupSwitchInsn | +| file://:0:0:0:0 | visitMainClass | +| file://:0:0:0:0 | visitMaxs | +| file://:0:0:0:0 | visitMaxs | +| file://:0:0:0:0 | visitMethod | +| file://:0:0:0:0 | visitMethod | +| file://:0:0:0:0 | visitMethodInsn | +| file://:0:0:0:0 | visitMethodInsn | +| file://:0:0:0:0 | visitMethodInsn | +| file://:0:0:0:0 | visitMethodInsn | +| file://:0:0:0:0 | visitMethodTypeSignature | +| file://:0:0:0:0 | visitModule | +| file://:0:0:0:0 | visitModule | +| file://:0:0:0:0 | visitMultiANewArrayInsn | +| file://:0:0:0:0 | visitMultiANewArrayInsn | +| file://:0:0:0:0 | visitOpen | +| file://:0:0:0:0 | visitOuterClass | +| file://:0:0:0:0 | visitOuterClass | +| file://:0:0:0:0 | visitPackage | +| file://:0:0:0:0 | visitParameter | +| file://:0:0:0:0 | visitParameter | +| file://:0:0:0:0 | visitParameterAnnotation | +| file://:0:0:0:0 | visitParameterAnnotation | +| file://:0:0:0:0 | visitProvide | +| file://:0:0:0:0 | visitRequire | +| file://:0:0:0:0 | visitShortSignature | +| file://:0:0:0:0 | visitShortSignature | +| file://:0:0:0:0 | visitShortSignature | +| file://:0:0:0:0 | visitSimpleClassTypeSignature | +| file://:0:0:0:0 | visitSimpleClassTypeSignature | +| file://:0:0:0:0 | visitSimpleClassTypeSignature | +| file://:0:0:0:0 | visitSource | +| file://:0:0:0:0 | visitSource | +| file://:0:0:0:0 | visitSubroutine | +| file://:0:0:0:0 | visitTableSwitchInsn | +| file://:0:0:0:0 | visitTableSwitchInsn | +| file://:0:0:0:0 | visitTryCatchAnnotation | +| file://:0:0:0:0 | visitTryCatchAnnotation | +| file://:0:0:0:0 | visitTryCatchBlock | +| file://:0:0:0:0 | visitTryCatchBlock | +| file://:0:0:0:0 | visitTypeAnnotation | +| file://:0:0:0:0 | visitTypeAnnotation | +| file://:0:0:0:0 | visitTypeAnnotation | +| file://:0:0:0:0 | visitTypeAnnotation | +| file://:0:0:0:0 | visitTypeAnnotation | +| file://:0:0:0:0 | visitTypeAnnotation | +| file://:0:0:0:0 | visitTypeInsn | +| file://:0:0:0:0 | visitTypeInsn | +| file://:0:0:0:0 | visitTypeVariableSignature | +| file://:0:0:0:0 | visitTypeVariableSignature | +| file://:0:0:0:0 | visitTypeVariableSignature | +| file://:0:0:0:0 | visitUse | +| file://:0:0:0:0 | visitVarInsn | +| file://:0:0:0:0 | visitVarInsn | +| file://:0:0:0:0 | visitVoidDescriptor | +| file://:0:0:0:0 | visitVoidDescriptor | +| file://:0:0:0:0 | visitVoidDescriptor | +| file://:0:0:0:0 | visitWildcard | +| file://:0:0:0:0 | visitWildcard | +| file://:0:0:0:0 | visitWildcard | +| file://:0:0:0:0 | wait | +| file://:0:0:0:0 | wait | +| file://:0:0:0:0 | wait | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferencePendingList | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | waitForReferenceProcessing | +| file://:0:0:0:0 | walk | +| file://:0:0:0:0 | watchable | +| file://:0:0:0:0 | weakCompareAndSet | +| file://:0:0:0:0 | weakCompareAndSet | +| file://:0:0:0:0 | weakCompareAndSet | +| file://:0:0:0:0 | weakCompareAndSetAcquire | +| file://:0:0:0:0 | weakCompareAndSetAcquire | +| file://:0:0:0:0 | weakCompareAndSetAcquire | +| file://:0:0:0:0 | weakCompareAndSetBoolean | +| file://:0:0:0:0 | weakCompareAndSetBooleanAcquire | +| file://:0:0:0:0 | weakCompareAndSetBooleanPlain | +| file://:0:0:0:0 | weakCompareAndSetBooleanRelease | +| file://:0:0:0:0 | weakCompareAndSetByte | +| file://:0:0:0:0 | weakCompareAndSetByteAcquire | +| file://:0:0:0:0 | weakCompareAndSetBytePlain | +| file://:0:0:0:0 | weakCompareAndSetByteRelease | +| file://:0:0:0:0 | weakCompareAndSetChar | +| file://:0:0:0:0 | weakCompareAndSetCharAcquire | +| file://:0:0:0:0 | weakCompareAndSetCharPlain | +| file://:0:0:0:0 | weakCompareAndSetCharRelease | +| file://:0:0:0:0 | weakCompareAndSetDouble | +| file://:0:0:0:0 | weakCompareAndSetDoubleAcquire | +| file://:0:0:0:0 | weakCompareAndSetDoublePlain | +| file://:0:0:0:0 | weakCompareAndSetDoubleRelease | +| file://:0:0:0:0 | weakCompareAndSetFloat | +| file://:0:0:0:0 | weakCompareAndSetFloatAcquire | +| file://:0:0:0:0 | weakCompareAndSetFloatPlain | +| file://:0:0:0:0 | weakCompareAndSetFloatRelease | +| file://:0:0:0:0 | weakCompareAndSetInt | +| file://:0:0:0:0 | weakCompareAndSetIntAcquire | +| file://:0:0:0:0 | weakCompareAndSetIntPlain | +| file://:0:0:0:0 | weakCompareAndSetIntRelease | +| file://:0:0:0:0 | weakCompareAndSetLong | +| file://:0:0:0:0 | weakCompareAndSetLongAcquire | +| file://:0:0:0:0 | weakCompareAndSetLongPlain | +| file://:0:0:0:0 | weakCompareAndSetLongRelease | +| file://:0:0:0:0 | weakCompareAndSetObject | +| file://:0:0:0:0 | weakCompareAndSetObjectAcquire | +| file://:0:0:0:0 | weakCompareAndSetObjectPlain | +| file://:0:0:0:0 | weakCompareAndSetObjectRelease | +| file://:0:0:0:0 | weakCompareAndSetPlain | +| file://:0:0:0:0 | weakCompareAndSetPlain | +| file://:0:0:0:0 | weakCompareAndSetPlain | +| file://:0:0:0:0 | weakCompareAndSetRelease | +| file://:0:0:0:0 | weakCompareAndSetRelease | +| file://:0:0:0:0 | weakCompareAndSetRelease | +| file://:0:0:0:0 | weakCompareAndSetShort | +| file://:0:0:0:0 | weakCompareAndSetShortAcquire | +| file://:0:0:0:0 | weakCompareAndSetShortPlain | +| file://:0:0:0:0 | weakCompareAndSetShortRelease | +| file://:0:0:0:0 | weakCompareAndSetVolatile | +| file://:0:0:0:0 | weakCompareAndSetVolatile | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | with | +| file://:0:0:0:0 | withChronology | +| file://:0:0:0:0 | withConstraint | +| file://:0:0:0:0 | withDayOfMonth | +| file://:0:0:0:0 | withDayOfMonth | +| file://:0:0:0:0 | withDayOfMonth | +| file://:0:0:0:0 | withDayOfMonth | +| file://:0:0:0:0 | withDayOfYear | +| file://:0:0:0:0 | withDayOfYear | +| file://:0:0:0:0 | withDayOfYear | +| file://:0:0:0:0 | withDayOfYear | +| file://:0:0:0:0 | withDays | +| file://:0:0:0:0 | withDecimalSeparator | +| file://:0:0:0:0 | withDecimalStyle | +| file://:0:0:0:0 | withEarlierOffsetAtOverlap | +| file://:0:0:0:0 | withEarlierOffsetAtOverlap | +| file://:0:0:0:0 | withFixedOffsetZone | +| file://:0:0:0:0 | withHour | +| file://:0:0:0:0 | withHour | +| file://:0:0:0:0 | withHour | +| file://:0:0:0:0 | withHour | +| file://:0:0:0:0 | withHour | +| file://:0:0:0:0 | withInitial | +| file://:0:0:0:0 | withInitial | +| file://:0:0:0:0 | withInternalMemberName | +| file://:0:0:0:0 | withInternalMemberName | +| file://:0:0:0:0 | withLaterOffsetAtOverlap | +| file://:0:0:0:0 | withLaterOffsetAtOverlap | +| file://:0:0:0:0 | withLocale | +| file://:0:0:0:0 | withMinute | +| file://:0:0:0:0 | withMinute | +| file://:0:0:0:0 | withMinute | +| file://:0:0:0:0 | withMinute | +| file://:0:0:0:0 | withMinute | +| file://:0:0:0:0 | withMonth | +| file://:0:0:0:0 | withMonth | +| file://:0:0:0:0 | withMonth | +| file://:0:0:0:0 | withMonth | +| file://:0:0:0:0 | withMonths | +| file://:0:0:0:0 | withNano | +| file://:0:0:0:0 | withNano | +| file://:0:0:0:0 | withNano | +| file://:0:0:0:0 | withNano | +| file://:0:0:0:0 | withNano | +| file://:0:0:0:0 | withNanos | +| file://:0:0:0:0 | withNegativeSign | +| file://:0:0:0:0 | withOffsetSameInstant | +| file://:0:0:0:0 | withOffsetSameInstant | +| file://:0:0:0:0 | withOffsetSameLocal | +| file://:0:0:0:0 | withOffsetSameLocal | +| file://:0:0:0:0 | withOptional | +| file://:0:0:0:0 | withPositiveSign | +| file://:0:0:0:0 | withResolverFields | +| file://:0:0:0:0 | withResolverFields | +| file://:0:0:0:0 | withResolverStyle | +| file://:0:0:0:0 | withSecond | +| file://:0:0:0:0 | withSecond | +| file://:0:0:0:0 | withSecond | +| file://:0:0:0:0 | withSecond | +| file://:0:0:0:0 | withSecond | +| file://:0:0:0:0 | withSeconds | +| file://:0:0:0:0 | withVarargs | +| file://:0:0:0:0 | withVarargs | +| file://:0:0:0:0 | withYear | +| file://:0:0:0:0 | withYear | +| file://:0:0:0:0 | withYear | +| file://:0:0:0:0 | withYear | +| file://:0:0:0:0 | withYears | +| file://:0:0:0:0 | withZeroDigit | +| file://:0:0:0:0 | withZone | +| file://:0:0:0:0 | withZone | +| file://:0:0:0:0 | withZone | +| file://:0:0:0:0 | withZone | +| file://:0:0:0:0 | withZone | +| file://:0:0:0:0 | withZone | +| file://:0:0:0:0 | withZoneSameInstant | +| file://:0:0:0:0 | withZoneSameInstant | +| file://:0:0:0:0 | withZoneSameLocal | +| file://:0:0:0:0 | withZoneSameLocal | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrap | +| file://:0:0:0:0 | wrapperSimpleName | +| file://:0:0:0:0 | wrapperType | +| file://:0:0:0:0 | wrapperType | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | write | +| file://:0:0:0:0 | writeBoolean | +| file://:0:0:0:0 | writeBoolean | +| file://:0:0:0:0 | writeBoolean | +| file://:0:0:0:0 | writeByte | +| file://:0:0:0:0 | writeByte | +| file://:0:0:0:0 | writeByte | +| file://:0:0:0:0 | writeBytes | +| file://:0:0:0:0 | writeBytes | +| file://:0:0:0:0 | writeBytes | +| file://:0:0:0:0 | writeChar | +| file://:0:0:0:0 | writeChar | +| file://:0:0:0:0 | writeChar | +| file://:0:0:0:0 | writeChars | +| file://:0:0:0:0 | writeChars | +| file://:0:0:0:0 | writeChars | +| file://:0:0:0:0 | writeClassDescriptor | +| file://:0:0:0:0 | writeComments | +| file://:0:0:0:0 | writeDouble | +| file://:0:0:0:0 | writeDouble | +| file://:0:0:0:0 | writeDouble | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeExternal | +| file://:0:0:0:0 | writeFields | +| file://:0:0:0:0 | writeFloat | +| file://:0:0:0:0 | writeFloat | +| file://:0:0:0:0 | writeFloat | +| file://:0:0:0:0 | writeHashtable | +| file://:0:0:0:0 | writeHashtable | +| file://:0:0:0:0 | writeHashtable | +| file://:0:0:0:0 | writeInt | +| file://:0:0:0:0 | writeInt | +| file://:0:0:0:0 | writeInt | +| file://:0:0:0:0 | writeLong | +| file://:0:0:0:0 | writeLong | +| file://:0:0:0:0 | writeLong | +| file://:0:0:0:0 | writeNonProxy | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObject | +| file://:0:0:0:0 | writeObjectForSerialization | +| file://:0:0:0:0 | writeObjectOverride | +| file://:0:0:0:0 | writeReplace | +| file://:0:0:0:0 | writeReplace | +| file://:0:0:0:0 | writeReplace | +| file://:0:0:0:0 | writeReplace | +| file://:0:0:0:0 | writeReplace | +| file://:0:0:0:0 | writeReplaceForSerialization | +| file://:0:0:0:0 | writeShort | +| file://:0:0:0:0 | writeShort | +| file://:0:0:0:0 | writeShort | +| file://:0:0:0:0 | writeStreamHeader | +| file://:0:0:0:0 | writeTypeString | +| file://:0:0:0:0 | writeUTF | +| file://:0:0:0:0 | writeUTF | +| file://:0:0:0:0 | writeUTF | +| file://:0:0:0:0 | writeUnshared | +| file://:0:0:0:0 | xor | +| file://:0:0:0:0 | xor | +| file://:0:0:0:0 | xor | +| file://:0:0:0:0 | xor | +| file://:0:0:0:0 | yield | +| file://:0:0:0:0 | yield | +| file://:0:0:0:0 | yield | +| file://:0:0:0:0 | zero | +| file://:0:0:0:0 | zero | +| file://:0:0:0:0 | zeroForm | +| file://:0:0:0:0 | zoneNameStyleIndex | +| file://:0:0:0:0 | zonedDateTime | +| file://:0:0:0:0 | zonedDateTime | +| file://:0:0:0:0 | zonedDateTime | +| file://:0:0:0:0 | zonedDateTime | +| file://:0:0:0:0 | zonedDateTime | +| file://:0:0:0:0 | zonedDateTime | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | | methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | equals | @@ -25,7 +13937,620 @@ methods | methods.kt:6:5:7:5 | classMethod | | methods.kt:9:5:12:5 | anotherClassMethod | constructors +| file://:0:0:0:0 | AbstractChronology | +| file://:0:0:0:0 | AbstractCollection | +| file://:0:0:0:0 | AbstractExecutorService | +| file://:0:0:0:0 | AbstractInterruptibleChannel | +| file://:0:0:0:0 | AbstractList | +| file://:0:0:0:0 | AbstractMap | +| file://:0:0:0:0 | AbstractOwnableSynchronizer | +| file://:0:0:0:0 | AbstractQueuedSynchronizer | +| file://:0:0:0:0 | AbstractRepository | +| file://:0:0:0:0 | AbstractSet | +| file://:0:0:0:0 | AbstractStringBuilder | +| file://:0:0:0:0 | AbstractStringBuilder | +| file://:0:0:0:0 | AccessControlContext | +| file://:0:0:0:0 | AccessControlContext | +| file://:0:0:0:0 | AccessControlContext | +| file://:0:0:0:0 | AccessControlContext | +| file://:0:0:0:0 | AccessControlContext | +| file://:0:0:0:0 | AccessControlContext | +| file://:0:0:0:0 | AccessDescriptor | +| file://:0:0:0:0 | AccessibleObject | +| file://:0:0:0:0 | AdaptedCallable | +| file://:0:0:0:0 | AdaptedRunnable | +| file://:0:0:0:0 | AdaptedRunnableAction | +| file://:0:0:0:0 | AnnotationVisitor | +| file://:0:0:0:0 | AnnotationVisitor | | file://:0:0:0:0 | Any | +| file://:0:0:0:0 | Array | +| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | +| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | +| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | +| file://:0:0:0:0 | ArrayList | +| file://:0:0:0:0 | ArrayList | +| file://:0:0:0:0 | ArrayList | +| file://:0:0:0:0 | ArrayListSpliterator | +| file://:0:0:0:0 | AsynchronousFileChannel | +| file://:0:0:0:0 | AtomicInteger | +| file://:0:0:0:0 | AtomicInteger | +| file://:0:0:0:0 | AtomicReference | +| file://:0:0:0:0 | AtomicReference | +| file://:0:0:0:0 | Attribute | +| file://:0:0:0:0 | Attribute | +| file://:0:0:0:0 | AuthPermission | +| file://:0:0:0:0 | AuthPermission | +| file://:0:0:0:0 | AuthPermissionHolder | +| file://:0:0:0:0 | BaseIterator | +| file://:0:0:0:0 | BasicPermission | +| file://:0:0:0:0 | BasicPermission | +| file://:0:0:0:0 | BigInteger | +| file://:0:0:0:0 | BigInteger | +| file://:0:0:0:0 | BigInteger | +| file://:0:0:0:0 | BigInteger | +| file://:0:0:0:0 | BigInteger | +| file://:0:0:0:0 | BigInteger | +| file://:0:0:0:0 | BigInteger | +| file://:0:0:0:0 | BigInteger | +| file://:0:0:0:0 | BigInteger | +| file://:0:0:0:0 | BigInteger | +| file://:0:0:0:0 | Boolean | +| file://:0:0:0:0 | Boolean | +| file://:0:0:0:0 | BoundMethodHandle | +| file://:0:0:0:0 | Buffer | +| file://:0:0:0:0 | BufferedWriter | +| file://:0:0:0:0 | BufferedWriter | +| file://:0:0:0:0 | Builder | +| file://:0:0:0:0 | Builder | +| file://:0:0:0:0 | BulkTask | +| file://:0:0:0:0 | ByteArray | +| file://:0:0:0:0 | ByteArray | +| file://:0:0:0:0 | ByteBuffer | +| file://:0:0:0:0 | ByteBuffer | +| file://:0:0:0:0 | ByteIterator | +| file://:0:0:0:0 | ByteVector | +| file://:0:0:0:0 | ByteVector | +| file://:0:0:0:0 | CallSite | +| file://:0:0:0:0 | CallSite | +| file://:0:0:0:0 | CallSite | +| file://:0:0:0:0 | CaseInsensitiveChar | +| file://:0:0:0:0 | CaseInsensitiveString | +| file://:0:0:0:0 | CertPath | +| file://:0:0:0:0 | CertPathRep | +| file://:0:0:0:0 | Certificate | +| file://:0:0:0:0 | CertificateRep | +| file://:0:0:0:0 | CharArray | +| file://:0:0:0:0 | CharArray | +| file://:0:0:0:0 | CharBuffer | +| file://:0:0:0:0 | CharBuffer | +| file://:0:0:0:0 | CharIterator | +| file://:0:0:0:0 | CharProgression | +| file://:0:0:0:0 | CharRange | +| file://:0:0:0:0 | Character | +| file://:0:0:0:0 | Charset | +| file://:0:0:0:0 | CharsetDecoder | +| file://:0:0:0:0 | CharsetEncoder | +| file://:0:0:0:0 | CharsetEncoder | +| file://:0:0:0:0 | ClassDataSlot | +| file://:0:0:0:0 | ClassLoader | +| file://:0:0:0:0 | ClassLoader | +| file://:0:0:0:0 | ClassLoader | +| file://:0:0:0:0 | ClassNotFoundException | +| file://:0:0:0:0 | ClassNotFoundException | +| file://:0:0:0:0 | ClassNotFoundException | +| file://:0:0:0:0 | ClassReader | +| file://:0:0:0:0 | ClassReader | +| file://:0:0:0:0 | ClassReader | +| file://:0:0:0:0 | ClassReader | +| file://:0:0:0:0 | ClassSpecializer | +| file://:0:0:0:0 | ClassValue | +| file://:0:0:0:0 | ClassValueMap | +| file://:0:0:0:0 | ClassVisitor | +| file://:0:0:0:0 | ClassVisitor | +| file://:0:0:0:0 | ClassWriter | +| file://:0:0:0:0 | ClassWriter | +| file://:0:0:0:0 | ClassicFormat | +| file://:0:0:0:0 | CleanerCleanable | +| file://:0:0:0:0 | CleanerImpl | +| file://:0:0:0:0 | Clock | +| file://:0:0:0:0 | CodeSigner | +| file://:0:0:0:0 | CodeSource | +| file://:0:0:0:0 | CodeSource | +| file://:0:0:0:0 | CollectionView | +| file://:0:0:0:0 | Compiled | +| file://:0:0:0:0 | CompositePrinterParser | +| file://:0:0:0:0 | CompositePrinterParser | +| file://:0:0:0:0 | ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentWeakInternSet | +| file://:0:0:0:0 | ConditionObject | +| file://:0:0:0:0 | Configuration | +| file://:0:0:0:0 | ConstantPool | +| file://:0:0:0:0 | Constructor | +| file://:0:0:0:0 | ConstructorRepository | +| file://:0:0:0:0 | ContentHandler | +| file://:0:0:0:0 | Controller | +| file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | CountedCompleter | +| file://:0:0:0:0 | CounterCell | +| file://:0:0:0:0 | Date | +| file://:0:0:0:0 | Date | +| file://:0:0:0:0 | Date | +| file://:0:0:0:0 | Date | +| file://:0:0:0:0 | Date | +| file://:0:0:0:0 | Date | +| file://:0:0:0:0 | DateTimeFormatter | +| file://:0:0:0:0 | DateTimeParseContext | +| file://:0:0:0:0 | DateTimePrintContext | +| file://:0:0:0:0 | Debug | +| file://:0:0:0:0 | Dictionary | +| file://:0:0:0:0 | Double | +| file://:0:0:0:0 | Double | +| file://:0:0:0:0 | DoubleArray | +| file://:0:0:0:0 | DoubleArray | +| file://:0:0:0:0 | DoubleBuffer | +| file://:0:0:0:0 | DoubleBuffer | +| file://:0:0:0:0 | DoubleIterator | +| file://:0:0:0:0 | DoubleSummaryStatistics | +| file://:0:0:0:0 | DoubleSummaryStatistics | +| file://:0:0:0:0 | Edge | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | Entry | +| file://:0:0:0:0 | EntryIterator | +| file://:0:0:0:0 | EntrySetView | +| file://:0:0:0:0 | EntrySpliterator | +| file://:0:0:0:0 | EntrySpliterator | +| file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | Enum | +| file://:0:0:0:0 | EnumSet | +| file://:0:0:0:0 | Exception | +| file://:0:0:0:0 | Exception | +| file://:0:0:0:0 | Exception | +| file://:0:0:0:0 | Exception | +| file://:0:0:0:0 | Exception | +| file://:0:0:0:0 | ExceptionNode | +| file://:0:0:0:0 | Executable | +| file://:0:0:0:0 | Extension | +| file://:0:0:0:0 | Extension | +| file://:0:0:0:0 | Factory | +| file://:0:0:0:0 | Factory | +| file://:0:0:0:0 | FairSync | +| file://:0:0:0:0 | Field | +| file://:0:0:0:0 | Field | +| file://:0:0:0:0 | FieldPosition | +| file://:0:0:0:0 | FieldPosition | +| file://:0:0:0:0 | FieldPosition | +| file://:0:0:0:0 | FieldVisitor | +| file://:0:0:0:0 | FieldVisitor | +| file://:0:0:0:0 | FieldWriter | +| file://:0:0:0:0 | File | +| file://:0:0:0:0 | File | +| file://:0:0:0:0 | File | +| file://:0:0:0:0 | File | +| file://:0:0:0:0 | FileChannel | +| file://:0:0:0:0 | FileDescriptor | +| file://:0:0:0:0 | FileLock | +| file://:0:0:0:0 | FileLock | +| file://:0:0:0:0 | FileStore | +| file://:0:0:0:0 | FileSystem | +| file://:0:0:0:0 | FileSystemProvider | +| file://:0:0:0:0 | FilterOutputStream | +| file://:0:0:0:0 | FilterValues | +| file://:0:0:0:0 | FixedClock | +| file://:0:0:0:0 | FloatArray | +| file://:0:0:0:0 | FloatArray | +| file://:0:0:0:0 | FloatBuffer | +| file://:0:0:0:0 | FloatBuffer | +| file://:0:0:0:0 | FloatIterator | +| file://:0:0:0:0 | ForEachEntryTask | +| file://:0:0:0:0 | ForEachKeyTask | +| file://:0:0:0:0 | ForEachMappingTask | +| file://:0:0:0:0 | ForEachTransformedEntryTask | +| file://:0:0:0:0 | ForEachTransformedKeyTask | +| file://:0:0:0:0 | ForEachTransformedMappingTask | +| file://:0:0:0:0 | ForEachTransformedValueTask | +| file://:0:0:0:0 | ForEachValueTask | +| file://:0:0:0:0 | ForkJoinPool | +| file://:0:0:0:0 | ForkJoinPool | +| file://:0:0:0:0 | ForkJoinPool | +| file://:0:0:0:0 | ForkJoinPool | +| file://:0:0:0:0 | ForkJoinTask | +| file://:0:0:0:0 | ForkJoinWorkerThread | +| file://:0:0:0:0 | ForkJoinWorkerThread | +| file://:0:0:0:0 | ForkJoinWorkerThread | +| file://:0:0:0:0 | Format | +| file://:0:0:0:0 | ForwardingNode | +| file://:0:0:0:0 | Frame | +| file://:0:0:0:0 | GenericDeclRepository | +| file://:0:0:0:0 | GetField | +| file://:0:0:0:0 | GetReflectionFactoryAction | +| file://:0:0:0:0 | Handle | +| file://:0:0:0:0 | Handle | +| file://:0:0:0:0 | Hashtable | +| file://:0:0:0:0 | Hashtable | +| file://:0:0:0:0 | Hashtable | +| file://:0:0:0:0 | Hashtable | +| file://:0:0:0:0 | Hashtable | +| file://:0:0:0:0 | Hidden | +| file://:0:0:0:0 | IOException | +| file://:0:0:0:0 | IOException | +| file://:0:0:0:0 | IOException | +| file://:0:0:0:0 | IOException | +| file://:0:0:0:0 | Identity | +| file://:0:0:0:0 | IllegalAccessException | +| file://:0:0:0:0 | IllegalAccessException | +| file://:0:0:0:0 | IllegalArgumentException | +| file://:0:0:0:0 | IllegalArgumentException | +| file://:0:0:0:0 | IllegalArgumentException | +| file://:0:0:0:0 | IllegalArgumentException | +| file://:0:0:0:0 | IndexOutOfBoundsException | +| file://:0:0:0:0 | IndexOutOfBoundsException | +| file://:0:0:0:0 | IndexOutOfBoundsException | +| file://:0:0:0:0 | InetAddress | +| file://:0:0:0:0 | InetAddressHolder | +| file://:0:0:0:0 | InetAddressHolder | +| file://:0:0:0:0 | InnocuousForkJoinWorkerThread | +| file://:0:0:0:0 | InnocuousThreadFactory | +| file://:0:0:0:0 | InputStream | +| file://:0:0:0:0 | IntArray | +| file://:0:0:0:0 | IntArray | +| file://:0:0:0:0 | IntBuffer | +| file://:0:0:0:0 | IntBuffer | +| file://:0:0:0:0 | IntIterator | +| file://:0:0:0:0 | IntProgression | +| file://:0:0:0:0 | IntRange | +| file://:0:0:0:0 | IntSummaryStatistics | +| file://:0:0:0:0 | IntSummaryStatistics | +| file://:0:0:0:0 | Integer | +| file://:0:0:0:0 | Integer | +| file://:0:0:0:0 | InterfaceAddress | +| file://:0:0:0:0 | Invokers | +| file://:0:0:0:0 | Item | +| file://:0:0:0:0 | Item | +| file://:0:0:0:0 | Item | +| file://:0:0:0:0 | Key | +| file://:0:0:0:0 | KeyIterator | +| file://:0:0:0:0 | KeySetView | +| file://:0:0:0:0 | KeySpliterator | +| file://:0:0:0:0 | KeySpliterator | +| file://:0:0:0:0 | Label | +| file://:0:0:0:0 | LambdaForm | +| file://:0:0:0:0 | LambdaForm | +| file://:0:0:0:0 | LambdaForm | +| file://:0:0:0:0 | LambdaForm | +| file://:0:0:0:0 | LambdaForm | +| file://:0:0:0:0 | LambdaForm | +| file://:0:0:0:0 | LambdaForm | +| file://:0:0:0:0 | LambdaForm | +| file://:0:0:0:0 | LambdaForm | +| file://:0:0:0:0 | LambdaForm | +| file://:0:0:0:0 | LanguageRange | +| file://:0:0:0:0 | LanguageRange | +| file://:0:0:0:0 | LineReader | +| file://:0:0:0:0 | LineReader | +| file://:0:0:0:0 | Locale | +| file://:0:0:0:0 | Locale | +| file://:0:0:0:0 | Locale | +| file://:0:0:0:0 | LocaleExtensions | +| file://:0:0:0:0 | Long | +| file://:0:0:0:0 | Long | +| file://:0:0:0:0 | LongArray | +| file://:0:0:0:0 | LongArray | +| file://:0:0:0:0 | LongBuffer | +| file://:0:0:0:0 | LongBuffer | +| file://:0:0:0:0 | LongIterator | +| file://:0:0:0:0 | LongProgression | +| file://:0:0:0:0 | LongRange | +| file://:0:0:0:0 | LongSummaryStatistics | +| file://:0:0:0:0 | LongSummaryStatistics | +| file://:0:0:0:0 | MapEntry | +| file://:0:0:0:0 | MapReduceEntriesTask | +| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | +| file://:0:0:0:0 | MapReduceEntriesToIntTask | +| file://:0:0:0:0 | MapReduceEntriesToLongTask | +| file://:0:0:0:0 | MapReduceKeysTask | +| file://:0:0:0:0 | MapReduceKeysToDoubleTask | +| file://:0:0:0:0 | MapReduceKeysToIntTask | +| file://:0:0:0:0 | MapReduceKeysToLongTask | +| file://:0:0:0:0 | MapReduceMappingsTask | +| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | +| file://:0:0:0:0 | MapReduceMappingsToIntTask | +| file://:0:0:0:0 | MapReduceMappingsToLongTask | +| file://:0:0:0:0 | MapReduceValuesTask | +| file://:0:0:0:0 | MapReduceValuesToDoubleTask | +| file://:0:0:0:0 | MapReduceValuesToIntTask | +| file://:0:0:0:0 | MapReduceValuesToLongTask | +| file://:0:0:0:0 | MappedByteBuffer | +| file://:0:0:0:0 | MappedByteBuffer | +| file://:0:0:0:0 | MemberName | +| file://:0:0:0:0 | MemberName | +| file://:0:0:0:0 | MemberName | +| file://:0:0:0:0 | MemberName | +| file://:0:0:0:0 | MemberName | +| file://:0:0:0:0 | MemberName | +| file://:0:0:0:0 | MemberName | +| file://:0:0:0:0 | MemberName | +| file://:0:0:0:0 | MemberName | +| file://:0:0:0:0 | MemberName | +| file://:0:0:0:0 | Method | +| file://:0:0:0:0 | MethodHandle | +| file://:0:0:0:0 | MethodTypeForm | +| file://:0:0:0:0 | MethodVisitor | +| file://:0:0:0:0 | MethodVisitor | +| file://:0:0:0:0 | MethodWriter | +| file://:0:0:0:0 | Module | +| file://:0:0:0:0 | Module | +| file://:0:0:0:0 | Module | +| file://:0:0:0:0 | ModuleDescriptor | +| file://:0:0:0:0 | ModuleReference | +| file://:0:0:0:0 | ModuleVisitor | +| file://:0:0:0:0 | ModuleVisitor | +| file://:0:0:0:0 | Name | +| file://:0:0:0:0 | Name | +| file://:0:0:0:0 | Name | +| file://:0:0:0:0 | Name | +| file://:0:0:0:0 | Name | +| file://:0:0:0:0 | Name | +| file://:0:0:0:0 | NamedFunction | +| file://:0:0:0:0 | NamedFunction | +| file://:0:0:0:0 | NamedFunction | +| file://:0:0:0:0 | NamedFunction | +| file://:0:0:0:0 | NamedFunction | +| file://:0:0:0:0 | NamedFunction | +| file://:0:0:0:0 | NamedFunction | +| file://:0:0:0:0 | NamedPackage | +| file://:0:0:0:0 | NativeLibrary | +| file://:0:0:0:0 | NestHost | +| file://:0:0:0:0 | NestMembers | +| file://:0:0:0:0 | NetworkInterface | +| file://:0:0:0:0 | NetworkInterface | +| file://:0:0:0:0 | Node | +| file://:0:0:0:0 | Node | +| file://:0:0:0:0 | Node | +| file://:0:0:0:0 | Node | +| file://:0:0:0:0 | Node | +| file://:0:0:0:0 | NonfairSync | +| file://:0:0:0:0 | Number | +| file://:0:0:0:0 | Number | +| file://:0:0:0:0 | Object | +| file://:0:0:0:0 | ObjectInputStream | +| file://:0:0:0:0 | ObjectInputStream | +| file://:0:0:0:0 | ObjectOutputStream | +| file://:0:0:0:0 | ObjectOutputStream | +| file://:0:0:0:0 | ObjectStreamClass | +| file://:0:0:0:0 | ObjectStreamException | +| file://:0:0:0:0 | ObjectStreamException | +| file://:0:0:0:0 | ObjectStreamField | +| file://:0:0:0:0 | ObjectStreamField | +| file://:0:0:0:0 | ObjectStreamField | +| file://:0:0:0:0 | ObjectStreamField | +| file://:0:0:0:0 | OffsetClock | +| file://:0:0:0:0 | OptionalDataException | +| file://:0:0:0:0 | OptionalDataException | +| file://:0:0:0:0 | OutputStream | +| file://:0:0:0:0 | Package | +| file://:0:0:0:0 | Package | +| file://:0:0:0:0 | Parameter | +| file://:0:0:0:0 | ParsePosition | +| file://:0:0:0:0 | Parsed | +| file://:0:0:0:0 | Permission | +| file://:0:0:0:0 | PermissionCollection | +| file://:0:0:0:0 | PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanableRef | +| file://:0:0:0:0 | PhantomCleanableRef | +| file://:0:0:0:0 | PhantomReference | +| file://:0:0:0:0 | PolymorphicSignature | +| file://:0:0:0:0 | PrintStream | +| file://:0:0:0:0 | PrintStream | +| file://:0:0:0:0 | PrintStream | +| file://:0:0:0:0 | PrintStream | +| file://:0:0:0:0 | PrintStream | +| file://:0:0:0:0 | PrintStream | +| file://:0:0:0:0 | PrintStream | +| file://:0:0:0:0 | PrintStream | +| file://:0:0:0:0 | PrintStream | +| file://:0:0:0:0 | PrintStream | +| file://:0:0:0:0 | PrintWriter | +| file://:0:0:0:0 | PrintWriter | +| file://:0:0:0:0 | PrintWriter | +| file://:0:0:0:0 | PrintWriter | +| file://:0:0:0:0 | PrintWriter | +| file://:0:0:0:0 | PrintWriter | +| file://:0:0:0:0 | PrintWriter | +| file://:0:0:0:0 | PrintWriter | +| file://:0:0:0:0 | PrintWriter | +| file://:0:0:0:0 | PrintWriter | +| file://:0:0:0:0 | PrintWriter | +| file://:0:0:0:0 | Properties | +| file://:0:0:0:0 | Properties | +| file://:0:0:0:0 | Properties | +| file://:0:0:0:0 | ProtectionDomain | +| file://:0:0:0:0 | ProtectionDomain | +| file://:0:0:0:0 | Provider | +| file://:0:0:0:0 | Provider | +| file://:0:0:0:0 | Proxy | +| file://:0:0:0:0 | PutField | +| file://:0:0:0:0 | Random | +| file://:0:0:0:0 | Random | +| file://:0:0:0:0 | RandomAccessSpliterator | +| file://:0:0:0:0 | RandomDoublesSpliterator | +| file://:0:0:0:0 | RandomIntsSpliterator | +| file://:0:0:0:0 | RandomLongsSpliterator | +| file://:0:0:0:0 | Reader | +| file://:0:0:0:0 | Reader | +| file://:0:0:0:0 | ReduceEntriesTask | +| file://:0:0:0:0 | ReduceKeysTask | +| file://:0:0:0:0 | ReduceValuesTask | +| file://:0:0:0:0 | ReentrantLock | +| file://:0:0:0:0 | ReentrantLock | +| file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | Reference | +| file://:0:0:0:0 | ReferenceQueue | +| file://:0:0:0:0 | ReflectiveOperationException | +| file://:0:0:0:0 | ReflectiveOperationException | +| file://:0:0:0:0 | ReflectiveOperationException | +| file://:0:0:0:0 | ReflectiveOperationException | +| file://:0:0:0:0 | ReservationNode | +| file://:0:0:0:0 | ResolvedModule | +| file://:0:0:0:0 | RunnableExecuteAction | +| file://:0:0:0:0 | RuntimeException | +| file://:0:0:0:0 | RuntimeException | +| file://:0:0:0:0 | RuntimeException | +| file://:0:0:0:0 | RuntimeException | +| file://:0:0:0:0 | RuntimeException | +| file://:0:0:0:0 | RuntimePermission | +| file://:0:0:0:0 | RuntimePermission | +| file://:0:0:0:0 | SearchEntriesTask | +| file://:0:0:0:0 | SearchKeysTask | +| file://:0:0:0:0 | SearchMappingsTask | +| file://:0:0:0:0 | SearchValuesTask | +| file://:0:0:0:0 | Segment | +| file://:0:0:0:0 | SerializablePermission | +| file://:0:0:0:0 | SerializablePermission | +| file://:0:0:0:0 | Service | +| file://:0:0:0:0 | ServiceProvider | +| file://:0:0:0:0 | ShortArray | +| file://:0:0:0:0 | ShortArray | +| file://:0:0:0:0 | ShortBuffer | +| file://:0:0:0:0 | ShortBuffer | +| file://:0:0:0:0 | ShortIterator | +| file://:0:0:0:0 | SimpleEntry | +| file://:0:0:0:0 | SimpleEntry | +| file://:0:0:0:0 | SimpleImmutableEntry | +| file://:0:0:0:0 | SimpleImmutableEntry | +| file://:0:0:0:0 | SocketAddress | +| file://:0:0:0:0 | SoftCleanable | +| file://:0:0:0:0 | SoftCleanable | +| file://:0:0:0:0 | SoftCleanableRef | +| file://:0:0:0:0 | SoftCleanableRef | +| file://:0:0:0:0 | SoftReference | +| file://:0:0:0:0 | SoftReference | +| file://:0:0:0:0 | SpeciesData | +| file://:0:0:0:0 | SpeciesData | +| file://:0:0:0:0 | StackFrameInfo | +| file://:0:0:0:0 | StackTraceElement | +| file://:0:0:0:0 | StackTraceElement | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | String | +| file://:0:0:0:0 | StringBuffer | +| file://:0:0:0:0 | StringBuffer | +| file://:0:0:0:0 | StringBuffer | +| file://:0:0:0:0 | StringBuffer | +| file://:0:0:0:0 | StringBuilder | +| file://:0:0:0:0 | StringBuilder | +| file://:0:0:0:0 | StringBuilder | +| file://:0:0:0:0 | StringBuilder | +| file://:0:0:0:0 | Subject | +| file://:0:0:0:0 | Subject | +| file://:0:0:0:0 | Subset | +| file://:0:0:0:0 | SuppliedThreadLocal | +| file://:0:0:0:0 | Sync | +| file://:0:0:0:0 | SystemClock | +| file://:0:0:0:0 | TableStack | +| file://:0:0:0:0 | Thread | +| file://:0:0:0:0 | Thread | +| file://:0:0:0:0 | Thread | +| file://:0:0:0:0 | Thread | +| file://:0:0:0:0 | Thread | +| file://:0:0:0:0 | Thread | +| file://:0:0:0:0 | Thread | +| file://:0:0:0:0 | Thread | +| file://:0:0:0:0 | Thread | +| file://:0:0:0:0 | Thread | +| file://:0:0:0:0 | ThreadGroup | +| file://:0:0:0:0 | ThreadGroup | +| file://:0:0:0:0 | ThreadLocal | +| file://:0:0:0:0 | ThreadLocalMap | +| file://:0:0:0:0 | Throwable | +| file://:0:0:0:0 | Throwable | +| file://:0:0:0:0 | Throwable | +| file://:0:0:0:0 | Throwable | +| file://:0:0:0:0 | Throwable | +| file://:0:0:0:0 | Throwable | +| file://:0:0:0:0 | Throwable | +| file://:0:0:0:0 | Throwable | +| file://:0:0:0:0 | Throwable | +| file://:0:0:0:0 | Throwable | +| file://:0:0:0:0 | TickClock | +| file://:0:0:0:0 | Timestamp | +| file://:0:0:0:0 | Traverser | +| file://:0:0:0:0 | TreeBin | +| file://:0:0:0:0 | TreeNode | +| file://:0:0:0:0 | TypePath | +| file://:0:0:0:0 | TypesAndInvokers | +| file://:0:0:0:0 | URI | +| file://:0:0:0:0 | URI | +| file://:0:0:0:0 | URI | +| file://:0:0:0:0 | URI | +| file://:0:0:0:0 | URI | +| file://:0:0:0:0 | URI | +| file://:0:0:0:0 | URL | +| file://:0:0:0:0 | URL | +| file://:0:0:0:0 | URL | +| file://:0:0:0:0 | URL | +| file://:0:0:0:0 | URL | +| file://:0:0:0:0 | URL | +| file://:0:0:0:0 | URLConnection | +| file://:0:0:0:0 | URLStreamHandler | +| file://:0:0:0:0 | Unloader | +| file://:0:0:0:0 | UserPrincipalLookupService | +| file://:0:0:0:0 | ValueIterator | +| file://:0:0:0:0 | ValueSpliterator | +| file://:0:0:0:0 | ValueSpliterator | +| file://:0:0:0:0 | ValuesView | +| file://:0:0:0:0 | VarForm | +| file://:0:0:0:0 | VarHandle | +| file://:0:0:0:0 | Version | +| file://:0:0:0:0 | WeakClassKey | +| file://:0:0:0:0 | WeakClassKey | +| file://:0:0:0:0 | WeakCleanable | +| file://:0:0:0:0 | WeakCleanable | +| file://:0:0:0:0 | WeakCleanableRef | +| file://:0:0:0:0 | WeakCleanableRef | +| file://:0:0:0:0 | WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | +| file://:0:0:0:0 | WeakHashMapSpliterator | +| file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | WeakReference | +| file://:0:0:0:0 | WorkQueue | +| file://:0:0:0:0 | Writer | +| file://:0:0:0:0 | Writer | +| file://:0:0:0:0 | WrongMethodTypeException | +| file://:0:0:0:0 | WrongMethodTypeException | +| file://:0:0:0:0 | WrongMethodTypeException | +| file://:0:0:0:0 | WrongMethodTypeException | +| file://:0:0:0:0 | ZoneId | +| file://:0:0:0:0 | ZoneOffsetTransition | +| file://:0:0:0:0 | ZoneOffsetTransition | +| file://:0:0:0:0 | ZoneOffsetTransitionRule | +| file://:0:0:0:0 | ZoneRules | | methods2.kt:7:1:10:1 | Class2 | | methods3.kt:5:1:7:1 | Class3 | | methods.kt:5:1:13:1 | Class | diff --git a/java/ql/test/kotlin/library-tests/methods/parameters.expected b/java/ql/test/kotlin/library-tests/methods/parameters.expected index 0262fa8c97b..27c89d0ca34 100644 --- a/java/ql/test/kotlin/library-tests/methods/parameters.expected +++ b/java/ql/test/kotlin/library-tests/methods/parameters.expected @@ -1,5 +1,10838 @@ +| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | accept | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | accessModeType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accessModeType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accessModeType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | accessModeType | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | accessModeTypeUncached | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accumulateAndGet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accumulateAndGet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | accumulateAndGet | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | accumulateAndGet | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | acquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | acquireShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | acquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 1 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 1 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 1 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | add | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 1 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 1 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 1 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addAndGet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addArgumentForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addArgumentForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addAttribute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addChronoChangedListener | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | addExports | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addExports | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addExports | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addExports | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addExports | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | addFirst | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addLast | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addOne | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addOne | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addOne | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | addOne | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | addOpens | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addOpens | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addOpens | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addOpens | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addOpens | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | addProvider | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addProvider | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addProvider | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | addRange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addRange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addReads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addReads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addReads | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addRequestProperty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addRequestProperty | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToSubroutine | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addToSubroutine | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addUnicodeLocaleAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addUninitializedType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addUninitializedType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | addUses | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addWaiter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addWaiter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | addWaiter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | after | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | alignedSlice | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | alignedSlice | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | alignmentOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | alignmentOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | alignmentOffset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | alignmentOffset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | allMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocateDirect | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocateDirect | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocateInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocateMemory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocateUninitializedArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | allocateUninitializedArray | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | allowThreadSuspension | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | and | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | and | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | and | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | and | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | and | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | and | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | and | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | and | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andNot | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | annotateClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | annotateProxyClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | anyMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | anyMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | anyMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | anyMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | appendClassSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | appendClassSignature | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | appendCodePoint | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | appendCodePoint | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | appendCodePoint | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | appendParameterTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | appendParameterTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | apply | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | apply | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | arg | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | argSlotToParameter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | argument | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | argument | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | arguments | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | arguments | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | arrayBaseOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | arrayIndexScale | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | asCollectorType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asCollectorType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asCollectorType | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | asPrimitiveType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | asSpreaderChecks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asSpreaderChecks | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asSpreaderChecks | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | asSpreaderType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asSpreaderType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | asSpreaderType | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | asSubclass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asTypeCached | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asTypeUncached | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asTypeUncached | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asVarargsCollector | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asVarargsCollector | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | asWrapperType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | associateWithDebugName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | associateWithDebugName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | atDate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atDate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atStartOfDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | atZone | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atZone | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atZone | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atZoneSameInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | atZoneSimilarLocal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | attach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | auditSubclass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | auditSubclass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | await | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | await | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | await | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | await | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | awaitJoin | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | awaitJoin | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | awaitJoin | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | awaitNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | awaitNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | awaitQuiescence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | awaitQuiescence | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | awaitUntil | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | awaitUntil | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | balanceDeletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | balanceDeletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | balanceInsertion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | balanceInsertion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | basicMethodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | basicType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | basicType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | basicType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | basicType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | basicTypeChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | basicTypeChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | basicTypeDesc | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | basicTypeOrds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | basicTypeSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | basicTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | basicTypesOrd | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | batchFor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | batchRemove | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | batchRemove | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | batchRemove | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | batchRemove | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | before | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | between | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | between | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | between | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | between | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | between | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | between | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | between | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | between | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | between | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | between | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentD | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentD | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentD | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentD | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentD | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | bindArgumentF | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentF | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentF | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentF | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentF | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | bindArgumentForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentI | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentI | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentI | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentI | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentI | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | bindArgumentJ | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentJ | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentJ | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentJ | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentJ | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | bindTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bindToLoader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | bitLengthForInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | blockedOn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | blockedOn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | blockedOn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | blockedOn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | blockedOn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cachedLambdaForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cachedMethodHandle | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | callSiteForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | callSiteForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | canAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canConvert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canConvert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | canEncode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canEncode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canRead | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canUse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canonicalize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canonicalize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canonicalize | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | canonicalize | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | canonicalize | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | canonicalizeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | canonicalizeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | casAnnotationType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | casAnnotationType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | casTabAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | casTabAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | casTabAt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | casTabAt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | cast | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cast | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cast | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | castEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | changeEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | changeEntry | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | changeParameterType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | changeParameterType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | changeReturnType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | charAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | charCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | charEquals | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | charEquals | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | charEqualsIgnoreCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | charEqualsIgnoreCase | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkAbstractListModCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkAbstractListModCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkBoundsBeginEnd | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkBoundsBeginEnd | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkBoundsBeginEnd | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkBoundsOffCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkBoundsOffCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkBoundsOffCount | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkClassLoaderPermission | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkClassLoaderPermission | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkCustomized | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkExactType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkExactType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkForTypeAlias | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkGenericType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkGenericType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkInput | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkInput | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkInvariants | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkObjFieldValueTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkObjFieldValueTypes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkOffset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkPermission | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | checkSlotCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkTargetChange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkTargetChange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkValidIntValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkValidIntValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkValidIntValue | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkValidValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkValidValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkValidValue | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkVarHandleExactType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkVarHandleExactType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | checkVarHandleGenericType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | checkVarHandleGenericType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | childValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | childValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | chooseFieldName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | chooseFieldName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | chooseFieldName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | chooseFieldName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | classBCName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | classBCName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | classBCName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | classBCName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | className | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | className | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | classSig | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | classSig | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | classSig | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | classSig | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | clearBit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | cloneWithIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | closeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | codePointAtImpl | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointAtImpl | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointAtImpl | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | codePointBeforeImpl | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointBeforeImpl | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointBeforeImpl | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | codePointCountImpl | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | codePointCountImpl | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | codePointCountImpl | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | codePointOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | collect | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | collectArgumentArrayForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | collectArgumentArrayForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | collectArgumentsForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | collectArgumentsForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | combine | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | combine | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | combine | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | combine | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | combine | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | comparableClassFor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeBoolean | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeBoolean | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeBoolean | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeBooleanAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeBooleanAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeBooleanAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeBooleanAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeBooleanRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeBooleanRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeBooleanRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeBooleanRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeByte | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeByte | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeByteAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeByteAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeByteAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeByteAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeByteRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeByteRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeByteRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeByteRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeChar | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeChar | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeCharAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeCharAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeCharAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeCharAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeCharRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeCharRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeCharRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeCharRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeDouble | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeDouble | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeDoubleAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeDoubleAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeDoubleAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeDoubleAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeDoubleRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeDoubleRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeDoubleRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeDoubleRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeFloat | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeFloat | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeFloatAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeFloatAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeFloatAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeFloatAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeFloatRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeFloatRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeFloatRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeFloatRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeInt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeIntAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeIntAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeIntAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeIntAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeIntRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeIntRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeIntRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeIntRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeLong | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeLongAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeLongAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeLongAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeLongAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeLongRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeLongRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeLongRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeLongRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeObject | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeObject | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeObject | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeObjectAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeObjectAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeObjectAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeObjectAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeObjectRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeObjectRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeObjectRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeObjectRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeShort | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeShort | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeShortAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeShortAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeShortAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeShortAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndExchangeShortRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndExchangeShortRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndExchangeShortRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndExchangeShortRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndSet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSet | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSet | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetBoolean | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetBoolean | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndSetBoolean | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndSetByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetByte | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndSetByte | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndSetChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetChar | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndSetChar | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndSetDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetDouble | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndSetDouble | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndSetFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetFloat | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndSetFloat | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndSetInt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndSetLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndSetLong | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndSetNext | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetNext | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetObject | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetObject | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndSetObject | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetShort | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareAndSetShort | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareAndSetWaitStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareAndSetWaitStatus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareComparables | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareComparables | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareComparables | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | compareMagnitude | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareMagnitude | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareTo0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareToIgnoreCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareUnsigned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareUnsigned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compareUnsigned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compareUnsigned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | comparing | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | comparing | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | comparing | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | comparingByKey | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | comparingByValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | comparingDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | comparingInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | comparingLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complementOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | completed | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | computeValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | concat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | concat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | concat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | concat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | concat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | concat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | concat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | concat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | concat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | configure | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | constantZero | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | contains | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | contentEquals | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contentEquals | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | contextWithPermissions | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | convert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | convert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | convert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | convert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | convert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | convertNumberToI18N | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | convertToDigit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copy | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copy | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copyArrayBoxing | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyArrayBoxing | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyArrayBoxing | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copyArrayBoxing | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | copyArrayBoxing | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | copyArrayUnboxing | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyArrayUnboxing | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyArrayUnboxing | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copyArrayUnboxing | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | copyArrayUnboxing | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | copyConstructor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyConstructor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | copyMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyPool | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | copyValueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyValueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyValueOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyValueOf | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copyWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyWith | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyWith | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyWithExtendD | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyWithExtendD | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyWithExtendD | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copyWithExtendF | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyWithExtendF | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyWithExtendF | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copyWithExtendI | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyWithExtendI | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyWithExtendI | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copyWithExtendJ | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyWithExtendJ | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyWithExtendJ | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | copyWithExtendL | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | copyWithExtendL | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | copyWithExtendL | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | create | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | create | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createContentHandler | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createDateTime | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createDateTime | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | createDirectory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createDirectory | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createFilter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createFilter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createFilter | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createFilter2 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createInheritedMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createInheritedMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createInstance | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createLink | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createLink | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createMap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createMap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createSymbolicLink | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createSymbolicLink | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createSymbolicLink | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | createTempFile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createTempFile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createTempFile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createTempFile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | createTempFile | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | createTransition | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | createURLStreamHandler | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | customize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | date | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | dateEpochDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateEpochDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateEpochDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | datesUntil | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | datesUntil | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | datesUntil | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | daysUntil | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | decode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | decode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | decode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | decode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | decode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | decode | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | decode | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | decodeLoop | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | decodeLoop | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defaulted | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineAnonymousClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineAnonymousClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineAnonymousClass | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineModulesWithManyLoaders | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineModulesWithManyLoaders | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineModulesWithManyLoaders | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineModulesWithManyLoaders | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineModulesWithManyLoaders | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | defineModulesWithOneLoader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineModulesWithOneLoader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | defineModulesWithOneLoader | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineModulesWithOneLoader | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | defineModulesWithOneLoader | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | delete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | delete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | delete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | delete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | delete | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | delete | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | delete | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | deleteCharAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | deleteCharAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | deleteCharAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | deleteIfExists | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | deregisterWorker | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | deregisterWorker | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | deriveFieldTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | deriveFieldTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | deriveTransformHelper | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | deriveTransformHelper | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | deriveTransformHelper | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | deriveTransformHelper | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | desiredAssertionStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | digit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | digit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | digit | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | digit | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | dispatchUncaughtException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dispatchUncaughtException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | displayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | divide | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | divideAndRemainder | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | divideUnsigned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | divideUnsigned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | divideUnsigned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | divideUnsigned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | dividedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dividedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doAcquireShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doAs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAs | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doAs | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | doInvokeAny | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doInvokeAny | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doInvokeAny | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | doubleToLongBits | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doubleToRawLongBits | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | drainTasksTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dropParameterTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dropParameterTypes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | dropWhile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dropWhile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dropWhile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dropWhile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dumpThreads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dumpThreads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dupArgumentForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | dupArgumentForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | effectivelyIdenticalParameters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | effectivelyIdenticalParameters | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | elementAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | elementAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | elementData | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | emitIntConstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | emitIntConstant | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | enableReplaceObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enableResolveObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | encode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | encode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | encode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | encode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | encode | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | encode | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | encodeLoop | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | encodeLoop | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | encodeUTF8 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | encodeUTF8 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | encodeUTF8 | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | end | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | end | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | endOptional | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | endsWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | endsWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | endsWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enq | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enq | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enq | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enqueue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ensureCapacity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ensureCapacity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ensureCapacity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ensureCapacity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ensureCapacityInternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ensureCapacityInternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ensureClassInitialized | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | entry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | entry | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | enumerateStringProperties | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | eq | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | eq | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | eq | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | eq | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p1 | 1 | | file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | | file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | equals | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | equalsIgnoreCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | equalsRange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | equalsRange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | equalsRange | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | eraOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | eraOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | eraOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | execute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | execute | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | execute | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | explicitCastEquivalentToAsType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | exports | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | exports | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | exports | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | exports | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | exports | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | exports | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | exports | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | exports | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | exports | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | extendWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | externalHelpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | externalHelpComplete | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | externalPush | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | failed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | failed | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | fastUUID | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fastUUID | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filter | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | filter | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | filter | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | filterArgumentForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filterArgumentForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | filterLog | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filterLog | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | filterLog | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | filterReturnForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filterReturnForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | filterTags | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filterTags | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | filterTags | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | filterTags | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | filterTags | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | find | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | findBootstrapClassOrNull | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | findEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findFactories | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findFactories | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | findFactory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findFactory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findFactory | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | findFactory | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | findForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findGetter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findGetter | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | findGetter | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | findGetters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findGetters | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | findLibrary | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findLoadedClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findLoader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findModule | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findModule | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findNodeFromTail | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findNodeFromTail | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findNodeFromTail | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findPrimitiveType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findResource | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findResource | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findResource | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | findResources | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findServices | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findSpecies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findSpecies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findSystemClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findTreeNode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findTreeNode | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | findTreeNode | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | findTypeVariable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | findWrapperType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | finishEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | finishEntry | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | firstDayOfYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | flatMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | flatMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | flatMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | flatMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | flatMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | flatMapToDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | flatMapToInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | flatMapToLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | flipBit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | flush | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | flush | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | forBasicType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forBasicType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forDigit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forDigit | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | forEachEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachEntry | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | forEachEntry | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | forEachEntry | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | forEachKey | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachKey | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachKey | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | forEachKey | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | forEachKey | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | forEachOrdered | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachOrdered | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachOrdered | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachOrdered | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forEachValue | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | forEachValue | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | forEachValue | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | forLanguageTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | forName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | forName | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | forPrimitiveType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forPrimitiveType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forWrapperType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | force | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | force | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forceType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | forceType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | format | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | formatTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | formatTo | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | formatToCharacterIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | formatToCharacterIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | formatUnsignedLong0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | formatUnsignedLong0 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | formatUnsignedLong0 | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | formatUnsignedLong0 | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | formatUnsignedLong0 | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | freeMemory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | from | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeEnd | 1 | +| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeEnd | 1 | +| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeEnd | 1 | +| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeStart | 0 | +| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeStart | 0 | +| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeStart | 0 | +| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | step | 2 | +| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | step | 2 | +| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | step | 2 | +| file://:0:0:0:0 | fromDescriptor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fromDescriptor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | fromMethodDescriptorString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fromMethodDescriptorString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | fromMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fromString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fromURI | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fullyRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fullyRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fullyRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | fullyRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | gcd | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | generate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | generate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | generate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | generate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | generateConcreteSpeciesCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | generateConcreteSpeciesCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | generateConcreteSpeciesCode | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | generateConcreteSpeciesCode | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | genericMethodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | genericMethodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | genericMethodType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAddress | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAddress | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAddress | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAddressesFromNameService | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAddressesFromNameService | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAllByName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAllByName0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAllByName0 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAccumulate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAccumulate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAccumulate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAccumulate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAdd | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAdd | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddByte | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddByteAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddByteAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddByteAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddByteRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddByteRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddByteRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddChar | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddCharAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddCharAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddCharAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddCharRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddCharRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddCharRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddDouble | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddDoubleAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddDoubleAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddDoubleAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddDoubleRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddDoubleRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddDoubleRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddFloat | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddFloatAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddFloatAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddFloatAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddFloatRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddFloatRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddFloatRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddIntAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddIntAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddIntAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddIntRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddIntRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddIntRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddLongAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddLongAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddLongAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddLongRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddLongRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddLongRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddShort | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddShortAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddShortAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddShortAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndAddShortRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndAddShortRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndAddShortRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAnd | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndBoolean | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndBoolean | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndBooleanAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndBooleanAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndBooleanAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndBooleanRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndBooleanRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndBooleanRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndByte | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndByteAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndByteAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndByteAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndByteRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndByteRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndByteRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndChar | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndCharAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndCharAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndCharAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndCharRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndCharRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndCharRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndIntAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndIntAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndIntAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndIntRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndIntRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndIntRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndLongAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndLongAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndLongAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndLongRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndLongRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndLongRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndShort | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndShortAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndShortAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndShortAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseAndShortRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseAndShortRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseAndShortRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOr | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrBoolean | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrBoolean | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrBooleanAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrBooleanAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrBooleanAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrBooleanRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrBooleanRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrBooleanRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrByte | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrByteAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrByteAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrByteAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrByteRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrByteRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrByteRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrChar | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrCharAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrCharAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrCharAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrCharRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrCharRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrCharRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrIntAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrIntAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrIntAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrIntRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrIntRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrIntRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrLongAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrLongAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrLongAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrLongRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrLongRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrLongRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrShort | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrShortAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrShortAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrShortAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseOrShortRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseOrShortRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseOrShortRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorBoolean | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorBoolean | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorBooleanAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorBooleanAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorBooleanAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorBooleanRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorBooleanRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorBooleanRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorByte | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorByteAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorByteAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorByteAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorByteRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorByteRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorByteRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorChar | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorCharAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorCharAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorCharAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorCharRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorCharRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorCharRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorIntAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorIntAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorIntAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorIntRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorIntRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorIntRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorLongAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorLongAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorLongAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorLongRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorLongRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorLongRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorShort | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorShortAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorShortAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorShortAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndBitwiseXorShortRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndBitwiseXorShortRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndBitwiseXorShortRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetBoolean | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetBoolean | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetBooleanAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetBooleanAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetBooleanAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetBooleanRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetBooleanRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetBooleanRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetByte | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetByteAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetByteAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetByteAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetByteRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetByteRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetByteRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetChar | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetCharAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetCharAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetCharAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetCharRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetCharRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetCharRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetDouble | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetDoubleAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetDoubleAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetDoubleAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetDoubleRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetDoubleRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetDoubleRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetFloat | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetFloatAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetFloatAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetFloatAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetFloatRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetFloatRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetFloatRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetIntAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetIntAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetIntAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetIntRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetIntRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetIntRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetLongAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetLongAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetLongAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetLongRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetLongRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetLongRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetObject | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetObject | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetObjectAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetObjectAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetObjectAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetObjectRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetObjectRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetObjectRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetShort | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetShortAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetShortAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetShortAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndSetShortRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndSetShortRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getAndSetShortRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getAndUpdate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAndUpdate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotatedReturnType0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotatedReturnType0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotatedReturnType0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getArgumentTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getArgumentTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getArgumentsAndReturnSizes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBoolean | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getBooleanAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBooleanAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getBooleanOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBooleanOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getBooleanVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBooleanVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getByAddress | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByAddress | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByAddress | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getByIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByInetAddress | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getByteAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByteAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getByteOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByteOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getByteVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getByteVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getCallSiteTarget | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getCharAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getCharAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getCharOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getCharOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getCharUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getCharUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getCharUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getCharUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getCharUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getCharVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getCharVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getClassAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getClassAtIfLoaded | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getClassLoader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getClassLoadingLock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getClassRefIndexAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getClassSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getCleanerImpl | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getCommonSuperClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getCommonSuperClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getConstructor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getConstructorAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getConstructorAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getConstructorAnnotations | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getConstructorDescriptor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getConstructorParameterAnnotations | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getConstructorSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getConstructorSlot | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getConstructors | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getConstructors | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getContent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getContent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getContent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getContent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getContent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getContentTypeFor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDaylightSavings | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredConstructor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredMethod | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDeclaredPublicMethods | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDeclaredPublicMethods | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDefault | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDefaultRequestProperty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDefaultUseCaches | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDefinedPackage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDescriptor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDirectionality | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDirectionality | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayCountry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayLanguage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDisplayScript | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDisplayVariant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDoubleAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDoubleAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDoubleAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDoubleOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDoubleOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getDoubleVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getDoubleVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getEncoded | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getEnumeration | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getEnumeration | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getExecutableSharedParameterTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getExecutableSharedParameterTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getExtension | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getExtension | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getExtensionValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getField | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getFieldAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFieldAtIfLoaded | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | getFileAttributeView | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFileAttributeView | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getFileAttributeView | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getFileStore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFileStoreAttributeView | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFileSystem | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getFloatAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFloatAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getFloatAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFloatOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFloatOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getFloatVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFloatVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getFrom | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getFrom | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getHeaderField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getHeaderField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getHeaderFieldDate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getHeaderFieldDate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getHeaderFieldInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getHeaderFieldInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getHeaderFieldKey | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getHeaderFieldLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getHeaderFieldLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getHostAddress | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getHostByAddr | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getHostName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getISOCountries | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getIntAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getIntAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getIntAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getIntOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getIntOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getIntUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getIntUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getIntUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getIntUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getIntUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getIntVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getIntVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getInteger | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInteger | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInteger | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getInteger | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getInteger | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getInternalName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getItem | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLoadAverage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLoadAverage | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getLongAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLongAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getLongAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLongOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLongOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getLongUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLongUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLongUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getLongUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getLongUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getLongVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getLongVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMemberName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMemberName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMemberName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getMemberRefInfoAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMembers | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMembers | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getMembers | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getMembers | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getMembers | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | getMergedType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMergedType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethod | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getMethodAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethodAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethodAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethodAtIfLoaded | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethodDescriptor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethodDescriptor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethodDescriptor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getMethodHandle | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethodType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getMethodType_V | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | getMillisOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getNameAndTypeRefIndexAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getNameAndTypeRefInfoAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getNestedTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getNestedTypes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getNestedTypes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getNumericValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getNumericValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getObjFieldValues | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getObjFieldValues | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getObject | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getObjectAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getObjectAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getObjectOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getObjectOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getObjectType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getObjectVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getObjectVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getOpcode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getPackage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getPackage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getParsed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getPath | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getPath | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getPath | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getPathMatcher | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getPrimFieldValues | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getPrimFieldValues | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getPrimitiveClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getPrincipals | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getPrivateCredentials | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getPublicCredentials | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getRequestProperty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getResource | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getResource | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getResourceAsStream | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getResourceAsStream | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getResourceAsStream | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getResources | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getReturnType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getReturnType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getRoot | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getRunLimit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getRunLimit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getRunStart | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getRunStart | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getService | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getService | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getServicesCatalog | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getServicesCatalogOrNull | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getShortAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShortAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getShortOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShortOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getShortUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShortUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShortUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getShortUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getShortUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getShortVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getShortVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | getStandardOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getStep | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getStepArgument | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getStringAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getSubject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getSystemResource | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getSystemResourceAsStream | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getSystemResources | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getTagAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getTransition | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getURLStreamHandler | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getUTF8At | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getUnchecked | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getUncompressedObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getUnicodeLocaleType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getUnicodeLocaleType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getValidOffsets | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getterFunction | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | getterFunction | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | growArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | guessContentTypeFromName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | guessContentTypeFromStream | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasOption | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasQueuedThread | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasQueuedThread | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasStaticInitializerForSerialization | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hash | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hash | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hashCodeRange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hashCodeRange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | headMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpAsyncBlocker | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpAsyncBlocker | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpAsyncBlocker | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | helpCC | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpCC | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | helpCC | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | helpQuiescePool | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpTransfer | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | helpTransfer | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | highSurrogate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | highestOneBit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | highestOneBit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | holdsLock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | holdsLock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | holdsLock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hostsEqual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hostsEqual | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | hugeCapacity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hugeCapacity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hugeCapacity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hugeCapacity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | hugeCapacity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | identity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | identityForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ifPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ifPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ifPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ifPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | implAddExports | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implAddExports | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implAddExports | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | implAddExportsNoSync | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implAddExportsNoSync | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implAddExportsNoSync | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | implAddExportsToAllUnnamed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implAddOpens | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implAddOpens | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implAddOpens | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | implAddOpensToAllUnnamed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implAddOpensToAllUnnamed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implAddReads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implAddReadsNoSync | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implAddUses | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implFlush | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implFlush | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implOnMalformedInput | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implOnMalformedInput | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implOnUnmappableCharacter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implOnUnmappableCharacter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implReplaceWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implReplaceWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | impliesWithAltFilePerm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | inSameSubroutine | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | inSubroutine | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexFor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexFor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | indexOfRange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | indexOfRange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | indexOfRange | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | init | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | init | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | init | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | init | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | init | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initInputFrame | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initInputFrame | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | initInputFrame | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | initInputFrame | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | initNonProxy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initNonProxy | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | initNonProxy | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | initNonProxy | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | initProxy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | initProxy | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | initProxy | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | initResolved | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | insertParameterTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insertParameterTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | insertParameterTypes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | insertParameterTypes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | internArgument | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalNextDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalNextDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | internalNextInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalNextInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | internalNextLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalNextLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | interpretName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | interpretName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | interpretWithArguments | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | interpretWithArgumentsTracing | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | interrupt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ints | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ints | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ints | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ints | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ints | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ints | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | invocationHandlerReturnType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p1 | 0 | +| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p1 | 0 | +| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | invokeBasic | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeBasic | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeBasicMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeExact | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeExact | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeHandleForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeHandleForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeHandleForm | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | invokeReadObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeReadObject | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeReadObjectNoData | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeReadResolve | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeWithArguments | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeWithArguments | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeWithArguments | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeWithArguments | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeWithArguments | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeWithArgumentsTracing | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeWriteObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | invokeWriteObject | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | invokeWriteReplace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAccessModeSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAccessibleFrom | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAlphabetic | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAncestor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isArgBasicTypeChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isAssignableFrom | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBasicTypeChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBmpCodePoint | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isBuiltinStreamHandler | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isCCLOverridden | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isCCLOverridden | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isCompatibleWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isConvertibleFrom | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isConvertibleTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isDaylightSavings | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isDefined | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isDefined | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isDigit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isDigit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isEqualTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isExported | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isFinite | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isGuardWithCatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isHidden | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isHighSurrogate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isISOControl | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isISOControl | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isIdentifierIgnorable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isIdentifierIgnorable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isIdeographic | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isInfinite | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isInterrupted | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isInterrupted | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isJavaIdentifierPart | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isJavaIdentifierPart | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isJavaIdentifierStart | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isJavaIdentifierStart | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isJavaLetter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isJavaLetterOrDigit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLeapYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLeapYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLeapYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLegalReplacement | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLetter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLetter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLetterOrDigit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLetterOrDigit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLoop | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLowSurrogate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLowerCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isLowerCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isMethodHandleInvokeName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isMirrored | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isMirrored | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isNaN | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isNestmateOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isOn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isOnSyncQueue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isOnSyncQueue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isOnSyncQueue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isOnSyncQueue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isOpen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isOpen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isOpen | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isOverrideable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isOwnedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isPrimitiveType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isProbablePrime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isQueued | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isQueued | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isQueued | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isQueued | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | isReflectivelyExported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isReflectivelyExported | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isReflectivelyOpened | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isReflectivelyOpened | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isSameFile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSameFile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isSealed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSelectAlternative | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSpace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSpaceChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSpaceChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isSupplementaryCodePoint | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupportedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupportedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupportedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSupportedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSurrogate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSurrogatePair | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isSurrogatePair | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isTitleCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isTitleCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isTryFinally | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isUnicodeIdentifierPart | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isUnicodeIdentifierPart | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isUnicodeIdentifierStart | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isUnicodeIdentifierStart | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isUpperCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isUpperCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isValidCodePoint | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isValidIntValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isValidKey | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isValidOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isValidOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isValidOffset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isValidSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isValidUnicodeLocaleKey | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isValidValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isVarHandleMethodInvokeName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isViewableAs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isViewableAs | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | isWhitespace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isWhitespace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | isWrapperType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | javaIncrement | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | join | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | keySet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lambdaFormEditor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | lastIndexOfRange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastIndexOfRange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lastIndexOfRange | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | lastUseIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lastUseIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | layers | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lazySet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lazySet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | leafCopyMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | leafCopyMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | length | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | linkSpeciesDataToCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkSpeciesDataToCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkSpeciesDataToCode | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | linkSpeciesDataToCode | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | linkToCallSiteMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkToInterface | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkToInterface | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkToSpecial | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkToSpecial | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkToStatic | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkToStatic | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkToTargetMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkToVirtual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | linkToVirtual | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | list | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | listFiles | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | listFiles | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | listIterator | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | listIterator | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | listIterator | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | listIterator | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | listIterator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | load | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | load | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | load | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | load | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | load0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | load0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | load0 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | loadClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | loadClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | loadConvert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadConvert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | loadConvert | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | loadConvert | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | loadFromCache | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadFromCache | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | loadFromXML | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadFromXML | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadImpl | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | loadSpecies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadSpecies | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadSpeciesDataFromCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | loadSpeciesDataFromCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | localDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | localDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | localDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | localizedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | lockedPush | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | logicalAnd | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logicalAnd | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | logicalOr | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logicalOr | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | logicalXor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | logicalXor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | longBitsToDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | longs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | longs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | longs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | longs | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | longs | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | longs | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | lookup | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lookup | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lookup | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lookup | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lookup | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lookupAllHostAddr | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lookupAny | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lookupPrincipalByGroupName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lookupPrincipalByName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lookupTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lookupTag | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | lowSurrogate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lowestOneBit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | lowestOneBit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mainClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | make | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | makeAccessException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeAccessException | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeArrayType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeEntry | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeImpl | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeImpl | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeImpl | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | makeMethodHandleInvoke | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeMethodHandleInvoke | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeMethodHandleInvoke | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeMethodHandleInvoke | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeMethodHandleInvoke | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | makeNamedType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeNominalGetters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeNominalGetters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeNominalGetters | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeNominalGetters | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeParameterizedType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeParameterizedType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeParameterizedType | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | makeReinvoker | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeSite | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeSite | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeSite | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | makeSite | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | makeSite | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | makeTypeVariable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeTypeVariable | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeVarHandleMethodInvoke | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeVarHandleMethodInvoke | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeVarHandleMethodInvoke | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeVarHandleMethodInvoke | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | makeVarHandleMethodInvoke | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | makeWildcard | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | makeWildcard | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | malformedForLength | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | managedBlock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | map | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | map | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | mapEquivalents | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapEquivalents | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | mapToDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapToDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapToDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapToInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapToInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapToInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapToLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapToLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapToLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapToObj | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapToObj | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mapToObj | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mark | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mark | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mark | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | maskNull | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | match | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | matchCerts | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | matchCerts | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | matches | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | matches | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | max | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | max | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | max | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | max | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | max | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | max | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | max | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | max | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | maxBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | maybeCustomize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | methodHandleInvokeLinkerMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | methodHandleInvokeLinkerMethod | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | methodHandleInvokeLinkerMethod | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | methodSig | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | methodSig | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | min | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | min | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | min | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | min | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | min | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | min | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | min | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | min | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusWeeks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusWeeks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusWeeks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusWeeks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | minusYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | modInverse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | modPow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | modPow | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | move | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | move | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | move | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | mulAdd | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | mulAdd | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | mulAdd | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | mulAdd | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | mulAdd | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | multipliedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | multipliedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | multipliedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | multiply | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | multiply | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newAsynchronousFileChannel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newAsynchronousFileChannel | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newAsynchronousFileChannel | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newAsynchronousFileChannel | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newAutomaticModule | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newByteChannel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newByteChannel | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newByteChannel | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newCapacity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newCapacity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newConst | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newConstItem | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | newConstructorAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newConstructorForExternalization | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newConstructorForSerialization | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newConstructorForSerialization | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newConstructorForSerialization | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newDirectoryStream | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newDirectoryStream | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | newField | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | newFieldAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newFieldAccessor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newFieldItem | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newFieldItem | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newFieldItem | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newFileChannel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newFileChannel | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newFileChannel | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newFileSystem | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newFileSystem | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newFileSystem | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newFileSystem | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | newHandleItem | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newHandleItem | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newHandleItem | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newHandleItem | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newHandleItem | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | newIAE | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newIAE | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newInputStream | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newInputStream | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newInstance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newInstance | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newInteger | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newInvokeDynamic | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newInvokeDynamic | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newInvokeDynamic | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newInvokeDynamic | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newInvokeDynamicItem | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newInvokeDynamicItem | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newInvokeDynamicItem | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newInvokeDynamicItem | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newKeySet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p9 | 9 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p9 | 9 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p10 | 10 | +| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p10 | 10 | +| file://:0:0:0:0 | newMethodAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newMethodItem | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newMethodItem | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newMethodItem | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | newMethodItem | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | newMethodType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newModule | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newModule | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newModule | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newModule | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newNameType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newNameType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newNameTypeItem | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newNameTypeItem | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newOpenModule | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newOutputStream | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newOutputStream | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newPackage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newSpeciesData | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newSpeciesData | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newStringishItem | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newStringishItem | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newTable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | newThread | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newThread | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newThread | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newUTF8 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newWrongMethodTypeException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | newWrongMethodTypeException | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | next | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextTaskFor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nextTransition | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | noneMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | noneMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | noneMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | noneMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | noneOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nonfairTryAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nonfairTryAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nonfairTryAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | not | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | noteLoopLocalTypesForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | noteLoopLocalTypesForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nullsFirst | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | nullsLast | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | numberOfLeadingZeros | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | numberOfLeadingZeros | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | numberOfTrailingZeros | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | numberOfTrailingZeros | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | objectFieldOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | objectFieldOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | objectFieldOffset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p10 | 10 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p10 | 10 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p10 | 10 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p10 | 10 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p10 | 10 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p11 | 11 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p11 | 11 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p11 | 11 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p11 | 11 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p11 | 11 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p12 | 12 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p12 | 12 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p12 | 12 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p12 | 12 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p13 | 13 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p13 | 13 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p13 | 13 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p13 | 13 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p14 | 14 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p14 | 14 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p14 | 14 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p15 | 15 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p15 | 15 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p15 | 15 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p16 | 16 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p16 | 16 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p17 | 17 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p17 | 17 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p18 | 18 | +| file://:0:0:0:0 | of | file://:0:0:0:0 | p19 | 19 | +| file://:0:0:0:0 | of0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofEntries | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofEpochDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofEpochMilli | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | ofHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofHoursMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofHoursMinutes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofHoursMinutesSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofHoursMinutesSeconds | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofHoursMinutesSeconds | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | ofLocal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofLocal | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofLocal | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | ofLocale | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofLocale | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofLocale | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofLocalizedDate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofLocalizedDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofLocalizedDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofLocalizedDateTime | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofLocalizedTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofNanoOfDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofNullable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofNullable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofOffset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofOffset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofPattern | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofPattern | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofPattern | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofSecondOfDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofSeconds | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofStrict | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofStrict | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofStrict | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | ofTotalSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofWeeks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofWithPrefix | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofWithPrefix | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofWithPrefix | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | ofYearDay | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ofYearDay | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | ofYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offer | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offer | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offerFirst | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offerLast | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | offsetByCodePointsImpl | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | offsetByCodePointsImpl | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | offsetByCodePointsImpl | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | offsetByCodePointsImpl | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | offsetByCodePointsImpl | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | onClose | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onClose | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onClose | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onClose | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onClose | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | onMalformedInput | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onMalformedInput | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onTermination | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onTermination | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onUnmappableCharacter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | onUnmappableCharacter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | open | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | openConnection | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | openConnection | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | openConnection | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | openConnection | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | opens | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | opens | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | opens | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | opens | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | opens | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | opens | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | opens | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | opens | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | opens | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | or | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | or | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | or | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElseGet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElseGet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElseGet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElseGet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElseThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElseThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElseThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | orElseThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | order | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | order | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | overlaps | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | overlaps | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | owns | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | owns | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | owns | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | owns | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | packages | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parameter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parameterConstraint | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parameterSlotDepth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parameterToArgSlot | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parameterType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parameterType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parameterType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parentOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | park | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | park | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | parse | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | parseBest | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseBest | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseParameterAnnotations | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseParameterAnnotations | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseParameterAnnotations | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseURL | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseURL | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseURL | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | parseURL | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | parseUnresolved | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseUnresolved | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | peek | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | peek | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | peek | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | peek | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | period | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | period | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | period | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | period | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | period | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | period | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | period | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | period | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | period | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | permuteArgumentsForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | permuteArgumentsForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | permutedTypesMatch | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | permutedTypesMatch | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | permutedTypesMatch | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | permutedTypesMatch | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusWeeks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusWeeks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusWeeks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusWeeks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | plusYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | poll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | poll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | previousTransition | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | primeToCertainty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | primeToCertainty | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | primitiveLeftShift | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | primitiveLeftShift | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | primitiveLeftShift | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | primitiveRightShift | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | primitiveRightShift | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | primitiveRightShift | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | printf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | printf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | printf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | printf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | printf | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | printf | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | println | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | probablePrime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | probablePrime | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | probeBackupLocations | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | probeBackupLocations | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | probeHomeLocation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | probeHomeLocation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | provides | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | provides | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | provides | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | push | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | push | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | put11 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put11 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | put12 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | put12 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putAddress | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putAddress | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putAddress | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putAddress | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putAddress | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | +| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | +| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | +| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | +| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | +| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | +| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | +| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | +| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | +| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | +| file://:0:0:0:0 | putAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putBoolean | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putBoolean | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putBooleanOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putBooleanOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putBooleanOpaque | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putBooleanRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putBooleanRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putBooleanRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putBooleanVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putBooleanVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putBooleanVolatile | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putByteArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putByteArray | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putByteArray | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putByteOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putByteOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putByteOpaque | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putByteRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putByteRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putByteRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putByteVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putByteVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putByteVolatile | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putCharOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putCharOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putCharOpaque | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putCharRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putCharRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putCharRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | putCharVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putCharVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putCharVolatile | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putDoubleOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putDoubleOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putDoubleOpaque | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putDoubleRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putDoubleRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putDoubleRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putDoubleVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putDoubleVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putDoubleVolatile | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putFloatOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putFloatOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putFloatOpaque | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putFloatRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putFloatRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putFloatRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putFloatVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putFloatVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putFloatVolatile | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putIntOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIntOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIntOpaque | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putIntRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIntRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIntRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | putIntVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putIntVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putIntVolatile | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putLongOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLongOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putLongOpaque | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putLongRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLongRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putLongRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | putLongVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putLongVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putLongVolatile | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putObject | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putObject | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putObjectOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putObjectOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putObjectOpaque | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putObjectRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putObjectRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putObjectRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putObjectVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putObjectVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putObjectVolatile | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putService | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putShortOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShortOpaque | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putShortOpaque | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putShortRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShortRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putShortRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | putShortVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putShortVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putShortVolatile | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putStringAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putStringAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putStringAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putStringAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putTreeVal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putTreeVal | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putTreeVal | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | putUTF8 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putVal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | putVal | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | putVal | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | queryFrom | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | range | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | rangeClosed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rangeClosed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rangeClosed | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | rangeClosed | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | rangeRefinedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rangeRefinedBy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | read | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | readByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readConst | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readConst | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | readHashtable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readHashtable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readHashtable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readLabel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readLabel | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readModule | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readModule | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | readNonProxy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObjectForSerialization | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readObjectNoDataForSerialization | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readPackage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readPackage | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readResolveForSerialization | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readSpeciesDataFromCode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readSymbolicLink | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readUTF8 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | readUTF8 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | readUnsignedShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reads | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reallocateMemory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reallocateMemory | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceEntries | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceEntries | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceEntries | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceEntries | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceEntries | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceEntriesToDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceEntriesToDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceEntriesToDouble | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceEntriesToDouble | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | reduceEntriesToInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceEntriesToInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceEntriesToInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceEntriesToInt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | reduceEntriesToLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceEntriesToLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceEntriesToLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceEntriesToLong | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | reduceKeys | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceKeys | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceKeys | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceKeys | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceKeys | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceKeysToDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceKeysToDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceKeysToDouble | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceKeysToDouble | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | reduceKeysToInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceKeysToInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceKeysToInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceKeysToInt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | reduceKeysToLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceKeysToLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceKeysToLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceKeysToLong | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | reduceToDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceToDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceToDouble | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceToDouble | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | reduceToInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceToInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceToInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceToInt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | reduceToLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceToLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceToLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceToLong | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | reduceValues | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceValues | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceValues | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceValues | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceValues | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceValuesToDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceValuesToDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceValuesToDouble | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceValuesToDouble | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | reduceValuesToInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceValuesToInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceValuesToInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceValuesToInt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | reduceValuesToLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reduceValuesToLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reduceValuesToLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | reduceValuesToLong | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | referenceKindIsConsistentWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | refersTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | refersTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | refersTo | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | refersTo | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reflectConstructor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reflectConstructor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reflectConstructor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reflectConstructor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reflectField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reflectField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reflectField | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reflectField | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | reflectSDField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | refreshVersion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | register | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | registerCleanup | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | registerValidation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | registerValidation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | registerWorker | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | relativize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | relativize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | release | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | release | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | release | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | release | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | release | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | releaseShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | releaseShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | releaseShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | releaseShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | remainder | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | remainderUnsigned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | remainderUnsigned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | remainderUnsigned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | remainderUnsigned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeAt | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | removeAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeEntryIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeFirstOccurrence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | removeLastOccurrence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeMapping | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeMapping | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeRange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeRange | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeRange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | removeRange | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | removeService | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeTreeNode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeUnicodeLocaleAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | removeValueIf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | renameTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | repeat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replaceFirst | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceFirst | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replaceName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replaceNames | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceNames | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replaceNames | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replaceNames | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | replaceNode | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceNode | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replaceNode | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replaceObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceParameterTypes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceParameterTypes | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | replaceParameterTypes | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | replaceWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | replaceWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | requires | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | requires | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | requires | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | requires | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | requires | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | requires | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | requires | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | requires | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | requires | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | requires | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resizeStamp | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | resolveClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveOrFail | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveOrFail | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveOrFail | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolveOrFail | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | resolveOrNull | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveOrNull | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveOrNull | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | resolveProlepticMonth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveProlepticMonth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveProlepticMonth | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveProlepticMonth | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveProxyClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveSibling | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveSibling | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYAA | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYAA | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYAA | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYAA | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYAD | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYAD | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYAD | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYAD | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYD | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYD | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYD | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYD | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYMAA | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYMAA | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYMAA | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYMAA | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYMAD | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYMAD | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYMAD | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYMAD | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYMD | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYMD | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYMD | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYMD | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYearOfEra | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYearOfEra | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | resolveYearOfEra | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resolveYearOfEra | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | resources | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | +| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | retrieveISOCountryCodes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reverse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reverse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reverseBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reverseBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | reverseBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | runWorker | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sameFile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sameFile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sameFile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | save | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | save | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | save | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | save | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | saveConvert | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | saveConvert | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | saveConvert | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | search | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | search | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | searchEntries | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | searchEntries | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | searchKeys | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | searchKeys | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | searchValues | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | searchValues | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | element | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | element | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | element | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | element | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setAccessible0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAccessible0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAllowUserInteraction | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setAttribute | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setAttribute | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | setAttribute | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | setBeginIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setBit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setBoolean | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setBoolean | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setCachedLambdaForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setCachedLambdaForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setCachedMethodHandle | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setCachedMethodHandle | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setCaseSensitive | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setClassAssertionStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setClassAssertionStatus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setCleanerImplAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setConnectTimeout | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setConstructorAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setConstructorAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setConstructorAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setConstructorAccessor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setConstructorAccessor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setContentHandlerFactory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setContextClassLoader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setContextClassLoader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setContextClassLoader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDaemon | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDaemon | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDaemon | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDaemon | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDefault | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDefault | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDefault | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setDefaultAllowUserInteraction | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDefaultAssertionStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDefaultRequestProperty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDefaultRequestProperty | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDefaultUseCaches | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDefaultUseCaches | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDefaultUseCaches | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setDoInput | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDoOutput | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setEndIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setErrorIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExclusiveOwnerThread | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExclusiveOwnerThread | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExclusiveOwnerThread | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExclusiveOwnerThread | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExclusiveOwnerThread | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExecutable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExecutable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExecutable | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setExtension | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setExtension | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setFileNameMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setHandle | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setHead | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setHead | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setHead | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setIfModifiedSince | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setIndex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setLangReflectAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setLanguage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setLanguageTag | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setLastModified | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setLength | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setLength | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setLength | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setLocale | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setMaxPriority | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | setMethodAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setMethodAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setMethodAccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setMethodAccessor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setMethodAccessor | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setMonth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setNativeName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setNativeName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setObjFieldValues | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setObjFieldValues | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setObjectInputFilter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setOpaque | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPackageAssertionStatus | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPackageAssertionStatus | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setParsed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setParsed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setParsedField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setParsedField | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setParsedField | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | setParsedField | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPrevRelaxed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPrimFieldValues | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPrimFieldValues | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setPriority | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPriority | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPriority | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPriority0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setPriority0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setProperty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setProperty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setProperty | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setProperty | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setReadTimeout | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setReadable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setReadable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setReadable | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setRegion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRequestProperty | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setRequestProperty | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setScript | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setSeed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setSerialFilter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setSigners | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setSigners | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setSigners | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setState | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setStrict | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setTabAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setTabAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setTabAt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | setTarget | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setTargetNormal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setTargetVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p7 | 7 | +| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p8 | 8 | +| file://:0:0:0:0 | setURLStreamHandlerFactory | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setUnicodeLocaleKeyword | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setUnicodeLocaleKeyword | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setUseCaches | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setValue | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setVarargs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setVarargs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setVariant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setWritable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setWritable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | setWritable | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | setYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | shift | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | shift | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | shift | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | shift | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | shiftLeft | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | shiftRight | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | shl | file://:0:0:0:0 | bitCount | 0 | +| file://:0:0:0:0 | shl | file://:0:0:0:0 | bitCount | 0 | +| file://:0:0:0:0 | shortenSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | shouldBeInitialized | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | shr | file://:0:0:0:0 | bitCount | 0 | +| file://:0:0:0:0 | shr | file://:0:0:0:0 | bitCount | 0 | +| file://:0:0:0:0 | signatureArity | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | signatureReturn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | signatureType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | signum | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | signum | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | skipBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | skipBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | skipBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | slice | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | slice | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | slice | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | slice | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | sort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sorted | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | speciesDataFor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | specificToGenericStringHeader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | specificToGenericStringHeader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | specificToGenericStringHeader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | specificToStringHeader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | specificToStringHeader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | specificToStringHeader | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | split | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | split | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | split | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | spread | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | spreadArgumentsForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | spreadArgumentsForm | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | spreadArgumentsForm | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | spreadArrayChecks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | spreadArrayChecks | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | spreadInvoker | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | start | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | start | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | startEntry | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | startsWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | startsWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | startsWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | startsWith | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | startsWith | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | staticFieldBase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | staticFieldOffset | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | stop0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | stop0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | store | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | store | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | store | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | store | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | store | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | store | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | store | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | store | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | store0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | store0 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | store0 | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | stringSize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | stringSize | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subList | file://:0:0:0:0 | fromIndex | 0 | +| file://:0:0:0:0 | subList | file://:0:0:0:0 | fromIndex | 0 | +| file://:0:0:0:0 | subList | file://:0:0:0:0 | fromIndex | 0 | +| file://:0:0:0:0 | subList | file://:0:0:0:0 | fromIndex | 0 | +| file://:0:0:0:0 | subList | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subList | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | subList | file://:0:0:0:0 | toIndex | 1 | +| file://:0:0:0:0 | subList | file://:0:0:0:0 | toIndex | 1 | +| file://:0:0:0:0 | subList | file://:0:0:0:0 | toIndex | 1 | +| file://:0:0:0:0 | subList | file://:0:0:0:0 | toIndex | 1 | +| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | subMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subMap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | +| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | +| file://:0:0:0:0 | subSequenceEquals | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subSequenceEquals | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | subSequenceEquals | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | subSequenceEquals | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | subSequenceEquals | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | submit | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | subpath | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subpath | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | substring | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | subtract | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subtractFrom | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subtractFrom | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subtractFrom | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | subtractFrom | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sum | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sum | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sum | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | sum | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sum | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | sum | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | supportsFileAttributeView | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | supportsFileAttributeView | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | supportsParameter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | system | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | system | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | system | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | system | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | system | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tabAt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tabAt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tailMap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | takeWhile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | takeWhile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | takeWhile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | takeWhile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | test | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | test | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | test | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | test | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | testBit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | thenComparing | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | thenComparing | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | thenComparing | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | thenComparing | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | thenComparingDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | thenComparingInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | thenComparingLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | threadStartFailed | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | threadTerminated | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | throwException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tick | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tick | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tick | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tick | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tick | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tick | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tick | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tick | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tick | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tick | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tickMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tickSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tieBreakOrder | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tieBreakOrder | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | timedJoin | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | timedJoin | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | timedWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | timedWait | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | to | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toBinaryString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toBinaryString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toChars | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toChars | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | toCodePoint | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toCodePoint | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toExternalForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toFieldDescriptorString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toFormat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toHex | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toHexString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toHexString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toHexString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toHexString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toHours | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toLowerCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toLowerCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toLowerCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toLowerCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toMethodHandle | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toMicros | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toMillis | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toMinutes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toOctalString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toOctalString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toPackage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toPackage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toPackage | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toPackage | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toPrinterParser | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toRealPath | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toResolved | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toResolved | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toSurrogates | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toSurrogates | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toSurrogates | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | toTitleCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toTitleCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toUnsignedLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toUnsignedString0 | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toUnsignedString0 | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | toUpperCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toUpperCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toUpperCase | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toUpperCaseCharArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | toUpperCaseEx | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | topLevelExec | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | topLevelExec | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | topLevelExec | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | traceInterpreter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | traceInterpreter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | traceInterpreter | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | traceInterpreter | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | traceInterpreter | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | transfer | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transfer | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | transferAfterCancelledWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferAfterCancelledWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferAfterCancelledWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferAfterCancelledWait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferForSignal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferForSignal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferForSignal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferForSignal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferFrom | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferFrom | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | transferFrom | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | transformHelper | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transformHelper | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | transformHelperType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | truncate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | truncate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | truncate | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryAcquireShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryExternalUnpush | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | tryLockedUnpush | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryReleaseShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryReleaseShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryReleaseShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryReleaseShared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryRemoveAndExec | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | tryUnpush | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | type | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | type | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | typeCheck | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | typeLoadOp | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncaughtException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncaughtException | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncaughtException | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | uncaughtException | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | unload | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | unload | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | unload | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | unmappableForLength | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | unmaskNull | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | unmaskNull | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | unpark | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | unparkSuccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | unparkSuccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | unparkSuccessor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | untreeify | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | updateAndGet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | updateAndGet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | updateForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | updateForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | updateVarForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | useCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | useCount | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | useProtocolVersion | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | uses | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | ushr | file://:0:0:0:0 | bitCount | 0 | +| file://:0:0:0:0 | ushr | file://:0:0:0:0 | bitCount | 0 | +| file://:0:0:0:0 | valueFromMethodName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | +| file://:0:0:0:0 | valueOfCodePoint | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | varHandleInvokeLinkerMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | varHandleInvokeLinkerMethod | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | varHandleMethodExactInvoker | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | varHandleMethodInvoker | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | verify | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | verify | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | verify | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | verify | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | verify | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | verifyParameters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | verifyParameters | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | version | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | version | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | viewAsType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | viewAsType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | viewAsType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | viewAsType | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | viewAsTypeChecks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | viewAsTypeChecks | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | viewAsTypeChecks | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | viewAsTypeChecks | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | visit | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitArray | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitArrayTypeSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitArrayTypeSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitArrayTypeSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitBooleanSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitBooleanSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitBooleanSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitBottomSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitBottomSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitBottomSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitByteSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitByteSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitByteSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitCharSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitCharSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitCharSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitClassSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitClassTypeSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitClassTypeSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitClassTypeSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitDoubleSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitDoubleSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitDoubleSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitEnum | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitEnum | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitEnum | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitExport | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitExport | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitExport | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitFloatSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitFloatSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitFloatSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitFormalTypeParameter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitFormalTypeParameter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitFormalTypeParameter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitIincInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitIincInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitIincInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitIincInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitIntInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitIntInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitIntInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitIntInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitIntSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitIntSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitIntSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitJumpInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitJumpInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitJumpInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitJumpInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitLabel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLabel | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLdcInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLdcInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLineNumber | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLineNumber | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLineNumber | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitLineNumber | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p5 | 5 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p6 | 6 | +| file://:0:0:0:0 | visitLongSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLongSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLongSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitMainClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitMaxs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitMaxs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitMaxs | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitMaxs | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | visitMethodTypeSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitMultiANewArrayInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitMultiANewArrayInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitMultiANewArrayInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitMultiANewArrayInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitOpen | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitOpen | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitOpen | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitPackage | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitParameter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitParameter | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitParameter | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitParameter | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitProvide | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitProvide | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitRequire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitRequire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitRequire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitShortSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitShortSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitShortSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitSimpleClassTypeSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitSimpleClassTypeSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitSimpleClassTypeSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitSource | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitSource | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitSource | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitSource | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitSubroutine | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitSubroutine | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitSubroutine | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | visitTypeInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTypeInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTypeInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTypeInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitTypeVariableSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTypeVariableSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitTypeVariableSignature | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitUse | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitVarInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitVarInsn | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitVarInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitVarInsn | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | visitVoidDescriptor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitVoidDescriptor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitVoidDescriptor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitWildcard | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitWildcard | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | visitWildcard | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wait | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wait | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | walk | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSet | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSet | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSet | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetBoolean | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetBoolean | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetBoolean | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetBooleanAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetBooleanAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetBooleanAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetBooleanAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetBooleanPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetBooleanPlain | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetBooleanPlain | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetBooleanPlain | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetBooleanRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetBooleanRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetBooleanRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetBooleanRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetByte | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetByte | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetByte | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetByteAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetByteAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetByteAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetByteAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetBytePlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetBytePlain | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetBytePlain | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetBytePlain | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetByteRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetByteRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetByteRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetByteRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetChar | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetChar | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetChar | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetCharAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetCharAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetCharAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetCharAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetCharPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetCharPlain | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetCharPlain | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetCharPlain | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetCharRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetCharRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetCharRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetCharRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetDouble | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetDouble | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetDouble | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetDoubleAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetDoubleAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetDoubleAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetDoubleAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetDoublePlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetDoublePlain | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetDoublePlain | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetDoublePlain | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetDoubleRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetDoubleRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetDoubleRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetDoubleRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetFloat | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetFloat | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetFloat | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetFloatAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetFloatAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetFloatAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetFloatAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetFloatPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetFloatPlain | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetFloatPlain | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetFloatPlain | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetFloatRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetFloatRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetFloatRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetFloatRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetInt | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetInt | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetInt | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetIntAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetIntAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetIntAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetIntAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetIntPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetIntPlain | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetIntPlain | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetIntPlain | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetIntRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetIntRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetIntRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetIntRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetLong | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetLong | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetLong | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetLongAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetLongAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetLongAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetLongAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetLongPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetLongPlain | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetLongPlain | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetLongPlain | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetLongRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetLongRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetLongRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetLongRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetObject | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetObject | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetObject | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetObjectAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetObjectAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetObjectAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetObjectAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetObjectPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetObjectPlain | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetObjectPlain | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetObjectPlain | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetObjectRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetObjectRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetObjectRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetObjectRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetPlain | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetPlain | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetShort | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetShort | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetShort | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetShortAcquire | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetShortAcquire | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetShortAcquire | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetShortAcquire | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetShortPlain | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetShortPlain | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetShortPlain | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetShortPlain | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetShortRelease | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetShortRelease | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetShortRelease | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | weakCompareAndSetShortRelease | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | weakCompareAndSetVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetVolatile | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | weakCompareAndSetVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | weakCompareAndSetVolatile | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | withChronology | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withConstraint | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withDayOfMonth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withDayOfMonth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withDayOfMonth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withDayOfMonth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withDayOfYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withDayOfYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withDayOfYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withDayOfYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withDays | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withDecimalSeparator | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withDecimalStyle | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withHour | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withHour | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withHour | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withHour | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withHour | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withInitial | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withInitial | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withInternalMemberName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withInternalMemberName | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withInternalMemberName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | withInternalMemberName | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | withLocale | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withMinute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withMinute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withMinute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withMinute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withMinute | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withMonth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withMonth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withMonth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withMonth | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withMonths | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withNano | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withNano | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withNano | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withNano | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withNano | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withNanos | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withNegativeSign | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withOffsetSameInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withOffsetSameInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withOffsetSameLocal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withOffsetSameLocal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withOptional | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withPositiveSign | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withResolverFields | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withResolverFields | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withResolverStyle | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withSecond | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withSeconds | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withVarargs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withVarargs | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withYear | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withYears | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withZeroDigit | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withZoneSameInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withZoneSameInstant | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withZoneSameLocal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | withZoneSameLocal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | wrapperType | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p3 | 3 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | write | file://:0:0:0:0 | p4 | 4 | +| file://:0:0:0:0 | writeBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeBoolean | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeByte | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeBytes | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeChar | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeChars | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeClassDescriptor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeComments | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeComments | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | writeDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeDouble | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeFloat | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeHashtable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeHashtable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeHashtable | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeInt | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeLong | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeNonProxy | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObjectForSerialization | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeObjectOverride | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeReplaceForSerialization | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeShort | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeTypeString | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeUTF | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeUTF | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeUTF | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | writeUnshared | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | xor | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | xor | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | xor | file://:0:0:0:0 | other | 0 | +| file://:0:0:0:0 | xor | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | zero | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | zeroForm | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | +| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p1 | 1 | +| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p1 | 1 | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:26:4:31 | x | 0 | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:34:4:39 | y | 1 | | methods2.kt:7:1:10:1 | equals | methods2.kt:7:1:10:1 | other | 0 | diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected index 5e9c5362abe..21910084034 100644 --- a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected @@ -1,10 +1,1318 @@ +| file1.kt:0:0:0:0 | File1Kt | File1Kt | | file1.kt:2:1:2:16 | Class1 | Class1 | +| file2.kt:0:0:0:0 | File2Kt | File2Kt | | file2.kt:2:1:2:16 | Class2 | Class2 | | file3.kt:0:0:0:0 | MyJvmName | MyJvmName | | file3.kt:3:1:3:16 | Class3 | Class3 | +| file://:0:0:0:0 | AbstractChronology | java.time.chrono.AbstractChronology | +| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | +| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | +| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | +| file://:0:0:0:0 | AbstractExecutorService | java.util.concurrent.AbstractExecutorService | +| file://:0:0:0:0 | AbstractInterruptibleChannel | java.nio.channels.spi.AbstractInterruptibleChannel | +| file://:0:0:0:0 | AbstractList | java.util.AbstractList | +| file://:0:0:0:0 | AbstractList | java.util.AbstractList | +| file://:0:0:0:0 | AbstractList | java.util.AbstractList | +| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | +| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | +| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | +| file://:0:0:0:0 | AbstractOwnableSynchronizer | java.util.concurrent.locks.AbstractOwnableSynchronizer | +| file://:0:0:0:0 | AbstractQueuedSynchronizer | java.util.concurrent.locks.AbstractQueuedSynchronizer | +| file://:0:0:0:0 | AbstractRepository | sun.reflect.generics.repository.AbstractRepository | +| file://:0:0:0:0 | AbstractRepository | sun.reflect.generics.repository.AbstractRepository | +| file://:0:0:0:0 | AbstractSet | java.util.AbstractSet | +| file://:0:0:0:0 | AbstractSet | java.util.AbstractSet | +| file://:0:0:0:0 | AbstractStringBuilder | java.lang.AbstractStringBuilder | +| file://:0:0:0:0 | AccessControlContext | java.security.AccessControlContext | +| file://:0:0:0:0 | AccessDescriptor | java.lang.invoke.AccessDescriptor | +| file://:0:0:0:0 | AccessMode | java.lang.invoke.AccessMode | +| file://:0:0:0:0 | AccessMode | java.nio.file.AccessMode | +| file://:0:0:0:0 | AccessType | java.lang.invoke.AccessType | +| file://:0:0:0:0 | AccessibleObject | java.lang.reflect.AccessibleObject | +| file://:0:0:0:0 | AdaptedCallable | java.util.concurrent.AdaptedCallable | +| file://:0:0:0:0 | AdaptedRunnable | java.util.concurrent.AdaptedRunnable | +| file://:0:0:0:0 | AdaptedRunnableAction | java.util.concurrent.AdaptedRunnableAction | +| file://:0:0:0:0 | AnnotationType | sun.reflect.annotation.AnnotationType | +| file://:0:0:0:0 | AnnotationVisitor | jdk.internal.org.objectweb.asm.AnnotationVisitor | | file://:0:0:0:0 | Any | kotlin.Any | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | Array | kotlin.Array | +| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | java.lang.ArrayIndexOutOfBoundsException | +| file://:0:0:0:0 | ArrayList | java.util.ArrayList | +| file://:0:0:0:0 | ArrayList | java.util.ArrayList | +| file://:0:0:0:0 | ArrayList | java.util.ArrayList | +| file://:0:0:0:0 | ArrayListSpliterator | java.util.ArrayListSpliterator | +| file://:0:0:0:0 | ArrayListSpliterator | java.util.ArrayListSpliterator | +| file://:0:0:0:0 | ArrayTypeSignature | sun.reflect.generics.tree.ArrayTypeSignature | +| file://:0:0:0:0 | AsynchronousFileChannel | java.nio.channels.AsynchronousFileChannel | +| file://:0:0:0:0 | AtomicInteger | java.util.concurrent.atomic.AtomicInteger | +| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | +| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | +| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | +| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | +| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | +| file://:0:0:0:0 | Attribute | java.text.Attribute | +| file://:0:0:0:0 | Attribute | jdk.internal.org.objectweb.asm.Attribute | +| file://:0:0:0:0 | AuthPermission | javax.security.auth.AuthPermission | +| file://:0:0:0:0 | AuthPermissionHolder | javax.security.auth.AuthPermissionHolder | +| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | +| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | +| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | +| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | +| file://:0:0:0:0 | BaseLocale | sun.util.locale.BaseLocale | +| file://:0:0:0:0 | BasicPermission | java.security.BasicPermission | +| file://:0:0:0:0 | BasicType | java.lang.invoke.BasicType | +| file://:0:0:0:0 | BigInteger | java.math.BigInteger | +| file://:0:0:0:0 | Boolean | java.lang.Boolean | | file://:0:0:0:0 | Boolean | kotlin.Boolean | +| file://:0:0:0:0 | BooleanSignature | sun.reflect.generics.tree.BooleanSignature | +| file://:0:0:0:0 | BottomSignature | sun.reflect.generics.tree.BottomSignature | +| file://:0:0:0:0 | BoundMethodHandle | java.lang.invoke.BoundMethodHandle | +| file://:0:0:0:0 | Buffer | java.nio.Buffer | +| file://:0:0:0:0 | BufferedWriter | java.io.BufferedWriter | +| file://:0:0:0:0 | Builder | java.lang.module.Builder | +| file://:0:0:0:0 | Builder | java.util.Builder | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | +| file://:0:0:0:0 | Byte | java.lang.Byte | +| file://:0:0:0:0 | Byte | kotlin.Byte | +| file://:0:0:0:0 | ByteArray | kotlin.ByteArray | +| file://:0:0:0:0 | ByteBuffer | java.nio.ByteBuffer | +| file://:0:0:0:0 | ByteIterator | kotlin.collections.ByteIterator | +| file://:0:0:0:0 | ByteOrder | java.nio.ByteOrder | +| file://:0:0:0:0 | ByteSignature | sun.reflect.generics.tree.ByteSignature | +| file://:0:0:0:0 | ByteVector | jdk.internal.org.objectweb.asm.ByteVector | +| file://:0:0:0:0 | CallSite | java.lang.invoke.CallSite | +| file://:0:0:0:0 | CaseInsensitiveChar | sun.util.locale.CaseInsensitiveChar | +| file://:0:0:0:0 | CaseInsensitiveString | sun.util.locale.CaseInsensitiveString | +| file://:0:0:0:0 | Category | java.util.Category | +| file://:0:0:0:0 | CertPath | java.security.cert.CertPath | +| file://:0:0:0:0 | CertPathRep | java.security.cert.CertPathRep | +| file://:0:0:0:0 | Certificate | java.security.cert.Certificate | +| file://:0:0:0:0 | CertificateRep | java.security.cert.CertificateRep | +| file://:0:0:0:0 | Char | kotlin.Char | +| file://:0:0:0:0 | CharArray | kotlin.CharArray | +| file://:0:0:0:0 | CharBuffer | java.nio.CharBuffer | +| file://:0:0:0:0 | CharIterator | kotlin.collections.CharIterator | +| file://:0:0:0:0 | CharProgression | kotlin.ranges.CharProgression | +| file://:0:0:0:0 | CharRange | kotlin.ranges.CharRange | +| file://:0:0:0:0 | CharSignature | sun.reflect.generics.tree.CharSignature | +| file://:0:0:0:0 | Character | java.lang.Character | +| file://:0:0:0:0 | Characteristics | java.util.stream.Characteristics | +| file://:0:0:0:0 | Charset | java.nio.charset.Charset | +| file://:0:0:0:0 | CharsetDecoder | java.nio.charset.CharsetDecoder | +| file://:0:0:0:0 | CharsetEncoder | java.nio.charset.CharsetEncoder | +| file://:0:0:0:0 | ChronoField | java.time.temporal.ChronoField | +| file://:0:0:0:0 | ChronoUnit | java.time.temporal.ChronoUnit | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | Class | java.lang.Class | +| file://:0:0:0:0 | ClassDataSlot | java.io.ClassDataSlot | +| file://:0:0:0:0 | ClassLoader | java.lang.ClassLoader | +| file://:0:0:0:0 | ClassNotFoundException | java.lang.ClassNotFoundException | +| file://:0:0:0:0 | ClassReader | jdk.internal.org.objectweb.asm.ClassReader | +| file://:0:0:0:0 | ClassSignature | sun.reflect.generics.tree.ClassSignature | +| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | +| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | +| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | +| file://:0:0:0:0 | ClassTypeSignature | sun.reflect.generics.tree.ClassTypeSignature | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | +| file://:0:0:0:0 | ClassValueMap | java.lang.ClassValueMap | +| file://:0:0:0:0 | ClassVisitor | jdk.internal.org.objectweb.asm.ClassVisitor | +| file://:0:0:0:0 | ClassWriter | jdk.internal.org.objectweb.asm.ClassWriter | +| file://:0:0:0:0 | ClassicFormat | java.time.format.ClassicFormat | +| file://:0:0:0:0 | Cleaner | java.lang.ref.Cleaner | +| file://:0:0:0:0 | CleanerCleanable | jdk.internal.ref.CleanerCleanable | +| file://:0:0:0:0 | CleanerImpl | jdk.internal.ref.CleanerImpl | +| file://:0:0:0:0 | Clock | java.time.Clock | +| file://:0:0:0:0 | CodeSigner | java.security.CodeSigner | +| file://:0:0:0:0 | CodeSource | java.security.CodeSource | +| file://:0:0:0:0 | CoderResult | java.nio.charset.CoderResult | +| file://:0:0:0:0 | CodingErrorAction | java.nio.charset.CodingErrorAction | +| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | +| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | +| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | +| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | +| file://:0:0:0:0 | Compiled | java.lang.invoke.Compiled | +| file://:0:0:0:0 | CompositePrinterParser | java.time.format.CompositePrinterParser | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | +| file://:0:0:0:0 | ConcurrentWeakInternSet | java.lang.invoke.ConcurrentWeakInternSet | +| file://:0:0:0:0 | ConcurrentWeakInternSet | java.lang.invoke.ConcurrentWeakInternSet | +| file://:0:0:0:0 | ConditionObject | java.util.concurrent.locks.ConditionObject | +| file://:0:0:0:0 | Config | java.io.Config | +| file://:0:0:0:0 | Configuration | java.lang.module.Configuration | +| file://:0:0:0:0 | ConstantPool | jdk.internal.reflect.ConstantPool | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | +| file://:0:0:0:0 | ConstructorRepository | sun.reflect.generics.repository.ConstructorRepository | +| file://:0:0:0:0 | ContentHandler | java.net.ContentHandler | +| file://:0:0:0:0 | Controller | java.lang.Controller | +| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | +| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | +| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | +| file://:0:0:0:0 | CounterCell | java.util.concurrent.CounterCell | +| file://:0:0:0:0 | Date | java.util.Date | +| file://:0:0:0:0 | DateTimeFormatter | java.time.format.DateTimeFormatter | +| file://:0:0:0:0 | DateTimeParseContext | java.time.format.DateTimeParseContext | +| file://:0:0:0:0 | DateTimePrintContext | java.time.format.DateTimePrintContext | +| file://:0:0:0:0 | DayOfWeek | java.time.DayOfWeek | +| file://:0:0:0:0 | Debug | sun.security.util.Debug | +| file://:0:0:0:0 | DecimalStyle | java.time.format.DecimalStyle | +| file://:0:0:0:0 | Dictionary | java.util.Dictionary | +| file://:0:0:0:0 | Dictionary | java.util.Dictionary | +| file://:0:0:0:0 | Double | java.lang.Double | +| file://:0:0:0:0 | Double | kotlin.Double | +| file://:0:0:0:0 | DoubleArray | kotlin.DoubleArray | +| file://:0:0:0:0 | DoubleBuffer | java.nio.DoubleBuffer | +| file://:0:0:0:0 | DoubleIterator | kotlin.collections.DoubleIterator | +| file://:0:0:0:0 | DoubleSignature | sun.reflect.generics.tree.DoubleSignature | +| file://:0:0:0:0 | DoubleSummaryStatistics | java.util.DoubleSummaryStatistics | +| file://:0:0:0:0 | Duration | java.time.Duration | +| file://:0:0:0:0 | Edge | jdk.internal.org.objectweb.asm.Edge | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.lang.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | Entry | java.util.Entry | +| file://:0:0:0:0 | EntryIterator | java.util.concurrent.EntryIterator | +| file://:0:0:0:0 | EntrySetView | java.util.concurrent.EntrySetView | +| file://:0:0:0:0 | EntrySpliterator | java.util.EntrySpliterator | +| file://:0:0:0:0 | EntrySpliterator | java.util.EntrySpliterator | +| file://:0:0:0:0 | EntrySpliterator | java.util.concurrent.EntrySpliterator | +| file://:0:0:0:0 | EntrySpliterator | java.util.concurrent.EntrySpliterator | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | java.lang.Enum | +| file://:0:0:0:0 | Enum | kotlin.Enum | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | EnumSet | java.util.EnumSet | +| file://:0:0:0:0 | Exception | java.lang.Exception | +| file://:0:0:0:0 | ExceptionNode | java.util.concurrent.ExceptionNode | +| file://:0:0:0:0 | Executable | java.lang.reflect.Executable | +| file://:0:0:0:0 | Exports | java.lang.module.Exports | +| file://:0:0:0:0 | ExtendedOption | java.lang.ExtendedOption | +| file://:0:0:0:0 | Extension | sun.util.locale.Extension | +| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | +| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | +| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | +| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | +| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | +| file://:0:0:0:0 | FairSync | java.util.concurrent.locks.FairSync | +| file://:0:0:0:0 | Field | java.lang.reflect.Field | +| file://:0:0:0:0 | Field | java.text.Field | +| file://:0:0:0:0 | FieldPosition | java.text.FieldPosition | +| file://:0:0:0:0 | FieldVisitor | jdk.internal.org.objectweb.asm.FieldVisitor | +| file://:0:0:0:0 | FieldWriter | jdk.internal.org.objectweb.asm.FieldWriter | +| file://:0:0:0:0 | File | java.io.File | +| file://:0:0:0:0 | FileChannel | java.nio.channels.FileChannel | +| file://:0:0:0:0 | FileDescriptor | java.io.FileDescriptor | +| file://:0:0:0:0 | FileLock | java.nio.channels.FileLock | +| file://:0:0:0:0 | FileStore | java.nio.file.FileStore | +| file://:0:0:0:0 | FileSystem | java.nio.file.FileSystem | +| file://:0:0:0:0 | FileSystemProvider | java.nio.file.spi.FileSystemProvider | +| file://:0:0:0:0 | FileTime | java.nio.file.attribute.FileTime | +| file://:0:0:0:0 | FilterOutputStream | java.io.FilterOutputStream | +| file://:0:0:0:0 | FilterValues | java.io.FilterValues | +| file://:0:0:0:0 | FilteringMode | java.util.FilteringMode | +| file://:0:0:0:0 | FixedClock | java.time.FixedClock | +| file://:0:0:0:0 | Float | java.lang.Float | +| file://:0:0:0:0 | Float | kotlin.Float | +| file://:0:0:0:0 | FloatArray | kotlin.FloatArray | +| file://:0:0:0:0 | FloatBuffer | java.nio.FloatBuffer | +| file://:0:0:0:0 | FloatIterator | kotlin.collections.FloatIterator | +| file://:0:0:0:0 | FloatSignature | sun.reflect.generics.tree.FloatSignature | +| file://:0:0:0:0 | ForEachEntryTask | java.util.concurrent.ForEachEntryTask | +| file://:0:0:0:0 | ForEachKeyTask | java.util.concurrent.ForEachKeyTask | +| file://:0:0:0:0 | ForEachMappingTask | java.util.concurrent.ForEachMappingTask | +| file://:0:0:0:0 | ForEachTransformedEntryTask | java.util.concurrent.ForEachTransformedEntryTask | +| file://:0:0:0:0 | ForEachTransformedKeyTask | java.util.concurrent.ForEachTransformedKeyTask | +| file://:0:0:0:0 | ForEachTransformedMappingTask | java.util.concurrent.ForEachTransformedMappingTask | +| file://:0:0:0:0 | ForEachTransformedValueTask | java.util.concurrent.ForEachTransformedValueTask | +| file://:0:0:0:0 | ForEachValueTask | java.util.concurrent.ForEachValueTask | +| file://:0:0:0:0 | ForkJoinPool | java.util.concurrent.ForkJoinPool | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | +| file://:0:0:0:0 | ForkJoinWorkerThread | java.util.concurrent.ForkJoinWorkerThread | +| file://:0:0:0:0 | FormalTypeParameter | sun.reflect.generics.tree.FormalTypeParameter | +| file://:0:0:0:0 | Format | java.text.Format | +| file://:0:0:0:0 | FormatStyle | java.time.format.FormatStyle | +| file://:0:0:0:0 | ForwardingNode | java.util.concurrent.ForwardingNode | +| file://:0:0:0:0 | Frame | jdk.internal.org.objectweb.asm.Frame | +| file://:0:0:0:0 | GenericDeclRepository | sun.reflect.generics.repository.GenericDeclRepository | +| file://:0:0:0:0 | GenericDeclRepository | sun.reflect.generics.repository.GenericDeclRepository | +| file://:0:0:0:0 | GetField | java.io.GetField | +| file://:0:0:0:0 | GetReflectionFactoryAction | jdk.internal.reflect.GetReflectionFactoryAction | +| file://:0:0:0:0 | Global | java.io.Global | +| file://:0:0:0:0 | Handle | jdk.internal.org.objectweb.asm.Handle | +| file://:0:0:0:0 | Hashtable | java.util.Hashtable | +| file://:0:0:0:0 | Hashtable | java.util.Hashtable | +| file://:0:0:0:0 | Hashtable | java.util.Hashtable | +| file://:0:0:0:0 | Hashtable | java.util.Hashtable | +| file://:0:0:0:0 | Hidden | java.lang.invoke.Hidden | +| file://:0:0:0:0 | IOException | java.io.IOException | +| file://:0:0:0:0 | Identity | java.lang.Identity | +| file://:0:0:0:0 | IllegalAccessException | java.lang.IllegalAccessException | +| file://:0:0:0:0 | IllegalArgumentException | java.lang.IllegalArgumentException | +| file://:0:0:0:0 | IndexOutOfBoundsException | java.lang.IndexOutOfBoundsException | +| file://:0:0:0:0 | InetAddress | java.net.InetAddress | +| file://:0:0:0:0 | InetAddressHolder | java.net.InetAddressHolder | +| file://:0:0:0:0 | InnocuousForkJoinWorkerThread | java.util.concurrent.InnocuousForkJoinWorkerThread | +| file://:0:0:0:0 | InnocuousThreadFactory | jdk.internal.ref.InnocuousThreadFactory | +| file://:0:0:0:0 | InputStream | java.io.InputStream | +| file://:0:0:0:0 | Instant | java.time.Instant | | file://:0:0:0:0 | Int | kotlin.Int | +| file://:0:0:0:0 | IntArray | kotlin.IntArray | +| file://:0:0:0:0 | IntBuffer | java.nio.IntBuffer | +| file://:0:0:0:0 | IntIterator | kotlin.collections.IntIterator | +| file://:0:0:0:0 | IntProgression | kotlin.ranges.IntProgression | +| file://:0:0:0:0 | IntRange | kotlin.ranges.IntRange | +| file://:0:0:0:0 | IntSignature | sun.reflect.generics.tree.IntSignature | +| file://:0:0:0:0 | IntSummaryStatistics | java.util.IntSummaryStatistics | +| file://:0:0:0:0 | Integer | java.lang.Integer | +| file://:0:0:0:0 | InterfaceAddress | java.net.InterfaceAddress | +| file://:0:0:0:0 | Intrinsic | java.lang.invoke.Intrinsic | +| file://:0:0:0:0 | Invokers | java.lang.invoke.Invokers | +| file://:0:0:0:0 | IsoChronology | java.time.chrono.IsoChronology | +| file://:0:0:0:0 | IsoCountryCode | java.util.IsoCountryCode | +| file://:0:0:0:0 | IsoEra | java.time.chrono.IsoEra | +| file://:0:0:0:0 | Item | jdk.internal.org.objectweb.asm.Item | +| file://:0:0:0:0 | Key | java.security.Key | +| file://:0:0:0:0 | KeyIterator | java.util.concurrent.KeyIterator | +| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | +| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | +| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | +| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | +| file://:0:0:0:0 | KeySpliterator | java.util.KeySpliterator | +| file://:0:0:0:0 | KeySpliterator | java.util.KeySpliterator | +| file://:0:0:0:0 | KeySpliterator | java.util.concurrent.KeySpliterator | +| file://:0:0:0:0 | KeySpliterator | java.util.concurrent.KeySpliterator | +| file://:0:0:0:0 | Kind | java.lang.invoke.Kind | +| file://:0:0:0:0 | Label | jdk.internal.org.objectweb.asm.Label | +| file://:0:0:0:0 | LambdaForm | java.lang.invoke.LambdaForm | +| file://:0:0:0:0 | LambdaFormEditor | java.lang.invoke.LambdaFormEditor | +| file://:0:0:0:0 | LanguageRange | java.util.LanguageRange | +| file://:0:0:0:0 | Level | java.lang.Level | +| file://:0:0:0:0 | LineReader | java.util.LineReader | +| file://:0:0:0:0 | LinkOption | java.nio.file.LinkOption | +| file://:0:0:0:0 | LocalDate | java.time.LocalDate | +| file://:0:0:0:0 | LocalDateTime | java.time.LocalDateTime | +| file://:0:0:0:0 | LocalTime | java.time.LocalTime | +| file://:0:0:0:0 | Locale | java.util.Locale | +| file://:0:0:0:0 | LocaleExtensions | sun.util.locale.LocaleExtensions | +| file://:0:0:0:0 | Long | java.lang.Long | +| file://:0:0:0:0 | Long | kotlin.Long | +| file://:0:0:0:0 | LongArray | kotlin.LongArray | +| file://:0:0:0:0 | LongBuffer | java.nio.LongBuffer | +| file://:0:0:0:0 | LongIterator | kotlin.collections.LongIterator | +| file://:0:0:0:0 | LongProgression | kotlin.ranges.LongProgression | +| file://:0:0:0:0 | LongRange | kotlin.ranges.LongRange | +| file://:0:0:0:0 | LongSignature | sun.reflect.generics.tree.LongSignature | +| file://:0:0:0:0 | LongSummaryStatistics | java.util.LongSummaryStatistics | +| file://:0:0:0:0 | MapEntry | java.util.concurrent.MapEntry | +| file://:0:0:0:0 | MapMode | java.nio.channels.MapMode | +| file://:0:0:0:0 | MapReduceEntriesTask | java.util.concurrent.MapReduceEntriesTask | +| file://:0:0:0:0 | MapReduceEntriesTask | java.util.concurrent.MapReduceEntriesTask | +| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | java.util.concurrent.MapReduceEntriesToDoubleTask | +| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | java.util.concurrent.MapReduceEntriesToDoubleTask | +| file://:0:0:0:0 | MapReduceEntriesToIntTask | java.util.concurrent.MapReduceEntriesToIntTask | +| file://:0:0:0:0 | MapReduceEntriesToIntTask | java.util.concurrent.MapReduceEntriesToIntTask | +| file://:0:0:0:0 | MapReduceEntriesToLongTask | java.util.concurrent.MapReduceEntriesToLongTask | +| file://:0:0:0:0 | MapReduceEntriesToLongTask | java.util.concurrent.MapReduceEntriesToLongTask | +| file://:0:0:0:0 | MapReduceKeysTask | java.util.concurrent.MapReduceKeysTask | +| file://:0:0:0:0 | MapReduceKeysTask | java.util.concurrent.MapReduceKeysTask | +| file://:0:0:0:0 | MapReduceKeysToDoubleTask | java.util.concurrent.MapReduceKeysToDoubleTask | +| file://:0:0:0:0 | MapReduceKeysToDoubleTask | java.util.concurrent.MapReduceKeysToDoubleTask | +| file://:0:0:0:0 | MapReduceKeysToIntTask | java.util.concurrent.MapReduceKeysToIntTask | +| file://:0:0:0:0 | MapReduceKeysToIntTask | java.util.concurrent.MapReduceKeysToIntTask | +| file://:0:0:0:0 | MapReduceKeysToLongTask | java.util.concurrent.MapReduceKeysToLongTask | +| file://:0:0:0:0 | MapReduceKeysToLongTask | java.util.concurrent.MapReduceKeysToLongTask | +| file://:0:0:0:0 | MapReduceMappingsTask | java.util.concurrent.MapReduceMappingsTask | +| file://:0:0:0:0 | MapReduceMappingsTask | java.util.concurrent.MapReduceMappingsTask | +| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | java.util.concurrent.MapReduceMappingsToDoubleTask | +| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | java.util.concurrent.MapReduceMappingsToDoubleTask | +| file://:0:0:0:0 | MapReduceMappingsToIntTask | java.util.concurrent.MapReduceMappingsToIntTask | +| file://:0:0:0:0 | MapReduceMappingsToIntTask | java.util.concurrent.MapReduceMappingsToIntTask | +| file://:0:0:0:0 | MapReduceMappingsToLongTask | java.util.concurrent.MapReduceMappingsToLongTask | +| file://:0:0:0:0 | MapReduceMappingsToLongTask | java.util.concurrent.MapReduceMappingsToLongTask | +| file://:0:0:0:0 | MapReduceValuesTask | java.util.concurrent.MapReduceValuesTask | +| file://:0:0:0:0 | MapReduceValuesTask | java.util.concurrent.MapReduceValuesTask | +| file://:0:0:0:0 | MapReduceValuesToDoubleTask | java.util.concurrent.MapReduceValuesToDoubleTask | +| file://:0:0:0:0 | MapReduceValuesToDoubleTask | java.util.concurrent.MapReduceValuesToDoubleTask | +| file://:0:0:0:0 | MapReduceValuesToIntTask | java.util.concurrent.MapReduceValuesToIntTask | +| file://:0:0:0:0 | MapReduceValuesToIntTask | java.util.concurrent.MapReduceValuesToIntTask | +| file://:0:0:0:0 | MapReduceValuesToLongTask | java.util.concurrent.MapReduceValuesToLongTask | +| file://:0:0:0:0 | MapReduceValuesToLongTask | java.util.concurrent.MapReduceValuesToLongTask | +| file://:0:0:0:0 | MappedByteBuffer | java.nio.MappedByteBuffer | +| file://:0:0:0:0 | MemberName | java.lang.invoke.MemberName | +| file://:0:0:0:0 | Method | java.lang.reflect.Method | +| file://:0:0:0:0 | MethodHandle | java.lang.invoke.MethodHandle | +| file://:0:0:0:0 | MethodRepository | sun.reflect.generics.repository.MethodRepository | +| file://:0:0:0:0 | MethodType | java.lang.invoke.MethodType | +| file://:0:0:0:0 | MethodTypeForm | java.lang.invoke.MethodTypeForm | +| file://:0:0:0:0 | MethodTypeSignature | sun.reflect.generics.tree.MethodTypeSignature | +| file://:0:0:0:0 | MethodVisitor | jdk.internal.org.objectweb.asm.MethodVisitor | +| file://:0:0:0:0 | MethodWriter | jdk.internal.org.objectweb.asm.MethodWriter | +| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | +| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | +| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | +| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | +| file://:0:0:0:0 | Module | java.lang.Module | +| file://:0:0:0:0 | ModuleDescriptor | java.lang.module.ModuleDescriptor | +| file://:0:0:0:0 | ModuleLayer | java.lang.ModuleLayer | +| file://:0:0:0:0 | ModuleReference | java.lang.module.ModuleReference | +| file://:0:0:0:0 | ModuleVisitor | jdk.internal.org.objectweb.asm.ModuleVisitor | +| file://:0:0:0:0 | Month | java.time.Month | +| file://:0:0:0:0 | Name | java.lang.invoke.Name | +| file://:0:0:0:0 | NamedFunction | java.lang.invoke.NamedFunction | +| file://:0:0:0:0 | NamedPackage | java.lang.NamedPackage | +| file://:0:0:0:0 | NativeLibrary | java.lang.NativeLibrary | +| file://:0:0:0:0 | NestHost | jdk.internal.org.objectweb.asm.NestHost | +| file://:0:0:0:0 | NestMembers | jdk.internal.org.objectweb.asm.NestMembers | +| file://:0:0:0:0 | NetworkInterface | java.net.NetworkInterface | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.Node | +| file://:0:0:0:0 | Node | java.util.concurrent.locks.Node | +| file://:0:0:0:0 | NonfairSync | java.util.concurrent.locks.NonfairSync | +| file://:0:0:0:0 | Nothing | kotlin.Nothing | +| file://:0:0:0:0 | Number | java.lang.Number | +| file://:0:0:0:0 | Number | kotlin.Number | +| file://:0:0:0:0 | Object | java.lang.Object | +| file://:0:0:0:0 | ObjectInputStream | java.io.ObjectInputStream | +| file://:0:0:0:0 | ObjectOutputStream | java.io.ObjectOutputStream | +| file://:0:0:0:0 | ObjectStreamClass | java.io.ObjectStreamClass | +| file://:0:0:0:0 | ObjectStreamException | java.io.ObjectStreamException | +| file://:0:0:0:0 | ObjectStreamField | java.io.ObjectStreamField | +| file://:0:0:0:0 | OffsetClock | java.time.OffsetClock | +| file://:0:0:0:0 | OffsetDateTime | java.time.OffsetDateTime | +| file://:0:0:0:0 | OffsetTime | java.time.OffsetTime | +| file://:0:0:0:0 | Opens | java.lang.module.Opens | +| file://:0:0:0:0 | Option | java.lang.Option | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | Optional | java.util.Optional | +| file://:0:0:0:0 | OptionalDataException | java.io.OptionalDataException | +| file://:0:0:0:0 | OptionalDouble | java.util.OptionalDouble | +| file://:0:0:0:0 | OptionalInt | java.util.OptionalInt | +| file://:0:0:0:0 | OptionalLong | java.util.OptionalLong | +| file://:0:0:0:0 | OutputStream | java.io.OutputStream | +| file://:0:0:0:0 | Package | java.lang.Package | +| file://:0:0:0:0 | Parameter | java.lang.reflect.Parameter | +| file://:0:0:0:0 | ParsePosition | java.text.ParsePosition | +| file://:0:0:0:0 | Parsed | java.time.format.Parsed | +| file://:0:0:0:0 | Period | java.time.Period | +| file://:0:0:0:0 | Permission | java.security.Permission | +| file://:0:0:0:0 | PermissionCollection | java.security.PermissionCollection | +| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | +| file://:0:0:0:0 | PhantomCleanableRef | jdk.internal.ref.PhantomCleanableRef | +| file://:0:0:0:0 | PhantomReference | java.lang.ref.PhantomReference | +| file://:0:0:0:0 | PhantomReference | java.lang.ref.PhantomReference | +| file://:0:0:0:0 | PolymorphicSignature | java.lang.invoke.PolymorphicSignature | +| file://:0:0:0:0 | PrintStream | java.io.PrintStream | +| file://:0:0:0:0 | PrintWriter | java.io.PrintWriter | +| file://:0:0:0:0 | Properties | java.util.Properties | +| file://:0:0:0:0 | ProtectionDomain | java.security.ProtectionDomain | +| file://:0:0:0:0 | Provider | java.security.Provider | +| file://:0:0:0:0 | Provides | java.lang.module.Provides | +| file://:0:0:0:0 | Proxy | java.net.Proxy | +| file://:0:0:0:0 | PutField | java.io.PutField | +| file://:0:0:0:0 | Random | java.util.Random | +| file://:0:0:0:0 | RandomAccessSpliterator | java.util.RandomAccessSpliterator | +| file://:0:0:0:0 | RandomDoublesSpliterator | java.util.RandomDoublesSpliterator | +| file://:0:0:0:0 | RandomIntsSpliterator | java.util.RandomIntsSpliterator | +| file://:0:0:0:0 | RandomLongsSpliterator | java.util.RandomLongsSpliterator | +| file://:0:0:0:0 | Reader | java.io.Reader | +| file://:0:0:0:0 | ReduceEntriesTask | java.util.concurrent.ReduceEntriesTask | +| file://:0:0:0:0 | ReduceEntriesTask | java.util.concurrent.ReduceEntriesTask | +| file://:0:0:0:0 | ReduceKeysTask | java.util.concurrent.ReduceKeysTask | +| file://:0:0:0:0 | ReduceKeysTask | java.util.concurrent.ReduceKeysTask | +| file://:0:0:0:0 | ReduceValuesTask | java.util.concurrent.ReduceValuesTask | +| file://:0:0:0:0 | ReduceValuesTask | java.util.concurrent.ReduceValuesTask | +| file://:0:0:0:0 | ReentrantLock | java.util.concurrent.locks.ReentrantLock | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | Reference | java.lang.ref.Reference | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | +| file://:0:0:0:0 | ReflectionFactory | jdk.internal.reflect.ReflectionFactory | +| file://:0:0:0:0 | ReflectiveOperationException | java.lang.ReflectiveOperationException | +| file://:0:0:0:0 | Reifier | sun.reflect.generics.visitor.Reifier | +| file://:0:0:0:0 | Requires | java.lang.module.Requires | +| file://:0:0:0:0 | ReservationNode | java.util.concurrent.ReservationNode | +| file://:0:0:0:0 | ResolvedModule | java.lang.module.ResolvedModule | +| file://:0:0:0:0 | ResolverStyle | java.time.format.ResolverStyle | +| file://:0:0:0:0 | RetentionPolicy | java.lang.annotation.RetentionPolicy | +| file://:0:0:0:0 | RunnableExecuteAction | java.util.concurrent.RunnableExecuteAction | +| file://:0:0:0:0 | RuntimeException | java.lang.RuntimeException | +| file://:0:0:0:0 | RuntimePermission | java.lang.RuntimePermission | +| file://:0:0:0:0 | SearchEntriesTask | java.util.concurrent.SearchEntriesTask | +| file://:0:0:0:0 | SearchKeysTask | java.util.concurrent.SearchKeysTask | +| file://:0:0:0:0 | SearchMappingsTask | java.util.concurrent.SearchMappingsTask | +| file://:0:0:0:0 | SearchValuesTask | java.util.concurrent.SearchValuesTask | +| file://:0:0:0:0 | Segment | java.util.concurrent.Segment | +| file://:0:0:0:0 | SerializablePermission | java.io.SerializablePermission | +| file://:0:0:0:0 | Service | java.security.Service | +| file://:0:0:0:0 | ServiceProvider | jdk.internal.module.ServiceProvider | +| file://:0:0:0:0 | ServicesCatalog | jdk.internal.module.ServicesCatalog | +| file://:0:0:0:0 | Short | java.lang.Short | +| file://:0:0:0:0 | Short | kotlin.Short | +| file://:0:0:0:0 | ShortArray | kotlin.ShortArray | +| file://:0:0:0:0 | ShortBuffer | java.nio.ShortBuffer | +| file://:0:0:0:0 | ShortIterator | kotlin.collections.ShortIterator | +| file://:0:0:0:0 | ShortSignature | sun.reflect.generics.tree.ShortSignature | +| file://:0:0:0:0 | SimpleClassTypeSignature | sun.reflect.generics.tree.SimpleClassTypeSignature | +| file://:0:0:0:0 | SimpleEntry | java.util.SimpleEntry | +| file://:0:0:0:0 | SimpleImmutableEntry | java.util.SimpleImmutableEntry | +| file://:0:0:0:0 | SocketAddress | java.net.SocketAddress | +| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | +| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | +| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | +| file://:0:0:0:0 | SoftCleanableRef | jdk.internal.ref.SoftCleanableRef | +| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | +| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | +| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | +| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | +| file://:0:0:0:0 | Specializer | java.lang.invoke.Specializer | +| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | +| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | +| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | +| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | +| file://:0:0:0:0 | StackFrameInfo | java.lang.StackFrameInfo | +| file://:0:0:0:0 | StackTraceElement | java.lang.StackTraceElement | +| file://:0:0:0:0 | StackWalker | java.lang.StackWalker | +| file://:0:0:0:0 | State | java.lang.State | +| file://:0:0:0:0 | Status | java.io.Status | | file://:0:0:0:0 | String | java.lang.String | | file://:0:0:0:0 | String | kotlin.String | -| file://:0:0:0:0 | Unit | kotlin.Unit | +| file://:0:0:0:0 | StringBuffer | java.lang.StringBuffer | +| file://:0:0:0:0 | StringBuilder | java.lang.StringBuilder | +| file://:0:0:0:0 | Subject | javax.security.auth.Subject | +| file://:0:0:0:0 | Subset | java.lang.Subset | +| file://:0:0:0:0 | SuppliedThreadLocal | java.lang.SuppliedThreadLocal | +| file://:0:0:0:0 | Sync | java.util.concurrent.locks.Sync | +| file://:0:0:0:0 | SystemClock | java.time.SystemClock | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | +| file://:0:0:0:0 | Tag | jdk.internal.reflect.Tag | +| file://:0:0:0:0 | TextStyle | java.time.format.TextStyle | +| file://:0:0:0:0 | Thread | java.lang.Thread | +| file://:0:0:0:0 | ThreadGroup | java.lang.ThreadGroup | +| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | +| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | +| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | +| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | +| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | +| file://:0:0:0:0 | ThreadLocalMap | java.lang.ThreadLocalMap | +| file://:0:0:0:0 | Throwable | java.lang.Throwable | +| file://:0:0:0:0 | Throwable | kotlin.Throwable | +| file://:0:0:0:0 | TickClock | java.time.TickClock | +| file://:0:0:0:0 | TimeDefinition | java.time.zone.TimeDefinition | +| file://:0:0:0:0 | TimeUnit | java.util.concurrent.TimeUnit | +| file://:0:0:0:0 | Timestamp | java.security.Timestamp | +| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | +| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | +| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | +| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | +| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | +| file://:0:0:0:0 | TreeBin | java.util.concurrent.TreeBin | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | +| file://:0:0:0:0 | Type | java.net.Type | +| file://:0:0:0:0 | Type | jdk.internal.org.objectweb.asm.Type | +| file://:0:0:0:0 | TypeParam | kotlin.TypeParam | +| file://:0:0:0:0 | TypePath | jdk.internal.org.objectweb.asm.TypePath | +| file://:0:0:0:0 | TypeVariableSignature | sun.reflect.generics.tree.TypeVariableSignature | +| file://:0:0:0:0 | TypesAndInvokers | java.lang.invoke.TypesAndInvokers | +| file://:0:0:0:0 | URI | java.net.URI | +| file://:0:0:0:0 | URL | java.net.URL | +| file://:0:0:0:0 | URLConnection | java.net.URLConnection | +| file://:0:0:0:0 | URLStreamHandler | java.net.URLStreamHandler | +| file://:0:0:0:0 | UnicodeBlock | java.lang.UnicodeBlock | +| file://:0:0:0:0 | UnicodeScript | java.lang.UnicodeScript | +| file://:0:0:0:0 | Unloader | java.lang.Unloader | +| file://:0:0:0:0 | Unsafe | jdk.internal.misc.Unsafe | +| file://:0:0:0:0 | UserPrincipalLookupService | java.nio.file.attribute.UserPrincipalLookupService | +| file://:0:0:0:0 | ValueIterator | java.util.concurrent.ValueIterator | +| file://:0:0:0:0 | ValueRange | java.time.temporal.ValueRange | +| file://:0:0:0:0 | ValueSpliterator | java.util.ValueSpliterator | +| file://:0:0:0:0 | ValueSpliterator | java.util.ValueSpliterator | +| file://:0:0:0:0 | ValueSpliterator | java.util.concurrent.ValueSpliterator | +| file://:0:0:0:0 | ValueSpliterator | java.util.concurrent.ValueSpliterator | +| file://:0:0:0:0 | ValuesView | java.util.concurrent.ValuesView | +| file://:0:0:0:0 | VarForm | java.lang.invoke.VarForm | +| file://:0:0:0:0 | VarHandle | java.lang.invoke.VarHandle | +| file://:0:0:0:0 | Version | java.lang.Version | +| file://:0:0:0:0 | Version | java.lang.Version | +| file://:0:0:0:0 | Version | java.lang.Version | +| file://:0:0:0:0 | Version | java.lang.Version | +| file://:0:0:0:0 | Version | java.lang.module.Version | +| file://:0:0:0:0 | VersionInfo | java.lang.VersionInfo | +| file://:0:0:0:0 | Void | java.lang.Void | +| file://:0:0:0:0 | VoidDescriptor | sun.reflect.generics.tree.VoidDescriptor | +| file://:0:0:0:0 | WeakClassKey | java.io.WeakClassKey | +| file://:0:0:0:0 | WeakClassKey | java.lang.WeakClassKey | +| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | +| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | +| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | +| file://:0:0:0:0 | WeakCleanableRef | jdk.internal.ref.WeakCleanableRef | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | +| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | +| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | +| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | +| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | +| file://:0:0:0:0 | Wildcard | sun.reflect.generics.tree.Wildcard | +| file://:0:0:0:0 | WorkQueue | java.util.concurrent.WorkQueue | +| file://:0:0:0:0 | Wrapper | sun.invoke.util.Wrapper | +| file://:0:0:0:0 | Writer | java.io.Writer | +| file://:0:0:0:0 | WrongMethodTypeException | java.lang.invoke.WrongMethodTypeException | +| file://:0:0:0:0 | ZoneId | java.time.ZoneId | +| file://:0:0:0:0 | ZoneOffset | java.time.ZoneOffset | +| file://:0:0:0:0 | ZoneOffsetTransition | java.time.zone.ZoneOffsetTransition | +| file://:0:0:0:0 | ZoneOffsetTransitionRule | java.time.zone.ZoneOffsetTransitionRule | +| file://:0:0:0:0 | ZoneRules | java.time.zone.ZoneRules | +| file://:0:0:0:0 | ZonedDateTime | java.time.ZonedDateTime | diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index 2b76d7c3348..f6c2168d678 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -1,16 +1,3361 @@ +| file://:0:0:0:0 | * | Wildcard | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | A | TypeVariable | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | AbstractChronology | Class | +| file://:0:0:0:0 | AbstractCollection | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | AbstractCollection | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractCollection | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractExecutorService | Class | +| file://:0:0:0:0 | AbstractInterruptibleChannel | Class | +| file://:0:0:0:0 | AbstractList | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | AbstractList | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractList | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractMap | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | AbstractMap | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractMap | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractOwnableSynchronizer | Class | +| file://:0:0:0:0 | AbstractQueuedSynchronizer | Class | +| file://:0:0:0:0 | AbstractRepository | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | AbstractRepository | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractSet | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | AbstractSet | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractStringBuilder | Class | +| file://:0:0:0:0 | AccessControlContext | Class | +| file://:0:0:0:0 | AccessDescriptor | Class | +| file://:0:0:0:0 | AccessMode | Class | +| file://:0:0:0:0 | AccessMode | Class | +| file://:0:0:0:0 | AccessType | Class | +| file://:0:0:0:0 | AccessibleObject | Class | +| file://:0:0:0:0 | AdaptedCallable | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | AdaptedRunnable | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | AdaptedRunnableAction | Class | +| file://:0:0:0:0 | AnnotatedElement | Interface | +| file://:0:0:0:0 | AnnotatedType | Interface | +| file://:0:0:0:0 | Annotation | Interface | +| file://:0:0:0:0 | Annotation | Interface | +| file://:0:0:0:0 | AnnotationType | Class | +| file://:0:0:0:0 | AnnotationVisitor | Class | | file://:0:0:0:0 | Any | Class | +| file://:0:0:0:0 | Appendable | Interface | +| file://:0:0:0:0 | Array | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | Class | +| file://:0:0:0:0 | ArrayList | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ArrayList | Class, ParameterizedType | +| file://:0:0:0:0 | ArrayList | Class, ParameterizedType | +| file://:0:0:0:0 | ArrayListSpliterator | Class | +| file://:0:0:0:0 | ArrayListSpliterator | Class, ParameterizedType | +| file://:0:0:0:0 | ArrayTypeSignature | Class | +| file://:0:0:0:0 | AsynchronousChannel | Interface | +| file://:0:0:0:0 | AsynchronousFileChannel | Class | +| file://:0:0:0:0 | AtomicInteger | Class | +| file://:0:0:0:0 | AtomicReference | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | +| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | +| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | +| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | +| file://:0:0:0:0 | Attribute | Class | +| file://:0:0:0:0 | Attribute | Class | +| file://:0:0:0:0 | AttributeView | Interface | +| file://:0:0:0:0 | AttributedCharacterIterator | Interface | +| file://:0:0:0:0 | AuthPermission | Class | +| file://:0:0:0:0 | AuthPermissionHolder | Class | +| file://:0:0:0:0 | AutoCloseable | Interface | +| file://:0:0:0:0 | BaseIterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | BaseIterator | Class, ParameterizedType | +| file://:0:0:0:0 | BaseIterator | Class, ParameterizedType | +| file://:0:0:0:0 | BaseIterator | Class, ParameterizedType | +| file://:0:0:0:0 | BaseLocale | Class | +| file://:0:0:0:0 | BaseStream | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | BaseStream | Interface, ParameterizedType | +| file://:0:0:0:0 | BaseStream | Interface, ParameterizedType | +| file://:0:0:0:0 | BaseStream | Interface, ParameterizedType | +| file://:0:0:0:0 | BaseStream | Interface, ParameterizedType | +| file://:0:0:0:0 | BaseType | Interface | +| file://:0:0:0:0 | BasicFileAttributes | Interface | +| file://:0:0:0:0 | BasicPermission | Class | +| file://:0:0:0:0 | BasicType | Class | +| file://:0:0:0:0 | BiConsumer | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BigInteger | Class | +| file://:0:0:0:0 | BinaryOperator | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | | file://:0:0:0:0 | Boolean | Class | +| file://:0:0:0:0 | Boolean | Class | +| file://:0:0:0:0 | BooleanSignature | Class | +| file://:0:0:0:0 | BottomSignature | Class | +| file://:0:0:0:0 | BoundMethodHandle | Class | +| file://:0:0:0:0 | Buffer | Class | +| file://:0:0:0:0 | BufferedWriter | Class | +| file://:0:0:0:0 | Builder | Class | +| file://:0:0:0:0 | Builder | Class | +| file://:0:0:0:0 | Builder | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Builder | Interface | +| file://:0:0:0:0 | Builder | Interface | +| file://:0:0:0:0 | Builder | Interface | +| file://:0:0:0:0 | Builder | Interface, ParameterizedType | +| file://:0:0:0:0 | Builder | Interface, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | | file://:0:0:0:0 | Byte | Class | +| file://:0:0:0:0 | Byte | Class | +| file://:0:0:0:0 | ByteArray | Class | +| file://:0:0:0:0 | ByteBuffer | Class | +| file://:0:0:0:0 | ByteChannel | Interface | +| file://:0:0:0:0 | ByteIterator | Class | +| file://:0:0:0:0 | ByteOrder | Class | +| file://:0:0:0:0 | ByteSignature | Class | +| file://:0:0:0:0 | ByteVector | Class | +| file://:0:0:0:0 | CallSite | Class | +| file://:0:0:0:0 | Callable | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | CaseInsensitiveChar | Class | +| file://:0:0:0:0 | CaseInsensitiveString | Class | +| file://:0:0:0:0 | Category | Class | +| file://:0:0:0:0 | CertPath | Class | +| file://:0:0:0:0 | CertPathRep | Class | +| file://:0:0:0:0 | Certificate | Class | +| file://:0:0:0:0 | CertificateRep | Class | +| file://:0:0:0:0 | Channel | Interface | | file://:0:0:0:0 | Char | Class | +| file://:0:0:0:0 | CharArray | Class | +| file://:0:0:0:0 | CharBuffer | Class | +| file://:0:0:0:0 | CharIterator | Class | +| file://:0:0:0:0 | CharProgression | Class | +| file://:0:0:0:0 | CharRange | Class | +| file://:0:0:0:0 | CharSequence | Interface | +| file://:0:0:0:0 | CharSequence | Interface | +| file://:0:0:0:0 | CharSignature | Class | +| file://:0:0:0:0 | Character | Class | +| file://:0:0:0:0 | CharacterIterator | Interface | +| file://:0:0:0:0 | Characteristics | Class | +| file://:0:0:0:0 | Charset | Class | +| file://:0:0:0:0 | CharsetDecoder | Class | +| file://:0:0:0:0 | CharsetEncoder | Class | +| file://:0:0:0:0 | ChronoField | Class | +| file://:0:0:0:0 | ChronoLocalDate | Interface | +| file://:0:0:0:0 | ChronoLocalDateTime | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoPeriod | Interface | +| file://:0:0:0:0 | ChronoUnit | Class | +| file://:0:0:0:0 | ChronoZonedDateTime | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | Chronology | Interface | +| file://:0:0:0:0 | Class | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | ClassDataSlot | Class | +| file://:0:0:0:0 | ClassLoader | Class | +| file://:0:0:0:0 | ClassNotFoundException | Class | +| file://:0:0:0:0 | ClassReader | Class | +| file://:0:0:0:0 | ClassSignature | Class | +| file://:0:0:0:0 | ClassSpecializer | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ClassSpecializer | Class, ParameterizedType | +| file://:0:0:0:0 | ClassSpecializer | Class, ParameterizedType | +| file://:0:0:0:0 | ClassTypeSignature | Class | +| file://:0:0:0:0 | ClassValue | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ClassValue | Class, ParameterizedType | +| file://:0:0:0:0 | ClassValue | Class, ParameterizedType | +| file://:0:0:0:0 | ClassValue | Class, ParameterizedType | +| file://:0:0:0:0 | ClassValue | Class, ParameterizedType | +| file://:0:0:0:0 | ClassValue | Class, ParameterizedType | +| file://:0:0:0:0 | ClassValue | Class, ParameterizedType | +| file://:0:0:0:0 | ClassValue | Class, ParameterizedType | +| file://:0:0:0:0 | ClassValue | Class, ParameterizedType | +| file://:0:0:0:0 | ClassValueMap | Class | +| file://:0:0:0:0 | ClassVisitor | Class | +| file://:0:0:0:0 | ClassWriter | Class | +| file://:0:0:0:0 | ClassicFormat | Class | +| file://:0:0:0:0 | Cleanable | Interface | +| file://:0:0:0:0 | Cleaner | Class | +| file://:0:0:0:0 | CleanerCleanable | Class | +| file://:0:0:0:0 | CleanerImpl | Class | +| file://:0:0:0:0 | Clock | Class | +| file://:0:0:0:0 | Cloneable | Interface | +| file://:0:0:0:0 | Cloneable | Interface | +| file://:0:0:0:0 | Closeable | Interface | +| file://:0:0:0:0 | ClosedRange | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ClosedRange | Interface, ParameterizedType | +| file://:0:0:0:0 | ClosedRange | Interface, ParameterizedType | +| file://:0:0:0:0 | ClosedRange | Interface, ParameterizedType | +| file://:0:0:0:0 | CodeSigner | Class | +| file://:0:0:0:0 | CodeSource | Class | +| file://:0:0:0:0 | CoderResult | Class | +| file://:0:0:0:0 | CodingErrorAction | Class | +| file://:0:0:0:0 | Collection | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | Collection | Interface, ParameterizedType | +| file://:0:0:0:0 | CollectionView | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | CollectionView | Class, ParameterizedType | +| file://:0:0:0:0 | CollectionView | Class, ParameterizedType | +| file://:0:0:0:0 | CollectionView | Class, ParameterizedType | +| file://:0:0:0:0 | Collector | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Collector | Interface, ParameterizedType | +| file://:0:0:0:0 | Collector | Interface, ParameterizedType | +| file://:0:0:0:0 | Collector | Interface, ParameterizedType | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Companion | Class | +| file://:0:0:0:0 | Comparable | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparable | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Comparator | Interface, ParameterizedType | +| file://:0:0:0:0 | Compiled | Class | +| file://:0:0:0:0 | CompletionHandler | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | CompletionHandler | Interface, ParameterizedType | +| file://:0:0:0:0 | CompletionHandler | Interface, ParameterizedType | +| file://:0:0:0:0 | CompletionHandler | Interface, ParameterizedType | +| file://:0:0:0:0 | CompletionHandler | Interface, ParameterizedType | +| file://:0:0:0:0 | CompositePrinterParser | Class | +| file://:0:0:0:0 | ConcurrentHashMap | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | ConcurrentMap | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ConcurrentMap | Interface, ParameterizedType | +| file://:0:0:0:0 | ConcurrentMap | Interface, ParameterizedType | +| file://:0:0:0:0 | ConcurrentWeakInternSet | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ConcurrentWeakInternSet | Class, ParameterizedType | +| file://:0:0:0:0 | Condition | Interface | +| file://:0:0:0:0 | ConditionObject | Class | +| file://:0:0:0:0 | Config | Class | +| file://:0:0:0:0 | Configuration | Class | +| file://:0:0:0:0 | ConstantPool | Class | +| file://:0:0:0:0 | Constructor | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Constructor | Class, ParameterizedType | +| file://:0:0:0:0 | Constructor | Class, ParameterizedType | +| file://:0:0:0:0 | Constructor | Class, ParameterizedType | +| file://:0:0:0:0 | Constructor | Class, ParameterizedType | +| file://:0:0:0:0 | Constructor | Class, ParameterizedType | +| file://:0:0:0:0 | Constructor | Class, ParameterizedType | +| file://:0:0:0:0 | Constructor | Class, ParameterizedType | +| file://:0:0:0:0 | Constructor | Class, ParameterizedType | +| file://:0:0:0:0 | Constructor | Class, ParameterizedType | +| file://:0:0:0:0 | ConstructorAccessor | Interface | +| file://:0:0:0:0 | ConstructorRepository | Class | +| file://:0:0:0:0 | Consumer | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | ContentHandler | Class | +| file://:0:0:0:0 | ContentHandlerFactory | Interface | +| file://:0:0:0:0 | Controller | Class | +| file://:0:0:0:0 | CopyOption | Interface | +| file://:0:0:0:0 | CountedCompleter | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | CountedCompleter | Class, ParameterizedType | +| file://:0:0:0:0 | CountedCompleter | Class, ParameterizedType | +| file://:0:0:0:0 | CounterCell | Class | +| file://:0:0:0:0 | D | TypeVariable | +| file://:0:0:0:0 | D | TypeVariable | +| file://:0:0:0:0 | D | TypeVariable | +| file://:0:0:0:0 | DataInput | Interface | +| file://:0:0:0:0 | DataOutput | Interface | +| file://:0:0:0:0 | Date | Class | +| file://:0:0:0:0 | DateTimeFormatter | Class | +| file://:0:0:0:0 | DateTimeParseContext | Class | +| file://:0:0:0:0 | DateTimePrintContext | Class | +| file://:0:0:0:0 | DateTimePrinterParser | Interface | +| file://:0:0:0:0 | DayOfWeek | Class | +| file://:0:0:0:0 | Debug | Class | +| file://:0:0:0:0 | DecimalStyle | Class | +| file://:0:0:0:0 | Deque | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Deque | Interface, ParameterizedType | +| file://:0:0:0:0 | Dictionary | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Dictionary | Class, ParameterizedType | +| file://:0:0:0:0 | DirectoryStream | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | DirectoryStream | Interface, ParameterizedType | +| file://:0:0:0:0 | DomainCombiner | Interface | | file://:0:0:0:0 | Double | Class | +| file://:0:0:0:0 | Double | Class | +| file://:0:0:0:0 | DoubleArray | Class | +| file://:0:0:0:0 | DoubleBinaryOperator | Interface | +| file://:0:0:0:0 | DoubleBuffer | Class | +| file://:0:0:0:0 | DoubleConsumer | Interface | +| file://:0:0:0:0 | DoubleFunction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | DoubleFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | DoubleFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | DoubleIterator | Class | +| file://:0:0:0:0 | DoublePredicate | Interface | +| file://:0:0:0:0 | DoubleSignature | Class | +| file://:0:0:0:0 | DoubleStream | Interface | +| file://:0:0:0:0 | DoubleSummaryStatistics | Class | +| file://:0:0:0:0 | DoubleSupplier | Interface | +| file://:0:0:0:0 | DoubleToIntFunction | Interface | +| file://:0:0:0:0 | DoubleToLongFunction | Interface | +| file://:0:0:0:0 | DoubleUnaryOperator | Interface | +| file://:0:0:0:0 | Duration | Class | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | E | TypeVariable | +| file://:0:0:0:0 | Edge | Class | +| file://:0:0:0:0 | Entry | Class | +| file://:0:0:0:0 | Entry | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | Class, ParameterizedType | +| file://:0:0:0:0 | Entry | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | EntryIterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | EntrySetView | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | EntrySpliterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | EntrySpliterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | EntrySpliterator | Class, ParameterizedType | +| file://:0:0:0:0 | EntrySpliterator | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | EnumSet | Class, ParameterizedType | +| file://:0:0:0:0 | Enumeration | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Era | Interface | +| file://:0:0:0:0 | Exception | Class | +| file://:0:0:0:0 | ExceptionNode | Class | +| file://:0:0:0:0 | Executable | Class | +| file://:0:0:0:0 | Executor | Interface | +| file://:0:0:0:0 | ExecutorService | Interface | +| file://:0:0:0:0 | Exports | Class | +| file://:0:0:0:0 | ExtendedOption | Class | +| file://:0:0:0:0 | Extension | Class | +| file://:0:0:0:0 | Factory | Class | +| file://:0:0:0:0 | Factory | Class | +| file://:0:0:0:0 | Factory | Class | +| file://:0:0:0:0 | Factory | Class, ParameterizedType | +| file://:0:0:0:0 | Factory | Class, ParameterizedType | +| file://:0:0:0:0 | FairSync | Class | +| file://:0:0:0:0 | Field | Class | +| file://:0:0:0:0 | Field | Class | +| file://:0:0:0:0 | FieldAccessor | Interface | +| file://:0:0:0:0 | FieldDelegate | Interface | +| file://:0:0:0:0 | FieldPosition | Class | +| file://:0:0:0:0 | FieldTypeSignature | Interface | +| file://:0:0:0:0 | FieldVisitor | Class | +| file://:0:0:0:0 | FieldWriter | Class | +| file://:0:0:0:0 | File | Class | +| file://:0:0:0:0 | FileAttribute | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | FileAttribute | Interface, ParameterizedType | +| file://:0:0:0:0 | FileAttributeView | Interface | +| file://:0:0:0:0 | FileChannel | Class | +| file://:0:0:0:0 | FileDescriptor | Class | +| file://:0:0:0:0 | FileFilter | Interface | +| file://:0:0:0:0 | FileLock | Class | +| file://:0:0:0:0 | FileNameMap | Interface | +| file://:0:0:0:0 | FileStore | Class | +| file://:0:0:0:0 | FileStoreAttributeView | Interface | +| file://:0:0:0:0 | FileSystem | Class | +| file://:0:0:0:0 | FileSystemProvider | Class | +| file://:0:0:0:0 | FileTime | Class | +| file://:0:0:0:0 | FilenameFilter | Interface | +| file://:0:0:0:0 | Filter | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Filter | Interface, ParameterizedType | +| file://:0:0:0:0 | FilterInfo | Interface | +| file://:0:0:0:0 | FilterOutputStream | Class | +| file://:0:0:0:0 | FilterValues | Class | +| file://:0:0:0:0 | FilteringMode | Class | +| file://:0:0:0:0 | FixedClock | Class | | file://:0:0:0:0 | Float | Class | +| file://:0:0:0:0 | Float | Class | +| file://:0:0:0:0 | FloatArray | Class | +| file://:0:0:0:0 | FloatBuffer | Class | +| file://:0:0:0:0 | FloatIterator | Class | +| file://:0:0:0:0 | FloatSignature | Class | +| file://:0:0:0:0 | Flushable | Interface | +| file://:0:0:0:0 | ForEachEntryTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ForEachKeyTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ForEachMappingTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ForEachTransformedEntryTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ForEachTransformedKeyTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ForEachTransformedMappingTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ForEachTransformedValueTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ForEachValueTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ForkJoinPool | Class | +| file://:0:0:0:0 | ForkJoinTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinTask | Class, ParameterizedType | +| file://:0:0:0:0 | ForkJoinWorkerThread | Class | +| file://:0:0:0:0 | ForkJoinWorkerThreadFactory | Interface | +| file://:0:0:0:0 | FormalTypeParameter | Class | +| file://:0:0:0:0 | Format | Class | +| file://:0:0:0:0 | FormatStyle | Class | +| file://:0:0:0:0 | ForwardingNode | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Frame | Class | +| file://:0:0:0:0 | Function | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Function | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function | Interface, ParameterizedType | +| file://:0:0:0:0 | Function1 | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Function1 | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Function1 | Interface, ParameterizedType | +| file://:0:0:0:0 | Function1 | Interface, ParameterizedType | +| file://:0:0:0:0 | Function1 | Interface, ParameterizedType | +| file://:0:0:0:0 | Function1 | Interface, ParameterizedType | +| file://:0:0:0:0 | Function1 | Interface, ParameterizedType | +| file://:0:0:0:0 | Function1 | Interface, ParameterizedType | +| file://:0:0:0:0 | Function1 | Interface, ParameterizedType | +| file://:0:0:0:0 | Function1 | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | Future | Interface, ParameterizedType | +| file://:0:0:0:0 | GatheringByteChannel | Interface | +| file://:0:0:0:0 | GenericDeclRepository | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | GenericDeclRepository | Class, ParameterizedType | +| file://:0:0:0:0 | GenericDeclaration | Interface | +| file://:0:0:0:0 | GenericsFactory | Interface | +| file://:0:0:0:0 | GetField | Class | +| file://:0:0:0:0 | GetReflectionFactoryAction | Class | +| file://:0:0:0:0 | Global | Class | +| file://:0:0:0:0 | GroupPrincipal | Interface | +| file://:0:0:0:0 | Guard | Interface | +| file://:0:0:0:0 | Handle | Class | +| file://:0:0:0:0 | Hashtable | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Hashtable | Class, ParameterizedType | +| file://:0:0:0:0 | Hashtable | Class, ParameterizedType | +| file://:0:0:0:0 | Hashtable | Class, ParameterizedType | +| file://:0:0:0:0 | Hidden | Class | +| file://:0:0:0:0 | IOException | Class | +| file://:0:0:0:0 | Identity | Class | +| file://:0:0:0:0 | IllegalAccessException | Class | +| file://:0:0:0:0 | IllegalArgumentException | Class | +| file://:0:0:0:0 | IndexOutOfBoundsException | Class | +| file://:0:0:0:0 | InetAddress | Class | +| file://:0:0:0:0 | InetAddressHolder | Class | +| file://:0:0:0:0 | InetAddressImpl | Interface | +| file://:0:0:0:0 | InnocuousForkJoinWorkerThread | Class | +| file://:0:0:0:0 | InnocuousThreadFactory | Class | +| file://:0:0:0:0 | InputStream | Class | +| file://:0:0:0:0 | Instant | Class | | file://:0:0:0:0 | Int | Class | +| file://:0:0:0:0 | IntArray | Class | +| file://:0:0:0:0 | IntBinaryOperator | Interface | +| file://:0:0:0:0 | IntBuffer | Class | +| file://:0:0:0:0 | IntConsumer | Interface | +| file://:0:0:0:0 | IntFunction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | IntIterator | Class | +| file://:0:0:0:0 | IntPredicate | Interface | +| file://:0:0:0:0 | IntProgression | Class | +| file://:0:0:0:0 | IntRange | Class | +| file://:0:0:0:0 | IntSignature | Class | +| file://:0:0:0:0 | IntStream | Interface | +| file://:0:0:0:0 | IntSummaryStatistics | Class | +| file://:0:0:0:0 | IntSupplier | Interface | +| file://:0:0:0:0 | IntToDoubleFunction | Interface | +| file://:0:0:0:0 | IntToLongFunction | Interface | +| file://:0:0:0:0 | IntUnaryOperator | Interface | +| file://:0:0:0:0 | Integer | Class | +| file://:0:0:0:0 | InterfaceAddress | Class | +| file://:0:0:0:0 | Interruptible | Interface | +| file://:0:0:0:0 | InterruptibleChannel | Interface | +| file://:0:0:0:0 | Intrinsic | Class | +| file://:0:0:0:0 | Invokers | Class | +| file://:0:0:0:0 | IsoChronology | Class | +| file://:0:0:0:0 | IsoCountryCode | Class | +| file://:0:0:0:0 | IsoEra | Class | +| file://:0:0:0:0 | Item | Class | +| file://:0:0:0:0 | Iterable | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | K | TypeVariable | +| file://:0:0:0:0 | Key | Class | +| file://:0:0:0:0 | Key | Interface | +| file://:0:0:0:0 | KeyIterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | KeySetView | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | KeySetView | Class, ParameterizedType | +| file://:0:0:0:0 | KeySetView | Class, ParameterizedType | +| file://:0:0:0:0 | KeySetView | Class, ParameterizedType | +| file://:0:0:0:0 | KeySpliterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | KeySpliterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | KeySpliterator | Class, ParameterizedType | +| file://:0:0:0:0 | KeySpliterator | Class, ParameterizedType | +| file://:0:0:0:0 | Kind | Class | +| file://:0:0:0:0 | Kind | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Kind | Interface, ParameterizedType | +| file://:0:0:0:0 | Kind | Interface, ParameterizedType | +| file://:0:0:0:0 | Label | Class | +| file://:0:0:0:0 | LambdaForm | Class | +| file://:0:0:0:0 | LambdaFormEditor | Class | +| file://:0:0:0:0 | LangReflectAccess | Interface | +| file://:0:0:0:0 | LanguageRange | Class | +| file://:0:0:0:0 | Level | Class | +| file://:0:0:0:0 | LineReader | Class | +| file://:0:0:0:0 | LinkOption | Class | +| file://:0:0:0:0 | List | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | List | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | List | Interface, ParameterizedType | +| file://:0:0:0:0 | ListIterator | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ListIterator | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ListIterator | Interface, ParameterizedType | +| file://:0:0:0:0 | ListIterator | Interface, ParameterizedType | +| file://:0:0:0:0 | ListIterator | Interface, ParameterizedType | +| file://:0:0:0:0 | ListIterator | Interface, ParameterizedType | +| file://:0:0:0:0 | ListIterator | Interface, ParameterizedType | +| file://:0:0:0:0 | ListIterator | Interface, ParameterizedType | +| file://:0:0:0:0 | LocalDate | Class | +| file://:0:0:0:0 | LocalDateTime | Class | +| file://:0:0:0:0 | LocalTime | Class | +| file://:0:0:0:0 | Locale | Class | +| file://:0:0:0:0 | LocaleExtensions | Class | +| file://:0:0:0:0 | Lock | Interface | | file://:0:0:0:0 | Long | Class | +| file://:0:0:0:0 | Long | Class | +| file://:0:0:0:0 | LongArray | Class | +| file://:0:0:0:0 | LongBinaryOperator | Interface | +| file://:0:0:0:0 | LongBuffer | Class | +| file://:0:0:0:0 | LongConsumer | Interface | +| file://:0:0:0:0 | LongFunction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | LongFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | LongFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | LongIterator | Class | +| file://:0:0:0:0 | LongPredicate | Interface | +| file://:0:0:0:0 | LongProgression | Class | +| file://:0:0:0:0 | LongRange | Class | +| file://:0:0:0:0 | LongSignature | Class | +| file://:0:0:0:0 | LongStream | Interface | +| file://:0:0:0:0 | LongSummaryStatistics | Class | +| file://:0:0:0:0 | LongSupplier | Interface | +| file://:0:0:0:0 | LongToDoubleFunction | Interface | +| file://:0:0:0:0 | LongToIntFunction | Interface | +| file://:0:0:0:0 | LongUnaryOperator | Interface | +| file://:0:0:0:0 | ManagedBlocker | Interface | +| file://:0:0:0:0 | Map | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Map | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | MapEntry | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapMode | Class | +| file://:0:0:0:0 | MapReduceEntriesTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceEntriesTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceEntriesToIntTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceEntriesToIntTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceEntriesToLongTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceEntriesToLongTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceKeysTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceKeysTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceKeysToDoubleTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceKeysToDoubleTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceKeysToIntTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceKeysToIntTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceKeysToLongTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceKeysToLongTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceMappingsTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceMappingsTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceMappingsToIntTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceMappingsToIntTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceMappingsToLongTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceMappingsToLongTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceValuesTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceValuesTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceValuesToDoubleTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceValuesToDoubleTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceValuesToIntTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceValuesToIntTask | Class, ParameterizedType | +| file://:0:0:0:0 | MapReduceValuesToLongTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | MapReduceValuesToLongTask | Class, ParameterizedType | +| file://:0:0:0:0 | MappedByteBuffer | Class | +| file://:0:0:0:0 | Member | Interface | +| file://:0:0:0:0 | MemberName | Class | +| file://:0:0:0:0 | Method | Class | +| file://:0:0:0:0 | MethodAccessor | Interface | +| file://:0:0:0:0 | MethodHandle | Class | +| file://:0:0:0:0 | MethodRepository | Class | +| file://:0:0:0:0 | MethodType | Class | +| file://:0:0:0:0 | MethodTypeForm | Class | +| file://:0:0:0:0 | MethodTypeSignature | Class | +| file://:0:0:0:0 | MethodVisitor | Class | +| file://:0:0:0:0 | MethodWriter | Class | +| file://:0:0:0:0 | Modifier | Class | +| file://:0:0:0:0 | Modifier | Class | +| file://:0:0:0:0 | Modifier | Class | +| file://:0:0:0:0 | Modifier | Class | +| file://:0:0:0:0 | Modifier | Interface | +| file://:0:0:0:0 | Module | Class | +| file://:0:0:0:0 | ModuleDescriptor | Class | +| file://:0:0:0:0 | ModuleFinder | Interface | +| file://:0:0:0:0 | ModuleLayer | Class | +| file://:0:0:0:0 | ModuleReader | Interface | +| file://:0:0:0:0 | ModuleReference | Class | +| file://:0:0:0:0 | ModuleVisitor | Class | +| file://:0:0:0:0 | Month | Class | +| file://:0:0:0:0 | MutableCollection | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | MutableEntry | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | MutableIterable | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | MutableIterator | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | MutableList | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | MutableListIterator | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | MutableMap | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | MutableSet | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Name | Class | +| file://:0:0:0:0 | NamedFunction | Class | +| file://:0:0:0:0 | NamedPackage | Class | +| file://:0:0:0:0 | NativeLibrary | Class | +| file://:0:0:0:0 | NestHost | Class | +| file://:0:0:0:0 | NestMembers | Class | +| file://:0:0:0:0 | NetworkInterface | Class | +| file://:0:0:0:0 | NoSuchMemberException | TypeVariable | +| file://:0:0:0:0 | Node | Class | +| file://:0:0:0:0 | Node | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | Node | Class, ParameterizedType | +| file://:0:0:0:0 | NonfairSync | Class | | file://:0:0:0:0 | Nothing | Class | +| file://:0:0:0:0 | Number | Class | +| file://:0:0:0:0 | Number | Class | +| file://:0:0:0:0 | ObjDoubleConsumer | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ObjDoubleConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | ObjIntConsumer | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ObjIntConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | ObjLongConsumer | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ObjLongConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Object | Class | +| file://:0:0:0:0 | ObjectInput | Interface | +| file://:0:0:0:0 | ObjectInputFilter | Interface | +| file://:0:0:0:0 | ObjectInputStream | Class | +| file://:0:0:0:0 | ObjectInputValidation | Interface | +| file://:0:0:0:0 | ObjectOutput | Interface | +| file://:0:0:0:0 | ObjectOutputStream | Class | +| file://:0:0:0:0 | ObjectStreamClass | Class | +| file://:0:0:0:0 | ObjectStreamConstants | Interface | +| file://:0:0:0:0 | ObjectStreamException | Class | +| file://:0:0:0:0 | ObjectStreamField | Class | +| file://:0:0:0:0 | OfDouble | Interface | +| file://:0:0:0:0 | OfDouble | Interface | +| file://:0:0:0:0 | OfInt | Interface | +| file://:0:0:0:0 | OfInt | Interface | +| file://:0:0:0:0 | OfLong | Interface | +| file://:0:0:0:0 | OfLong | Interface | +| file://:0:0:0:0 | OfPrimitive | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | OfPrimitive | Interface, ParameterizedType | +| file://:0:0:0:0 | OfPrimitive | Interface, ParameterizedType | +| file://:0:0:0:0 | OfPrimitive | Interface, ParameterizedType | +| file://:0:0:0:0 | OffsetClock | Class | +| file://:0:0:0:0 | OffsetDateTime | Class | +| file://:0:0:0:0 | OffsetTime | Class | +| file://:0:0:0:0 | OpenOption | Interface | +| file://:0:0:0:0 | Opens | Class | +| file://:0:0:0:0 | Option | Class | +| file://:0:0:0:0 | Optional | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | Optional | Class, ParameterizedType | +| file://:0:0:0:0 | OptionalDataException | Class | +| file://:0:0:0:0 | OptionalDouble | Class | +| file://:0:0:0:0 | OptionalInt | Class | +| file://:0:0:0:0 | OptionalLong | Class | +| file://:0:0:0:0 | OutputStream | Class | +| file://:0:0:0:0 | P1 | TypeVariable | +| file://:0:0:0:0 | P1 | TypeVariable | +| file://:0:0:0:0 | Package | Class | +| file://:0:0:0:0 | Parameter | Class | +| file://:0:0:0:0 | ParameterizedType | Interface | +| file://:0:0:0:0 | ParsePosition | Class | +| file://:0:0:0:0 | Parsed | Class | +| file://:0:0:0:0 | Path | Interface | +| file://:0:0:0:0 | PathMatcher | Interface | +| file://:0:0:0:0 | Period | Class | +| file://:0:0:0:0 | Permission | Class | +| file://:0:0:0:0 | PermissionCollection | Class | +| file://:0:0:0:0 | PhantomCleanable | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | PhantomCleanable | Class, ParameterizedType | +| file://:0:0:0:0 | PhantomCleanable | Class, ParameterizedType | +| file://:0:0:0:0 | PhantomCleanable | Class, ParameterizedType | +| file://:0:0:0:0 | PhantomCleanable | Class, ParameterizedType | +| file://:0:0:0:0 | PhantomCleanableRef | Class | +| file://:0:0:0:0 | PhantomReference | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | PhantomReference | Class, ParameterizedType | +| file://:0:0:0:0 | PolymorphicSignature | Class | +| file://:0:0:0:0 | Predicate | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | PrimitiveIterator | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | PrimitiveIterator | Interface, ParameterizedType | +| file://:0:0:0:0 | PrimitiveIterator | Interface, ParameterizedType | +| file://:0:0:0:0 | PrimitiveIterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Principal | Interface | +| file://:0:0:0:0 | PrintStream | Class | +| file://:0:0:0:0 | PrintWriter | Class | +| file://:0:0:0:0 | PrivilegedAction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | PrivilegedAction | Interface, ParameterizedType | +| file://:0:0:0:0 | PrivilegedAction | Interface, ParameterizedType | +| file://:0:0:0:0 | PrivilegedAction | Interface, ParameterizedType | +| file://:0:0:0:0 | PrivilegedExceptionAction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | PrivilegedExceptionAction | Interface, ParameterizedType | +| file://:0:0:0:0 | PrivilegedExceptionAction | Interface, ParameterizedType | +| file://:0:0:0:0 | Properties | Class | +| file://:0:0:0:0 | ProtectionDomain | Class | +| file://:0:0:0:0 | Provider | Class | +| file://:0:0:0:0 | Provides | Class | +| file://:0:0:0:0 | Proxy | Class | +| file://:0:0:0:0 | PublicKey | Interface | +| file://:0:0:0:0 | PutField | Class | +| file://:0:0:0:0 | Queue | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Queue | Interface, ParameterizedType | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | R | TypeVariable | +| file://:0:0:0:0 | Random | Class | +| file://:0:0:0:0 | RandomAccess | Interface | +| file://:0:0:0:0 | RandomAccessSpliterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | RandomDoublesSpliterator | Class | +| file://:0:0:0:0 | RandomIntsSpliterator | Class | +| file://:0:0:0:0 | RandomLongsSpliterator | Class | +| file://:0:0:0:0 | Readable | Interface | +| file://:0:0:0:0 | ReadableByteChannel | Interface | +| file://:0:0:0:0 | Reader | Class | +| file://:0:0:0:0 | ReduceEntriesTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ReduceEntriesTask | Class, ParameterizedType | +| file://:0:0:0:0 | ReduceKeysTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ReduceKeysTask | Class, ParameterizedType | +| file://:0:0:0:0 | ReduceValuesTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ReduceValuesTask | Class, ParameterizedType | +| file://:0:0:0:0 | ReentrantLock | Class | +| file://:0:0:0:0 | Reference | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | Reference | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReferenceQueue | Class, ParameterizedType | +| file://:0:0:0:0 | ReflectionFactory | Class | +| file://:0:0:0:0 | ReflectiveOperationException | Class | +| file://:0:0:0:0 | Reifier | Class | +| file://:0:0:0:0 | Requires | Class | +| file://:0:0:0:0 | ReservationNode | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ResolvedModule | Class | +| file://:0:0:0:0 | ResolverStyle | Class | +| file://:0:0:0:0 | RetentionPolicy | Class | +| file://:0:0:0:0 | ReturnType | Interface | +| file://:0:0:0:0 | Runnable | Interface | +| file://:0:0:0:0 | RunnableExecuteAction | Class | +| file://:0:0:0:0 | RunnableFuture | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | RunnableFuture | Interface, ParameterizedType | +| file://:0:0:0:0 | RunnableFuture | Interface, ParameterizedType | +| file://:0:0:0:0 | RunnableFuture | Interface, ParameterizedType | +| file://:0:0:0:0 | RunnableFuture | Interface, ParameterizedType | +| file://:0:0:0:0 | RunnableFuture | Interface, ParameterizedType | +| file://:0:0:0:0 | RunnableFuture | Interface, ParameterizedType | +| file://:0:0:0:0 | RunnableFuture | Interface, ParameterizedType | +| file://:0:0:0:0 | RuntimeException | Class | +| file://:0:0:0:0 | RuntimePermission | Class | +| file://:0:0:0:0 | S | TypeVariable | +| file://:0:0:0:0 | S | TypeVariable | +| file://:0:0:0:0 | S | TypeVariable | +| file://:0:0:0:0 | S | TypeVariable | +| file://:0:0:0:0 | S | TypeVariable | +| file://:0:0:0:0 | ScatteringByteChannel | Interface | +| file://:0:0:0:0 | SearchEntriesTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | SearchKeysTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | SearchMappingsTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | SearchValuesTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | SeekableByteChannel | Interface | +| file://:0:0:0:0 | Segment | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Serializable | Interface | +| file://:0:0:0:0 | SerializablePermission | Class | +| file://:0:0:0:0 | Service | Class | +| file://:0:0:0:0 | ServiceProvider | Class | +| file://:0:0:0:0 | ServicesCatalog | Class | +| file://:0:0:0:0 | Set | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Set | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | | file://:0:0:0:0 | Short | Class | +| file://:0:0:0:0 | Short | Class | +| file://:0:0:0:0 | ShortArray | Class | +| file://:0:0:0:0 | ShortBuffer | Class | +| file://:0:0:0:0 | ShortIterator | Class | +| file://:0:0:0:0 | ShortSignature | Class | +| file://:0:0:0:0 | Signature | Interface | +| file://:0:0:0:0 | SimpleClassTypeSignature | Class | +| file://:0:0:0:0 | SimpleEntry | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | SimpleImmutableEntry | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | SocketAddress | Class | +| file://:0:0:0:0 | SoftCleanable | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | SoftCleanable | Class, ParameterizedType | +| file://:0:0:0:0 | SoftCleanable | Class, ParameterizedType | +| file://:0:0:0:0 | SoftCleanableRef | Class | +| file://:0:0:0:0 | SoftReference | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | SoftReference | Class, ParameterizedType | +| file://:0:0:0:0 | SoftReference | Class, ParameterizedType | +| file://:0:0:0:0 | SoftReference | Class, ParameterizedType | +| file://:0:0:0:0 | SortedMap | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | SortedMap | Interface, ParameterizedType | +| file://:0:0:0:0 | SortedMap | Interface, ParameterizedType | +| file://:0:0:0:0 | Specializer | Class | +| file://:0:0:0:0 | SpeciesData | Class | +| file://:0:0:0:0 | SpeciesData | Class | +| file://:0:0:0:0 | SpeciesData | Class, ParameterizedType | +| file://:0:0:0:0 | SpeciesData | Class, ParameterizedType | +| file://:0:0:0:0 | Spliterator | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | +| file://:0:0:0:0 | StackFrame | Interface | +| file://:0:0:0:0 | StackFrameInfo | Class | +| file://:0:0:0:0 | StackTraceElement | Class | +| file://:0:0:0:0 | StackWalker | Class | +| file://:0:0:0:0 | State | Class | +| file://:0:0:0:0 | Status | Class | +| file://:0:0:0:0 | Stream | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | +| file://:0:0:0:0 | Stream | Interface, ParameterizedType | | file://:0:0:0:0 | String | Class | | file://:0:0:0:0 | String | Class | -| file://:0:0:0:0 | Unit | Class | +| file://:0:0:0:0 | StringBuffer | Class | +| file://:0:0:0:0 | StringBuilder | Class | +| file://:0:0:0:0 | Subject | Class | +| file://:0:0:0:0 | Subset | Class | +| file://:0:0:0:0 | SuppliedThreadLocal | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Supplier | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Sync | Class | +| file://:0:0:0:0 | SystemClock | Class | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T_CONS | TypeVariable | +| file://:0:0:0:0 | T_CONS | TypeVariable | +| file://:0:0:0:0 | T_SPLITR | TypeVariable | +| file://:0:0:0:0 | TableStack | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | TableStack | Class, ParameterizedType | +| file://:0:0:0:0 | Tag | Class | +| file://:0:0:0:0 | Temporal | Interface | +| file://:0:0:0:0 | TemporalAccessor | Interface | +| file://:0:0:0:0 | TemporalAdjuster | Interface | +| file://:0:0:0:0 | TemporalAmount | Interface | +| file://:0:0:0:0 | TemporalField | Interface | +| file://:0:0:0:0 | TemporalQuery | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalUnit | Interface | +| file://:0:0:0:0 | TextStyle | Class | +| file://:0:0:0:0 | Thread | Class | +| file://:0:0:0:0 | ThreadFactory | Interface | +| file://:0:0:0:0 | ThreadGroup | Class | +| file://:0:0:0:0 | ThreadLocal | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ThreadLocal | Class, ParameterizedType | +| file://:0:0:0:0 | ThreadLocal | Class, ParameterizedType | +| file://:0:0:0:0 | ThreadLocal | Class, ParameterizedType | +| file://:0:0:0:0 | ThreadLocal | Class, ParameterizedType | +| file://:0:0:0:0 | ThreadLocalMap | Class | +| file://:0:0:0:0 | Throwable | Class | +| file://:0:0:0:0 | Throwable | Class | +| file://:0:0:0:0 | TickClock | Class | +| file://:0:0:0:0 | TimeDefinition | Class | +| file://:0:0:0:0 | TimeUnit | Class | +| file://:0:0:0:0 | Timestamp | Class | +| file://:0:0:0:0 | ToDoubleBiFunction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleBiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleBiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleFunction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToDoubleFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntBiFunction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntBiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntBiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntFunction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToIntFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongBiFunction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongBiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongBiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongFunction | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | ToLongFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | Traverser | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Traverser | Class, ParameterizedType | +| file://:0:0:0:0 | Traverser | Class, ParameterizedType | +| file://:0:0:0:0 | Traverser | Class, ParameterizedType | +| file://:0:0:0:0 | Traverser | Class, ParameterizedType | +| file://:0:0:0:0 | Tree | Interface | +| file://:0:0:0:0 | TreeBin | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | TreeNode | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | TreeNode | Class, ParameterizedType | +| file://:0:0:0:0 | TreeNode | Class, ParameterizedType | +| file://:0:0:0:0 | TreeNode | Class, ParameterizedType | +| file://:0:0:0:0 | TreeNode | Class, ParameterizedType | +| file://:0:0:0:0 | TreeNode | Class, ParameterizedType | +| file://:0:0:0:0 | TreeNode | Class, ParameterizedType | +| file://:0:0:0:0 | TreeNode | Class, ParameterizedType | +| file://:0:0:0:0 | Type | Class | +| file://:0:0:0:0 | Type | Class | +| file://:0:0:0:0 | Type | Interface | +| file://:0:0:0:0 | TypeArgument | Interface | +| file://:0:0:0:0 | TypeParam | Class | +| file://:0:0:0:0 | TypePath | Class | +| file://:0:0:0:0 | TypeSignature | Interface | +| file://:0:0:0:0 | TypeTree | Interface | +| file://:0:0:0:0 | TypeTreeVisitor | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | TypeTreeVisitor | Interface, ParameterizedType | +| file://:0:0:0:0 | TypeTreeVisitor | Interface, ParameterizedType | +| file://:0:0:0:0 | TypeTreeVisitor | Interface, ParameterizedType | +| file://:0:0:0:0 | TypeVariable | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | TypeVariable | Interface, ParameterizedType | +| file://:0:0:0:0 | TypeVariable | Interface, ParameterizedType | +| file://:0:0:0:0 | TypeVariable | Interface, ParameterizedType | +| file://:0:0:0:0 | TypeVariable | Interface, ParameterizedType | +| file://:0:0:0:0 | TypeVariableSignature | Class | +| file://:0:0:0:0 | TypesAndInvokers | Class | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | U | TypeVariable | +| file://:0:0:0:0 | URI | Class | +| file://:0:0:0:0 | URL | Class | +| file://:0:0:0:0 | URLConnection | Class | +| file://:0:0:0:0 | URLStreamHandler | Class | +| file://:0:0:0:0 | URLStreamHandlerFactory | Interface | +| file://:0:0:0:0 | UnaryOperator | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | UnaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | UnaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | UnaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | UnaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | UnaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | UnaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | UnaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | UnaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | UncaughtExceptionHandler | Interface | +| file://:0:0:0:0 | UnicodeBlock | Class | +| file://:0:0:0:0 | UnicodeScript | Class | +| file://:0:0:0:0 | Unloader | Class | +| file://:0:0:0:0 | Unsafe | Class | +| file://:0:0:0:0 | UserPrincipal | Interface | +| file://:0:0:0:0 | UserPrincipalLookupService | Class | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | V | TypeVariable | +| file://:0:0:0:0 | ValueIterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ValueRange | Class | +| file://:0:0:0:0 | ValueSpliterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ValueSpliterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | ValueSpliterator | Class, ParameterizedType | +| file://:0:0:0:0 | ValueSpliterator | Class, ParameterizedType | +| file://:0:0:0:0 | ValuesView | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | VarForm | Class | +| file://:0:0:0:0 | VarHandle | Class | +| file://:0:0:0:0 | Version | Class | +| file://:0:0:0:0 | Version | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | Version | Class, ParameterizedType | +| file://:0:0:0:0 | Version | Class, ParameterizedType | +| file://:0:0:0:0 | Version | Class, ParameterizedType | +| file://:0:0:0:0 | VersionInfo | Class | +| file://:0:0:0:0 | Visitor | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | Visitor | Interface, ParameterizedType | +| file://:0:0:0:0 | Void | Class | +| file://:0:0:0:0 | VoidDescriptor | Class | +| file://:0:0:0:0 | WatchEvent | GenericType, Interface, ParameterizedType | +| file://:0:0:0:0 | WatchEvent | Interface, ParameterizedType | +| file://:0:0:0:0 | WatchKey | Interface | +| file://:0:0:0:0 | WatchService | Interface | +| file://:0:0:0:0 | Watchable | Interface | +| file://:0:0:0:0 | WeakClassKey | Class | +| file://:0:0:0:0 | WeakClassKey | Class | +| file://:0:0:0:0 | WeakCleanable | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | WeakCleanable | Class, ParameterizedType | +| file://:0:0:0:0 | WeakCleanable | Class, ParameterizedType | +| file://:0:0:0:0 | WeakCleanableRef | Class | +| file://:0:0:0:0 | WeakHashMap | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | WeakHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | WeakHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | WeakHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | WeakHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | WeakHashMap | Class, ParameterizedType | +| file://:0:0:0:0 | WeakHashMapSpliterator | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | WeakHashMapSpliterator | Class, ParameterizedType | +| file://:0:0:0:0 | WeakHashMapSpliterator | Class, ParameterizedType | +| file://:0:0:0:0 | WeakHashMapSpliterator | Class, ParameterizedType | +| file://:0:0:0:0 | WeakReference | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | WeakReference | Class, ParameterizedType | +| file://:0:0:0:0 | WeakReference | Class, ParameterizedType | +| file://:0:0:0:0 | WeakReference | Class, ParameterizedType | +| file://:0:0:0:0 | WeakReference | Class, ParameterizedType | +| file://:0:0:0:0 | WeakReference | Class, ParameterizedType | +| file://:0:0:0:0 | WeakReference | Class, ParameterizedType | +| file://:0:0:0:0 | Wildcard | Class | +| file://:0:0:0:0 | WildcardType | Interface | +| file://:0:0:0:0 | WorkQueue | Class | +| file://:0:0:0:0 | Wrapper | Class | +| file://:0:0:0:0 | WritableByteChannel | Interface | +| file://:0:0:0:0 | Writer | Class | +| file://:0:0:0:0 | WrongMethodTypeException | Class | +| file://:0:0:0:0 | X | TypeVariable | +| file://:0:0:0:0 | X | TypeVariable | +| file://:0:0:0:0 | X | TypeVariable | +| file://:0:0:0:0 | X | TypeVariable | +| file://:0:0:0:0 | X | TypeVariable | +| file://:0:0:0:0 | X | TypeVariable | +| file://:0:0:0:0 | ZoneId | Class | +| file://:0:0:0:0 | ZoneOffset | Class | +| file://:0:0:0:0 | ZoneOffsetTransition | Class | +| file://:0:0:0:0 | ZoneOffsetTransitionRule | Class | +| file://:0:0:0:0 | ZoneRules | Class | +| file://:0:0:0:0 | ZonedDateTime | Class | | file://:0:0:0:0 | boolean | PrimitiveType | | file://:0:0:0:0 | byte | PrimitiveType | | file://:0:0:0:0 | char | PrimitiveType | @@ -19,4 +3364,6 @@ | file://:0:0:0:0 | int | PrimitiveType | | file://:0:0:0:0 | long | PrimitiveType | | file://:0:0:0:0 | short | PrimitiveType | +| file://:0:0:0:0 | void | VoidType | +| types.kt:0:0:0:0 | TypesKt | Class | | types.kt:2:1:37:1 | Foo | Class | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index 189c5a53821..8ca1a1ffe00 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -1,13 +1,15070 @@ -| file://:0:0:0:0 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:2:1:8:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ACC_CONSTRUCTOR | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ACC_PPP | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ACC_SYNTHETIC_ATTRIBUTE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ADDRESS_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ADLAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | AEGEAN_NUMBERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | AHOM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | AIOOBE_SUPPLIER | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | ALCHEMICAL_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ALL_ACCESS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ALL_KINDS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ALL_TYPES | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | ALPHABETIC_PRESENTATION_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ANATOLIAN_HIEROGLYPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ANCIENT_GREEK_MUSICAL_NOTATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ANCIENT_GREEK_NUMBERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ANCIENT_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ANNOTATION | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | APPEND_FRAME | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARABIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARABIC_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARABIC_PRESENTATION_FORMS_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARABIC_PRESENTATION_FORMS_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARABIC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARG_TYPES | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARG_TYPE_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARMENIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_BOOLEAN_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_BOOLEAN_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_BYTE_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_BYTE_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_CHAR_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_CHAR_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_DOUBLE_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_DOUBLE_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_ELEMENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_FLOAT_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_FLOAT_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_INT_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_INT_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_LONG_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_LONG_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_OBJECT_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_OBJECT_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_OF | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_SHORT_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARRAY_SHORT_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ARROWS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ASM_LABELW_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ASM_LABEL_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | AVESTAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BALINESE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BAMUM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BAMUM_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BASE | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | BASE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BASE_KIND | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BASE_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BASIC_ISO_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | BASIC_LATIN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BASSA_VAH | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BATAK | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BENGALI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BHAIKSUKI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BIG_ENDIAN | file://:0:0:0:0 | ByteOrder | file://:0:0:0:0 | | +| file://:0:0:0:0 | BLOCK_ELEMENTS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BMH_TRANSFORMS | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | BOOLEAN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BOOLEAN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BOOLEAN_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | BOPOMOFO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BOPOMOFO_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BOX_DRAWING | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BRAHMI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BRAILLE_PATTERNS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BRIDGE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BSM | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BUGINESE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BUHID | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BUILTIN_HANDLERS_PREFIX | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | BURNIKEL_ZIEGLER_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BURNIKEL_ZIEGLER_THRESHOLD | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BYTE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BYTE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | BYTE_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | BYZANTINE_MUSICAL_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | BadBound | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | BadRange | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | BadSize | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | CALENDAR_JAPANESE | file://:0:0:0:0 | LocaleExtensions | file://:0:0:0:0 | | +| file://:0:0:0:0 | CALLER_SENSITIVE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CANADA | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | CANADA_FRENCH | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | CANCELLED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CARIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CASE_INSENSITIVE_ORDER | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | CAUCASIAN_ALBANIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHAKMA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHAR | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHAR | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHAR_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHEROKEE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHEROKEE_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHINA | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHINESE | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHOP_FRAME | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHRONOS_BY_ID | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | CHRONOS_BY_TYPE | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_COMPATIBILITY | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_COMPATIBILITY_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_COMPATIBILITY_IDEOGRAPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_RADICALS_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_STROKES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_SYMBOLS_AND_PUNCTUATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CLASS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | COMBINING_DIACRITICAL_MARKS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | COMBINING_DIACRITICAL_MARKS_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | COMBINING_DIACRITICAL_MARKS_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | COMBINING_HALF_MARKS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | COMBINING_MARKS_FOR_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | COMBINING_SPACING_MARK | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | COMMON_INDIC_NUMBER_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | COMMON_PARALLELISM | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | COMPACT_STRINGS | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | COMPUTE_FRAMES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | COMPUTE_MAXS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONDITION | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONNECTOR_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONSTRUCTOR_NAME | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONTROL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | CONTROL_PICTURES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | COPTIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | COPTIC_EPACT_NUMBERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | COUNT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | COUNTING_ROD_NUMERALS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CREATE_RESERVATION | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | CUNEIFORM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CUNEIFORM_NUMBERS_AND_PUNCTUATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CURRENCY_SYMBOL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | CURRENCY_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CYPRIOT_SYLLABARY | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CYRILLIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CYRILLIC_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CYRILLIC_EXTENDED_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CYRILLIC_EXTENDED_C | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | CYRILLIC_SUPPLEMENTARY | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | DASH_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DAYS_0000_TO_1970 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | DEAD_ENTRY | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | DEBUG | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DECIMAL_DIGIT_NUMBER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DEFAULT_ATTRIBUTE_PROTOS | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | DEFAULT_ATTRIBUTE_PROTOS | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | DEFAULT_ATTRIBUTE_PROTOS | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | DEFAULT_BUFFER_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DEFAULT_EMPTY_OPTION | file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | | +| file://:0:0:0:0 | DEFAULT_INITIAL_CAPACITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DEFAULT_LOAD_FACTOR | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | DESERET | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | DEVANAGARI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | DEVANAGARI_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIM | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DINGBATS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_ARABIC_NUMBER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_BOUNDARY_NEUTRAL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_COMMON_NUMBER_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_EUROPEAN_NUMBER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_FIRST_STRONG_ISOLATE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_LEFT_TO_RIGHT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_NONSPACING_MARK | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_OTHER_NEUTRALS | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_PARAGRAPH_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_POP_DIRECTIONAL_FORMAT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_RIGHT_TO_LEFT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_SEGMENT_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_UNDEFINED | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DIRECTIONALITY_WHITESPACE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DOMINO_TILES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DORMANT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DOUBLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DOUBLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DOUBLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | DOUBLE_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | DO_AS_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | DO_AS_PRIVILEGED_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | DUPLOYAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | D_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | DigitOnes | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | DigitTens | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | EARLY_DYNASTIC_CUNEIFORM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | EGYPTIAN_HIEROGLYPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ELBASAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ELEMENT_OF | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | EMOTICONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | EMPTYVALUE | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | EMPTYVALUE | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | EMPTY_STACK_TRACE | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | EMPTY_STACK_TRACE | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | ENCLOSED_ALPHANUMERICS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ENCLOSED_ALPHANUMERIC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ENCLOSED_CJK_LETTERS_AND_MONTHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ENCLOSED_IDEOGRAPHIC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ENCLOSING_MARK | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | END_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | ENGLISH | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | ENQUEUED | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | ENTRIES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ENTRIES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ENUM | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | EPOCH | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | EPOCH | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | ERASE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ERROR | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ETHIOPIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ETHIOPIC_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ETHIOPIC_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ETHIOPIC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | EXCEPTION | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | EXCLUSIVE | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | EXPAND_ASM_INSNS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | EXPAND_FRAMES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | E_THROWABLE | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | FALSE | file://:0:0:0:0 | Boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | FIELD | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | FIELDORMETH_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | FIFO | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | FINAL_QUOTE_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | FLOAT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | FLOAT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | FLOAT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | FLOAT_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | FORMAT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | FORM_OFFSET | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | FRAMES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | FRANCE | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | FRENCH | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | FULL_FRAME | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | F_INSERT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | F_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | GENERAL_PUNCTUATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GEOMETRIC_SHAPES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GEOMETRIC_SHAPES_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GEORGIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GEORGIAN_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GERMAN | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | GERMANY | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | GET_SUBJECT_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | GLAGOLITIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GLAGOLITIC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GOTHIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GRANTHA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GREEK | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GREEK_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GUJARATI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | GURMUKHI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HALFWIDTH_AND_FULLWIDTH_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HANDLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | HANDLE_BASE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | HANGUL_COMPATIBILITY_JAMO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HANGUL_JAMO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HANGUL_JAMO_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HANGUL_JAMO_EXTENDED_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HANGUL_SYLLABLES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HANUNOO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HASH_BITS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | HASH_INCREMENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | HASH_MASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | HATRAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HEAD | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | HEAD | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | HEAD | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | HEBREW | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HIGH_PRIVATE_USE_SURROGATES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HIGH_SURROGATES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HIRAGANA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | HOURS_PER_DAY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IDEOGRAPHIC_DESCRIPTION_CHARACTERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | IGNORE | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | IINC_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMETH | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMPERIAL_ARAMAIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | IMPLVAR_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INDY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INDYMETH_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INITIAL_QUEUE_CAPACITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INITIAL_QUOTE_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | INNER_TYPE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INNOCUOUS_ACC | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | INPUT_METHOD_SEGMENT | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | INPUT_METHOD_SEGMENT | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | INSCRIPTIONAL_PAHLAVI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | INSCRIPTIONAL_PARTHIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | INSERTED_FRAMES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INSTANCE | file://:0:0:0:0 | Factory | file://:0:0:0:0 | | +| file://:0:0:0:0 | INSTANCE | file://:0:0:0:0 | IsoChronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | INT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INTEGER | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INTERNED_ARGUMENT_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INTS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INT_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | INVALID_FIELD_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INVOKER_METHOD_TYPE | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | INV_BASIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INV_EXACT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INV_GENERIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | INV_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IPA_EXTENSIONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | IPv4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IPv6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_DATE_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_INSTANT | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_LOCAL_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_LOCAL_DATE_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_LOCAL_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_OFFSET_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_OFFSET_DATE_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_OFFSET_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_ORDINAL_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_WEEK_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ISO_ZONED_DATE_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | IS_CONSTRUCTOR | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IS_FIELD | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IS_FIELD_OR_METHOD | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IS_INVOCABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IS_METHOD | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | IS_TYPE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ITALIAN | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | ITALY | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | ITFMETH_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | I_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | JAPAN | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | JAPANESE | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | JAVANESE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | JSR | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | J_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | KAITHI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KANA_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KANA_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KANBUN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KANGXI_RADICALS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KANNADA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KATAKANA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KATAKANA_PHONETIC_EXTENSIONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KAYAH_LI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KEYS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | KEYS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | KHAROSHTHI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KHMER | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KHMER_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KHOJKI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KHUDAWADI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | KIND | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | KOREA | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | KOREAN | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | LABELW_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LABEL_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LANGUAGE | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | LANGUAGE | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | LAO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LAST_RESULT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LATIN1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | LATIN_1_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LATIN_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LATIN_EXTENDED_ADDITIONAL | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LATIN_EXTENDED_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LATIN_EXTENDED_C | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LATIN_EXTENDED_D | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LATIN_EXTENDED_E | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LDCW_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LDC_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LEPCHA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LETTERLIKE_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LETTER_NUMBER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_CS_LINKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_DELEGATE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_DELEGATE_BLOCK_INLINING | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_EX_INVOKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_EX_LINKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_GEN_INVOKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_GEN_LINKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_GWC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_GWT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_INTERPRET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_INVINTERFACE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_INVSPECIAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_INVSPECIAL_IFC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_INVSTATIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_INVSTATIC_INIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_INVVIRTUAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_LOOP | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_MH_LINKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_NEWINVSPECIAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_REBIND | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LF_TF | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LIMBU | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LINEAR_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LINEAR_B_IDEOGRAMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LINEAR_B_SYLLABARY | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LINE_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | LISU | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LITTLE_ENDIAN | file://:0:0:0:0 | ByteOrder | file://:0:0:0:0 | | +| file://:0:0:0:0 | LONG | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LONG | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LONG | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LONGS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LONG_MASK | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | LONG_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | LOOK_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | LOWERCASE_LETTER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | LOW_SURROGATES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LYCIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | LYDIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | L_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAHAJANI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAHJONG_TILES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MALAYALAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MANA_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MANDAIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MANICHAEAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MARCHEN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MASARAM_GONDI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MATHEMATICAL_ALPHANUMERIC_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MATHEMATICAL_OPERATORS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MATH_SYMBOL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAXIMUM_CAPACITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAXIMUM_QUEUE_CAPACITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAXS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_BUFFER_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_CAP | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_CODE_POINT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_EXPONENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_HIGH_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_HIGH_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_JVM_ARITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_LOW_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_LOW_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_MH_ARITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_MH_INVOKER_ARITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_RADIX | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_SKIP_BUFFER_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | MAX_WEIGHT | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | MEETEI_MAYEK | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MEETEI_MAYEK_EXTENSIONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MENDE_KIKAKUI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MEROITIC_CURSIVE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MEROITIC_HIEROGLYPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | METH | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | METHOD | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MH | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | MH_BASIC_INV | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MH_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MH_NF_INV | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MH_SIG | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | MH_UNINIT_CS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIAO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MICROS_PER_DAY | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIDNIGHT | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | MILLIS_PER_DAY | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | MINUTES_PER_DAY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MINUTES_PER_HOUR | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_CODE_POINT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_EXPONENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_HIGH_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_HIGH_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_LOW_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_LOW_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_NORMAL | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_RADIX | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_SUPPLEMENTARY_CODE_POINT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_TREEIFY_CAPACITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | MIN_WEIGHT | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MISCELLANEOUS_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MISCELLANEOUS_SYMBOLS_AND_ARROWS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MISCELLANEOUS_TECHNICAL | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MODI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MODIFIER_LETTER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | MODIFIER_SYMBOL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | MODIFIER_TONE_LETTERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MODIFY_PRINCIPALS_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | MODIFY_PRIVATE_CREDENTIALS_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | MODIFY_PUBLIC_CREDENTIALS_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | MODULE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MONGOLIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MONGOLIAN_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MOVED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MRO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MTYPE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | MULTANI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MUSICAL_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MYANMAR | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MYANMAR_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | MYANMAR_EXTENDED_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | NABATAEAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | NAME_TYPE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NANOS_PER_DAY | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | NANOS_PER_HOUR | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | NANOS_PER_MILLI | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | NANOS_PER_MINUTE | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | NANOS_PER_SECOND | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | NCPU | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NEGATIVE_INFINITY | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | NEGATIVE_INFINITY | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | NEWA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | NEW_TAI_LUE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | NKO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | NOARG_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NON_SPACING_MARK | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | NOON | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | NORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NORM_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NORM_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NORM_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NOTHING | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NO_CHANGE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NO_FIELDS | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | NO_PROXY | file://:0:0:0:0 | Proxy | file://:0:0:0:0 | | +| file://:0:0:0:0 | NO_PTYPES | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | NULL | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | NULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | NULL_KEY | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | NULL_VERSION_INFO | file://:0:0:0:0 | VersionInfo | file://:0:0:0:0 | | +| file://:0:0:0:0 | NUMBER_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | NUMBER_THAI | file://:0:0:0:0 | LocaleExtensions | file://:0:0:0:0 | | +| file://:0:0:0:0 | NUSHU | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | NaN | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | NaN | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | OBJECT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | OBJECT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | OGHAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | OLD_HUNGARIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | OLD_ITALIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | OLD_NORTH_ARABIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | OLD_PERMIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | OLD_PERSIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | OLD_SOUTH_ARABIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | OLD_TURKIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | OL_CHIKI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ONE | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | OOME_MSG | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | OOME_MSG | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | OOME_MSG | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | OPTICAL_CHARACTER_RECOGNITION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORIYA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ORNAMENTAL_DINGBATS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | OSAGE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | OSMANYA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | OTHER_LETTER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | OTHER_NUMBER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | OTHER_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | OTHER_SYMBOL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | OVERFLOW | file://:0:0:0:0 | CoderResult | file://:0:0:0:0 | | +| file://:0:0:0:0 | OWNED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PACKAGE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PAHAWH_HMONG | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | PALMYRENE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | PARAGRAPH_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | PAU_CIN_HAU | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PHAGS_PA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | PHAISTOS_DISC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | PHASE | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | PHOENICIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | PHONETIC_EXTENSIONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | PHONETIC_EXTENSIONS_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | PLAYING_CARDS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | POSITIVE_INFINITY | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | POSITIVE_INFINITY | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | PRC | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | PREFER_IPV4_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PREFER_IPV6_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PREFER_SYSTEM_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PRIVATE | file://:0:0:0:0 | MapMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | PRIVATE_USE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | PRIVATE_USE_AREA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | PRIVATE_USE_EXTENSION | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | PROPAGATE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PROTOCOL_VERSION_1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PROTOCOL_VERSION_1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PROTOCOL_VERSION_1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PROTOCOL_VERSION_2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PROTOCOL_VERSION_2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PROTOCOL_VERSION_2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PSALTER_PAHLAVI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | PUSHED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | QA | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | QLOCK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | QUIET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | RAW_RETURN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | REACHABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | READER | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | READING | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | READING | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | READ_ONLY | file://:0:0:0:0 | MapMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | READ_WRITE | file://:0:0:0:0 | MapMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | RECOGNIZED_MODIFIERS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | REJANG | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | REPLACE | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | REPORT | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | RESERVED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | RESERVED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | RESIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | RESOLVED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | RET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | RFC_1123_DATE_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | ROOT | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | RUMI_NUMERAL_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | RUNIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SAMARITAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SAME_FRAME | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SAME_FRAME_EXTENDED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SAME_LOCALS_1_STACK_ITEM_FRAME | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SAURASHTRA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SBYTE_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_BLOCK_DATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_BLOCK_DATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_BLOCK_DATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_EXTERNALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_EXTERNALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_EXTERNALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_SERIALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_SERIALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_SERIALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_WRITE_METHOD | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_WRITE_METHOD | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SC_WRITE_METHOD | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SEARCH_ALL_SUPERS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SECONDS_PER_DAY | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SECONDS_PER_HOUR | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SECONDS_PER_MINUTE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SEP | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | SERIAL_FILTER_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | SERIAL_FILTER_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | SERIAL_FILTER_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | SET_READ_ONLY_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | SHARADA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SHARED | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | SHAVIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SHORT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SHORT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SHORTHAND_FORMAT_CONTROLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SHORT_IDS | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | SHORT_IDS | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | SHORT_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SHORT_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | SHUTDOWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIDDHAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIMPLIFIED_CHINESE | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | SINHALA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SINHALA_ARCHAIC_NUMBERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE_BITS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE_BITS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE_BITS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE_BITS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE_BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE_BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE_BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SIZE_BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SKIP_CODE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SKIP_DEBUG | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SKIP_FRAMES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMALL_FORM_VARIANTS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORA_SOMPENG | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SOYOMBO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPACE_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPACING_MODIFIER_LETTERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPECIALIZER | file://:0:0:0:0 | Specializer | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPECIALS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPECIES_DATA | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPECIES_DATA_MODS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPECIES_DATA_NAME | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPECIES_DATA_SIG | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPIN_FOR_TIMEOUT_THRESHOLD | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPIN_FOR_TIMEOUT_THRESHOLD | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPIN_FOR_TIMEOUT_THRESHOLD | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPIN_FOR_TIMEOUT_THRESHOLD | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SQMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SS_SEQ | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | STABLE | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | STABLE_SIG | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | STANDARD | file://:0:0:0:0 | DecimalStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | START_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATE | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATE | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATE | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | STOP | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | STORE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | STR | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | STREAM_MAGIC | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | STREAM_MAGIC | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | STREAM_MAGIC | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | STREAM_VERSION | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | STREAM_VERSION | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | STREAM_VERSION | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBCLASS_IMPLEMENTATION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBCLASS_IMPLEMENTATION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBCLASS_IMPLEMENTATION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBROUTINE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSTITUTION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSTITUTION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUBSTITUTION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUNDANESE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUNDANESE_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUPERSCRIPTS_AND_SUBSCRIPTS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUPPLEMENTAL_ARROWS_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUPPLEMENTAL_ARROWS_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUPPLEMENTAL_ARROWS_C | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUPPLEMENTAL_MATHEMATICAL_OPERATORS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUPPLEMENTAL_PUNCTUATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUPPLEMENTARY_PRIVATE_USE_AREA_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUPPLEMENTARY_PRIVATE_USE_AREA_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SURROGATE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | SURROGATES_AREA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SUTTON_SIGNWRITING | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SWIDTH | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SYLOTI_NAGRI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SYNTHETIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | SYRIAC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | SYRIAC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TABL_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAGALOG | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAGBANWA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAGS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAIL | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAIL | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAIL | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAIWAN | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAI_LE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAI_THAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAI_VIET | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAI_XUAN_JING_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAKRI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TAMIL | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TANGUT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TANGUT_COMPONENTS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TARGET | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_ARRAY | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_ARRAY | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_ARRAY | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_BASE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_BASE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_BASE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_BLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_BLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_BLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_BLOCKDATALONG | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_BLOCKDATALONG | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_BLOCKDATALONG | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_CLASS | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_CLASS | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_CLASS | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_CLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_CLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_CLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_ENDBLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_ENDBLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_ENDBLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_EXCEPTION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_EXCEPTION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_EXCEPTION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_LONGSTRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_LONGSTRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_LONGSTRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_MAX | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_MAX | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_MAX | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_NULL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_NULL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_NULL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_OBJECT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_OBJECT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_OBJECT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_PROXYCLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_PROXYCLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_PROXYCLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_REFERENCE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_REFERENCE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_REFERENCE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_RESET | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_RESET | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_RESET | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_STRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_STRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TC_STRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TELUGU | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TEN | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | TERMINATED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THAANA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | THAI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TIBETAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TIFINAGH | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TIRHUTA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TITLECASE_LETTER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | TN_COPY_NO_EXTEND | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TOP | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | TOP | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TOP_BOUND_SHIFT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TOP_IF_LONG_OR_DOUBLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TO_ACC_SYNTHETIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TRADITIONAL_CHINESE | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | TRANSFORM_MODS | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | TRANSFORM_NAMES | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | TRANSFORM_TYPES | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | TRANSPORT_AND_MAP_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | TREEBIN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TREEIFY_THRESHOLD | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TRUE | file://:0:0:0:0 | Boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | TWO | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE_ARGUMENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE_MERGED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE_NORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | TYPE_UNINIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | UGARITIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | UK | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNASSIGNED | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNDERFLOW | file://:0:0:0:0 | CoderResult | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNICODE_LOCALE_EXTENSION | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNINITIALIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNINITIALIZED_THIS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNLOADER | file://:0:0:0:0 | NativeLibrary | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNSIGNALLED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNTREEIFY_THRESHOLD | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | UNWRAP | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | UPPERCASE_LETTER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | US | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | UTC | file://:0:0:0:0 | SystemClock | file://:0:0:0:0 | | +| file://:0:0:0:0 | UTC | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | UTF8 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | UTF16 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | VAI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | VALUES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | VALUES | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | VARARGS | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | VARIATION_SELECTORS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | VARIATION_SELECTORS_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | VAR_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | VEDIC_EXTENSIONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | VERTICAL_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | VISITED | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | VISITED2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | VOID | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | VOID_RESULT | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | VOID_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | V_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | WAITER | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | WARANG_CITI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | WIDE_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | WILDCARD_BOUND | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | WRAP | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | WRITER | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | WRITE_BUFFER_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | WRITE_BUFFER_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | YIJING_HEXAGRAM_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | YI_RADICALS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | YI_SYLLABLES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ZANABAZAR_SQUARE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | +| file://:0:0:0:0 | ZERO | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | ZERO | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | ZERO | file://:0:0:0:0 | Period | file://:0:0:0:0 | | +| file://:0:0:0:0 | action | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | address | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | allowUserInteraction | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | argCounts | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | argToSlotTable | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | arguments | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | arity | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | array | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | arrayLength | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | asTypeCache | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | asTypeCache | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | assertionLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | at | file://:0:0:0:0 | AccessType | file://:0:0:0:0 | | +| file://:0:0:0:0 | automatic | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | av | file://:0:0:0:0 | AnnotationVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | b | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | b | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | base | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseConstructorType | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseWireHandle | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseWireHandle | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | baseWireHandle | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | basicType | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | basis | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | beginIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | bigEndian | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | bigEndian | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | blocker | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | +| file://:0:0:0:0 | blocker | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | +| file://:0:0:0:0 | blockerLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | blockerLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | bnExpModThreshTable | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | bootstrapMethods | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | +| file://:0:0:0:0 | bootstrapMethodsCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | bound | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | bound | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | bound | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | bounds | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | btChar | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | btClass | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | btWrapper | file://:0:0:0:0 | Wrapper | file://:0:0:0:0 | | +| file://:0:0:0:0 | bytes | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | bytes | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | cache | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | callable | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | cause | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | cause | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | chrono | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | classAssertionStatus | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | classReaderLength | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | classReaderOffset | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | classValueMap | file://:0:0:0:0 | ClassValueMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | classes | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | clazz | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | clazz | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | cleanerThreadNumber | file://:0:0:0:0 | AtomicInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | clock | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | clock | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | closeLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | closeLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | closed | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | closed | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | coder | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | coder | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | coder | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | common | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | connected | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | constraint | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | contextClassLoader | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | contextClassLoader | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | count | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | count | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | count | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | count | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | count | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | countryKey | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | cr | file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | | +| file://:0:0:0:0 | ctl | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | current | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | current | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | current | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | current | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | customizationCount | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | customizationCount | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | customized | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | cv | file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | cv | file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | cw | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | daemon | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | daemon | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | daemon | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | data | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | declaredAnnotations | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | declaredAnnotations | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultForkJoinWorkerThreadFactory | file://:0:0:0:0 | ForkJoinWorkerThreadFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultLambdaName | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultUncaughtExceptionHandler | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultUncaughtExceptionHandler | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaults | file://:0:0:0:0 | Properties | file://:0:0:0:0 | | +| file://:0:0:0:0 | defaults | file://:0:0:0:0 | Properties | file://:0:0:0:0 | | +| file://:0:0:0:0 | depth | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | desc | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | +| file://:0:0:0:0 | desc | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | destroyed | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | digits | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | doInput | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | doOutput | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | eetop | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | eetop | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | element | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | elementData | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | elementType | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | entrySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | entrySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | eof | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | erasedType | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | err | file://:0:0:0:0 | FileDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | errorIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | est | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | est | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | est | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | est | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | est | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | est | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | est | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | ex | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptionTypes | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | exceptions | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | excessDays | file://:0:0:0:0 | Period | file://:0:0:0:0 | | +| file://:0:0:0:0 | exclusiveOwnerThread | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | exclusiveOwnerThread | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | exclusiveOwnerThread | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | exclusiveOwnerThread | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | exitVM | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | exitVM | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | exitVM | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | expectedModCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | expectedModCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | expectedModCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | expectedModCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | exports | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | extensionsKey | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | factories | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | factory | file://:0:0:0:0 | Factory | file://:0:0:0:0 | | +| file://:0:0:0:0 | factory | file://:0:0:0:0 | ForkJoinWorkerThreadFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | factory | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | factory | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | factory | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | factory | file://:0:0:0:0 | ThreadFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | family | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | fence | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | fence | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | fence | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | fence | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | fence | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | fence | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | fence | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | field | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | fieldTypes | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | fieldValues | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | first | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | firstField | file://:0:0:0:0 | FieldWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | firstMethod | file://:0:0:0:0 | MethodWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | forceInline | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | form | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | form | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | frame | file://:0:0:0:0 | Frame | file://:0:0:0:0 | | +| file://:0:0:0:0 | frameCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | fromClass | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | fromIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | fromIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | fromIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | fromIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | function | file://:0:0:0:0 | NamedFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | fv | file://:0:0:0:0 | FieldVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | fv | file://:0:0:0:0 | FieldVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | getters | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | group | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | +| file://:0:0:0:0 | group | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | +| file://:0:0:0:0 | groups | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | handle | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | handle | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | handler | file://:0:0:0:0 | URLStreamHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | handlers | file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | | +| file://:0:0:0:0 | hasAsmInsns | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | hasData | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | hasRealParameterData | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | hasRealParameterData | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | hashCodeForCache | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | hb | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | hb | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | hb | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | hb | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | hb | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | hb | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | hb | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | hb | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | head | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | head | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | head | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | header | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | hexDigit | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | holder | file://:0:0:0:0 | InetAddressHolder | file://:0:0:0:0 | | +| file://:0:0:0:0 | hostName | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | id | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | identity | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | ifModifiedSince | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | impl | file://:0:0:0:0 | CleanerImpl | file://:0:0:0:0 | | +| file://:0:0:0:0 | impl | file://:0:0:0:0 | InetAddressImpl | file://:0:0:0:0 | | +| file://:0:0:0:0 | in | file://:0:0:0:0 | FileDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | index | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | indexSeed | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | info | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | info | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | inheritableThreadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | inheritableThreadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | inheritableThreadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | inheritedAccessControlContext | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | inheritedAccessControlContext | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | +| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | +| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | +| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | +| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | +| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | +| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | +| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | +| file://:0:0:0:0 | inputLocals | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | inputStack | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | inputStackTop | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | instanceMap | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | intVal | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | internTable | file://:0:0:0:0 | ConcurrentWeakInternSet | file://:0:0:0:0 | | +| file://:0:0:0:0 | interrupted | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | interruptor | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | +| file://:0:0:0:0 | invoker | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | isBuiltin | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | isBuiltin | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | isMonomorphicInReturnType | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | items | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | itf | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | jniVersion | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | keepAlive | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Item | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Key | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | key | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | key2 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | +| file://:0:0:0:0 | key3 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | +| file://:0:0:0:0 | key4 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | +| file://:0:0:0:0 | keySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | keySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | keySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | keySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | keySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | keyType | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | kind | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | +| file://:0:0:0:0 | lambdaForm | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | lambdaForms | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | languageKey | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | lastField | file://:0:0:0:0 | FieldWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | lastMethod | file://:0:0:0:0 | MethodWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | lastReturned | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | lastReturned | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | lastReturned | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | lastReturned | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | leapSecond | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | left | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | length | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | length | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | length | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | line | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | lineBuf | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | list | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | list | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | list | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | list | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | loadFactor | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | loadFactor | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | loadFactor | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | loadFactor | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | lock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | lockState | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | longVal | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | mag | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | mainClass | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | map | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | maxPriority | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | member | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | memberName_table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | message | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | message | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | metaType | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | methodHandle_table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | methodHandles | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | methodName | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | methodName | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | methodNameToAccessMode | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | methodType_V_table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | methodType_table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | methodType_table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | mode | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | mode | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | modifiers | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | modifyThreadPermission | file://:0:0:0:0 | RuntimePermission | file://:0:0:0:0 | | +| file://:0:0:0:0 | module | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | mv | file://:0:0:0:0 | MethodVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | mv | file://:0:0:0:0 | MethodVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | mv | file://:0:0:0:0 | ModuleVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | nUnstartedThreads | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | names | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | nativeByteOrder | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | nativeByteOrder | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | nativeLibraryContext | file://:0:0:0:0 | Deque | file://:0:0:0:0 | | +| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Edge | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | ExceptionNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Item | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | next | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextHashCode | file://:0:0:0:0 | AtomicInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceEntriesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceEntriesToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceEntriesToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceEntriesToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceKeysTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceKeysToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceKeysToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceKeysToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceMappingsTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceMappingsToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceMappingsToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceMappingsToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceValuesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceValuesToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceValuesToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceValuesToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | ReduceEntriesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | ReduceKeysTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | ReduceValuesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | nextWaiter | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | ngroups | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | nominalGetters | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | nsteals | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | nthreads | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | open | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | opens | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | ordinal | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | origin | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | origin | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | origin | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | originalHostName | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | AccessType | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Category | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Character | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Characteristics | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Date | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | DoubleBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Exports | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ExtendedOption | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | FileTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | FilteringMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | FloatBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | IntBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Intrinsic | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | IsoCountryCode | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | IsoEra | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Level | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | LinkOption | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | LongBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Modifier | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Modifier | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Modifier | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Modifier | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ModuleDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Month | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Opens | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Option | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Provides | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Requires | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | RetentionPolicy | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ShortBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | State | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Status | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Tag | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | TimeDefinition | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | URI | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | UnicodeScript | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Version | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | Wrapper | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | ZoneOffsetTransition | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | out | file://:0:0:0:0 | FileDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | out | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | out | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | out | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | +| file://:0:0:0:0 | outputStackMax | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | outputStackTop | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | override | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | override | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | override | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | override | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | override | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | owner | file://:0:0:0:0 | ForkJoinWorkerThread | file://:0:0:0:0 | | +| file://:0:0:0:0 | owner | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | owner | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | A | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractQueuedSynchronizer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AnnotationType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ArrayTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ArrayTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ArrayTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AsynchronousFileChannel | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AttributedCharacterIterator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AttributedCharacterIterator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BaseLocale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BooleanSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BooleanSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BooleanSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BottomSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BottomSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BottomSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BufferedWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BufferedWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteOrder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteOrder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CallSite | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Category | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Category | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CertPath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Character | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Character | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Closeable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Closeable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodeSource | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodeSource | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodeSource | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodeSource | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collector | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CompositePrinterParser | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConstructorAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ContentHandlerFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeParseContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeParseContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimePrintContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimePrintContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DecimalStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSummaryStatistics | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSupplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSupplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Exports | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FileChannel | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FileFilter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FileNameMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FilenameFilter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FilenameFilter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FilterInfo | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FilterInfo | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinWorkerThread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinWorkerThread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormalTypeParameter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormalTypeParameter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormalTypeParameter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Frame | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InetAddress | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InetAddress | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSummaryStatistics | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSupplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSupplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IsoCountryCode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IsoCountryCode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Iterator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LangReflectAccess | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Level | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LineReader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSummaryStatistics | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSupplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSupplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ManagedBlocker | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ManagedBlocker | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MapMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodTypeForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleLayer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleLayer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | NamedFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | NetworkInterface | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputFilter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputFilter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputValidation | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutput | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Opens | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Option | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Option | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Properties | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Provider | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Provides | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Proxy | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PublicKey | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PublicKey | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PublicKey | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ReadableByteChannel | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Reader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Reader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Reader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Requires | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ResolvedModule | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | S | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Service | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Service | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SimpleClassTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SimpleClassTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SimpleClassTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Specializer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StackFrameInfo | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StackWalker | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Stream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T_CONS | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T_CONS | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T_CONS | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeVariableSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeVariableSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeVariableSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URLConnection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URLConnection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URLStreamHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URLStreamHandlerFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VarForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VarForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Visitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Visitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VoidDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VoidDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VoidDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WatchService | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WatchService | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WatchService | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WatchService | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Wildcard | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Wildcard | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Wildcard | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Wrapper | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Wrapper | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | A | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | A | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AccessDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AccessDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AnnotationType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AnnotationVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Appendable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CertPath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassNotFoundException | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CompletionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConcurrentMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConcurrentMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConcurrentMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConcurrentMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConstructorAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConstructorAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DomainCombiner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DomainCombiner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DomainCombiner | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DoubleStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DoubleUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ExtendedOption | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | FieldVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Filter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinWorkerThread | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinWorkerThreadFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinWorkerThreadFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Frame | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | InetAddress | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Intrinsic | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Iterable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Iterator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Iterator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Iterator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Iterator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LocaleExtensions | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LongStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LongUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ManagedBlocker | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ModuleDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ModuleReference | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ModuleVisitor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ObjDoubleConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ObjIntConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ObjLongConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | P1 | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | P1 | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ParsePosition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ParsePosition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ParsePosition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ParsePosition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Period | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PermissionCollection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PermissionCollection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PrivilegedAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PrivilegedAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PrivilegedExceptionAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PrivilegedExceptionAction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Provider | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Proxy | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SocketAddress | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Stream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ThreadFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Timestamp | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToDoubleBiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToIntBiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToLongBiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | VarForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | A | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | A | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassNotFoundException | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | DecimalStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | DoubleUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ExceptionNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ExecutorService | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ExecutorService | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | FieldPosition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | FieldPosition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | File | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | FilteringMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | FilteringMode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Handle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Handle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Handle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Handle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Intrinsic | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | LongUnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ModuleDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ModuleLayer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | NetworkInterface | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ReturnType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | URLStreamHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | WritableByteChannel | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | A | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | CompletionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | CompletionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | CompletionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | FileDescriptor | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | LocaleExtensions | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | URLStreamHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceEntriesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceEntriesToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceEntriesToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceEntriesToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceKeysTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceKeysToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceKeysToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceKeysToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceMappingsTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceMappingsToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceMappingsToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceMappingsToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceValuesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceValuesToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceValuesToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceValuesToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ReduceEntriesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ReduceKeysTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ReduceValuesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | TimeDefinition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | TimeDefinition | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p5 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToDoubleBiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToIntBiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToLongBiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p7 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | +| file://:0:0:0:0 | p8 | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | E | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p10 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p10 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p10 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | p10 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p10 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p10 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p10 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p10 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p10 | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | p11 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p11 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p11 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p11 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p11 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p11 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | p12 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p12 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p12 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p12 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p13 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p13 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p13 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p13 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p14 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p14 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p14 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p15 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p15 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p15 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p16 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p16 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p17 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p17 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | p18 | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | p19 | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | packages | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | parameterTypes | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | parameters | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | parameters | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | parent | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | parkBlocker | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | parkBlocker | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | parkBlocker | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | path | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | path | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | path | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | pathSeparator | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | pathSeparatorChar | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | phantomCleanableList | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | phase | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | pool | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | +| file://:0:0:0:0 | pool | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | +| file://:0:0:0:0 | pool | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | +| file://:0:0:0:0 | pool | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | +| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | preferIPv6Address | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | prev | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | prev | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | prev | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | prev | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | prev | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | prev | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | prev | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | prev | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | prev | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | primCounts | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | principals | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | printStackPropertiesSet | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | printStackPropertiesSet | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | printStackPropertiesSet | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | printStackPropertiesSet | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | printStackWhenAccessFails | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | printStackWhenAccessFails | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | printStackWhenAccessFails | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | printStackWhenAccessFails | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | priority | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | priority | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | privCredentials | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | provides | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | pubCredentials | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | rangeEnd | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | rangeEnd | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | rangeEnd | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | rangeStart | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | rangeStart | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | rangeStart | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | rawVersionString | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | red | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | reducer | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | | +| file://:0:0:0:0 | referent | file://:0:0:0:0 | Version | file://:0:0:0:0 | | +| file://:0:0:0:0 | reflectionFactory | file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | reflectionFactory | file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | reflectionFactory | file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | reflectionFactory | file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | reflectionFactory | file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | | +| file://:0:0:0:0 | requires | file://:0:0:0:0 | Map | file://:0:0:0:0 | | +| file://:0:0:0:0 | resolution | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | K | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | U | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | result | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | retainClassRef | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | returnType | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | returnType | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | right | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceEntriesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceEntriesToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceEntriesToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceEntriesToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceKeysTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceKeysToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceKeysToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceKeysToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceMappingsTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceMappingsToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceMappingsToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceMappingsToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceValuesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceValuesToDoubleTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceValuesToIntTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceValuesToLongTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | ReduceEntriesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | ReduceKeysTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rights | file://:0:0:0:0 | ReduceValuesTask | file://:0:0:0:0 | | +| file://:0:0:0:0 | rng | file://:0:0:0:0 | Random | file://:0:0:0:0 | | +| file://:0:0:0:0 | rng | file://:0:0:0:0 | Random | file://:0:0:0:0 | | +| file://:0:0:0:0 | rng | file://:0:0:0:0 | Random | file://:0:0:0:0 | | +| file://:0:0:0:0 | root | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | +| file://:0:0:0:0 | runnable | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | runnable | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | runnable | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | saturate | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | +| file://:0:0:0:0 | scriptKey | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | sdAccessor | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | sdFieldName | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | searchFunction | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | searchFunction | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | searchFunction | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | searchFunction | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | securityCheckCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | securityCheckCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | securityCheckCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | securityCheckCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | securityCheckCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | separator | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | separatorChar | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | signature | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | signum | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | sizeTable | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | slotToArgTable | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | softCleanableList | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | source | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | speciesCode | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | +| file://:0:0:0:0 | stackPred | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | stackSize | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | stackSize | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | start | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | start | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | start | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | start | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | start | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | start | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | state | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | state | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | state | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | stealCount | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | step | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | step | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | step | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | step | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | step | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | step | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | stillborn | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | stillborn | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | strVal1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | strVal2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | strVal3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | streamBytes | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | strict | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | successor | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | successor | file://:0:0:0:0 | Label | file://:0:0:0:0 | | +| file://:0:0:0:0 | successors | file://:0:0:0:0 | Edge | file://:0:0:0:0 | | +| file://:0:0:0:0 | symbolicMethodTypeErased | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | symbolicMethodTypeInvoker | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | sync | file://:0:0:0:0 | Sync | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | tag | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | tail | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | tail | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | tail | file://:0:0:0:0 | Node | file://:0:0:0:0 | | +| file://:0:0:0:0 | target | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | +| file://:0:0:0:0 | target | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | target | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | +| file://:0:0:0:0 | thisName | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | thread | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadInitNumber | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadInitNumber | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocalHashCode | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocalRandomProbe | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocalRandomProbe | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocalRandomProbe | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocalRandomSecondarySeed | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocalRandomSecondarySeed | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocalRandomSecondarySeed | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocalRandomSeed | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocalRandomSeed | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocalRandomSeed | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadSeqNumber | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadSeqNumber | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadStatus | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threadStatus | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threads | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | threshold | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threshold | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threshold | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | threshold | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | thrower | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | tid | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | tid | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | timestamp | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | timestamp | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | toIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | toIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | toIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | toIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | top | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | topClass | file://:0:0:0:0 | Class | file://:0:0:0:0 | | +| file://:0:0:0:0 | topClassIsSuper | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | topSpecies | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | +| file://:0:0:0:0 | totalObjectRefs | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformHelpers | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformMethods | file://:0:0:0:0 | List | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToDoubleBiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToIntBiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToLongBiFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | +| file://:0:0:0:0 | tree | file://:0:0:0:0 | MethodTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | tree | file://:0:0:0:0 | MethodTypeSignature | file://:0:0:0:0 | | +| file://:0:0:0:0 | tree | file://:0:0:0:0 | S | file://:0:0:0:0 | | +| file://:0:0:0:0 | type | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | +| file://:0:0:0:0 | type | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | +| file://:0:0:0:0 | type | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | type | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | type | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | type | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | type | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | typeParameters | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | typeParameters | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | typeTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | typesAndInvokers | file://:0:0:0:0 | TypesAndInvokers | file://:0:0:0:0 | | +| file://:0:0:0:0 | ueh | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | uncaughtExceptionHandler | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | uncaughtExceptionHandler | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | +| file://:0:0:0:0 | universe | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | url | file://:0:0:0:0 | URL | file://:0:0:0:0 | | +| file://:0:0:0:0 | useCaches | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | uses | file://:0:0:0:0 | Set | file://:0:0:0:0 | | +| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | T | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | byte | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | char | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | double | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | float | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | long | file://:0:0:0:0 | | +| file://:0:0:0:0 | value | file://:0:0:0:0 | short | file://:0:0:0:0 | | +| file://:0:0:0:0 | values | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | values | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | values | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | values | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | values | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | +| file://:0:0:0:0 | variantKey | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | version | file://:0:0:0:0 | Version | file://:0:0:0:0 | | +| file://:0:0:0:0 | version | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | vform | file://:0:0:0:0 | VarForm | file://:0:0:0:0 | | +| file://:0:0:0:0 | vmentry | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | +| file://:0:0:0:0 | waitStatus | file://:0:0:0:0 | int | file://:0:0:0:0 | | +| file://:0:0:0:0 | waiter | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | +| file://:0:0:0:0 | weakCleanableList | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | +| file://:0:0:0:0 | wildcard | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | wildcard | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | wildcard | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | +| file://:0:0:0:0 | workQueue | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | workQueue | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | +| file://:0:0:0:0 | workQueues | file://:0:0:0:0 | Array | file://:0:0:0:0 | | +| file://:0:0:0:0 | workerNamePrefix | file://:0:0:0:0 | String | file://:0:0:0:0 | | +| file://:0:0:0:0 | writeBuffer | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | writeBuffer | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | +| file://:0:0:0:0 | zone | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | +| variables.kt:2:1:8:1 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | | variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | variables.kt:3:21:3:21 | 1 | | variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | file://:0:0:0:0 | | | variables.kt:6:9:6:25 | int local | file://:0:0:0:0 | int | variables.kt:6:21:6:25 | ... + ... | | variables.kt:10:1:10:21 | topLevel | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| variables.kt:12:1:15:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:16:1:34:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:12:1:15:1 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| variables.kt:16:1:34:1 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | | variables.kt:16:11:16:18 | o | variables.kt:12:1:15:1 | C1 | file://:0:0:0:0 | | | variables.kt:16:11:16:18 | o | variables.kt:12:1:15:1 | C1 | variables.kt:16:11:16:18 | o | -| variables.kt:36:1:45:1 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | -| variables.kt:38:11:44:5 | other | file://:0:0:0:0 | Any | file://:0:0:0:0 | | +| variables.kt:36:1:45:1 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | +| variables.kt:38:11:44:5 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | From 3cb68bd7be6dee8f628485f076944a90f7909673 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 26 Oct 2021 16:56:50 +0100 Subject: [PATCH 0605/1618] kotlin-extractor build: include Java source files --- java/kotlin-extractor/build.py | 73 +++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/java/kotlin-extractor/build.py b/java/kotlin-extractor/build.py index 7952c78eb68..1e1311f7f5a 100755 --- a/java/kotlin-extractor/build.py +++ b/java/kotlin-extractor/build.py @@ -5,24 +5,57 @@ import re import subprocess import shutil import os +import os.path kotlinc = 'kotlinc' +javac = 'javac' -def compile(srcs, classpath, output): +def compile_to_dir(srcs, classpath, java_classpath, output): + # Use kotlinc to compile .kt files: subprocess.run([kotlinc, '-d', output, '-module-name', 'codeql-kotlin-extractor', '-no-reflect', '-jvm-target', '1.8', '-classpath', classpath] + srcs, check=True) - subprocess.run(['jar', '-u', '-f', output, - '-C', 'src/main/resources', 'META-INF'], check=True) + # Use javac to compile .java files, referencing the Kotlin class files: + subprocess.run([javac, + '-d', output, + '--release', '8', + '-classpath', "%s:%s:%s" % (output, classpath, java_classpath)] + [s for s in srcs if s.endswith(".java")], check=True) + + +def compile_to_jar(srcs, classpath, java_classpath, output): + builddir = 'build/classes' + + try: + if os.path.exists(builddir): + shutil.rmtree(builddir) + os.makedirs(builddir) + + compile_to_dir(srcs, classpath, java_classpath, builddir) + + subprocess.run(['jar', '-c', '-f', output, + '-C', builddir, '.', + '-C', 'src/main/resources', 'META-INF'], check=True) + finally: + if os.path.exists(builddir): + shutil.rmtree(builddir) + + +def find_sources(path): + return glob.glob(path + '/**/*.kt', recursive=True) + glob.glob(path + '/**/*.java', recursive=True) + + +def jarnames_to_classpath(path, jars): + return ":".join(os.path.join(path, jar) + ".jar" for jar in jars) def compile_standalone(): - srcs = glob.glob('src/**/*.kt', recursive=True) + srcs = find_sources("src") jars = ['kotlin-compiler'] + java_jars = ['kotlin-stdlib'] x = subprocess.run([kotlinc, '-version', '-verbose'], check=True, capture_output=True) @@ -33,9 +66,24 @@ def compile_standalone(): raise Exception('Cannot determine kotlinc home directory') kotlin_home = m.group(1) kotlin_lib = kotlin_home + '/lib' - classpath = ':'.join(map(lambda j: kotlin_lib + '/' + j + '.jar', jars)) + classpath = jarnames_to_classpath(kotlin_lib, jars) + java_classpath = jarnames_to_classpath(kotlin_lib, java_jars) - compile(srcs, classpath, 'codeql-extractor-kotlin-standalone.jar') + compile_to_jar(srcs, classpath, java_classpath, 'codeql-extractor-kotlin-standalone.jar') + + +def find_jar(path, pattern): + result = glob.glob(path + '/' + pattern + '*.jar') + if len(result) == 0: + raise Exception('Cannot find jar file %s under path %s' % (pattern, path)) + return result + + +def patterns_to_classpath(path, patterns): + result = [] + for pattern in patterns: + result += find_jar(path, pattern) + return ':'.join(result) def compile_embeddable(): @@ -50,18 +98,15 @@ def compile_embeddable(): gradle_lib = gradle_home + '/lib' jar_patterns = ['kotlin-compiler-embeddable'] - jar_files = [] - for pattern in jar_patterns: - jar_files += glob.glob(gradle_lib + '/' + pattern + '*.jar') - if len(jar_files) == 0: - raise Exception('Cannot find gradle jar files') - classpath = ':'.join(jar_files) + java_jar_patterns = ['kotlin-stdlib'] + classpath = patterns_to_classpath(gradle_lib, jar_patterns) + java_classpath = patterns_to_classpath(gradle_lib, java_jar_patterns) try: if os.path.exists('build/temp_src'): shutil.rmtree('build/temp_src') shutil.copytree('src', 'build/temp_src') - srcs = glob.glob('build/temp_src/**/*.kt', recursive=True) + srcs = find_sources('build/temp_src') # replace imports in files: for src in srcs: @@ -72,7 +117,7 @@ def compile_embeddable(): with open(src, 'w') as f: f.write(content) - compile(srcs, classpath, 'codeql-extractor-kotlin-embeddable.jar') + compile_to_jar(srcs, classpath, java_classpath, 'codeql-extractor-kotlin-embeddable.jar') finally: if os.path.exists('build/temp_src'): shutil.rmtree('build/temp_src') From 070c0a03f4074e1031424f4c3303c98e3877a21e Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 27 Oct 2021 11:03:33 +0100 Subject: [PATCH 0606/1618] Add .fromSource() qualifier to tests --- .../library-tests/classes/classes.expected | 1312 -- .../kotlin/library-tests/classes/classes.ql | 1 + .../library-tests/classes/interfaces.expected | 1220 -- .../library-tests/classes/interfaces.ql | 1 + .../library-tests/classes/superTypes.expected | 2537 --- .../library-tests/classes/superTypes.ql | 1 + .../library-tests/methods/methods.expected | 14532 --------------- .../kotlin/library-tests/methods/methods.ql | 6 +- .../library-tests/methods/parameters.expected | 10835 ----------- .../library-tests/methods/parameters.ql | 1 + .../multiple_files/classes.expected | 1312 -- .../library-tests/multiple_files/classes.ql | 1 + .../variables/variables.expected | 15059 ---------------- .../library-tests/variables/variables.ql | 1 + 14 files changed, 9 insertions(+), 46810 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index fe3077989b3..c4d5e3bfa05 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -6,1315 +6,3 @@ | classes.kt:17:1:18:1 | ClassFive | ClassFive | | classes.kt:28:1:30:1 | ClassSix | ClassSix | | classes.kt:34:1:47:1 | ClassSeven | ClassSeven | -| file://:0:0:0:0 | AbstractChronology | java.time.chrono.AbstractChronology | -| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | -| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | -| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | -| file://:0:0:0:0 | AbstractExecutorService | java.util.concurrent.AbstractExecutorService | -| file://:0:0:0:0 | AbstractInterruptibleChannel | java.nio.channels.spi.AbstractInterruptibleChannel | -| file://:0:0:0:0 | AbstractList | java.util.AbstractList | -| file://:0:0:0:0 | AbstractList | java.util.AbstractList | -| file://:0:0:0:0 | AbstractList | java.util.AbstractList | -| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | -| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | -| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | -| file://:0:0:0:0 | AbstractOwnableSynchronizer | java.util.concurrent.locks.AbstractOwnableSynchronizer | -| file://:0:0:0:0 | AbstractQueuedSynchronizer | java.util.concurrent.locks.AbstractQueuedSynchronizer | -| file://:0:0:0:0 | AbstractRepository | sun.reflect.generics.repository.AbstractRepository | -| file://:0:0:0:0 | AbstractRepository | sun.reflect.generics.repository.AbstractRepository | -| file://:0:0:0:0 | AbstractSet | java.util.AbstractSet | -| file://:0:0:0:0 | AbstractSet | java.util.AbstractSet | -| file://:0:0:0:0 | AbstractStringBuilder | java.lang.AbstractStringBuilder | -| file://:0:0:0:0 | AccessControlContext | java.security.AccessControlContext | -| file://:0:0:0:0 | AccessDescriptor | java.lang.invoke.AccessDescriptor | -| file://:0:0:0:0 | AccessMode | java.lang.invoke.AccessMode | -| file://:0:0:0:0 | AccessMode | java.nio.file.AccessMode | -| file://:0:0:0:0 | AccessType | java.lang.invoke.AccessType | -| file://:0:0:0:0 | AccessibleObject | java.lang.reflect.AccessibleObject | -| file://:0:0:0:0 | AdaptedCallable | java.util.concurrent.AdaptedCallable | -| file://:0:0:0:0 | AdaptedRunnable | java.util.concurrent.AdaptedRunnable | -| file://:0:0:0:0 | AdaptedRunnableAction | java.util.concurrent.AdaptedRunnableAction | -| file://:0:0:0:0 | AnnotationType | sun.reflect.annotation.AnnotationType | -| file://:0:0:0:0 | AnnotationVisitor | jdk.internal.org.objectweb.asm.AnnotationVisitor | -| file://:0:0:0:0 | Any | kotlin.Any | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | java.lang.ArrayIndexOutOfBoundsException | -| file://:0:0:0:0 | ArrayList | java.util.ArrayList | -| file://:0:0:0:0 | ArrayList | java.util.ArrayList | -| file://:0:0:0:0 | ArrayList | java.util.ArrayList | -| file://:0:0:0:0 | ArrayListSpliterator | java.util.ArrayListSpliterator | -| file://:0:0:0:0 | ArrayListSpliterator | java.util.ArrayListSpliterator | -| file://:0:0:0:0 | ArrayTypeSignature | sun.reflect.generics.tree.ArrayTypeSignature | -| file://:0:0:0:0 | AsynchronousFileChannel | java.nio.channels.AsynchronousFileChannel | -| file://:0:0:0:0 | AtomicInteger | java.util.concurrent.atomic.AtomicInteger | -| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | -| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | -| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | -| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | -| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | -| file://:0:0:0:0 | Attribute | java.text.Attribute | -| file://:0:0:0:0 | Attribute | jdk.internal.org.objectweb.asm.Attribute | -| file://:0:0:0:0 | AuthPermission | javax.security.auth.AuthPermission | -| file://:0:0:0:0 | AuthPermissionHolder | javax.security.auth.AuthPermissionHolder | -| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | -| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | -| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | -| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | -| file://:0:0:0:0 | BaseLocale | sun.util.locale.BaseLocale | -| file://:0:0:0:0 | BasicPermission | java.security.BasicPermission | -| file://:0:0:0:0 | BasicType | java.lang.invoke.BasicType | -| file://:0:0:0:0 | BigInteger | java.math.BigInteger | -| file://:0:0:0:0 | Boolean | java.lang.Boolean | -| file://:0:0:0:0 | Boolean | kotlin.Boolean | -| file://:0:0:0:0 | BooleanSignature | sun.reflect.generics.tree.BooleanSignature | -| file://:0:0:0:0 | BottomSignature | sun.reflect.generics.tree.BottomSignature | -| file://:0:0:0:0 | BoundMethodHandle | java.lang.invoke.BoundMethodHandle | -| file://:0:0:0:0 | Buffer | java.nio.Buffer | -| file://:0:0:0:0 | BufferedWriter | java.io.BufferedWriter | -| file://:0:0:0:0 | Builder | java.lang.module.Builder | -| file://:0:0:0:0 | Builder | java.util.Builder | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | Byte | java.lang.Byte | -| file://:0:0:0:0 | Byte | kotlin.Byte | -| file://:0:0:0:0 | ByteArray | kotlin.ByteArray | -| file://:0:0:0:0 | ByteBuffer | java.nio.ByteBuffer | -| file://:0:0:0:0 | ByteIterator | kotlin.collections.ByteIterator | -| file://:0:0:0:0 | ByteOrder | java.nio.ByteOrder | -| file://:0:0:0:0 | ByteSignature | sun.reflect.generics.tree.ByteSignature | -| file://:0:0:0:0 | ByteVector | jdk.internal.org.objectweb.asm.ByteVector | -| file://:0:0:0:0 | CallSite | java.lang.invoke.CallSite | -| file://:0:0:0:0 | CaseInsensitiveChar | sun.util.locale.CaseInsensitiveChar | -| file://:0:0:0:0 | CaseInsensitiveString | sun.util.locale.CaseInsensitiveString | -| file://:0:0:0:0 | Category | java.util.Category | -| file://:0:0:0:0 | CertPath | java.security.cert.CertPath | -| file://:0:0:0:0 | CertPathRep | java.security.cert.CertPathRep | -| file://:0:0:0:0 | Certificate | java.security.cert.Certificate | -| file://:0:0:0:0 | CertificateRep | java.security.cert.CertificateRep | -| file://:0:0:0:0 | Char | kotlin.Char | -| file://:0:0:0:0 | CharArray | kotlin.CharArray | -| file://:0:0:0:0 | CharBuffer | java.nio.CharBuffer | -| file://:0:0:0:0 | CharIterator | kotlin.collections.CharIterator | -| file://:0:0:0:0 | CharProgression | kotlin.ranges.CharProgression | -| file://:0:0:0:0 | CharRange | kotlin.ranges.CharRange | -| file://:0:0:0:0 | CharSignature | sun.reflect.generics.tree.CharSignature | -| file://:0:0:0:0 | Character | java.lang.Character | -| file://:0:0:0:0 | Characteristics | java.util.stream.Characteristics | -| file://:0:0:0:0 | Charset | java.nio.charset.Charset | -| file://:0:0:0:0 | CharsetDecoder | java.nio.charset.CharsetDecoder | -| file://:0:0:0:0 | CharsetEncoder | java.nio.charset.CharsetEncoder | -| file://:0:0:0:0 | ChronoField | java.time.temporal.ChronoField | -| file://:0:0:0:0 | ChronoUnit | java.time.temporal.ChronoUnit | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | ClassDataSlot | java.io.ClassDataSlot | -| file://:0:0:0:0 | ClassLoader | java.lang.ClassLoader | -| file://:0:0:0:0 | ClassNotFoundException | java.lang.ClassNotFoundException | -| file://:0:0:0:0 | ClassReader | jdk.internal.org.objectweb.asm.ClassReader | -| file://:0:0:0:0 | ClassSignature | sun.reflect.generics.tree.ClassSignature | -| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | -| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | -| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | -| file://:0:0:0:0 | ClassTypeSignature | sun.reflect.generics.tree.ClassTypeSignature | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValueMap | java.lang.ClassValueMap | -| file://:0:0:0:0 | ClassVisitor | jdk.internal.org.objectweb.asm.ClassVisitor | -| file://:0:0:0:0 | ClassWriter | jdk.internal.org.objectweb.asm.ClassWriter | -| file://:0:0:0:0 | ClassicFormat | java.time.format.ClassicFormat | -| file://:0:0:0:0 | Cleaner | java.lang.ref.Cleaner | -| file://:0:0:0:0 | CleanerCleanable | jdk.internal.ref.CleanerCleanable | -| file://:0:0:0:0 | CleanerImpl | jdk.internal.ref.CleanerImpl | -| file://:0:0:0:0 | Clock | java.time.Clock | -| file://:0:0:0:0 | CodeSigner | java.security.CodeSigner | -| file://:0:0:0:0 | CodeSource | java.security.CodeSource | -| file://:0:0:0:0 | CoderResult | java.nio.charset.CoderResult | -| file://:0:0:0:0 | CodingErrorAction | java.nio.charset.CodingErrorAction | -| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | -| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | -| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | -| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Compiled | java.lang.invoke.Compiled | -| file://:0:0:0:0 | CompositePrinterParser | java.time.format.CompositePrinterParser | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentWeakInternSet | java.lang.invoke.ConcurrentWeakInternSet | -| file://:0:0:0:0 | ConcurrentWeakInternSet | java.lang.invoke.ConcurrentWeakInternSet | -| file://:0:0:0:0 | ConditionObject | java.util.concurrent.locks.ConditionObject | -| file://:0:0:0:0 | Config | java.io.Config | -| file://:0:0:0:0 | Configuration | java.lang.module.Configuration | -| file://:0:0:0:0 | ConstantPool | jdk.internal.reflect.ConstantPool | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | ConstructorRepository | sun.reflect.generics.repository.ConstructorRepository | -| file://:0:0:0:0 | ContentHandler | java.net.ContentHandler | -| file://:0:0:0:0 | Controller | java.lang.Controller | -| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | -| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | -| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | -| file://:0:0:0:0 | CounterCell | java.util.concurrent.CounterCell | -| file://:0:0:0:0 | Date | java.util.Date | -| file://:0:0:0:0 | DateTimeFormatter | java.time.format.DateTimeFormatter | -| file://:0:0:0:0 | DateTimeParseContext | java.time.format.DateTimeParseContext | -| file://:0:0:0:0 | DateTimePrintContext | java.time.format.DateTimePrintContext | -| file://:0:0:0:0 | DayOfWeek | java.time.DayOfWeek | -| file://:0:0:0:0 | Debug | sun.security.util.Debug | -| file://:0:0:0:0 | DecimalStyle | java.time.format.DecimalStyle | -| file://:0:0:0:0 | Dictionary | java.util.Dictionary | -| file://:0:0:0:0 | Dictionary | java.util.Dictionary | -| file://:0:0:0:0 | Double | java.lang.Double | -| file://:0:0:0:0 | Double | kotlin.Double | -| file://:0:0:0:0 | DoubleArray | kotlin.DoubleArray | -| file://:0:0:0:0 | DoubleBuffer | java.nio.DoubleBuffer | -| file://:0:0:0:0 | DoubleIterator | kotlin.collections.DoubleIterator | -| file://:0:0:0:0 | DoubleSignature | sun.reflect.generics.tree.DoubleSignature | -| file://:0:0:0:0 | DoubleSummaryStatistics | java.util.DoubleSummaryStatistics | -| file://:0:0:0:0 | Duration | java.time.Duration | -| file://:0:0:0:0 | Edge | jdk.internal.org.objectweb.asm.Edge | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | EntryIterator | java.util.concurrent.EntryIterator | -| file://:0:0:0:0 | EntrySetView | java.util.concurrent.EntrySetView | -| file://:0:0:0:0 | EntrySpliterator | java.util.EntrySpliterator | -| file://:0:0:0:0 | EntrySpliterator | java.util.EntrySpliterator | -| file://:0:0:0:0 | EntrySpliterator | java.util.concurrent.EntrySpliterator | -| file://:0:0:0:0 | EntrySpliterator | java.util.concurrent.EntrySpliterator | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | kotlin.Enum | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | Exception | java.lang.Exception | -| file://:0:0:0:0 | ExceptionNode | java.util.concurrent.ExceptionNode | -| file://:0:0:0:0 | Executable | java.lang.reflect.Executable | -| file://:0:0:0:0 | Exports | java.lang.module.Exports | -| file://:0:0:0:0 | ExtendedOption | java.lang.ExtendedOption | -| file://:0:0:0:0 | Extension | sun.util.locale.Extension | -| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | -| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | -| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | -| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | -| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | -| file://:0:0:0:0 | FairSync | java.util.concurrent.locks.FairSync | -| file://:0:0:0:0 | Field | java.lang.reflect.Field | -| file://:0:0:0:0 | Field | java.text.Field | -| file://:0:0:0:0 | FieldPosition | java.text.FieldPosition | -| file://:0:0:0:0 | FieldVisitor | jdk.internal.org.objectweb.asm.FieldVisitor | -| file://:0:0:0:0 | FieldWriter | jdk.internal.org.objectweb.asm.FieldWriter | -| file://:0:0:0:0 | File | java.io.File | -| file://:0:0:0:0 | FileChannel | java.nio.channels.FileChannel | -| file://:0:0:0:0 | FileDescriptor | java.io.FileDescriptor | -| file://:0:0:0:0 | FileLock | java.nio.channels.FileLock | -| file://:0:0:0:0 | FileStore | java.nio.file.FileStore | -| file://:0:0:0:0 | FileSystem | java.nio.file.FileSystem | -| file://:0:0:0:0 | FileSystemProvider | java.nio.file.spi.FileSystemProvider | -| file://:0:0:0:0 | FileTime | java.nio.file.attribute.FileTime | -| file://:0:0:0:0 | FilterOutputStream | java.io.FilterOutputStream | -| file://:0:0:0:0 | FilterValues | java.io.FilterValues | -| file://:0:0:0:0 | FilteringMode | java.util.FilteringMode | -| file://:0:0:0:0 | FixedClock | java.time.FixedClock | -| file://:0:0:0:0 | Float | java.lang.Float | -| file://:0:0:0:0 | Float | kotlin.Float | -| file://:0:0:0:0 | FloatArray | kotlin.FloatArray | -| file://:0:0:0:0 | FloatBuffer | java.nio.FloatBuffer | -| file://:0:0:0:0 | FloatIterator | kotlin.collections.FloatIterator | -| file://:0:0:0:0 | FloatSignature | sun.reflect.generics.tree.FloatSignature | -| file://:0:0:0:0 | ForEachEntryTask | java.util.concurrent.ForEachEntryTask | -| file://:0:0:0:0 | ForEachKeyTask | java.util.concurrent.ForEachKeyTask | -| file://:0:0:0:0 | ForEachMappingTask | java.util.concurrent.ForEachMappingTask | -| file://:0:0:0:0 | ForEachTransformedEntryTask | java.util.concurrent.ForEachTransformedEntryTask | -| file://:0:0:0:0 | ForEachTransformedKeyTask | java.util.concurrent.ForEachTransformedKeyTask | -| file://:0:0:0:0 | ForEachTransformedMappingTask | java.util.concurrent.ForEachTransformedMappingTask | -| file://:0:0:0:0 | ForEachTransformedValueTask | java.util.concurrent.ForEachTransformedValueTask | -| file://:0:0:0:0 | ForEachValueTask | java.util.concurrent.ForEachValueTask | -| file://:0:0:0:0 | ForkJoinPool | java.util.concurrent.ForkJoinPool | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinWorkerThread | java.util.concurrent.ForkJoinWorkerThread | -| file://:0:0:0:0 | FormalTypeParameter | sun.reflect.generics.tree.FormalTypeParameter | -| file://:0:0:0:0 | Format | java.text.Format | -| file://:0:0:0:0 | FormatStyle | java.time.format.FormatStyle | -| file://:0:0:0:0 | ForwardingNode | java.util.concurrent.ForwardingNode | -| file://:0:0:0:0 | Frame | jdk.internal.org.objectweb.asm.Frame | -| file://:0:0:0:0 | GenericDeclRepository | sun.reflect.generics.repository.GenericDeclRepository | -| file://:0:0:0:0 | GenericDeclRepository | sun.reflect.generics.repository.GenericDeclRepository | -| file://:0:0:0:0 | GetField | java.io.GetField | -| file://:0:0:0:0 | GetReflectionFactoryAction | jdk.internal.reflect.GetReflectionFactoryAction | -| file://:0:0:0:0 | Global | java.io.Global | -| file://:0:0:0:0 | Handle | jdk.internal.org.objectweb.asm.Handle | -| file://:0:0:0:0 | Hashtable | java.util.Hashtable | -| file://:0:0:0:0 | Hashtable | java.util.Hashtable | -| file://:0:0:0:0 | Hashtable | java.util.Hashtable | -| file://:0:0:0:0 | Hashtable | java.util.Hashtable | -| file://:0:0:0:0 | Hidden | java.lang.invoke.Hidden | -| file://:0:0:0:0 | IOException | java.io.IOException | -| file://:0:0:0:0 | Identity | java.lang.Identity | -| file://:0:0:0:0 | IllegalAccessException | java.lang.IllegalAccessException | -| file://:0:0:0:0 | IllegalArgumentException | java.lang.IllegalArgumentException | -| file://:0:0:0:0 | IndexOutOfBoundsException | java.lang.IndexOutOfBoundsException | -| file://:0:0:0:0 | InetAddress | java.net.InetAddress | -| file://:0:0:0:0 | InetAddressHolder | java.net.InetAddressHolder | -| file://:0:0:0:0 | InnocuousForkJoinWorkerThread | java.util.concurrent.InnocuousForkJoinWorkerThread | -| file://:0:0:0:0 | InnocuousThreadFactory | jdk.internal.ref.InnocuousThreadFactory | -| file://:0:0:0:0 | InputStream | java.io.InputStream | -| file://:0:0:0:0 | Instant | java.time.Instant | -| file://:0:0:0:0 | Int | kotlin.Int | -| file://:0:0:0:0 | IntArray | kotlin.IntArray | -| file://:0:0:0:0 | IntBuffer | java.nio.IntBuffer | -| file://:0:0:0:0 | IntIterator | kotlin.collections.IntIterator | -| file://:0:0:0:0 | IntProgression | kotlin.ranges.IntProgression | -| file://:0:0:0:0 | IntRange | kotlin.ranges.IntRange | -| file://:0:0:0:0 | IntSignature | sun.reflect.generics.tree.IntSignature | -| file://:0:0:0:0 | IntSummaryStatistics | java.util.IntSummaryStatistics | -| file://:0:0:0:0 | Integer | java.lang.Integer | -| file://:0:0:0:0 | InterfaceAddress | java.net.InterfaceAddress | -| file://:0:0:0:0 | Intrinsic | java.lang.invoke.Intrinsic | -| file://:0:0:0:0 | Invokers | java.lang.invoke.Invokers | -| file://:0:0:0:0 | IsoChronology | java.time.chrono.IsoChronology | -| file://:0:0:0:0 | IsoCountryCode | java.util.IsoCountryCode | -| file://:0:0:0:0 | IsoEra | java.time.chrono.IsoEra | -| file://:0:0:0:0 | Item | jdk.internal.org.objectweb.asm.Item | -| file://:0:0:0:0 | Key | java.security.Key | -| file://:0:0:0:0 | KeyIterator | java.util.concurrent.KeyIterator | -| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | -| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | -| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | -| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | -| file://:0:0:0:0 | KeySpliterator | java.util.KeySpliterator | -| file://:0:0:0:0 | KeySpliterator | java.util.KeySpliterator | -| file://:0:0:0:0 | KeySpliterator | java.util.concurrent.KeySpliterator | -| file://:0:0:0:0 | KeySpliterator | java.util.concurrent.KeySpliterator | -| file://:0:0:0:0 | Kind | java.lang.invoke.Kind | -| file://:0:0:0:0 | Label | jdk.internal.org.objectweb.asm.Label | -| file://:0:0:0:0 | LambdaForm | java.lang.invoke.LambdaForm | -| file://:0:0:0:0 | LambdaFormEditor | java.lang.invoke.LambdaFormEditor | -| file://:0:0:0:0 | LanguageRange | java.util.LanguageRange | -| file://:0:0:0:0 | Level | java.lang.Level | -| file://:0:0:0:0 | LineReader | java.util.LineReader | -| file://:0:0:0:0 | LinkOption | java.nio.file.LinkOption | -| file://:0:0:0:0 | LocalDate | java.time.LocalDate | -| file://:0:0:0:0 | LocalDateTime | java.time.LocalDateTime | -| file://:0:0:0:0 | LocalTime | java.time.LocalTime | -| file://:0:0:0:0 | Locale | java.util.Locale | -| file://:0:0:0:0 | LocaleExtensions | sun.util.locale.LocaleExtensions | -| file://:0:0:0:0 | Long | java.lang.Long | -| file://:0:0:0:0 | Long | kotlin.Long | -| file://:0:0:0:0 | LongArray | kotlin.LongArray | -| file://:0:0:0:0 | LongBuffer | java.nio.LongBuffer | -| file://:0:0:0:0 | LongIterator | kotlin.collections.LongIterator | -| file://:0:0:0:0 | LongProgression | kotlin.ranges.LongProgression | -| file://:0:0:0:0 | LongRange | kotlin.ranges.LongRange | -| file://:0:0:0:0 | LongSignature | sun.reflect.generics.tree.LongSignature | -| file://:0:0:0:0 | LongSummaryStatistics | java.util.LongSummaryStatistics | -| file://:0:0:0:0 | MapEntry | java.util.concurrent.MapEntry | -| file://:0:0:0:0 | MapMode | java.nio.channels.MapMode | -| file://:0:0:0:0 | MapReduceEntriesTask | java.util.concurrent.MapReduceEntriesTask | -| file://:0:0:0:0 | MapReduceEntriesTask | java.util.concurrent.MapReduceEntriesTask | -| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | java.util.concurrent.MapReduceEntriesToDoubleTask | -| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | java.util.concurrent.MapReduceEntriesToDoubleTask | -| file://:0:0:0:0 | MapReduceEntriesToIntTask | java.util.concurrent.MapReduceEntriesToIntTask | -| file://:0:0:0:0 | MapReduceEntriesToIntTask | java.util.concurrent.MapReduceEntriesToIntTask | -| file://:0:0:0:0 | MapReduceEntriesToLongTask | java.util.concurrent.MapReduceEntriesToLongTask | -| file://:0:0:0:0 | MapReduceEntriesToLongTask | java.util.concurrent.MapReduceEntriesToLongTask | -| file://:0:0:0:0 | MapReduceKeysTask | java.util.concurrent.MapReduceKeysTask | -| file://:0:0:0:0 | MapReduceKeysTask | java.util.concurrent.MapReduceKeysTask | -| file://:0:0:0:0 | MapReduceKeysToDoubleTask | java.util.concurrent.MapReduceKeysToDoubleTask | -| file://:0:0:0:0 | MapReduceKeysToDoubleTask | java.util.concurrent.MapReduceKeysToDoubleTask | -| file://:0:0:0:0 | MapReduceKeysToIntTask | java.util.concurrent.MapReduceKeysToIntTask | -| file://:0:0:0:0 | MapReduceKeysToIntTask | java.util.concurrent.MapReduceKeysToIntTask | -| file://:0:0:0:0 | MapReduceKeysToLongTask | java.util.concurrent.MapReduceKeysToLongTask | -| file://:0:0:0:0 | MapReduceKeysToLongTask | java.util.concurrent.MapReduceKeysToLongTask | -| file://:0:0:0:0 | MapReduceMappingsTask | java.util.concurrent.MapReduceMappingsTask | -| file://:0:0:0:0 | MapReduceMappingsTask | java.util.concurrent.MapReduceMappingsTask | -| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | java.util.concurrent.MapReduceMappingsToDoubleTask | -| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | java.util.concurrent.MapReduceMappingsToDoubleTask | -| file://:0:0:0:0 | MapReduceMappingsToIntTask | java.util.concurrent.MapReduceMappingsToIntTask | -| file://:0:0:0:0 | MapReduceMappingsToIntTask | java.util.concurrent.MapReduceMappingsToIntTask | -| file://:0:0:0:0 | MapReduceMappingsToLongTask | java.util.concurrent.MapReduceMappingsToLongTask | -| file://:0:0:0:0 | MapReduceMappingsToLongTask | java.util.concurrent.MapReduceMappingsToLongTask | -| file://:0:0:0:0 | MapReduceValuesTask | java.util.concurrent.MapReduceValuesTask | -| file://:0:0:0:0 | MapReduceValuesTask | java.util.concurrent.MapReduceValuesTask | -| file://:0:0:0:0 | MapReduceValuesToDoubleTask | java.util.concurrent.MapReduceValuesToDoubleTask | -| file://:0:0:0:0 | MapReduceValuesToDoubleTask | java.util.concurrent.MapReduceValuesToDoubleTask | -| file://:0:0:0:0 | MapReduceValuesToIntTask | java.util.concurrent.MapReduceValuesToIntTask | -| file://:0:0:0:0 | MapReduceValuesToIntTask | java.util.concurrent.MapReduceValuesToIntTask | -| file://:0:0:0:0 | MapReduceValuesToLongTask | java.util.concurrent.MapReduceValuesToLongTask | -| file://:0:0:0:0 | MapReduceValuesToLongTask | java.util.concurrent.MapReduceValuesToLongTask | -| file://:0:0:0:0 | MappedByteBuffer | java.nio.MappedByteBuffer | -| file://:0:0:0:0 | MemberName | java.lang.invoke.MemberName | -| file://:0:0:0:0 | Method | java.lang.reflect.Method | -| file://:0:0:0:0 | MethodHandle | java.lang.invoke.MethodHandle | -| file://:0:0:0:0 | MethodRepository | sun.reflect.generics.repository.MethodRepository | -| file://:0:0:0:0 | MethodType | java.lang.invoke.MethodType | -| file://:0:0:0:0 | MethodTypeForm | java.lang.invoke.MethodTypeForm | -| file://:0:0:0:0 | MethodTypeSignature | sun.reflect.generics.tree.MethodTypeSignature | -| file://:0:0:0:0 | MethodVisitor | jdk.internal.org.objectweb.asm.MethodVisitor | -| file://:0:0:0:0 | MethodWriter | jdk.internal.org.objectweb.asm.MethodWriter | -| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | -| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | -| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | -| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | -| file://:0:0:0:0 | Module | java.lang.Module | -| file://:0:0:0:0 | ModuleDescriptor | java.lang.module.ModuleDescriptor | -| file://:0:0:0:0 | ModuleLayer | java.lang.ModuleLayer | -| file://:0:0:0:0 | ModuleReference | java.lang.module.ModuleReference | -| file://:0:0:0:0 | ModuleVisitor | jdk.internal.org.objectweb.asm.ModuleVisitor | -| file://:0:0:0:0 | Month | java.time.Month | -| file://:0:0:0:0 | Name | java.lang.invoke.Name | -| file://:0:0:0:0 | NamedFunction | java.lang.invoke.NamedFunction | -| file://:0:0:0:0 | NamedPackage | java.lang.NamedPackage | -| file://:0:0:0:0 | NativeLibrary | java.lang.NativeLibrary | -| file://:0:0:0:0 | NestHost | jdk.internal.org.objectweb.asm.NestHost | -| file://:0:0:0:0 | NestMembers | jdk.internal.org.objectweb.asm.NestMembers | -| file://:0:0:0:0 | NetworkInterface | java.net.NetworkInterface | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.locks.Node | -| file://:0:0:0:0 | NonfairSync | java.util.concurrent.locks.NonfairSync | -| file://:0:0:0:0 | Nothing | kotlin.Nothing | -| file://:0:0:0:0 | Number | java.lang.Number | -| file://:0:0:0:0 | Number | kotlin.Number | -| file://:0:0:0:0 | Object | java.lang.Object | -| file://:0:0:0:0 | ObjectInputStream | java.io.ObjectInputStream | -| file://:0:0:0:0 | ObjectOutputStream | java.io.ObjectOutputStream | -| file://:0:0:0:0 | ObjectStreamClass | java.io.ObjectStreamClass | -| file://:0:0:0:0 | ObjectStreamException | java.io.ObjectStreamException | -| file://:0:0:0:0 | ObjectStreamField | java.io.ObjectStreamField | -| file://:0:0:0:0 | OffsetClock | java.time.OffsetClock | -| file://:0:0:0:0 | OffsetDateTime | java.time.OffsetDateTime | -| file://:0:0:0:0 | OffsetTime | java.time.OffsetTime | -| file://:0:0:0:0 | Opens | java.lang.module.Opens | -| file://:0:0:0:0 | Option | java.lang.Option | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | OptionalDataException | java.io.OptionalDataException | -| file://:0:0:0:0 | OptionalDouble | java.util.OptionalDouble | -| file://:0:0:0:0 | OptionalInt | java.util.OptionalInt | -| file://:0:0:0:0 | OptionalLong | java.util.OptionalLong | -| file://:0:0:0:0 | OutputStream | java.io.OutputStream | -| file://:0:0:0:0 | Package | java.lang.Package | -| file://:0:0:0:0 | Parameter | java.lang.reflect.Parameter | -| file://:0:0:0:0 | ParsePosition | java.text.ParsePosition | -| file://:0:0:0:0 | Parsed | java.time.format.Parsed | -| file://:0:0:0:0 | Period | java.time.Period | -| file://:0:0:0:0 | Permission | java.security.Permission | -| file://:0:0:0:0 | PermissionCollection | java.security.PermissionCollection | -| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanableRef | jdk.internal.ref.PhantomCleanableRef | -| file://:0:0:0:0 | PhantomReference | java.lang.ref.PhantomReference | -| file://:0:0:0:0 | PhantomReference | java.lang.ref.PhantomReference | -| file://:0:0:0:0 | PolymorphicSignature | java.lang.invoke.PolymorphicSignature | -| file://:0:0:0:0 | PrintStream | java.io.PrintStream | -| file://:0:0:0:0 | PrintWriter | java.io.PrintWriter | -| file://:0:0:0:0 | Properties | java.util.Properties | -| file://:0:0:0:0 | ProtectionDomain | java.security.ProtectionDomain | -| file://:0:0:0:0 | Provider | java.security.Provider | -| file://:0:0:0:0 | Provides | java.lang.module.Provides | -| file://:0:0:0:0 | Proxy | java.net.Proxy | -| file://:0:0:0:0 | PutField | java.io.PutField | -| file://:0:0:0:0 | Random | java.util.Random | -| file://:0:0:0:0 | RandomAccessSpliterator | java.util.RandomAccessSpliterator | -| file://:0:0:0:0 | RandomDoublesSpliterator | java.util.RandomDoublesSpliterator | -| file://:0:0:0:0 | RandomIntsSpliterator | java.util.RandomIntsSpliterator | -| file://:0:0:0:0 | RandomLongsSpliterator | java.util.RandomLongsSpliterator | -| file://:0:0:0:0 | Reader | java.io.Reader | -| file://:0:0:0:0 | ReduceEntriesTask | java.util.concurrent.ReduceEntriesTask | -| file://:0:0:0:0 | ReduceEntriesTask | java.util.concurrent.ReduceEntriesTask | -| file://:0:0:0:0 | ReduceKeysTask | java.util.concurrent.ReduceKeysTask | -| file://:0:0:0:0 | ReduceKeysTask | java.util.concurrent.ReduceKeysTask | -| file://:0:0:0:0 | ReduceValuesTask | java.util.concurrent.ReduceValuesTask | -| file://:0:0:0:0 | ReduceValuesTask | java.util.concurrent.ReduceValuesTask | -| file://:0:0:0:0 | ReentrantLock | java.util.concurrent.locks.ReentrantLock | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReflectionFactory | jdk.internal.reflect.ReflectionFactory | -| file://:0:0:0:0 | ReflectiveOperationException | java.lang.ReflectiveOperationException | -| file://:0:0:0:0 | Reifier | sun.reflect.generics.visitor.Reifier | -| file://:0:0:0:0 | Requires | java.lang.module.Requires | -| file://:0:0:0:0 | ReservationNode | java.util.concurrent.ReservationNode | -| file://:0:0:0:0 | ResolvedModule | java.lang.module.ResolvedModule | -| file://:0:0:0:0 | ResolverStyle | java.time.format.ResolverStyle | -| file://:0:0:0:0 | RetentionPolicy | java.lang.annotation.RetentionPolicy | -| file://:0:0:0:0 | RunnableExecuteAction | java.util.concurrent.RunnableExecuteAction | -| file://:0:0:0:0 | RuntimeException | java.lang.RuntimeException | -| file://:0:0:0:0 | RuntimePermission | java.lang.RuntimePermission | -| file://:0:0:0:0 | SearchEntriesTask | java.util.concurrent.SearchEntriesTask | -| file://:0:0:0:0 | SearchKeysTask | java.util.concurrent.SearchKeysTask | -| file://:0:0:0:0 | SearchMappingsTask | java.util.concurrent.SearchMappingsTask | -| file://:0:0:0:0 | SearchValuesTask | java.util.concurrent.SearchValuesTask | -| file://:0:0:0:0 | Segment | java.util.concurrent.Segment | -| file://:0:0:0:0 | SerializablePermission | java.io.SerializablePermission | -| file://:0:0:0:0 | Service | java.security.Service | -| file://:0:0:0:0 | ServiceProvider | jdk.internal.module.ServiceProvider | -| file://:0:0:0:0 | ServicesCatalog | jdk.internal.module.ServicesCatalog | -| file://:0:0:0:0 | Short | java.lang.Short | -| file://:0:0:0:0 | Short | kotlin.Short | -| file://:0:0:0:0 | ShortArray | kotlin.ShortArray | -| file://:0:0:0:0 | ShortBuffer | java.nio.ShortBuffer | -| file://:0:0:0:0 | ShortIterator | kotlin.collections.ShortIterator | -| file://:0:0:0:0 | ShortSignature | sun.reflect.generics.tree.ShortSignature | -| file://:0:0:0:0 | SimpleClassTypeSignature | sun.reflect.generics.tree.SimpleClassTypeSignature | -| file://:0:0:0:0 | SimpleEntry | java.util.SimpleEntry | -| file://:0:0:0:0 | SimpleImmutableEntry | java.util.SimpleImmutableEntry | -| file://:0:0:0:0 | SocketAddress | java.net.SocketAddress | -| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | -| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | -| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | -| file://:0:0:0:0 | SoftCleanableRef | jdk.internal.ref.SoftCleanableRef | -| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | -| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | -| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | -| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | -| file://:0:0:0:0 | Specializer | java.lang.invoke.Specializer | -| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | -| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | -| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | -| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | -| file://:0:0:0:0 | StackFrameInfo | java.lang.StackFrameInfo | -| file://:0:0:0:0 | StackTraceElement | java.lang.StackTraceElement | -| file://:0:0:0:0 | StackWalker | java.lang.StackWalker | -| file://:0:0:0:0 | State | java.lang.State | -| file://:0:0:0:0 | Status | java.io.Status | -| file://:0:0:0:0 | String | java.lang.String | -| file://:0:0:0:0 | String | kotlin.String | -| file://:0:0:0:0 | StringBuffer | java.lang.StringBuffer | -| file://:0:0:0:0 | StringBuilder | java.lang.StringBuilder | -| file://:0:0:0:0 | Subject | javax.security.auth.Subject | -| file://:0:0:0:0 | Subset | java.lang.Subset | -| file://:0:0:0:0 | SuppliedThreadLocal | java.lang.SuppliedThreadLocal | -| file://:0:0:0:0 | Sync | java.util.concurrent.locks.Sync | -| file://:0:0:0:0 | SystemClock | java.time.SystemClock | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | Tag | jdk.internal.reflect.Tag | -| file://:0:0:0:0 | TextStyle | java.time.format.TextStyle | -| file://:0:0:0:0 | Thread | java.lang.Thread | -| file://:0:0:0:0 | ThreadGroup | java.lang.ThreadGroup | -| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | -| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | -| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | -| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | -| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | -| file://:0:0:0:0 | ThreadLocalMap | java.lang.ThreadLocalMap | -| file://:0:0:0:0 | Throwable | java.lang.Throwable | -| file://:0:0:0:0 | Throwable | kotlin.Throwable | -| file://:0:0:0:0 | TickClock | java.time.TickClock | -| file://:0:0:0:0 | TimeDefinition | java.time.zone.TimeDefinition | -| file://:0:0:0:0 | TimeUnit | java.util.concurrent.TimeUnit | -| file://:0:0:0:0 | Timestamp | java.security.Timestamp | -| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | -| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | -| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | -| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | -| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | -| file://:0:0:0:0 | TreeBin | java.util.concurrent.TreeBin | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | Type | java.net.Type | -| file://:0:0:0:0 | Type | jdk.internal.org.objectweb.asm.Type | -| file://:0:0:0:0 | TypeParam | kotlin.TypeParam | -| file://:0:0:0:0 | TypePath | jdk.internal.org.objectweb.asm.TypePath | -| file://:0:0:0:0 | TypeVariableSignature | sun.reflect.generics.tree.TypeVariableSignature | -| file://:0:0:0:0 | TypesAndInvokers | java.lang.invoke.TypesAndInvokers | -| file://:0:0:0:0 | URI | java.net.URI | -| file://:0:0:0:0 | URL | java.net.URL | -| file://:0:0:0:0 | URLConnection | java.net.URLConnection | -| file://:0:0:0:0 | URLStreamHandler | java.net.URLStreamHandler | -| file://:0:0:0:0 | UnicodeBlock | java.lang.UnicodeBlock | -| file://:0:0:0:0 | UnicodeScript | java.lang.UnicodeScript | -| file://:0:0:0:0 | Unloader | java.lang.Unloader | -| file://:0:0:0:0 | Unsafe | jdk.internal.misc.Unsafe | -| file://:0:0:0:0 | UserPrincipalLookupService | java.nio.file.attribute.UserPrincipalLookupService | -| file://:0:0:0:0 | ValueIterator | java.util.concurrent.ValueIterator | -| file://:0:0:0:0 | ValueRange | java.time.temporal.ValueRange | -| file://:0:0:0:0 | ValueSpliterator | java.util.ValueSpliterator | -| file://:0:0:0:0 | ValueSpliterator | java.util.ValueSpliterator | -| file://:0:0:0:0 | ValueSpliterator | java.util.concurrent.ValueSpliterator | -| file://:0:0:0:0 | ValueSpliterator | java.util.concurrent.ValueSpliterator | -| file://:0:0:0:0 | ValuesView | java.util.concurrent.ValuesView | -| file://:0:0:0:0 | VarForm | java.lang.invoke.VarForm | -| file://:0:0:0:0 | VarHandle | java.lang.invoke.VarHandle | -| file://:0:0:0:0 | Version | java.lang.Version | -| file://:0:0:0:0 | Version | java.lang.Version | -| file://:0:0:0:0 | Version | java.lang.Version | -| file://:0:0:0:0 | Version | java.lang.Version | -| file://:0:0:0:0 | Version | java.lang.module.Version | -| file://:0:0:0:0 | VersionInfo | java.lang.VersionInfo | -| file://:0:0:0:0 | Void | java.lang.Void | -| file://:0:0:0:0 | VoidDescriptor | sun.reflect.generics.tree.VoidDescriptor | -| file://:0:0:0:0 | WeakClassKey | java.io.WeakClassKey | -| file://:0:0:0:0 | WeakClassKey | java.lang.WeakClassKey | -| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | -| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | -| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | -| file://:0:0:0:0 | WeakCleanableRef | jdk.internal.ref.WeakCleanableRef | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | -| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | -| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | -| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | Wildcard | sun.reflect.generics.tree.Wildcard | -| file://:0:0:0:0 | WorkQueue | java.util.concurrent.WorkQueue | -| file://:0:0:0:0 | Wrapper | sun.invoke.util.Wrapper | -| file://:0:0:0:0 | Writer | java.io.Writer | -| file://:0:0:0:0 | WrongMethodTypeException | java.lang.invoke.WrongMethodTypeException | -| file://:0:0:0:0 | ZoneId | java.time.ZoneId | -| file://:0:0:0:0 | ZoneOffset | java.time.ZoneOffset | -| file://:0:0:0:0 | ZoneOffsetTransition | java.time.zone.ZoneOffsetTransition | -| file://:0:0:0:0 | ZoneOffsetTransitionRule | java.time.zone.ZoneOffsetTransitionRule | -| file://:0:0:0:0 | ZoneRules | java.time.zone.ZoneRules | -| file://:0:0:0:0 | ZonedDateTime | java.time.ZonedDateTime | diff --git a/java/ql/test/kotlin/library-tests/classes/classes.ql b/java/ql/test/kotlin/library-tests/classes/classes.ql index 27a702921c1..daf777d3dcd 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.ql +++ b/java/ql/test/kotlin/library-tests/classes/classes.ql @@ -1,5 +1,6 @@ import java from Class c +where c.fromSource() select c, c.getQualifiedName() diff --git a/java/ql/test/kotlin/library-tests/classes/interfaces.expected b/java/ql/test/kotlin/library-tests/classes/interfaces.expected index 2d409c82361..d62a8753dbf 100644 --- a/java/ql/test/kotlin/library-tests/classes/interfaces.expected +++ b/java/ql/test/kotlin/library-tests/classes/interfaces.expected @@ -1,1222 +1,2 @@ | classes.kt:20:1:22:1 | IF1 | | classes.kt:24:1:26:1 | IF2 | -| file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | AnnotatedType | -| file://:0:0:0:0 | Annotation | -| file://:0:0:0:0 | Annotation | -| file://:0:0:0:0 | Appendable | -| file://:0:0:0:0 | AsynchronousChannel | -| file://:0:0:0:0 | AttributeView | -| file://:0:0:0:0 | AttributedCharacterIterator | -| file://:0:0:0:0 | AutoCloseable | -| file://:0:0:0:0 | BaseStream | -| file://:0:0:0:0 | BaseStream | -| file://:0:0:0:0 | BaseStream | -| file://:0:0:0:0 | BaseStream | -| file://:0:0:0:0 | BaseStream | -| file://:0:0:0:0 | BaseType | -| file://:0:0:0:0 | BasicFileAttributes | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiConsumer | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BiFunction | -| file://:0:0:0:0 | BinaryOperator | -| file://:0:0:0:0 | BinaryOperator | -| file://:0:0:0:0 | BinaryOperator | -| file://:0:0:0:0 | BinaryOperator | -| file://:0:0:0:0 | BinaryOperator | -| file://:0:0:0:0 | BinaryOperator | -| file://:0:0:0:0 | BinaryOperator | -| file://:0:0:0:0 | BinaryOperator | -| file://:0:0:0:0 | BinaryOperator | -| file://:0:0:0:0 | Builder | -| file://:0:0:0:0 | Builder | -| file://:0:0:0:0 | Builder | -| file://:0:0:0:0 | Builder | -| file://:0:0:0:0 | Builder | -| file://:0:0:0:0 | Builder | -| file://:0:0:0:0 | ByteChannel | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Callable | -| file://:0:0:0:0 | Channel | -| file://:0:0:0:0 | CharSequence | -| file://:0:0:0:0 | CharSequence | -| file://:0:0:0:0 | CharacterIterator | -| file://:0:0:0:0 | ChronoLocalDate | -| file://:0:0:0:0 | ChronoLocalDateTime | -| file://:0:0:0:0 | ChronoLocalDateTime | -| file://:0:0:0:0 | ChronoLocalDateTime | -| file://:0:0:0:0 | ChronoLocalDateTime | -| file://:0:0:0:0 | ChronoLocalDateTime | -| file://:0:0:0:0 | ChronoLocalDateTime | -| file://:0:0:0:0 | ChronoPeriod | -| file://:0:0:0:0 | ChronoZonedDateTime | -| file://:0:0:0:0 | ChronoZonedDateTime | -| file://:0:0:0:0 | ChronoZonedDateTime | -| file://:0:0:0:0 | ChronoZonedDateTime | -| file://:0:0:0:0 | ChronoZonedDateTime | -| file://:0:0:0:0 | ChronoZonedDateTime | -| file://:0:0:0:0 | Chronology | -| file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Closeable | -| file://:0:0:0:0 | ClosedRange | -| file://:0:0:0:0 | ClosedRange | -| file://:0:0:0:0 | ClosedRange | -| file://:0:0:0:0 | ClosedRange | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | Collector | -| file://:0:0:0:0 | Collector | -| file://:0:0:0:0 | Collector | -| file://:0:0:0:0 | Collector | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | Comparator | -| file://:0:0:0:0 | CompletionHandler | -| file://:0:0:0:0 | CompletionHandler | -| file://:0:0:0:0 | CompletionHandler | -| file://:0:0:0:0 | CompletionHandler | -| file://:0:0:0:0 | CompletionHandler | -| file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | Condition | -| file://:0:0:0:0 | ConstructorAccessor | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | Consumer | -| file://:0:0:0:0 | ContentHandlerFactory | -| file://:0:0:0:0 | CopyOption | -| file://:0:0:0:0 | DataInput | -| file://:0:0:0:0 | DataOutput | -| file://:0:0:0:0 | DateTimePrinterParser | -| file://:0:0:0:0 | Deque | -| file://:0:0:0:0 | Deque | -| file://:0:0:0:0 | DirectoryStream | -| file://:0:0:0:0 | DirectoryStream | -| file://:0:0:0:0 | DomainCombiner | -| file://:0:0:0:0 | DoubleBinaryOperator | -| file://:0:0:0:0 | DoubleConsumer | -| file://:0:0:0:0 | DoubleFunction | -| file://:0:0:0:0 | DoubleFunction | -| file://:0:0:0:0 | DoubleFunction | -| file://:0:0:0:0 | DoublePredicate | -| file://:0:0:0:0 | DoubleStream | -| file://:0:0:0:0 | DoubleSupplier | -| file://:0:0:0:0 | DoubleToIntFunction | -| file://:0:0:0:0 | DoubleToLongFunction | -| file://:0:0:0:0 | DoubleUnaryOperator | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | Era | -| file://:0:0:0:0 | Executor | -| file://:0:0:0:0 | ExecutorService | -| file://:0:0:0:0 | FieldAccessor | -| file://:0:0:0:0 | FieldDelegate | -| file://:0:0:0:0 | FieldTypeSignature | -| file://:0:0:0:0 | FileAttribute | -| file://:0:0:0:0 | FileAttribute | -| file://:0:0:0:0 | FileAttributeView | -| file://:0:0:0:0 | FileFilter | -| file://:0:0:0:0 | FileNameMap | -| file://:0:0:0:0 | FileStoreAttributeView | -| file://:0:0:0:0 | FilenameFilter | -| file://:0:0:0:0 | Filter | -| file://:0:0:0:0 | Filter | -| file://:0:0:0:0 | FilterInfo | -| file://:0:0:0:0 | Flushable | -| file://:0:0:0:0 | ForkJoinWorkerThreadFactory | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function | -| file://:0:0:0:0 | Function1 | -| file://:0:0:0:0 | Function1 | -| file://:0:0:0:0 | Function1 | -| file://:0:0:0:0 | Function1 | -| file://:0:0:0:0 | Function1 | -| file://:0:0:0:0 | Function1 | -| file://:0:0:0:0 | Function1 | -| file://:0:0:0:0 | Function1 | -| file://:0:0:0:0 | Function1 | -| file://:0:0:0:0 | Function1 | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | Future | -| file://:0:0:0:0 | GatheringByteChannel | -| file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | GenericsFactory | -| file://:0:0:0:0 | GroupPrincipal | -| file://:0:0:0:0 | Guard | -| file://:0:0:0:0 | InetAddressImpl | -| file://:0:0:0:0 | IntBinaryOperator | -| file://:0:0:0:0 | IntConsumer | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntFunction | -| file://:0:0:0:0 | IntPredicate | -| file://:0:0:0:0 | IntStream | -| file://:0:0:0:0 | IntSupplier | -| file://:0:0:0:0 | IntToDoubleFunction | -| file://:0:0:0:0 | IntToLongFunction | -| file://:0:0:0:0 | IntUnaryOperator | -| file://:0:0:0:0 | Interruptible | -| file://:0:0:0:0 | InterruptibleChannel | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | Key | -| file://:0:0:0:0 | Kind | -| file://:0:0:0:0 | Kind | -| file://:0:0:0:0 | Kind | -| file://:0:0:0:0 | LangReflectAccess | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | List | -| file://:0:0:0:0 | ListIterator | -| file://:0:0:0:0 | ListIterator | -| file://:0:0:0:0 | ListIterator | -| file://:0:0:0:0 | ListIterator | -| file://:0:0:0:0 | ListIterator | -| file://:0:0:0:0 | ListIterator | -| file://:0:0:0:0 | ListIterator | -| file://:0:0:0:0 | ListIterator | -| file://:0:0:0:0 | Lock | -| file://:0:0:0:0 | LongBinaryOperator | -| file://:0:0:0:0 | LongConsumer | -| file://:0:0:0:0 | LongFunction | -| file://:0:0:0:0 | LongFunction | -| file://:0:0:0:0 | LongFunction | -| file://:0:0:0:0 | LongPredicate | -| file://:0:0:0:0 | LongStream | -| file://:0:0:0:0 | LongSupplier | -| file://:0:0:0:0 | LongToDoubleFunction | -| file://:0:0:0:0 | LongToIntFunction | -| file://:0:0:0:0 | LongUnaryOperator | -| file://:0:0:0:0 | ManagedBlocker | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Member | -| file://:0:0:0:0 | MethodAccessor | -| file://:0:0:0:0 | Modifier | -| file://:0:0:0:0 | ModuleFinder | -| file://:0:0:0:0 | ModuleReader | -| file://:0:0:0:0 | MutableCollection | -| file://:0:0:0:0 | MutableEntry | -| file://:0:0:0:0 | MutableIterable | -| file://:0:0:0:0 | MutableIterator | -| file://:0:0:0:0 | MutableList | -| file://:0:0:0:0 | MutableListIterator | -| file://:0:0:0:0 | MutableMap | -| file://:0:0:0:0 | MutableSet | -| file://:0:0:0:0 | ObjDoubleConsumer | -| file://:0:0:0:0 | ObjDoubleConsumer | -| file://:0:0:0:0 | ObjIntConsumer | -| file://:0:0:0:0 | ObjIntConsumer | -| file://:0:0:0:0 | ObjLongConsumer | -| file://:0:0:0:0 | ObjLongConsumer | -| file://:0:0:0:0 | ObjectInput | -| file://:0:0:0:0 | ObjectInputFilter | -| file://:0:0:0:0 | ObjectInputValidation | -| file://:0:0:0:0 | ObjectOutput | -| file://:0:0:0:0 | ObjectStreamConstants | -| file://:0:0:0:0 | OfDouble | -| file://:0:0:0:0 | OfDouble | -| file://:0:0:0:0 | OfInt | -| file://:0:0:0:0 | OfInt | -| file://:0:0:0:0 | OfLong | -| file://:0:0:0:0 | OfLong | -| file://:0:0:0:0 | OfPrimitive | -| file://:0:0:0:0 | OfPrimitive | -| file://:0:0:0:0 | OfPrimitive | -| file://:0:0:0:0 | OfPrimitive | -| file://:0:0:0:0 | OpenOption | -| file://:0:0:0:0 | ParameterizedType | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | PathMatcher | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | Predicate | -| file://:0:0:0:0 | PrimitiveIterator | -| file://:0:0:0:0 | PrimitiveIterator | -| file://:0:0:0:0 | PrimitiveIterator | -| file://:0:0:0:0 | PrimitiveIterator | -| file://:0:0:0:0 | Principal | -| file://:0:0:0:0 | PrivilegedAction | -| file://:0:0:0:0 | PrivilegedAction | -| file://:0:0:0:0 | PrivilegedAction | -| file://:0:0:0:0 | PrivilegedAction | -| file://:0:0:0:0 | PrivilegedExceptionAction | -| file://:0:0:0:0 | PrivilegedExceptionAction | -| file://:0:0:0:0 | PrivilegedExceptionAction | -| file://:0:0:0:0 | PublicKey | -| file://:0:0:0:0 | Queue | -| file://:0:0:0:0 | Queue | -| file://:0:0:0:0 | RandomAccess | -| file://:0:0:0:0 | Readable | -| file://:0:0:0:0 | ReadableByteChannel | -| file://:0:0:0:0 | ReturnType | -| file://:0:0:0:0 | Runnable | -| file://:0:0:0:0 | RunnableFuture | -| file://:0:0:0:0 | RunnableFuture | -| file://:0:0:0:0 | RunnableFuture | -| file://:0:0:0:0 | RunnableFuture | -| file://:0:0:0:0 | RunnableFuture | -| file://:0:0:0:0 | RunnableFuture | -| file://:0:0:0:0 | RunnableFuture | -| file://:0:0:0:0 | RunnableFuture | -| file://:0:0:0:0 | ScatteringByteChannel | -| file://:0:0:0:0 | SeekableByteChannel | -| file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Set | -| file://:0:0:0:0 | Signature | -| file://:0:0:0:0 | SortedMap | -| file://:0:0:0:0 | SortedMap | -| file://:0:0:0:0 | SortedMap | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | StackFrame | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Stream | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Supplier | -| file://:0:0:0:0 | Temporal | -| file://:0:0:0:0 | TemporalAccessor | -| file://:0:0:0:0 | TemporalAdjuster | -| file://:0:0:0:0 | TemporalAmount | -| file://:0:0:0:0 | TemporalField | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalQuery | -| file://:0:0:0:0 | TemporalUnit | -| file://:0:0:0:0 | ThreadFactory | -| file://:0:0:0:0 | ToDoubleBiFunction | -| file://:0:0:0:0 | ToDoubleBiFunction | -| file://:0:0:0:0 | ToDoubleBiFunction | -| file://:0:0:0:0 | ToDoubleFunction | -| file://:0:0:0:0 | ToDoubleFunction | -| file://:0:0:0:0 | ToDoubleFunction | -| file://:0:0:0:0 | ToDoubleFunction | -| file://:0:0:0:0 | ToDoubleFunction | -| file://:0:0:0:0 | ToDoubleFunction | -| file://:0:0:0:0 | ToDoubleFunction | -| file://:0:0:0:0 | ToDoubleFunction | -| file://:0:0:0:0 | ToDoubleFunction | -| file://:0:0:0:0 | ToDoubleFunction | -| file://:0:0:0:0 | ToIntBiFunction | -| file://:0:0:0:0 | ToIntBiFunction | -| file://:0:0:0:0 | ToIntBiFunction | -| file://:0:0:0:0 | ToIntFunction | -| file://:0:0:0:0 | ToIntFunction | -| file://:0:0:0:0 | ToIntFunction | -| file://:0:0:0:0 | ToIntFunction | -| file://:0:0:0:0 | ToIntFunction | -| file://:0:0:0:0 | ToIntFunction | -| file://:0:0:0:0 | ToIntFunction | -| file://:0:0:0:0 | ToIntFunction | -| file://:0:0:0:0 | ToIntFunction | -| file://:0:0:0:0 | ToIntFunction | -| file://:0:0:0:0 | ToLongBiFunction | -| file://:0:0:0:0 | ToLongBiFunction | -| file://:0:0:0:0 | ToLongBiFunction | -| file://:0:0:0:0 | ToLongFunction | -| file://:0:0:0:0 | ToLongFunction | -| file://:0:0:0:0 | ToLongFunction | -| file://:0:0:0:0 | ToLongFunction | -| file://:0:0:0:0 | ToLongFunction | -| file://:0:0:0:0 | ToLongFunction | -| file://:0:0:0:0 | ToLongFunction | -| file://:0:0:0:0 | ToLongFunction | -| file://:0:0:0:0 | ToLongFunction | -| file://:0:0:0:0 | ToLongFunction | -| file://:0:0:0:0 | Tree | -| file://:0:0:0:0 | Type | -| file://:0:0:0:0 | TypeArgument | -| file://:0:0:0:0 | TypeSignature | -| file://:0:0:0:0 | TypeTree | -| file://:0:0:0:0 | TypeTreeVisitor | -| file://:0:0:0:0 | TypeTreeVisitor | -| file://:0:0:0:0 | TypeTreeVisitor | -| file://:0:0:0:0 | TypeTreeVisitor | -| file://:0:0:0:0 | TypeVariable | -| file://:0:0:0:0 | TypeVariable | -| file://:0:0:0:0 | TypeVariable | -| file://:0:0:0:0 | TypeVariable | -| file://:0:0:0:0 | TypeVariable | -| file://:0:0:0:0 | URLStreamHandlerFactory | -| file://:0:0:0:0 | UnaryOperator | -| file://:0:0:0:0 | UnaryOperator | -| file://:0:0:0:0 | UnaryOperator | -| file://:0:0:0:0 | UnaryOperator | -| file://:0:0:0:0 | UnaryOperator | -| file://:0:0:0:0 | UnaryOperator | -| file://:0:0:0:0 | UnaryOperator | -| file://:0:0:0:0 | UnaryOperator | -| file://:0:0:0:0 | UnaryOperator | -| file://:0:0:0:0 | UncaughtExceptionHandler | -| file://:0:0:0:0 | UserPrincipal | -| file://:0:0:0:0 | Visitor | -| file://:0:0:0:0 | Visitor | -| file://:0:0:0:0 | WatchEvent | -| file://:0:0:0:0 | WatchEvent | -| file://:0:0:0:0 | WatchKey | -| file://:0:0:0:0 | WatchService | -| file://:0:0:0:0 | Watchable | -| file://:0:0:0:0 | WildcardType | -| file://:0:0:0:0 | WritableByteChannel | diff --git a/java/ql/test/kotlin/library-tests/classes/interfaces.ql b/java/ql/test/kotlin/library-tests/classes/interfaces.ql index c19787d387b..2591d5574a7 100644 --- a/java/ql/test/kotlin/library-tests/classes/interfaces.ql +++ b/java/ql/test/kotlin/library-tests/classes/interfaces.ql @@ -1,5 +1,6 @@ import java from Interface i +where i.fromSource() select i diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.expected b/java/ql/test/kotlin/library-tests/classes/superTypes.expected index 425b55f5953..107992da9c2 100644 --- a/java/ql/test/kotlin/library-tests/classes/superTypes.expected +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.expected @@ -7,2540 +7,3 @@ | classes.kt:28:1:30:1 | ClassSix | classes.kt:20:1:22:1 | IF1 | | classes.kt:28:1:30:1 | ClassSix | classes.kt:24:1:26:1 | IF2 | | classes.kt:34:1:47:1 | ClassSeven | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | AbstractChronology | file://:0:0:0:0 | Chronology | -| file://:0:0:0:0 | AbstractCollection | file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | AbstractCollection | file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | AbstractCollection | file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | AbstractExecutorService | file://:0:0:0:0 | ExecutorService | -| file://:0:0:0:0 | AbstractInterruptibleChannel | file://:0:0:0:0 | Channel | -| file://:0:0:0:0 | AbstractInterruptibleChannel | file://:0:0:0:0 | InterruptibleChannel | -| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | AbstractCollection | -| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | AbstractCollection | -| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | AbstractCollection | -| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | List | -| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | List | -| file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | List | -| file://:0:0:0:0 | AbstractMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | AbstractMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | AbstractMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | AbstractOwnableSynchronizer | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | AbstractQueuedSynchronizer | file://:0:0:0:0 | AbstractOwnableSynchronizer | -| file://:0:0:0:0 | AbstractQueuedSynchronizer | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | AbstractRepository | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | AbstractRepository | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | AbstractSet | file://:0:0:0:0 | AbstractCollection | -| file://:0:0:0:0 | AbstractSet | file://:0:0:0:0 | AbstractCollection | -| file://:0:0:0:0 | AbstractSet | file://:0:0:0:0 | Set | -| file://:0:0:0:0 | AbstractSet | file://:0:0:0:0 | Set | -| file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | Appendable | -| file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | CharSequence | -| file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | AccessDescriptor | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | AccessType | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | AccessibleObject | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | AdaptedCallable | file://:0:0:0:0 | ForkJoinTask | -| file://:0:0:0:0 | AdaptedCallable | file://:0:0:0:0 | RunnableFuture | -| file://:0:0:0:0 | AdaptedRunnable | file://:0:0:0:0 | ForkJoinTask | -| file://:0:0:0:0 | AdaptedRunnable | file://:0:0:0:0 | RunnableFuture | -| file://:0:0:0:0 | AdaptedRunnableAction | file://:0:0:0:0 | ForkJoinTask | -| file://:0:0:0:0 | AdaptedRunnableAction | file://:0:0:0:0 | RunnableFuture | -| file://:0:0:0:0 | AnnotationType | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | AnnotationVisitor | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Array | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | file://:0:0:0:0 | IndexOutOfBoundsException | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | AbstractList | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | AbstractList | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | AbstractList | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | List | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | List | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | List | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | RandomAccess | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | RandomAccess | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | RandomAccess | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ArrayListSpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | ArrayListSpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | ArrayTypeSignature | file://:0:0:0:0 | FieldTypeSignature | -| file://:0:0:0:0 | AsynchronousFileChannel | file://:0:0:0:0 | AsynchronousChannel | -| file://:0:0:0:0 | AtomicInteger | file://:0:0:0:0 | Number | -| file://:0:0:0:0 | AtomicInteger | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Attribute | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Attribute | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | BasicPermission | -| file://:0:0:0:0 | AuthPermissionHolder | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | BaseIterator | file://:0:0:0:0 | Traverser | -| file://:0:0:0:0 | BaseIterator | file://:0:0:0:0 | Traverser | -| file://:0:0:0:0 | BaseIterator | file://:0:0:0:0 | Traverser | -| file://:0:0:0:0 | BaseIterator | file://:0:0:0:0 | Traverser | -| file://:0:0:0:0 | BaseLocale | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | BasicPermission | file://:0:0:0:0 | Permission | -| file://:0:0:0:0 | BasicPermission | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | BasicType | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | Number | -| file://:0:0:0:0 | Boolean | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Boolean | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Boolean | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Boolean | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | BooleanSignature | file://:0:0:0:0 | BaseType | -| file://:0:0:0:0 | BottomSignature | file://:0:0:0:0 | FieldTypeSignature | -| file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | MethodHandle | -| file://:0:0:0:0 | Buffer | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | BufferedWriter | file://:0:0:0:0 | Writer | -| file://:0:0:0:0 | Builder | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Builder | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | Buffer | -| file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | ByteIterator | file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | ByteOrder | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ByteSignature | file://:0:0:0:0 | BaseType | -| file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | CallSite | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | CaseInsensitiveChar | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | CaseInsensitiveString | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Category | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | CertPath | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | CertPathRep | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Certificate | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | CertificateRep | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Char | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Char | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | CharArray | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | CharArray | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | CharArray | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | Appendable | -| file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | Buffer | -| file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | CharSequence | -| file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | Readable | -| file://:0:0:0:0 | CharIterator | file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | CharProgression | file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | CharRange | file://:0:0:0:0 | CharProgression | -| file://:0:0:0:0 | CharRange | file://:0:0:0:0 | ClosedRange | -| file://:0:0:0:0 | CharSignature | file://:0:0:0:0 | BaseType | -| file://:0:0:0:0 | Character | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Character | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Characteristics | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Charset | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | CharsetDecoder | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | CharsetEncoder | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | TemporalField | -| file://:0:0:0:0 | ChronoUnit | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | ChronoUnit | file://:0:0:0:0 | TemporalUnit | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | Class | file://:0:0:0:0 | Type | -| file://:0:0:0:0 | ClassDataSlot | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassNotFoundException | file://:0:0:0:0 | ReflectiveOperationException | -| file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassSignature | file://:0:0:0:0 | Signature | -| file://:0:0:0:0 | ClassSpecializer | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassSpecializer | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassSpecializer | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassTypeSignature | file://:0:0:0:0 | FieldTypeSignature | -| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassValueMap | file://:0:0:0:0 | WeakHashMap | -| file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | ClassVisitor | -| file://:0:0:0:0 | ClassicFormat | file://:0:0:0:0 | Format | -| file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | CleanerCleanable | file://:0:0:0:0 | PhantomCleanable | -| file://:0:0:0:0 | CleanerImpl | file://:0:0:0:0 | Runnable | -| file://:0:0:0:0 | Clock | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | CodeSigner | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | CodeSource | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | CoderResult | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | CollectionView | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Companion | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Compiled | file://:0:0:0:0 | Annotation | -| file://:0:0:0:0 | CompositePrinterParser | file://:0:0:0:0 | DateTimePrinterParser | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | ConcurrentMap | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ConcurrentWeakInternSet | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ConcurrentWeakInternSet | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | Condition | -| file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Config | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Configuration | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ConstantPool | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | Constructor | file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | ConstructorRepository | file://:0:0:0:0 | GenericDeclRepository | -| file://:0:0:0:0 | ContentHandler | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Controller | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | ForkJoinTask | -| file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | ForkJoinTask | -| file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | ForkJoinTask | -| file://:0:0:0:0 | CounterCell | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Date | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Date | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Date | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | DateTimeParseContext | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | DateTimePrintContext | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | TemporalAccessor | -| file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | TemporalAdjuster | -| file://:0:0:0:0 | Debug | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | DecimalStyle | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Dictionary | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Dictionary | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Double | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Double | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Double | file://:0:0:0:0 | Number | -| file://:0:0:0:0 | Double | file://:0:0:0:0 | Number | -| file://:0:0:0:0 | Double | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | DoubleBuffer | file://:0:0:0:0 | Buffer | -| file://:0:0:0:0 | DoubleBuffer | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | DoubleIterator | file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | DoubleSignature | file://:0:0:0:0 | BaseType | -| file://:0:0:0:0 | DoubleSummaryStatistics | file://:0:0:0:0 | DoubleConsumer | -| file://:0:0:0:0 | Duration | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Duration | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Duration | file://:0:0:0:0 | TemporalAmount | -| file://:0:0:0:0 | Edge | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Entry | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | EntryIterator | file://:0:0:0:0 | BaseIterator | -| file://:0:0:0:0 | EntryIterator | file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | EntrySetView | file://:0:0:0:0 | CollectionView | -| file://:0:0:0:0 | EntrySetView | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EntrySetView | file://:0:0:0:0 | Set | -| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Traverser | -| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | Traverser | -| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | -| file://:0:0:0:0 | EntrySpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Enum | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Exception | file://:0:0:0:0 | Throwable | -| file://:0:0:0:0 | ExceptionNode | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | Executable | file://:0:0:0:0 | AccessibleObject | -| file://:0:0:0:0 | Executable | file://:0:0:0:0 | GenericDeclaration | -| file://:0:0:0:0 | Executable | file://:0:0:0:0 | Member | -| file://:0:0:0:0 | Exports | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | ExtendedOption | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Extension | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Factory | file://:0:0:0:0 | Factory | -| file://:0:0:0:0 | Factory | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Factory | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Factory | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Factory | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | FairSync | file://:0:0:0:0 | Sync | -| file://:0:0:0:0 | Field | file://:0:0:0:0 | AccessibleObject | -| file://:0:0:0:0 | Field | file://:0:0:0:0 | Attribute | -| file://:0:0:0:0 | Field | file://:0:0:0:0 | Member | -| file://:0:0:0:0 | FieldPosition | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | FieldVisitor | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | FieldWriter | file://:0:0:0:0 | FieldVisitor | -| file://:0:0:0:0 | File | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | File | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | FileChannel | file://:0:0:0:0 | AbstractInterruptibleChannel | -| file://:0:0:0:0 | FileChannel | file://:0:0:0:0 | GatheringByteChannel | -| file://:0:0:0:0 | FileChannel | file://:0:0:0:0 | ScatteringByteChannel | -| file://:0:0:0:0 | FileChannel | file://:0:0:0:0 | SeekableByteChannel | -| file://:0:0:0:0 | FileDescriptor | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | FileLock | file://:0:0:0:0 | AutoCloseable | -| file://:0:0:0:0 | FileStore | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | FileSystem | file://:0:0:0:0 | Closeable | -| file://:0:0:0:0 | FileSystemProvider | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | FileTime | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | FilterOutputStream | file://:0:0:0:0 | OutputStream | -| file://:0:0:0:0 | FilterValues | file://:0:0:0:0 | FilterInfo | -| file://:0:0:0:0 | FilteringMode | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | FixedClock | file://:0:0:0:0 | Clock | -| file://:0:0:0:0 | FixedClock | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | FloatBuffer | file://:0:0:0:0 | Buffer | -| file://:0:0:0:0 | FloatBuffer | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | FloatIterator | file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | FloatSignature | file://:0:0:0:0 | BaseType | -| file://:0:0:0:0 | ForEachEntryTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ForEachKeyTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ForEachMappingTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ForEachTransformedEntryTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ForEachTransformedKeyTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ForEachTransformedMappingTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ForEachTransformedValueTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ForEachValueTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | AbstractExecutorService | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Future | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ForkJoinWorkerThread | file://:0:0:0:0 | Thread | -| file://:0:0:0:0 | FormalTypeParameter | file://:0:0:0:0 | TypeTree | -| file://:0:0:0:0 | Format | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Format | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | ForwardingNode | file://:0:0:0:0 | Node | -| file://:0:0:0:0 | Frame | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | GenericDeclRepository | file://:0:0:0:0 | AbstractRepository | -| file://:0:0:0:0 | GenericDeclRepository | file://:0:0:0:0 | AbstractRepository | -| file://:0:0:0:0 | GetField | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | GetReflectionFactoryAction | file://:0:0:0:0 | PrivilegedAction | -| file://:0:0:0:0 | Global | file://:0:0:0:0 | ObjectInputFilter | -| file://:0:0:0:0 | Handle | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Dictionary | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Dictionary | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Dictionary | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Dictionary | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Hidden | file://:0:0:0:0 | Annotation | -| file://:0:0:0:0 | IOException | file://:0:0:0:0 | Exception | -| file://:0:0:0:0 | Identity | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | IllegalAccessException | file://:0:0:0:0 | ReflectiveOperationException | -| file://:0:0:0:0 | IllegalArgumentException | file://:0:0:0:0 | RuntimeException | -| file://:0:0:0:0 | IndexOutOfBoundsException | file://:0:0:0:0 | RuntimeException | -| file://:0:0:0:0 | InetAddress | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | InetAddressHolder | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | InnocuousForkJoinWorkerThread | file://:0:0:0:0 | ForkJoinWorkerThread | -| file://:0:0:0:0 | InnocuousThreadFactory | file://:0:0:0:0 | ThreadFactory | -| file://:0:0:0:0 | InputStream | file://:0:0:0:0 | Closeable | -| file://:0:0:0:0 | Instant | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Instant | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Instant | file://:0:0:0:0 | Temporal | -| file://:0:0:0:0 | Instant | file://:0:0:0:0 | TemporalAdjuster | -| file://:0:0:0:0 | Int | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Int | file://:0:0:0:0 | Number | -| file://:0:0:0:0 | Int | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | IntArray | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | IntArray | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | IntArray | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | IntBuffer | file://:0:0:0:0 | Buffer | -| file://:0:0:0:0 | IntBuffer | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | IntIterator | file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | IntProgression | file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | IntRange | file://:0:0:0:0 | ClosedRange | -| file://:0:0:0:0 | IntRange | file://:0:0:0:0 | IntProgression | -| file://:0:0:0:0 | IntSignature | file://:0:0:0:0 | BaseType | -| file://:0:0:0:0 | IntSummaryStatistics | file://:0:0:0:0 | IntConsumer | -| file://:0:0:0:0 | Integer | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Integer | file://:0:0:0:0 | Number | -| file://:0:0:0:0 | InterfaceAddress | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Intrinsic | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Invokers | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | IsoChronology | file://:0:0:0:0 | AbstractChronology | -| file://:0:0:0:0 | IsoChronology | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | IsoCountryCode | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | IsoEra | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | IsoEra | file://:0:0:0:0 | Era | -| file://:0:0:0:0 | Item | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Key | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | KeyIterator | file://:0:0:0:0 | BaseIterator | -| file://:0:0:0:0 | KeyIterator | file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | KeyIterator | file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | CollectionView | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | CollectionView | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | CollectionView | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | CollectionView | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Set | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Set | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Set | -| file://:0:0:0:0 | KeySetView | file://:0:0:0:0 | Set | -| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Traverser | -| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | Traverser | -| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | -| file://:0:0:0:0 | KeySpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | -| file://:0:0:0:0 | Kind | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Label | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | LambdaFormEditor | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | LanguageRange | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Level | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | LineReader | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | LinkOption | file://:0:0:0:0 | CopyOption | -| file://:0:0:0:0 | LinkOption | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | LinkOption | file://:0:0:0:0 | OpenOption | -| file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | ChronoLocalDate | -| file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | Temporal | -| file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | TemporalAdjuster | -| file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | ChronoLocalDateTime | -| file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | Temporal | -| file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | TemporalAdjuster | -| file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | Temporal | -| file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | TemporalAdjuster | -| file://:0:0:0:0 | Locale | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | Locale | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | LocaleExtensions | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Long | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Long | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Long | file://:0:0:0:0 | Number | -| file://:0:0:0:0 | Long | file://:0:0:0:0 | Number | -| file://:0:0:0:0 | Long | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | LongArray | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | LongArray | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | LongArray | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | LongBuffer | file://:0:0:0:0 | Buffer | -| file://:0:0:0:0 | LongBuffer | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | LongIterator | file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | LongProgression | file://:0:0:0:0 | Iterable | -| file://:0:0:0:0 | LongRange | file://:0:0:0:0 | ClosedRange | -| file://:0:0:0:0 | LongRange | file://:0:0:0:0 | LongProgression | -| file://:0:0:0:0 | LongSignature | file://:0:0:0:0 | BaseType | -| file://:0:0:0:0 | LongSummaryStatistics | file://:0:0:0:0 | IntConsumer | -| file://:0:0:0:0 | LongSummaryStatistics | file://:0:0:0:0 | LongConsumer | -| file://:0:0:0:0 | MapEntry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | MapMode | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | MapReduceEntriesTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceEntriesTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceEntriesToIntTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceEntriesToIntTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceEntriesToLongTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceEntriesToLongTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceKeysTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceKeysTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceKeysToDoubleTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceKeysToDoubleTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceKeysToIntTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceKeysToIntTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceKeysToLongTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceKeysToLongTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceMappingsTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceMappingsTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceMappingsToIntTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceMappingsToIntTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceMappingsToLongTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceMappingsToLongTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceValuesTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceValuesTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceValuesToDoubleTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceValuesToDoubleTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceValuesToIntTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceValuesToIntTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceValuesToLongTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MapReduceValuesToLongTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | MappedByteBuffer | file://:0:0:0:0 | ByteBuffer | -| file://:0:0:0:0 | MemberName | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | MemberName | file://:0:0:0:0 | Member | -| file://:0:0:0:0 | Method | file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | MethodRepository | file://:0:0:0:0 | ConstructorRepository | -| file://:0:0:0:0 | MethodType | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | MethodTypeForm | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | MethodTypeSignature | file://:0:0:0:0 | Signature | -| file://:0:0:0:0 | MethodVisitor | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | MethodWriter | file://:0:0:0:0 | MethodVisitor | -| file://:0:0:0:0 | Modifier | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Modifier | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Modifier | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Modifier | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Module | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | ModuleDescriptor | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | ModuleLayer | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ModuleReference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ModuleVisitor | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Month | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Month | file://:0:0:0:0 | TemporalAccessor | -| file://:0:0:0:0 | Month | file://:0:0:0:0 | TemporalAdjuster | -| file://:0:0:0:0 | Name | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | NamedFunction | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | NamedPackage | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | NativeLibrary | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | NestHost | file://:0:0:0:0 | Attribute | -| file://:0:0:0:0 | NestMembers | file://:0:0:0:0 | Attribute | -| file://:0:0:0:0 | NetworkInterface | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Node | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | NonfairSync | file://:0:0:0:0 | Sync | -| file://:0:0:0:0 | Number | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Number | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Number | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | InputStream | -| file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | ObjectInput | -| file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | ObjectStreamConstants | -| file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | ObjectOutput | -| file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | ObjectStreamConstants | -| file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | OutputStream | -| file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ObjectStreamException | file://:0:0:0:0 | IOException | -| file://:0:0:0:0 | ObjectStreamField | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | OffsetClock | file://:0:0:0:0 | Clock | -| file://:0:0:0:0 | OffsetClock | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | Temporal | -| file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | TemporalAdjuster | -| file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | Temporal | -| file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | TemporalAdjuster | -| file://:0:0:0:0 | Opens | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Option | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Optional | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | OptionalDataException | file://:0:0:0:0 | ObjectStreamException | -| file://:0:0:0:0 | OptionalDouble | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | OptionalInt | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | OptionalLong | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | Closeable | -| file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | Flushable | -| file://:0:0:0:0 | Package | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | Package | file://:0:0:0:0 | NamedPackage | -| file://:0:0:0:0 | Parameter | file://:0:0:0:0 | AnnotatedElement | -| file://:0:0:0:0 | ParsePosition | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Parsed | file://:0:0:0:0 | TemporalAccessor | -| file://:0:0:0:0 | Period | file://:0:0:0:0 | ChronoPeriod | -| file://:0:0:0:0 | Period | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Permission | file://:0:0:0:0 | Guard | -| file://:0:0:0:0 | Permission | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | PermissionCollection | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | PhantomReference | -| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | PhantomReference | -| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | PhantomReference | -| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | PhantomReference | -| file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | PhantomReference | -| file://:0:0:0:0 | PhantomCleanableRef | file://:0:0:0:0 | PhantomCleanable | -| file://:0:0:0:0 | PhantomReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | PhantomReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | PolymorphicSignature | file://:0:0:0:0 | Annotation | -| file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | Appendable | -| file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | Closeable | -| file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | FilterOutputStream | -| file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | Writer | -| file://:0:0:0:0 | Properties | file://:0:0:0:0 | Hashtable | -| file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Provider | file://:0:0:0:0 | Properties | -| file://:0:0:0:0 | Provides | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Proxy | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | PutField | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Random | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | RandomAccessSpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | RandomDoublesSpliterator | file://:0:0:0:0 | OfDouble | -| file://:0:0:0:0 | RandomIntsSpliterator | file://:0:0:0:0 | OfInt | -| file://:0:0:0:0 | RandomLongsSpliterator | file://:0:0:0:0 | OfLong | -| file://:0:0:0:0 | Reader | file://:0:0:0:0 | Closeable | -| file://:0:0:0:0 | Reader | file://:0:0:0:0 | Readable | -| file://:0:0:0:0 | ReduceEntriesTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ReduceEntriesTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ReduceKeysTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ReduceKeysTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ReduceValuesTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ReduceValuesTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | Lock | -| file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Reference | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ReflectiveOperationException | file://:0:0:0:0 | Exception | -| file://:0:0:0:0 | Reifier | file://:0:0:0:0 | TypeTreeVisitor | -| file://:0:0:0:0 | Requires | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | ReservationNode | file://:0:0:0:0 | Node | -| file://:0:0:0:0 | ResolvedModule | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | RetentionPolicy | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | RunnableExecuteAction | file://:0:0:0:0 | ForkJoinTask | -| file://:0:0:0:0 | RuntimeException | file://:0:0:0:0 | Exception | -| file://:0:0:0:0 | RuntimePermission | file://:0:0:0:0 | BasicPermission | -| file://:0:0:0:0 | SearchEntriesTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | SearchKeysTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | SearchMappingsTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | SearchValuesTask | file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | Segment | file://:0:0:0:0 | ReentrantLock | -| file://:0:0:0:0 | Segment | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | BasicPermission | -| file://:0:0:0:0 | Service | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ServiceProvider | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ServicesCatalog | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | Cloneable | -| file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ShortBuffer | file://:0:0:0:0 | Buffer | -| file://:0:0:0:0 | ShortBuffer | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | ShortIterator | file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | ShortSignature | file://:0:0:0:0 | BaseType | -| file://:0:0:0:0 | SimpleClassTypeSignature | file://:0:0:0:0 | FieldTypeSignature | -| file://:0:0:0:0 | SimpleEntry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | SimpleEntry | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | SimpleImmutableEntry | file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | SimpleImmutableEntry | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | SocketAddress | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | SoftReference | -| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | SoftReference | -| file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | SoftReference | -| file://:0:0:0:0 | SoftCleanableRef | file://:0:0:0:0 | SoftCleanable | -| file://:0:0:0:0 | SoftReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | SoftReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | SoftReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | SoftReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | Specializer | file://:0:0:0:0 | ClassSpecializer | -| file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | SpeciesData | -| file://:0:0:0:0 | StackFrameInfo | file://:0:0:0:0 | StackFrame | -| file://:0:0:0:0 | StackTraceElement | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | StackWalker | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | State | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Status | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | String | file://:0:0:0:0 | CharSequence | -| file://:0:0:0:0 | String | file://:0:0:0:0 | CharSequence | -| file://:0:0:0:0 | String | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | String | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | String | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | String | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | AbstractStringBuilder | -| file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | CharSequence | -| file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | AbstractStringBuilder | -| file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | CharSequence | -| file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Subject | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Subset | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | SuppliedThreadLocal | file://:0:0:0:0 | ThreadLocal | -| file://:0:0:0:0 | Sync | file://:0:0:0:0 | AbstractQueuedSynchronizer | -| file://:0:0:0:0 | SystemClock | file://:0:0:0:0 | Clock | -| file://:0:0:0:0 | SystemClock | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TableStack | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Tag | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Thread | file://:0:0:0:0 | Runnable | -| file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | UncaughtExceptionHandler | -| file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Throwable | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Throwable | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Throwable | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | TickClock | file://:0:0:0:0 | Clock | -| file://:0:0:0:0 | TickClock | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | TimeDefinition | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Timestamp | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | Traverser | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Traverser | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Traverser | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Traverser | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Traverser | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TreeBin | file://:0:0:0:0 | Node | -| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | -| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | -| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | -| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | -| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | -| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | -| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | -| file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | Node | -| file://:0:0:0:0 | Type | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Type | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TypePath | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | TypeVariableSignature | file://:0:0:0:0 | FieldTypeSignature | -| file://:0:0:0:0 | TypesAndInvokers | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | URI | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | URI | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | URL | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | URLConnection | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | URLStreamHandler | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | Subset | -| file://:0:0:0:0 | UnicodeScript | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Unloader | file://:0:0:0:0 | Runnable | -| file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | UserPrincipalLookupService | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ValueIterator | file://:0:0:0:0 | BaseIterator | -| file://:0:0:0:0 | ValueIterator | file://:0:0:0:0 | Enumeration | -| file://:0:0:0:0 | ValueIterator | file://:0:0:0:0 | Iterator | -| file://:0:0:0:0 | ValueRange | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Spliterator | -| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Traverser | -| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | Traverser | -| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | -| file://:0:0:0:0 | ValueSpliterator | file://:0:0:0:0 | WeakHashMapSpliterator | -| file://:0:0:0:0 | ValuesView | file://:0:0:0:0 | Collection | -| file://:0:0:0:0 | ValuesView | file://:0:0:0:0 | CollectionView | -| file://:0:0:0:0 | ValuesView | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | VarForm | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Version | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | Version | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Version | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Version | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Version | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | VersionInfo | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Void | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | VoidDescriptor | file://:0:0:0:0 | ReturnType | -| file://:0:0:0:0 | WeakClassKey | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | WeakClassKey | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | Cleanable | -| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | WeakCleanableRef | file://:0:0:0:0 | WeakCleanable | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | Map | -| file://:0:0:0:0 | WeakHashMapSpliterator | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | WeakHashMapSpliterator | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | WeakHashMapSpliterator | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | WeakHashMapSpliterator | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | WeakReference | file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | Wildcard | file://:0:0:0:0 | TypeArgument | -| file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | Object | -| file://:0:0:0:0 | Wrapper | file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Writer | file://:0:0:0:0 | Appendable | -| file://:0:0:0:0 | Writer | file://:0:0:0:0 | Closeable | -| file://:0:0:0:0 | Writer | file://:0:0:0:0 | Flushable | -| file://:0:0:0:0 | WrongMethodTypeException | file://:0:0:0:0 | RuntimeException | -| file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | TemporalAccessor | -| file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | TemporalAdjuster | -| file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | ZoneId | -| file://:0:0:0:0 | ZoneOffsetTransition | file://:0:0:0:0 | Comparable | -| file://:0:0:0:0 | ZoneOffsetTransition | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ZoneOffsetTransitionRule | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ZoneRules | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ZonedDateTime | file://:0:0:0:0 | ChronoZonedDateTime | -| file://:0:0:0:0 | ZonedDateTime | file://:0:0:0:0 | Serializable | -| file://:0:0:0:0 | ZonedDateTime | file://:0:0:0:0 | Temporal | diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.ql b/java/ql/test/kotlin/library-tests/classes/superTypes.ql index b98771b0e8e..dbf47b53424 100644 --- a/java/ql/test/kotlin/library-tests/classes/superTypes.ql +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.ql @@ -1,5 +1,6 @@ import java from Class c +where c.fromSource() select c, c.getASupertype() diff --git a/java/ql/test/kotlin/library-tests/methods/methods.expected b/java/ql/test/kotlin/library-tests/methods/methods.expected index 4a06e13f8d7..d1f757b10d4 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.expected +++ b/java/ql/test/kotlin/library-tests/methods/methods.expected @@ -1,13922 +1,4 @@ methods -| file://:0:0:0:0 | Help | -| file://:0:0:0:0 | UTC | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abnormalCompletion | -| file://:0:0:0:0 | abs | -| file://:0:0:0:0 | abs | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | accept | -| file://:0:0:0:0 | access$000 | -| file://:0:0:0:0 | accessModeType | -| file://:0:0:0:0 | accessModeType | -| file://:0:0:0:0 | accessModeTypeUncached | -| file://:0:0:0:0 | accumulateAndGet | -| file://:0:0:0:0 | accumulateAndGet | -| file://:0:0:0:0 | accumulator | -| file://:0:0:0:0 | acquire | -| file://:0:0:0:0 | acquire | -| file://:0:0:0:0 | acquire | -| file://:0:0:0:0 | acquire | -| file://:0:0:0:0 | acquireFence | -| file://:0:0:0:0 | acquireInterruptibly | -| file://:0:0:0:0 | acquireInterruptibly | -| file://:0:0:0:0 | acquireInterruptibly | -| file://:0:0:0:0 | acquireInterruptibly | -| file://:0:0:0:0 | acquireQueued | -| file://:0:0:0:0 | acquireQueued | -| file://:0:0:0:0 | acquireQueued | -| file://:0:0:0:0 | acquireQueued | -| file://:0:0:0:0 | acquireShared | -| file://:0:0:0:0 | acquireShared | -| file://:0:0:0:0 | acquireShared | -| file://:0:0:0:0 | acquireShared | -| file://:0:0:0:0 | acquireSharedInterruptibly | -| file://:0:0:0:0 | acquireSharedInterruptibly | -| file://:0:0:0:0 | acquireSharedInterruptibly | -| file://:0:0:0:0 | acquireSharedInterruptibly | -| file://:0:0:0:0 | acquiredBy | -| file://:0:0:0:0 | activeCount | -| file://:0:0:0:0 | activeCount | -| file://:0:0:0:0 | activeCount | -| file://:0:0:0:0 | activeCount | -| file://:0:0:0:0 | activeGroupCount | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | adapt | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | add | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAll | -| file://:0:0:0:0 | addAndGet | -| file://:0:0:0:0 | addArgumentForm | -| file://:0:0:0:0 | addAttribute | -| file://:0:0:0:0 | addChronoChangedListener | -| file://:0:0:0:0 | addClass | -| file://:0:0:0:0 | addEntry | -| file://:0:0:0:0 | addEntry | -| file://:0:0:0:0 | addExports | -| file://:0:0:0:0 | addExports | -| file://:0:0:0:0 | addFieldValue | -| file://:0:0:0:0 | addFieldValue | -| file://:0:0:0:0 | addFirst | -| file://:0:0:0:0 | addLast | -| file://:0:0:0:0 | addOne | -| file://:0:0:0:0 | addOpens | -| file://:0:0:0:0 | addOpens | -| file://:0:0:0:0 | addProvider | -| file://:0:0:0:0 | addRange | -| file://:0:0:0:0 | addReads | -| file://:0:0:0:0 | addReads | -| file://:0:0:0:0 | addRequestProperty | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addSuppressed | -| file://:0:0:0:0 | addTo | -| file://:0:0:0:0 | addTo | -| file://:0:0:0:0 | addTo | -| file://:0:0:0:0 | addTo | -| file://:0:0:0:0 | addTo | -| file://:0:0:0:0 | addTo | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToPendingCount | -| file://:0:0:0:0 | addToSubroutine | -| file://:0:0:0:0 | addType | -| file://:0:0:0:0 | addUnicodeLocaleAttribute | -| file://:0:0:0:0 | addUninitializedType | -| file://:0:0:0:0 | addUnstarted | -| file://:0:0:0:0 | addUses | -| file://:0:0:0:0 | addWaiter | -| file://:0:0:0:0 | addWaiter | -| file://:0:0:0:0 | addWaiter | -| file://:0:0:0:0 | address | -| file://:0:0:0:0 | addressSize | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | adjustInto | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | advance | -| file://:0:0:0:0 | after | -| file://:0:0:0:0 | afterTopLevelExec | -| file://:0:0:0:0 | afterTopLevelExec | -| file://:0:0:0:0 | aliases | -| file://:0:0:0:0 | alignedSlice | -| file://:0:0:0:0 | alignedSlice | -| file://:0:0:0:0 | alignmentOffset | -| file://:0:0:0:0 | alignmentOffset | -| file://:0:0:0:0 | allMatch | -| file://:0:0:0:0 | allMatch | -| file://:0:0:0:0 | allMatch | -| file://:0:0:0:0 | allMatch | -| file://:0:0:0:0 | allOf | -| file://:0:0:0:0 | allocate | -| file://:0:0:0:0 | allocate | -| file://:0:0:0:0 | allocate | -| file://:0:0:0:0 | allocate | -| file://:0:0:0:0 | allocate | -| file://:0:0:0:0 | allocate | -| file://:0:0:0:0 | allocate | -| file://:0:0:0:0 | allocate | -| file://:0:0:0:0 | allocateDirect | -| file://:0:0:0:0 | allocateDirect | -| file://:0:0:0:0 | allocateInstance | -| file://:0:0:0:0 | allocateMemory | -| file://:0:0:0:0 | allocateUninitializedArray | -| file://:0:0:0:0 | allowThreadSuspension | -| file://:0:0:0:0 | and | -| file://:0:0:0:0 | and | -| file://:0:0:0:0 | and | -| file://:0:0:0:0 | and | -| file://:0:0:0:0 | and | -| file://:0:0:0:0 | and | -| file://:0:0:0:0 | and | -| file://:0:0:0:0 | and | -| file://:0:0:0:0 | andNot | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | andThen | -| file://:0:0:0:0 | annotateClass | -| file://:0:0:0:0 | annotateProxyClass | -| file://:0:0:0:0 | annotationType | -| file://:0:0:0:0 | anyLocalAddress | -| file://:0:0:0:0 | anyLocalAddress | -| file://:0:0:0:0 | anyMatch | -| file://:0:0:0:0 | anyMatch | -| file://:0:0:0:0 | anyMatch | -| file://:0:0:0:0 | anyMatch | -| file://:0:0:0:0 | apparentlyFirstQueuedIsExclusive | -| file://:0:0:0:0 | apparentlyFirstQueuedIsExclusive | -| file://:0:0:0:0 | apparentlyFirstQueuedIsExclusive | -| file://:0:0:0:0 | apparentlyFirstQueuedIsExclusive | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | append | -| file://:0:0:0:0 | appendChars | -| file://:0:0:0:0 | appendChars | -| file://:0:0:0:0 | appendChars | -| file://:0:0:0:0 | appendChars | -| file://:0:0:0:0 | appendClassSignature | -| file://:0:0:0:0 | appendCodePoint | -| file://:0:0:0:0 | appendCodePoint | -| file://:0:0:0:0 | appendCodePoint | -| file://:0:0:0:0 | appendNull | -| file://:0:0:0:0 | appendNull | -| file://:0:0:0:0 | appendParameterTypes | -| file://:0:0:0:0 | appendParameterTypes | -| file://:0:0:0:0 | apply | -| file://:0:0:0:0 | apply | -| file://:0:0:0:0 | apply | -| file://:0:0:0:0 | apply | -| file://:0:0:0:0 | apply | -| file://:0:0:0:0 | apply | -| file://:0:0:0:0 | apply | -| file://:0:0:0:0 | applyAsDouble | -| file://:0:0:0:0 | applyAsDouble | -| file://:0:0:0:0 | applyAsDouble | -| file://:0:0:0:0 | applyAsDouble | -| file://:0:0:0:0 | applyAsDouble | -| file://:0:0:0:0 | applyAsDouble | -| file://:0:0:0:0 | applyAsInt | -| file://:0:0:0:0 | applyAsInt | -| file://:0:0:0:0 | applyAsInt | -| file://:0:0:0:0 | applyAsInt | -| file://:0:0:0:0 | applyAsInt | -| file://:0:0:0:0 | applyAsInt | -| file://:0:0:0:0 | applyAsLong | -| file://:0:0:0:0 | applyAsLong | -| file://:0:0:0:0 | applyAsLong | -| file://:0:0:0:0 | applyAsLong | -| file://:0:0:0:0 | applyAsLong | -| file://:0:0:0:0 | applyAsLong | -| file://:0:0:0:0 | arg | -| file://:0:0:0:0 | argSlotToParameter | -| file://:0:0:0:0 | argument | -| file://:0:0:0:0 | arguments | -| file://:0:0:0:0 | arity | -| file://:0:0:0:0 | arity | -| file://:0:0:0:0 | array | -| file://:0:0:0:0 | array | -| file://:0:0:0:0 | array | -| file://:0:0:0:0 | array | -| file://:0:0:0:0 | array | -| file://:0:0:0:0 | array | -| file://:0:0:0:0 | array | -| file://:0:0:0:0 | array | -| file://:0:0:0:0 | array | -| file://:0:0:0:0 | arrayBaseOffset | -| file://:0:0:0:0 | arrayIndexScale | -| file://:0:0:0:0 | arrayLength | -| file://:0:0:0:0 | arrayLength | -| file://:0:0:0:0 | arrayOffset | -| file://:0:0:0:0 | arrayOffset | -| file://:0:0:0:0 | arrayOffset | -| file://:0:0:0:0 | arrayOffset | -| file://:0:0:0:0 | arrayOffset | -| file://:0:0:0:0 | arrayOffset | -| file://:0:0:0:0 | arrayOffset | -| file://:0:0:0:0 | arrayOffset | -| file://:0:0:0:0 | arrayOffset | -| file://:0:0:0:0 | arrayType | -| file://:0:0:0:0 | asCharBuffer | -| file://:0:0:0:0 | asCharBuffer | -| file://:0:0:0:0 | asCollector | -| file://:0:0:0:0 | asCollector | -| file://:0:0:0:0 | asCollector | -| file://:0:0:0:0 | asCollector | -| file://:0:0:0:0 | asCollectorChecks | -| file://:0:0:0:0 | asCollectorChecks | -| file://:0:0:0:0 | asCollectorType | -| file://:0:0:0:0 | asConstructor | -| file://:0:0:0:0 | asDoubleBuffer | -| file://:0:0:0:0 | asDoubleBuffer | -| file://:0:0:0:0 | asDoubleStream | -| file://:0:0:0:0 | asDoubleStream | -| file://:0:0:0:0 | asFixedArity | -| file://:0:0:0:0 | asFixedArity | -| file://:0:0:0:0 | asFloatBuffer | -| file://:0:0:0:0 | asFloatBuffer | -| file://:0:0:0:0 | asIntBuffer | -| file://:0:0:0:0 | asIntBuffer | -| file://:0:0:0:0 | asIterator | -| file://:0:0:0:0 | asIterator | -| file://:0:0:0:0 | asIterator | -| file://:0:0:0:0 | asLongBuffer | -| file://:0:0:0:0 | asLongBuffer | -| file://:0:0:0:0 | asLongStream | -| file://:0:0:0:0 | asNormal | -| file://:0:0:0:0 | asNormalOriginal | -| file://:0:0:0:0 | asPrimitiveType | -| file://:0:0:0:0 | asReadOnlyBuffer | -| file://:0:0:0:0 | asReadOnlyBuffer | -| file://:0:0:0:0 | asReadOnlyBuffer | -| file://:0:0:0:0 | asReadOnlyBuffer | -| file://:0:0:0:0 | asReadOnlyBuffer | -| file://:0:0:0:0 | asReadOnlyBuffer | -| file://:0:0:0:0 | asReadOnlyBuffer | -| file://:0:0:0:0 | asReadOnlyBuffer | -| file://:0:0:0:0 | asSetter | -| file://:0:0:0:0 | asShortBuffer | -| file://:0:0:0:0 | asShortBuffer | -| file://:0:0:0:0 | asSpecial | -| file://:0:0:0:0 | asSpreader | -| file://:0:0:0:0 | asSpreader | -| file://:0:0:0:0 | asSpreader | -| file://:0:0:0:0 | asSpreader | -| file://:0:0:0:0 | asSpreaderChecks | -| file://:0:0:0:0 | asSpreaderType | -| file://:0:0:0:0 | asStandalone | -| file://:0:0:0:0 | asSubclass | -| file://:0:0:0:0 | asType | -| file://:0:0:0:0 | asType | -| file://:0:0:0:0 | asTypeCached | -| file://:0:0:0:0 | asTypeUncached | -| file://:0:0:0:0 | asTypeUncached | -| file://:0:0:0:0 | asVarargsCollector | -| file://:0:0:0:0 | asVarargsCollector | -| file://:0:0:0:0 | asWrapperType | -| file://:0:0:0:0 | associateWithDebugName | -| file://:0:0:0:0 | atDate | -| file://:0:0:0:0 | atDate | -| file://:0:0:0:0 | atOffset | -| file://:0:0:0:0 | atOffset | -| file://:0:0:0:0 | atOffset | -| file://:0:0:0:0 | atStartOfDay | -| file://:0:0:0:0 | atStartOfDay | -| file://:0:0:0:0 | atTime | -| file://:0:0:0:0 | atTime | -| file://:0:0:0:0 | atTime | -| file://:0:0:0:0 | atTime | -| file://:0:0:0:0 | atTime | -| file://:0:0:0:0 | atTime | -| file://:0:0:0:0 | atZone | -| file://:0:0:0:0 | atZone | -| file://:0:0:0:0 | atZone | -| file://:0:0:0:0 | atZoneSameInstant | -| file://:0:0:0:0 | atZoneSimilarLocal | -| file://:0:0:0:0 | attach | -| file://:0:0:0:0 | auditSubclass | -| file://:0:0:0:0 | auditSubclass | -| file://:0:0:0:0 | available | -| file://:0:0:0:0 | available | -| file://:0:0:0:0 | available | -| file://:0:0:0:0 | availableCharsets | -| file://:0:0:0:0 | average | -| file://:0:0:0:0 | average | -| file://:0:0:0:0 | average | -| file://:0:0:0:0 | averageBytesPerChar | -| file://:0:0:0:0 | averageCharsPerByte | -| file://:0:0:0:0 | await | -| file://:0:0:0:0 | await | -| file://:0:0:0:0 | await | -| file://:0:0:0:0 | await | -| file://:0:0:0:0 | awaitJoin | -| file://:0:0:0:0 | awaitNanos | -| file://:0:0:0:0 | awaitNanos | -| file://:0:0:0:0 | awaitQuiescence | -| file://:0:0:0:0 | awaitTermination | -| file://:0:0:0:0 | awaitTermination | -| file://:0:0:0:0 | awaitTermination | -| file://:0:0:0:0 | awaitUninterruptibly | -| file://:0:0:0:0 | awaitUninterruptibly | -| file://:0:0:0:0 | awaitUntil | -| file://:0:0:0:0 | awaitUntil | -| file://:0:0:0:0 | balanceDeletion | -| file://:0:0:0:0 | balanceInsertion | -| file://:0:0:0:0 | base | -| file://:0:0:0:0 | base | -| file://:0:0:0:0 | base | -| file://:0:0:0:0 | base | -| file://:0:0:0:0 | base | -| file://:0:0:0:0 | base | -| file://:0:0:0:0 | base | -| file://:0:0:0:0 | base | -| file://:0:0:0:0 | base | -| file://:0:0:0:0 | baseConstructorType | -| file://:0:0:0:0 | baseConstructorType | -| file://:0:0:0:0 | basicInvoker | -| file://:0:0:0:0 | basicMethodType | -| file://:0:0:0:0 | basicType | -| file://:0:0:0:0 | basicType | -| file://:0:0:0:0 | basicType | -| file://:0:0:0:0 | basicType | -| file://:0:0:0:0 | basicType | -| file://:0:0:0:0 | basicType | -| file://:0:0:0:0 | basicTypeChar | -| file://:0:0:0:0 | basicTypeChar | -| file://:0:0:0:0 | basicTypeChar | -| file://:0:0:0:0 | basicTypeChar | -| file://:0:0:0:0 | basicTypeClass | -| file://:0:0:0:0 | basicTypeDesc | -| file://:0:0:0:0 | basicTypeOrds | -| file://:0:0:0:0 | basicTypeSignature | -| file://:0:0:0:0 | basicTypeSignature | -| file://:0:0:0:0 | basicTypeSlots | -| file://:0:0:0:0 | basicTypeWrapper | -| file://:0:0:0:0 | basicTypes | -| file://:0:0:0:0 | basicTypesOrd | -| file://:0:0:0:0 | batchFor | -| file://:0:0:0:0 | batchRemove | -| file://:0:0:0:0 | before | -| file://:0:0:0:0 | begin | -| file://:0:0:0:0 | begin | -| file://:0:0:0:0 | between | -| file://:0:0:0:0 | between | -| file://:0:0:0:0 | between | -| file://:0:0:0:0 | between | -| file://:0:0:0:0 | between | -| file://:0:0:0:0 | bindArgumentD | -| file://:0:0:0:0 | bindArgumentD | -| file://:0:0:0:0 | bindArgumentF | -| file://:0:0:0:0 | bindArgumentF | -| file://:0:0:0:0 | bindArgumentForm | -| file://:0:0:0:0 | bindArgumentI | -| file://:0:0:0:0 | bindArgumentI | -| file://:0:0:0:0 | bindArgumentJ | -| file://:0:0:0:0 | bindArgumentJ | -| file://:0:0:0:0 | bindArgumentL | -| file://:0:0:0:0 | bindArgumentL | -| file://:0:0:0:0 | bindArgumentL | -| file://:0:0:0:0 | bindSingle | -| file://:0:0:0:0 | bindSingle | -| file://:0:0:0:0 | bindTo | -| file://:0:0:0:0 | bindTo | -| file://:0:0:0:0 | bindToLoader | -| file://:0:0:0:0 | bitCount | -| file://:0:0:0:0 | bitCount | -| file://:0:0:0:0 | bitCount | -| file://:0:0:0:0 | bitLength | -| file://:0:0:0:0 | bitLengthForInt | -| file://:0:0:0:0 | bitWidth | -| file://:0:0:0:0 | block | -| file://:0:0:0:0 | blockedOn | -| file://:0:0:0:0 | blockedOn | -| file://:0:0:0:0 | blockedOn | -| file://:0:0:0:0 | blockedOn | -| file://:0:0:0:0 | blockedOn | -| file://:0:0:0:0 | booleanValue | -| file://:0:0:0:0 | boot | -| file://:0:0:0:0 | boxed | -| file://:0:0:0:0 | boxed | -| file://:0:0:0:0 | boxed | -| file://:0:0:0:0 | build | -| file://:0:0:0:0 | build | -| file://:0:0:0:0 | build | -| file://:0:0:0:0 | build | -| file://:0:0:0:0 | build | -| file://:0:0:0:0 | build | -| file://:0:0:0:0 | builder | -| file://:0:0:0:0 | builder | -| file://:0:0:0:0 | builder | -| file://:0:0:0:0 | builder | -| file://:0:0:0:0 | bumpVersion | -| file://:0:0:0:0 | byteValue | -| file://:0:0:0:0 | byteValueExact | -| file://:0:0:0:0 | cachedLambdaForm | -| file://:0:0:0:0 | cachedMethodHandle | -| file://:0:0:0:0 | call | -| file://:0:0:0:0 | callSiteForm | -| file://:0:0:0:0 | canAccess | -| file://:0:0:0:0 | canAccess | -| file://:0:0:0:0 | canAccess | -| file://:0:0:0:0 | canAccess | -| file://:0:0:0:0 | canAccess | -| file://:0:0:0:0 | canBeStaticallyBound | -| file://:0:0:0:0 | canConvert | -| file://:0:0:0:0 | canEncode | -| file://:0:0:0:0 | canEncode | -| file://:0:0:0:0 | canEncode | -| file://:0:0:0:0 | canExecute | -| file://:0:0:0:0 | canRead | -| file://:0:0:0:0 | canRead | -| file://:0:0:0:0 | canUse | -| file://:0:0:0:0 | canWrite | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancel | -| file://:0:0:0:0 | cancelAcquire | -| file://:0:0:0:0 | cancelAcquire | -| file://:0:0:0:0 | cancelAcquire | -| file://:0:0:0:0 | cancelAll | -| file://:0:0:0:0 | cancelAll | -| file://:0:0:0:0 | cancelAll | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | cancelIgnoringExceptions | -| file://:0:0:0:0 | canonicalize | -| file://:0:0:0:0 | canonicalize | -| file://:0:0:0:0 | canonicalizeAll | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | capacity | -| file://:0:0:0:0 | casAnnotationType | -| file://:0:0:0:0 | casTabAt | -| file://:0:0:0:0 | cast | -| file://:0:0:0:0 | cast | -| file://:0:0:0:0 | castEntry | -| file://:0:0:0:0 | changeEntry | -| file://:0:0:0:0 | changeParameterType | -| file://:0:0:0:0 | changeReturnType | -| file://:0:0:0:0 | channel | -| file://:0:0:0:0 | charAt | -| file://:0:0:0:0 | charCount | -| file://:0:0:0:0 | charEquals | -| file://:0:0:0:0 | charEqualsIgnoreCase | -| file://:0:0:0:0 | charRegionOrder | -| file://:0:0:0:0 | charValue | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | characteristics | -| file://:0:0:0:0 | chars | -| file://:0:0:0:0 | chars | -| file://:0:0:0:0 | chars | -| file://:0:0:0:0 | chars | -| file://:0:0:0:0 | chars | -| file://:0:0:0:0 | chars | -| file://:0:0:0:0 | chars | -| file://:0:0:0:0 | chars | -| file://:0:0:0:0 | charset | -| file://:0:0:0:0 | charset | -| file://:0:0:0:0 | checkAbstractListModCount | -| file://:0:0:0:0 | checkAccess | -| file://:0:0:0:0 | checkAccess | -| file://:0:0:0:0 | checkAccess | -| file://:0:0:0:0 | checkAccess | -| file://:0:0:0:0 | checkAccess | -| file://:0:0:0:0 | checkAccess | -| file://:0:0:0:0 | checkAccess | -| file://:0:0:0:0 | checkAccess | -| file://:0:0:0:0 | checkAccess | -| file://:0:0:0:0 | checkAccess | -| file://:0:0:0:0 | checkBounds | -| file://:0:0:0:0 | checkBounds | -| file://:0:0:0:0 | checkBounds | -| file://:0:0:0:0 | checkBounds | -| file://:0:0:0:0 | checkBounds | -| file://:0:0:0:0 | checkBounds | -| file://:0:0:0:0 | checkBounds | -| file://:0:0:0:0 | checkBounds | -| file://:0:0:0:0 | checkBounds | -| file://:0:0:0:0 | checkBoundsBeginEnd | -| file://:0:0:0:0 | checkBoundsOffCount | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkCanSetAccessible | -| file://:0:0:0:0 | checkClassLoaderPermission | -| file://:0:0:0:0 | checkCustomized | -| file://:0:0:0:0 | checkDefaultSerialize | -| file://:0:0:0:0 | checkDeserialize | -| file://:0:0:0:0 | checkError | -| file://:0:0:0:0 | checkError | -| file://:0:0:0:0 | checkExactType | -| file://:0:0:0:0 | checkForTypeAlias | -| file://:0:0:0:0 | checkGenericType | -| file://:0:0:0:0 | checkGuard | -| file://:0:0:0:0 | checkGuard | -| file://:0:0:0:0 | checkGuard | -| file://:0:0:0:0 | checkGuard | -| file://:0:0:0:0 | checkGuard | -| file://:0:0:0:0 | checkGuard | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkIndex | -| file://:0:0:0:0 | checkInitialized | -| file://:0:0:0:0 | checkInput | -| file://:0:0:0:0 | checkInput | -| file://:0:0:0:0 | checkInvariants | -| file://:0:0:0:0 | checkInvariants | -| file://:0:0:0:0 | checkObjFieldValueTypes | -| file://:0:0:0:0 | checkOffset | -| file://:0:0:0:0 | checkPermission | -| file://:0:0:0:0 | checkPermission | -| file://:0:0:0:0 | checkPermission | -| file://:0:0:0:0 | checkPermission | -| file://:0:0:0:0 | checkPermission | -| file://:0:0:0:0 | checkPermission | -| file://:0:0:0:0 | checkRange | -| file://:0:0:0:0 | checkRange | -| file://:0:0:0:0 | checkRangeSIOOBE | -| file://:0:0:0:0 | checkRangeSIOOBE | -| file://:0:0:0:0 | checkSerialize | -| file://:0:0:0:0 | checkSlotCount | -| file://:0:0:0:0 | checkTargetChange | -| file://:0:0:0:0 | checkValidIntValue | -| file://:0:0:0:0 | checkValidIntValue | -| file://:0:0:0:0 | checkValidValue | -| file://:0:0:0:0 | checkValidValue | -| file://:0:0:0:0 | checkVarHandleExactType | -| file://:0:0:0:0 | checkVarHandleGenericType | -| file://:0:0:0:0 | childValue | -| file://:0:0:0:0 | childValue | -| file://:0:0:0:0 | chooseFieldName | -| file://:0:0:0:0 | chooseFieldName | -| file://:0:0:0:0 | classBCName | -| file://:0:0:0:0 | classBCName | -| file://:0:0:0:0 | classBCName | -| file://:0:0:0:0 | classBCName | -| file://:0:0:0:0 | className | -| file://:0:0:0:0 | className | -| file://:0:0:0:0 | classSig | -| file://:0:0:0:0 | classSig | -| file://:0:0:0:0 | classSig | -| file://:0:0:0:0 | classSig | -| file://:0:0:0:0 | classValue | -| file://:0:0:0:0 | classValueOrNull | -| file://:0:0:0:0 | clean | -| file://:0:0:0:0 | clean | -| file://:0:0:0:0 | clean | -| file://:0:0:0:0 | clean | -| file://:0:0:0:0 | clean | -| file://:0:0:0:0 | clean | -| file://:0:0:0:0 | clean | -| file://:0:0:0:0 | clean | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clear | -| file://:0:0:0:0 | clearAssertionStatus | -| file://:0:0:0:0 | clearBit | -| file://:0:0:0:0 | clearError | -| file://:0:0:0:0 | clearError | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExceptionalCompletion | -| file://:0:0:0:0 | clearExtensions | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | clone | -| file://:0:0:0:0 | cloneHashtable | -| file://:0:0:0:0 | cloneHashtable | -| file://:0:0:0:0 | cloneHashtable | -| file://:0:0:0:0 | cloneWithIndex | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | close | -| file://:0:0:0:0 | closeAll | -| file://:0:0:0:0 | codePointAt | -| file://:0:0:0:0 | codePointAt | -| file://:0:0:0:0 | codePointAt | -| file://:0:0:0:0 | codePointAt | -| file://:0:0:0:0 | codePointAt | -| file://:0:0:0:0 | codePointAt | -| file://:0:0:0:0 | codePointAt | -| file://:0:0:0:0 | codePointAtImpl | -| file://:0:0:0:0 | codePointBefore | -| file://:0:0:0:0 | codePointBefore | -| file://:0:0:0:0 | codePointBefore | -| file://:0:0:0:0 | codePointBefore | -| file://:0:0:0:0 | codePointBefore | -| file://:0:0:0:0 | codePointBefore | -| file://:0:0:0:0 | codePointBefore | -| file://:0:0:0:0 | codePointBeforeImpl | -| file://:0:0:0:0 | codePointCount | -| file://:0:0:0:0 | codePointCount | -| file://:0:0:0:0 | codePointCount | -| file://:0:0:0:0 | codePointCount | -| file://:0:0:0:0 | codePointCount | -| file://:0:0:0:0 | codePointCount | -| file://:0:0:0:0 | codePointCountImpl | -| file://:0:0:0:0 | codePointOf | -| file://:0:0:0:0 | codePoints | -| file://:0:0:0:0 | codePoints | -| file://:0:0:0:0 | codePoints | -| file://:0:0:0:0 | codePoints | -| file://:0:0:0:0 | codePoints | -| file://:0:0:0:0 | codePoints | -| file://:0:0:0:0 | codePoints | -| file://:0:0:0:0 | codePoints | -| file://:0:0:0:0 | coder | -| file://:0:0:0:0 | collect | -| file://:0:0:0:0 | collect | -| file://:0:0:0:0 | collect | -| file://:0:0:0:0 | collect | -| file://:0:0:0:0 | collect | -| file://:0:0:0:0 | collectArgumentArrayForm | -| file://:0:0:0:0 | collectArgumentsForm | -| file://:0:0:0:0 | combine | -| file://:0:0:0:0 | combine | -| file://:0:0:0:0 | combine | -| file://:0:0:0:0 | combine | -| file://:0:0:0:0 | combiner | -| file://:0:0:0:0 | commonPool | -| file://:0:0:0:0 | commonSubmitterQueue | -| file://:0:0:0:0 | compact | -| file://:0:0:0:0 | compact | -| file://:0:0:0:0 | compact | -| file://:0:0:0:0 | compact | -| file://:0:0:0:0 | compact | -| file://:0:0:0:0 | compact | -| file://:0:0:0:0 | compact | -| file://:0:0:0:0 | compact | -| file://:0:0:0:0 | comparableClassFor | -| file://:0:0:0:0 | comparator | -| file://:0:0:0:0 | compare | -| file://:0:0:0:0 | compare | -| file://:0:0:0:0 | compare | -| file://:0:0:0:0 | compare | -| file://:0:0:0:0 | compare | -| file://:0:0:0:0 | compare | -| file://:0:0:0:0 | compare | -| file://:0:0:0:0 | compare | -| file://:0:0:0:0 | compareAndExchange | -| file://:0:0:0:0 | compareAndExchange | -| file://:0:0:0:0 | compareAndExchange | -| file://:0:0:0:0 | compareAndExchangeAcquire | -| file://:0:0:0:0 | compareAndExchangeAcquire | -| file://:0:0:0:0 | compareAndExchangeAcquire | -| file://:0:0:0:0 | compareAndExchangeBoolean | -| file://:0:0:0:0 | compareAndExchangeBooleanAcquire | -| file://:0:0:0:0 | compareAndExchangeBooleanRelease | -| file://:0:0:0:0 | compareAndExchangeByte | -| file://:0:0:0:0 | compareAndExchangeByteAcquire | -| file://:0:0:0:0 | compareAndExchangeByteRelease | -| file://:0:0:0:0 | compareAndExchangeChar | -| file://:0:0:0:0 | compareAndExchangeCharAcquire | -| file://:0:0:0:0 | compareAndExchangeCharRelease | -| file://:0:0:0:0 | compareAndExchangeDouble | -| file://:0:0:0:0 | compareAndExchangeDoubleAcquire | -| file://:0:0:0:0 | compareAndExchangeDoubleRelease | -| file://:0:0:0:0 | compareAndExchangeFloat | -| file://:0:0:0:0 | compareAndExchangeFloatAcquire | -| file://:0:0:0:0 | compareAndExchangeFloatRelease | -| file://:0:0:0:0 | compareAndExchangeInt | -| file://:0:0:0:0 | compareAndExchangeIntAcquire | -| file://:0:0:0:0 | compareAndExchangeIntRelease | -| file://:0:0:0:0 | compareAndExchangeLong | -| file://:0:0:0:0 | compareAndExchangeLongAcquire | -| file://:0:0:0:0 | compareAndExchangeLongRelease | -| file://:0:0:0:0 | compareAndExchangeObject | -| file://:0:0:0:0 | compareAndExchangeObjectAcquire | -| file://:0:0:0:0 | compareAndExchangeObjectRelease | -| file://:0:0:0:0 | compareAndExchangeRelease | -| file://:0:0:0:0 | compareAndExchangeRelease | -| file://:0:0:0:0 | compareAndExchangeRelease | -| file://:0:0:0:0 | compareAndExchangeShort | -| file://:0:0:0:0 | compareAndExchangeShortAcquire | -| file://:0:0:0:0 | compareAndExchangeShortRelease | -| file://:0:0:0:0 | compareAndSet | -| file://:0:0:0:0 | compareAndSet | -| file://:0:0:0:0 | compareAndSet | -| file://:0:0:0:0 | compareAndSetBoolean | -| file://:0:0:0:0 | compareAndSetByte | -| file://:0:0:0:0 | compareAndSetChar | -| file://:0:0:0:0 | compareAndSetDouble | -| file://:0:0:0:0 | compareAndSetFloat | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | -| file://:0:0:0:0 | compareAndSetInt | -| file://:0:0:0:0 | compareAndSetLong | -| file://:0:0:0:0 | compareAndSetNext | -| file://:0:0:0:0 | compareAndSetObject | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetPendingCount | -| file://:0:0:0:0 | compareAndSetShort | -| file://:0:0:0:0 | compareAndSetState | -| file://:0:0:0:0 | compareAndSetState | -| file://:0:0:0:0 | compareAndSetState | -| file://:0:0:0:0 | compareAndSetState | -| file://:0:0:0:0 | compareAndSetTail | -| file://:0:0:0:0 | compareAndSetTail | -| file://:0:0:0:0 | compareAndSetTail | -| file://:0:0:0:0 | compareAndSetWaitStatus | -| file://:0:0:0:0 | compareComparables | -| file://:0:0:0:0 | compareMagnitude | -| file://:0:0:0:0 | compareMagnitude | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo | -| file://:0:0:0:0 | compareTo0 | -| file://:0:0:0:0 | compareToIgnoreCase | -| file://:0:0:0:0 | compareUnsigned | -| file://:0:0:0:0 | compareUnsigned | -| file://:0:0:0:0 | comparing | -| file://:0:0:0:0 | comparing | -| file://:0:0:0:0 | comparingByKey | -| file://:0:0:0:0 | comparingByKey | -| file://:0:0:0:0 | comparingByValue | -| file://:0:0:0:0 | comparingByValue | -| file://:0:0:0:0 | comparingDouble | -| file://:0:0:0:0 | comparingInt | -| file://:0:0:0:0 | comparingLong | -| file://:0:0:0:0 | compileToBytecode | -| file://:0:0:0:0 | compiledVersion | -| file://:0:0:0:0 | complement | -| file://:0:0:0:0 | complementOf | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | complete | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completeExceptionally | -| file://:0:0:0:0 | completed | -| file://:0:0:0:0 | compose | -| file://:0:0:0:0 | compose | -| file://:0:0:0:0 | compose | -| file://:0:0:0:0 | compose | -| file://:0:0:0:0 | compose | -| file://:0:0:0:0 | compose | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | compute | -| file://:0:0:0:0 | computeExceptionTypes | -| file://:0:0:0:0 | computeIfAbsent | -| file://:0:0:0:0 | computeIfAbsent | -| file://:0:0:0:0 | computeIfAbsent | -| file://:0:0:0:0 | computeIfAbsent | -| file://:0:0:0:0 | computeIfAbsent | -| file://:0:0:0:0 | computeIfAbsent | -| file://:0:0:0:0 | computeIfAbsent | -| file://:0:0:0:0 | computeIfAbsent | -| file://:0:0:0:0 | computeIfAbsent | -| file://:0:0:0:0 | computeIfAbsent | -| file://:0:0:0:0 | computeIfAbsent | -| file://:0:0:0:0 | computeIfPresent | -| file://:0:0:0:0 | computeIfPresent | -| file://:0:0:0:0 | computeIfPresent | -| file://:0:0:0:0 | computeIfPresent | -| file://:0:0:0:0 | computeIfPresent | -| file://:0:0:0:0 | computeIfPresent | -| file://:0:0:0:0 | computeIfPresent | -| file://:0:0:0:0 | computeIfPresent | -| file://:0:0:0:0 | computeIfPresent | -| file://:0:0:0:0 | computeIfPresent | -| file://:0:0:0:0 | computeIfPresent | -| file://:0:0:0:0 | computeParameterTypes | -| file://:0:0:0:0 | computeTypeParameters | -| file://:0:0:0:0 | computeTypeParameters | -| file://:0:0:0:0 | computeValue | -| file://:0:0:0:0 | concat | -| file://:0:0:0:0 | concat | -| file://:0:0:0:0 | concat | -| file://:0:0:0:0 | concat | -| file://:0:0:0:0 | concat | -| file://:0:0:0:0 | configuration | -| file://:0:0:0:0 | configuration | -| file://:0:0:0:0 | configurations | -| file://:0:0:0:0 | configure | -| file://:0:0:0:0 | connect | -| file://:0:0:0:0 | constantZero | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | contains | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsAll | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsKey | -| file://:0:0:0:0 | containsNullValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | containsValue | -| file://:0:0:0:0 | contentEquals | -| file://:0:0:0:0 | contentEquals | -| file://:0:0:0:0 | context | -| file://:0:0:0:0 | contextWithPermissions | -| file://:0:0:0:0 | convert | -| file://:0:0:0:0 | convert | -| file://:0:0:0:0 | convert | -| file://:0:0:0:0 | convertNumberToI18N | -| file://:0:0:0:0 | convertToDigit | -| file://:0:0:0:0 | coordinateTypes | -| file://:0:0:0:0 | copy | -| file://:0:0:0:0 | copy | -| file://:0:0:0:0 | copy | -| file://:0:0:0:0 | copy | -| file://:0:0:0:0 | copy | -| file://:0:0:0:0 | copy | -| file://:0:0:0:0 | copyArrayBoxing | -| file://:0:0:0:0 | copyArrayUnboxing | -| file://:0:0:0:0 | copyConstructor | -| file://:0:0:0:0 | copyConstructor | -| file://:0:0:0:0 | copyField | -| file://:0:0:0:0 | copyField | -| file://:0:0:0:0 | copyMemory | -| file://:0:0:0:0 | copyMemory | -| file://:0:0:0:0 | copyMethod | -| file://:0:0:0:0 | copyMethod | -| file://:0:0:0:0 | copyOf | -| file://:0:0:0:0 | copyOf | -| file://:0:0:0:0 | copyOf | -| file://:0:0:0:0 | copyOf | -| file://:0:0:0:0 | copyOf | -| file://:0:0:0:0 | copyPool | -| file://:0:0:0:0 | copySwapMemory | -| file://:0:0:0:0 | copySwapMemory | -| file://:0:0:0:0 | copyValueOf | -| file://:0:0:0:0 | copyValueOf | -| file://:0:0:0:0 | copyWith | -| file://:0:0:0:0 | copyWith | -| file://:0:0:0:0 | copyWithExtendD | -| file://:0:0:0:0 | copyWithExtendF | -| file://:0:0:0:0 | copyWithExtendI | -| file://:0:0:0:0 | copyWithExtendJ | -| file://:0:0:0:0 | copyWithExtendL | -| file://:0:0:0:0 | count | -| file://:0:0:0:0 | count | -| file://:0:0:0:0 | count | -| file://:0:0:0:0 | count | -| file://:0:0:0:0 | count | -| file://:0:0:0:0 | countStackFrames | -| file://:0:0:0:0 | countStackFrames | -| file://:0:0:0:0 | countStackFrames | -| file://:0:0:0:0 | create | -| file://:0:0:0:0 | create | -| file://:0:0:0:0 | create | -| file://:0:0:0:0 | create | -| file://:0:0:0:0 | createAttributedCharacterIterator | -| file://:0:0:0:0 | createAttributedCharacterIterator | -| file://:0:0:0:0 | createAttributedCharacterIterator | -| file://:0:0:0:0 | createAttributedCharacterIterator | -| file://:0:0:0:0 | createAttributedCharacterIterator | -| file://:0:0:0:0 | createAttributedCharacterIterator | -| file://:0:0:0:0 | createAttributedCharacterIterator | -| file://:0:0:0:0 | createAttributedCharacterIterator | -| file://:0:0:0:0 | createCapacityException | -| file://:0:0:0:0 | createCapacityException | -| file://:0:0:0:0 | createCapacityException | -| file://:0:0:0:0 | createCapacityException | -| file://:0:0:0:0 | createCapacityException | -| file://:0:0:0:0 | createCapacityException | -| file://:0:0:0:0 | createCapacityException | -| file://:0:0:0:0 | createCapacityException | -| file://:0:0:0:0 | createCapacityException | -| file://:0:0:0:0 | createContentHandler | -| file://:0:0:0:0 | createCountryCodeSet | -| file://:0:0:0:0 | createDateTime | -| file://:0:0:0:0 | createDirectory | -| file://:0:0:0:0 | createFilter | -| file://:0:0:0:0 | createFilter | -| file://:0:0:0:0 | createFilter2 | -| file://:0:0:0:0 | createInheritedMap | -| file://:0:0:0:0 | createInheritedMap | -| file://:0:0:0:0 | createInstance | -| file://:0:0:0:0 | createLimitException | -| file://:0:0:0:0 | createLimitException | -| file://:0:0:0:0 | createLimitException | -| file://:0:0:0:0 | createLimitException | -| file://:0:0:0:0 | createLimitException | -| file://:0:0:0:0 | createLimitException | -| file://:0:0:0:0 | createLimitException | -| file://:0:0:0:0 | createLimitException | -| file://:0:0:0:0 | createLink | -| file://:0:0:0:0 | createMap | -| file://:0:0:0:0 | createMap | -| file://:0:0:0:0 | createNewFile | -| file://:0:0:0:0 | createOrGetClassLoaderValueMap | -| file://:0:0:0:0 | createPositionException | -| file://:0:0:0:0 | createPositionException | -| file://:0:0:0:0 | createPositionException | -| file://:0:0:0:0 | createPositionException | -| file://:0:0:0:0 | createPositionException | -| file://:0:0:0:0 | createPositionException | -| file://:0:0:0:0 | createPositionException | -| file://:0:0:0:0 | createPositionException | -| file://:0:0:0:0 | createSameBufferException | -| file://:0:0:0:0 | createSameBufferException | -| file://:0:0:0:0 | createSameBufferException | -| file://:0:0:0:0 | createSameBufferException | -| file://:0:0:0:0 | createSameBufferException | -| file://:0:0:0:0 | createSameBufferException | -| file://:0:0:0:0 | createSameBufferException | -| file://:0:0:0:0 | createSameBufferException | -| file://:0:0:0:0 | createSameBufferException | -| file://:0:0:0:0 | createSymbolicLink | -| file://:0:0:0:0 | createTempFile | -| file://:0:0:0:0 | createTempFile | -| file://:0:0:0:0 | createTransition | -| file://:0:0:0:0 | createURLStreamHandler | -| file://:0:0:0:0 | creationTime | -| file://:0:0:0:0 | current | -| file://:0:0:0:0 | current | -| file://:0:0:0:0 | currentThread | -| file://:0:0:0:0 | currentThread | -| file://:0:0:0:0 | currentThread | -| file://:0:0:0:0 | customize | -| file://:0:0:0:0 | customize | -| file://:0:0:0:0 | customize | -| file://:0:0:0:0 | date | -| file://:0:0:0:0 | date | -| file://:0:0:0:0 | date | -| file://:0:0:0:0 | date | -| file://:0:0:0:0 | date | -| file://:0:0:0:0 | date | -| file://:0:0:0:0 | date | -| file://:0:0:0:0 | date | -| file://:0:0:0:0 | date | -| file://:0:0:0:0 | dateEpochDay | -| file://:0:0:0:0 | dateEpochDay | -| file://:0:0:0:0 | dateEpochDay | -| file://:0:0:0:0 | dateNow | -| file://:0:0:0:0 | dateNow | -| file://:0:0:0:0 | dateNow | -| file://:0:0:0:0 | dateNow | -| file://:0:0:0:0 | dateNow | -| file://:0:0:0:0 | dateNow | -| file://:0:0:0:0 | dateNow | -| file://:0:0:0:0 | dateNow | -| file://:0:0:0:0 | dateNow | -| file://:0:0:0:0 | dateYearDay | -| file://:0:0:0:0 | dateYearDay | -| file://:0:0:0:0 | dateYearDay | -| file://:0:0:0:0 | dateYearDay | -| file://:0:0:0:0 | dateYearDay | -| file://:0:0:0:0 | dateYearDay | -| file://:0:0:0:0 | datesUntil | -| file://:0:0:0:0 | datesUntil | -| file://:0:0:0:0 | daysUntil | -| file://:0:0:0:0 | debugNames | -| file://:0:0:0:0 | debugString | -| file://:0:0:0:0 | debugString | -| file://:0:0:0:0 | debugString | -| file://:0:0:0:0 | dec | -| file://:0:0:0:0 | dec | -| file://:0:0:0:0 | dec | -| file://:0:0:0:0 | dec | -| file://:0:0:0:0 | declaredAnnotations | -| file://:0:0:0:0 | declaredAnnotations | -| file://:0:0:0:0 | declaringClass | -| file://:0:0:0:0 | decode | -| file://:0:0:0:0 | decode | -| file://:0:0:0:0 | decode | -| file://:0:0:0:0 | decode | -| file://:0:0:0:0 | decode | -| file://:0:0:0:0 | decodeLoop | -| file://:0:0:0:0 | decrementAndGet | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | decrementPendingCountUnlessZero | -| file://:0:0:0:0 | defaultCharset | -| file://:0:0:0:0 | defaultReadObject | -| file://:0:0:0:0 | defaultWriteHashtable | -| file://:0:0:0:0 | defaultWriteHashtable | -| file://:0:0:0:0 | defaultWriteHashtable | -| file://:0:0:0:0 | defaultWriteObject | -| file://:0:0:0:0 | defaulted | -| file://:0:0:0:0 | defineAnonymousClass | -| file://:0:0:0:0 | defineClass | -| file://:0:0:0:0 | defineClass | -| file://:0:0:0:0 | defineClass | -| file://:0:0:0:0 | defineClass | -| file://:0:0:0:0 | defineClass | -| file://:0:0:0:0 | defineClass0 | -| file://:0:0:0:0 | defineClass1 | -| file://:0:0:0:0 | defineClass2 | -| file://:0:0:0:0 | defineModules | -| file://:0:0:0:0 | defineModules | -| file://:0:0:0:0 | defineModules | -| file://:0:0:0:0 | defineModulesWithManyLoaders | -| file://:0:0:0:0 | defineModulesWithManyLoaders | -| file://:0:0:0:0 | defineModulesWithOneLoader | -| file://:0:0:0:0 | defineModulesWithOneLoader | -| file://:0:0:0:0 | definePackage | -| file://:0:0:0:0 | definePackage | -| file://:0:0:0:0 | definePackage | -| file://:0:0:0:0 | delete | -| file://:0:0:0:0 | delete | -| file://:0:0:0:0 | delete | -| file://:0:0:0:0 | delete | -| file://:0:0:0:0 | delete | -| file://:0:0:0:0 | deleteCharAt | -| file://:0:0:0:0 | deleteCharAt | -| file://:0:0:0:0 | deleteCharAt | -| file://:0:0:0:0 | deleteIfExists | -| file://:0:0:0:0 | deleteOnExit | -| file://:0:0:0:0 | depth | -| file://:0:0:0:0 | depth | -| file://:0:0:0:0 | deregisterWorker | -| file://:0:0:0:0 | deriveClassName | -| file://:0:0:0:0 | deriveClassName | -| file://:0:0:0:0 | deriveFieldTypes | -| file://:0:0:0:0 | deriveFieldTypes | -| file://:0:0:0:0 | deriveSuperClass | -| file://:0:0:0:0 | deriveSuperClass | -| file://:0:0:0:0 | deriveTransformHelper | -| file://:0:0:0:0 | deriveTransformHelper | -| file://:0:0:0:0 | deriveTransformHelperArguments | -| file://:0:0:0:0 | deriveTransformHelperArguments | -| file://:0:0:0:0 | deriveTypeString | -| file://:0:0:0:0 | deriveTypeString | -| file://:0:0:0:0 | descendingIterator | -| file://:0:0:0:0 | descriptor | -| file://:0:0:0:0 | descriptor | -| file://:0:0:0:0 | descriptors | -| file://:0:0:0:0 | desiredAssertionStatus | -| file://:0:0:0:0 | desiredAssertionStatus | -| file://:0:0:0:0 | destroy | -| file://:0:0:0:0 | detailString | -| file://:0:0:0:0 | detectedCharset | -| file://:0:0:0:0 | digit | -| file://:0:0:0:0 | digit | -| file://:0:0:0:0 | discardMark | -| file://:0:0:0:0 | discardMark | -| file://:0:0:0:0 | discardMark | -| file://:0:0:0:0 | discardMark | -| file://:0:0:0:0 | discardMark | -| file://:0:0:0:0 | discardMark | -| file://:0:0:0:0 | discardMark | -| file://:0:0:0:0 | discardMark | -| file://:0:0:0:0 | discardMark | -| file://:0:0:0:0 | dispatchUncaughtException | -| file://:0:0:0:0 | dispatchUncaughtException | -| file://:0:0:0:0 | displayName | -| file://:0:0:0:0 | displayName | -| file://:0:0:0:0 | distinct | -| file://:0:0:0:0 | distinct | -| file://:0:0:0:0 | distinct | -| file://:0:0:0:0 | distinct | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | div | -| file://:0:0:0:0 | divide | -| file://:0:0:0:0 | divideAndRemainder | -| file://:0:0:0:0 | divideUnsigned | -| file://:0:0:0:0 | divideUnsigned | -| file://:0:0:0:0 | dividedBy | -| file://:0:0:0:0 | dividedBy | -| file://:0:0:0:0 | doAcquireInterruptibly | -| file://:0:0:0:0 | doAcquireInterruptibly | -| file://:0:0:0:0 | doAcquireInterruptibly | -| file://:0:0:0:0 | doAcquireNanos | -| file://:0:0:0:0 | doAcquireNanos | -| file://:0:0:0:0 | doAcquireNanos | -| file://:0:0:0:0 | doAcquireShared | -| file://:0:0:0:0 | doAcquireShared | -| file://:0:0:0:0 | doAcquireShared | -| file://:0:0:0:0 | doAcquireSharedInterruptibly | -| file://:0:0:0:0 | doAcquireSharedInterruptibly | -| file://:0:0:0:0 | doAcquireSharedInterruptibly | -| file://:0:0:0:0 | doAcquireSharedNanos | -| file://:0:0:0:0 | doAcquireSharedNanos | -| file://:0:0:0:0 | doAcquireSharedNanos | -| file://:0:0:0:0 | doAs | -| file://:0:0:0:0 | doAs | -| file://:0:0:0:0 | doAsPrivileged | -| file://:0:0:0:0 | doAsPrivileged | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doExec | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvoke | -| file://:0:0:0:0 | doInvokeAny | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doJoin | -| file://:0:0:0:0 | doReleaseShared | -| file://:0:0:0:0 | doReleaseShared | -| file://:0:0:0:0 | doReleaseShared | -| file://:0:0:0:0 | doubleToLongBits | -| file://:0:0:0:0 | doubleToRawLongBits | -| file://:0:0:0:0 | doubleValue | -| file://:0:0:0:0 | doubles | -| file://:0:0:0:0 | doubles | -| file://:0:0:0:0 | doubles | -| file://:0:0:0:0 | doubles | -| file://:0:0:0:0 | drain | -| file://:0:0:0:0 | drainTasksTo | -| file://:0:0:0:0 | dropParameterTypes | -| file://:0:0:0:0 | dropWhile | -| file://:0:0:0:0 | dropWhile | -| file://:0:0:0:0 | dropWhile | -| file://:0:0:0:0 | dropWhile | -| file://:0:0:0:0 | dumpStack | -| file://:0:0:0:0 | dumpStack | -| file://:0:0:0:0 | dumpStack | -| file://:0:0:0:0 | dumpThreads | -| file://:0:0:0:0 | dumpThreads | -| file://:0:0:0:0 | dupArgumentForm | -| file://:0:0:0:0 | duplicate | -| file://:0:0:0:0 | duplicate | -| file://:0:0:0:0 | duplicate | -| file://:0:0:0:0 | duplicate | -| file://:0:0:0:0 | duplicate | -| file://:0:0:0:0 | duplicate | -| file://:0:0:0:0 | duplicate | -| file://:0:0:0:0 | duplicate | -| file://:0:0:0:0 | duplicate | -| file://:0:0:0:0 | dynamicInvoker | -| file://:0:0:0:0 | editor | -| file://:0:0:0:0 | editor | -| file://:0:0:0:0 | effectivelyIdenticalParameters | -| file://:0:0:0:0 | element | -| file://:0:0:0:0 | element | -| file://:0:0:0:0 | elementAt | -| file://:0:0:0:0 | elementData | -| file://:0:0:0:0 | elements | -| file://:0:0:0:0 | elements | -| file://:0:0:0:0 | elements | -| file://:0:0:0:0 | elements | -| file://:0:0:0:0 | elements | -| file://:0:0:0:0 | elements | -| file://:0:0:0:0 | elementsAsStream | -| file://:0:0:0:0 | emitIntConstant | -| file://:0:0:0:0 | empty | -| file://:0:0:0:0 | empty | -| file://:0:0:0:0 | empty | -| file://:0:0:0:0 | empty | -| file://:0:0:0:0 | empty | -| file://:0:0:0:0 | empty | -| file://:0:0:0:0 | empty | -| file://:0:0:0:0 | empty | -| file://:0:0:0:0 | empty | -| file://:0:0:0:0 | empty | -| file://:0:0:0:0 | enableReplaceObject | -| file://:0:0:0:0 | enableResolveObject | -| file://:0:0:0:0 | encode | -| file://:0:0:0:0 | encode | -| file://:0:0:0:0 | encode | -| file://:0:0:0:0 | encode | -| file://:0:0:0:0 | encodeLoop | -| file://:0:0:0:0 | encodeUTF8 | -| file://:0:0:0:0 | end | -| file://:0:0:0:0 | end | -| file://:0:0:0:0 | endOptional | -| file://:0:0:0:0 | endOptional | -| file://:0:0:0:0 | endsWith | -| file://:0:0:0:0 | endsWith | -| file://:0:0:0:0 | endsWith | -| file://:0:0:0:0 | enq | -| file://:0:0:0:0 | enq | -| file://:0:0:0:0 | enq | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | enqueue | -| file://:0:0:0:0 | ensureCapacity | -| file://:0:0:0:0 | ensureCapacity | -| file://:0:0:0:0 | ensureCapacity | -| file://:0:0:0:0 | ensureCapacity | -| file://:0:0:0:0 | ensureCapacityInternal | -| file://:0:0:0:0 | ensureCapacityInternal | -| file://:0:0:0:0 | ensureClassInitialized | -| file://:0:0:0:0 | entry | -| file://:0:0:0:0 | entrySet | -| file://:0:0:0:0 | enumConstantDirectory | -| file://:0:0:0:0 | enumerate | -| file://:0:0:0:0 | enumerate | -| file://:0:0:0:0 | enumerate | -| file://:0:0:0:0 | enumerate | -| file://:0:0:0:0 | enumerate | -| file://:0:0:0:0 | enumerate | -| file://:0:0:0:0 | enumerate | -| file://:0:0:0:0 | enumerate | -| file://:0:0:0:0 | enumerateStringProperties | -| file://:0:0:0:0 | epochSecond | -| file://:0:0:0:0 | epochSecond | -| file://:0:0:0:0 | epochSecond | -| file://:0:0:0:0 | epochSecond | -| file://:0:0:0:0 | epochSecond | -| file://:0:0:0:0 | epochSecond | -| file://:0:0:0:0 | eq | -| file://:0:0:0:0 | eq | -| file://:0:0:0:0 | equalParamTypes | -| file://:0:0:0:0 | equalParamTypes | -| file://:0:0:0:0 | equalParamTypes | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equals | -| file://:0:0:0:0 | equalsIgnoreCase | -| file://:0:0:0:0 | equalsRange | -| file://:0:0:0:0 | eraOf | -| file://:0:0:0:0 | eraOf | -| file://:0:0:0:0 | eraOf | -| file://:0:0:0:0 | eras | -| file://:0:0:0:0 | eras | -| file://:0:0:0:0 | eras | -| file://:0:0:0:0 | erase | -| file://:0:0:0:0 | erasedType | -| file://:0:0:0:0 | estimateDepth | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | estimateSize | -| file://:0:0:0:0 | exactInvoker | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | exec | -| file://:0:0:0:0 | execute | -| file://:0:0:0:0 | execute | -| file://:0:0:0:0 | execute | -| file://:0:0:0:0 | execute | -| file://:0:0:0:0 | execute | -| file://:0:0:0:0 | execute | -| file://:0:0:0:0 | exists | -| file://:0:0:0:0 | exit | -| file://:0:0:0:0 | exit | -| file://:0:0:0:0 | explicitCastEquivalentToAsType | -| file://:0:0:0:0 | exports | -| file://:0:0:0:0 | exports | -| file://:0:0:0:0 | exports | -| file://:0:0:0:0 | exports | -| file://:0:0:0:0 | exports | -| file://:0:0:0:0 | exports | -| file://:0:0:0:0 | exprString | -| file://:0:0:0:0 | expressionCount | -| file://:0:0:0:0 | expungeStaleEntries | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | expungeStaleExceptions | -| file://:0:0:0:0 | extendWith | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalAwaitDone | -| file://:0:0:0:0 | externalHelpComplete | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalInterruptibleAwaitDone | -| file://:0:0:0:0 | externalPush | -| file://:0:0:0:0 | factory | -| file://:0:0:0:0 | factory | -| file://:0:0:0:0 | factory | -| file://:0:0:0:0 | factory | -| file://:0:0:0:0 | factory | -| file://:0:0:0:0 | failed | -| file://:0:0:0:0 | fastUUID | -| file://:0:0:0:0 | fieldCount | -| file://:0:0:0:0 | fieldCount | -| file://:0:0:0:0 | fieldCount | -| file://:0:0:0:0 | fieldTypes | -| file://:0:0:0:0 | fieldTypes | -| file://:0:0:0:0 | fileKey | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | fillInStackTrace | -| file://:0:0:0:0 | filter | -| file://:0:0:0:0 | filter | -| file://:0:0:0:0 | filter | -| file://:0:0:0:0 | filter | -| file://:0:0:0:0 | filter | -| file://:0:0:0:0 | filter | -| file://:0:0:0:0 | filter | -| file://:0:0:0:0 | filterArgumentForm | -| file://:0:0:0:0 | filterLog | -| file://:0:0:0:0 | filterReturnForm | -| file://:0:0:0:0 | filterTags | -| file://:0:0:0:0 | filterTags | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | finalize | -| file://:0:0:0:0 | find | -| file://:0:0:0:0 | find | -| file://:0:0:0:0 | find | -| file://:0:0:0:0 | find | -| file://:0:0:0:0 | find | -| file://:0:0:0:0 | find | -| file://:0:0:0:0 | find | -| file://:0:0:0:0 | findAll | -| file://:0:0:0:0 | findAny | -| file://:0:0:0:0 | findAny | -| file://:0:0:0:0 | findAny | -| file://:0:0:0:0 | findAny | -| file://:0:0:0:0 | findBootstrapClassOrNull | -| file://:0:0:0:0 | findClass | -| file://:0:0:0:0 | findClass | -| file://:0:0:0:0 | findEntry | -| file://:0:0:0:0 | findFactories | -| file://:0:0:0:0 | findFactory | -| file://:0:0:0:0 | findFactory | -| file://:0:0:0:0 | findFirst | -| file://:0:0:0:0 | findFirst | -| file://:0:0:0:0 | findFirst | -| file://:0:0:0:0 | findFirst | -| file://:0:0:0:0 | findForm | -| file://:0:0:0:0 | findGetter | -| file://:0:0:0:0 | findGetters | -| file://:0:0:0:0 | findLibrary | -| file://:0:0:0:0 | findLoadedClass | -| file://:0:0:0:0 | findLoader | -| file://:0:0:0:0 | findModule | -| file://:0:0:0:0 | findModule | -| file://:0:0:0:0 | findNodeFromTail | -| file://:0:0:0:0 | findNodeFromTail | -| file://:0:0:0:0 | findNodeFromTail | -| file://:0:0:0:0 | findPrimitiveType | -| file://:0:0:0:0 | findResource | -| file://:0:0:0:0 | findResource | -| file://:0:0:0:0 | findResources | -| file://:0:0:0:0 | findServices | -| file://:0:0:0:0 | findSpecies | -| file://:0:0:0:0 | findSpecies | -| file://:0:0:0:0 | findSystemClass | -| file://:0:0:0:0 | findTreeNode | -| file://:0:0:0:0 | findTypeVariable | -| file://:0:0:0:0 | findWrapperType | -| file://:0:0:0:0 | finishEntry | -| file://:0:0:0:0 | finishToArray | -| file://:0:0:0:0 | finishToArray | -| file://:0:0:0:0 | finishToArray | -| file://:0:0:0:0 | finishToArray | -| file://:0:0:0:0 | finisher | -| file://:0:0:0:0 | first | -| file://:0:0:0:0 | first | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstComplete | -| file://:0:0:0:0 | firstDayOfYear | -| file://:0:0:0:0 | firstKey | -| file://:0:0:0:0 | firstMonthOfQuarter | -| file://:0:0:0:0 | fixed | -| file://:0:0:0:0 | fixed | -| file://:0:0:0:0 | fixed | -| file://:0:0:0:0 | fixed | -| file://:0:0:0:0 | fixed | -| file://:0:0:0:0 | flatMap | -| file://:0:0:0:0 | flatMap | -| file://:0:0:0:0 | flatMap | -| file://:0:0:0:0 | flatMap | -| file://:0:0:0:0 | flatMap | -| file://:0:0:0:0 | flatMapToDouble | -| file://:0:0:0:0 | flatMapToInt | -| file://:0:0:0:0 | flatMapToLong | -| file://:0:0:0:0 | flip | -| file://:0:0:0:0 | flip | -| file://:0:0:0:0 | flip | -| file://:0:0:0:0 | flip | -| file://:0:0:0:0 | flip | -| file://:0:0:0:0 | flip | -| file://:0:0:0:0 | flip | -| file://:0:0:0:0 | flip | -| file://:0:0:0:0 | flip | -| file://:0:0:0:0 | flipBit | -| file://:0:0:0:0 | floatValue | -| file://:0:0:0:0 | flush | -| file://:0:0:0:0 | flush | -| file://:0:0:0:0 | flush | -| file://:0:0:0:0 | flush | -| file://:0:0:0:0 | flush | -| file://:0:0:0:0 | flush | -| file://:0:0:0:0 | flush | -| file://:0:0:0:0 | flush | -| file://:0:0:0:0 | flush | -| file://:0:0:0:0 | flush | -| file://:0:0:0:0 | flush | -| file://:0:0:0:0 | flushBuffer | -| file://:0:0:0:0 | foldArgumentsForm | -| file://:0:0:0:0 | foldArgumentsForm | -| file://:0:0:0:0 | forBasicType | -| file://:0:0:0:0 | forBasicType | -| file://:0:0:0:0 | forClass | -| file://:0:0:0:0 | forDigit | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEach | -| file://:0:0:0:0 | forEachEntry | -| file://:0:0:0:0 | forEachEntry | -| file://:0:0:0:0 | forEachKey | -| file://:0:0:0:0 | forEachKey | -| file://:0:0:0:0 | forEachOrdered | -| file://:0:0:0:0 | forEachOrdered | -| file://:0:0:0:0 | forEachOrdered | -| file://:0:0:0:0 | forEachOrdered | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachRemaining | -| file://:0:0:0:0 | forEachValue | -| file://:0:0:0:0 | forEachValue | -| file://:0:0:0:0 | forLanguageTag | -| file://:0:0:0:0 | forName | -| file://:0:0:0:0 | forName | -| file://:0:0:0:0 | forName | -| file://:0:0:0:0 | forName | -| file://:0:0:0:0 | forName | -| file://:0:0:0:0 | forName | -| file://:0:0:0:0 | forPrimitiveType | -| file://:0:0:0:0 | forPrimitiveType | -| file://:0:0:0:0 | forWrapperType | -| file://:0:0:0:0 | force | -| file://:0:0:0:0 | force | -| file://:0:0:0:0 | force | -| file://:0:0:0:0 | forceType | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | fork | -| file://:0:0:0:0 | form | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | format | -| file://:0:0:0:0 | formatTo | -| file://:0:0:0:0 | formatToCharacterIterator | -| file://:0:0:0:0 | formatToCharacterIterator | -| file://:0:0:0:0 | formatUnsignedInt | -| file://:0:0:0:0 | formatUnsignedInt | -| file://:0:0:0:0 | formatUnsignedLong0 | -| file://:0:0:0:0 | formatted | -| file://:0:0:0:0 | formatted | -| file://:0:0:0:0 | freeMemory | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | from | -| file://:0:0:0:0 | fromClosedRange | -| file://:0:0:0:0 | fromClosedRange | -| file://:0:0:0:0 | fromClosedRange | -| file://:0:0:0:0 | fromDescriptor | -| file://:0:0:0:0 | fromMethodDescriptorString | -| file://:0:0:0:0 | fromMillis | -| file://:0:0:0:0 | fromString | -| file://:0:0:0:0 | fromURI | -| file://:0:0:0:0 | fullFence | -| file://:0:0:0:0 | fullFence | -| file://:0:0:0:0 | fullGetFirstQueuedThread | -| file://:0:0:0:0 | fullGetFirstQueuedThread | -| file://:0:0:0:0 | fullGetFirstQueuedThread | -| file://:0:0:0:0 | fullyRelease | -| file://:0:0:0:0 | fullyRelease | -| file://:0:0:0:0 | fullyRelease | -| file://:0:0:0:0 | fullyRelease | -| file://:0:0:0:0 | gcd | -| file://:0:0:0:0 | generate | -| file://:0:0:0:0 | generate | -| file://:0:0:0:0 | generate | -| file://:0:0:0:0 | generate | -| file://:0:0:0:0 | generateConcreteSpeciesCode | -| file://:0:0:0:0 | generateConcreteSpeciesCode | -| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | -| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | -| file://:0:0:0:0 | generic | -| file://:0:0:0:0 | genericInvoker | -| file://:0:0:0:0 | genericMethodType | -| file://:0:0:0:0 | genericMethodType | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | get | -| file://:0:0:0:0 | getAbsoluteFile | -| file://:0:0:0:0 | getAbsolutePath | -| file://:0:0:0:0 | getAccess | -| file://:0:0:0:0 | getAcquire | -| file://:0:0:0:0 | getAcquire | -| file://:0:0:0:0 | getAcquire | -| file://:0:0:0:0 | getActions | -| file://:0:0:0:0 | getActions | -| file://:0:0:0:0 | getActions | -| file://:0:0:0:0 | getActions | -| file://:0:0:0:0 | getActions | -| file://:0:0:0:0 | getActiveThreadCount | -| file://:0:0:0:0 | getActualTypeArguments | -| file://:0:0:0:0 | getAddress | -| file://:0:0:0:0 | getAddress | -| file://:0:0:0:0 | getAddress | -| file://:0:0:0:0 | getAddress | -| file://:0:0:0:0 | getAddress | -| file://:0:0:0:0 | getAddressesFromNameService | -| file://:0:0:0:0 | getAlgorithm | -| file://:0:0:0:0 | getAlgorithm | -| file://:0:0:0:0 | getAlgorithm | -| file://:0:0:0:0 | getAllAttributeKeys | -| file://:0:0:0:0 | getAllByName | -| file://:0:0:0:0 | getAllByName0 | -| file://:0:0:0:0 | getAllGenericParameterTypes | -| file://:0:0:0:0 | getAllGenericParameterTypes | -| file://:0:0:0:0 | getAllGenericParameterTypes | -| file://:0:0:0:0 | getAllStackTraces | -| file://:0:0:0:0 | getAllStackTraces | -| file://:0:0:0:0 | getAllStackTraces | -| file://:0:0:0:0 | getAllowUserInteraction | -| file://:0:0:0:0 | getAndAccumulate | -| file://:0:0:0:0 | getAndAccumulate | -| file://:0:0:0:0 | getAndAdd | -| file://:0:0:0:0 | getAndAdd | -| file://:0:0:0:0 | getAndAddAcquire | -| file://:0:0:0:0 | getAndAddByte | -| file://:0:0:0:0 | getAndAddByteAcquire | -| file://:0:0:0:0 | getAndAddByteRelease | -| file://:0:0:0:0 | getAndAddChar | -| file://:0:0:0:0 | getAndAddCharAcquire | -| file://:0:0:0:0 | getAndAddCharRelease | -| file://:0:0:0:0 | getAndAddDouble | -| file://:0:0:0:0 | getAndAddDoubleAcquire | -| file://:0:0:0:0 | getAndAddDoubleRelease | -| file://:0:0:0:0 | getAndAddFloat | -| file://:0:0:0:0 | getAndAddFloatAcquire | -| file://:0:0:0:0 | getAndAddFloatRelease | -| file://:0:0:0:0 | getAndAddInt | -| file://:0:0:0:0 | getAndAddIntAcquire | -| file://:0:0:0:0 | getAndAddIntRelease | -| file://:0:0:0:0 | getAndAddLong | -| file://:0:0:0:0 | getAndAddLongAcquire | -| file://:0:0:0:0 | getAndAddLongRelease | -| file://:0:0:0:0 | getAndAddRelease | -| file://:0:0:0:0 | getAndAddShort | -| file://:0:0:0:0 | getAndAddShortAcquire | -| file://:0:0:0:0 | getAndAddShortRelease | -| file://:0:0:0:0 | getAndBitwiseAnd | -| file://:0:0:0:0 | getAndBitwiseAndAcquire | -| file://:0:0:0:0 | getAndBitwiseAndBoolean | -| file://:0:0:0:0 | getAndBitwiseAndBooleanAcquire | -| file://:0:0:0:0 | getAndBitwiseAndBooleanRelease | -| file://:0:0:0:0 | getAndBitwiseAndByte | -| file://:0:0:0:0 | getAndBitwiseAndByteAcquire | -| file://:0:0:0:0 | getAndBitwiseAndByteRelease | -| file://:0:0:0:0 | getAndBitwiseAndChar | -| file://:0:0:0:0 | getAndBitwiseAndCharAcquire | -| file://:0:0:0:0 | getAndBitwiseAndCharRelease | -| file://:0:0:0:0 | getAndBitwiseAndInt | -| file://:0:0:0:0 | getAndBitwiseAndIntAcquire | -| file://:0:0:0:0 | getAndBitwiseAndIntRelease | -| file://:0:0:0:0 | getAndBitwiseAndLong | -| file://:0:0:0:0 | getAndBitwiseAndLongAcquire | -| file://:0:0:0:0 | getAndBitwiseAndLongRelease | -| file://:0:0:0:0 | getAndBitwiseAndRelease | -| file://:0:0:0:0 | getAndBitwiseAndShort | -| file://:0:0:0:0 | getAndBitwiseAndShortAcquire | -| file://:0:0:0:0 | getAndBitwiseAndShortRelease | -| file://:0:0:0:0 | getAndBitwiseOr | -| file://:0:0:0:0 | getAndBitwiseOrAcquire | -| file://:0:0:0:0 | getAndBitwiseOrBoolean | -| file://:0:0:0:0 | getAndBitwiseOrBooleanAcquire | -| file://:0:0:0:0 | getAndBitwiseOrBooleanRelease | -| file://:0:0:0:0 | getAndBitwiseOrByte | -| file://:0:0:0:0 | getAndBitwiseOrByteAcquire | -| file://:0:0:0:0 | getAndBitwiseOrByteRelease | -| file://:0:0:0:0 | getAndBitwiseOrChar | -| file://:0:0:0:0 | getAndBitwiseOrCharAcquire | -| file://:0:0:0:0 | getAndBitwiseOrCharRelease | -| file://:0:0:0:0 | getAndBitwiseOrInt | -| file://:0:0:0:0 | getAndBitwiseOrIntAcquire | -| file://:0:0:0:0 | getAndBitwiseOrIntRelease | -| file://:0:0:0:0 | getAndBitwiseOrLong | -| file://:0:0:0:0 | getAndBitwiseOrLongAcquire | -| file://:0:0:0:0 | getAndBitwiseOrLongRelease | -| file://:0:0:0:0 | getAndBitwiseOrRelease | -| file://:0:0:0:0 | getAndBitwiseOrShort | -| file://:0:0:0:0 | getAndBitwiseOrShortAcquire | -| file://:0:0:0:0 | getAndBitwiseOrShortRelease | -| file://:0:0:0:0 | getAndBitwiseXor | -| file://:0:0:0:0 | getAndBitwiseXorAcquire | -| file://:0:0:0:0 | getAndBitwiseXorBoolean | -| file://:0:0:0:0 | getAndBitwiseXorBooleanAcquire | -| file://:0:0:0:0 | getAndBitwiseXorBooleanRelease | -| file://:0:0:0:0 | getAndBitwiseXorByte | -| file://:0:0:0:0 | getAndBitwiseXorByteAcquire | -| file://:0:0:0:0 | getAndBitwiseXorByteRelease | -| file://:0:0:0:0 | getAndBitwiseXorChar | -| file://:0:0:0:0 | getAndBitwiseXorCharAcquire | -| file://:0:0:0:0 | getAndBitwiseXorCharRelease | -| file://:0:0:0:0 | getAndBitwiseXorInt | -| file://:0:0:0:0 | getAndBitwiseXorIntAcquire | -| file://:0:0:0:0 | getAndBitwiseXorIntRelease | -| file://:0:0:0:0 | getAndBitwiseXorLong | -| file://:0:0:0:0 | getAndBitwiseXorLongAcquire | -| file://:0:0:0:0 | getAndBitwiseXorLongRelease | -| file://:0:0:0:0 | getAndBitwiseXorRelease | -| file://:0:0:0:0 | getAndBitwiseXorShort | -| file://:0:0:0:0 | getAndBitwiseXorShortAcquire | -| file://:0:0:0:0 | getAndBitwiseXorShortRelease | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndClearReferencePendingList | -| file://:0:0:0:0 | getAndDecrement | -| file://:0:0:0:0 | getAndIncrement | -| file://:0:0:0:0 | getAndSet | -| file://:0:0:0:0 | getAndSet | -| file://:0:0:0:0 | getAndSet | -| file://:0:0:0:0 | getAndSetAcquire | -| file://:0:0:0:0 | getAndSetBoolean | -| file://:0:0:0:0 | getAndSetBooleanAcquire | -| file://:0:0:0:0 | getAndSetBooleanRelease | -| file://:0:0:0:0 | getAndSetByte | -| file://:0:0:0:0 | getAndSetByteAcquire | -| file://:0:0:0:0 | getAndSetByteRelease | -| file://:0:0:0:0 | getAndSetChar | -| file://:0:0:0:0 | getAndSetCharAcquire | -| file://:0:0:0:0 | getAndSetCharRelease | -| file://:0:0:0:0 | getAndSetDouble | -| file://:0:0:0:0 | getAndSetDoubleAcquire | -| file://:0:0:0:0 | getAndSetDoubleRelease | -| file://:0:0:0:0 | getAndSetFloat | -| file://:0:0:0:0 | getAndSetFloatAcquire | -| file://:0:0:0:0 | getAndSetFloatRelease | -| file://:0:0:0:0 | getAndSetInt | -| file://:0:0:0:0 | getAndSetIntAcquire | -| file://:0:0:0:0 | getAndSetIntRelease | -| file://:0:0:0:0 | getAndSetLong | -| file://:0:0:0:0 | getAndSetLongAcquire | -| file://:0:0:0:0 | getAndSetLongRelease | -| file://:0:0:0:0 | getAndSetObject | -| file://:0:0:0:0 | getAndSetObjectAcquire | -| file://:0:0:0:0 | getAndSetObjectRelease | -| file://:0:0:0:0 | getAndSetRelease | -| file://:0:0:0:0 | getAndSetShort | -| file://:0:0:0:0 | getAndSetShortAcquire | -| file://:0:0:0:0 | getAndSetShortRelease | -| file://:0:0:0:0 | getAndUpdate | -| file://:0:0:0:0 | getAndUpdate | -| file://:0:0:0:0 | getAnnotatedBounds | -| file://:0:0:0:0 | getAnnotatedExceptionTypes | -| file://:0:0:0:0 | getAnnotatedExceptionTypes | -| file://:0:0:0:0 | getAnnotatedExceptionTypes | -| file://:0:0:0:0 | getAnnotatedInterfaces | -| file://:0:0:0:0 | getAnnotatedOwnerType | -| file://:0:0:0:0 | getAnnotatedParameterTypes | -| file://:0:0:0:0 | getAnnotatedParameterTypes | -| file://:0:0:0:0 | getAnnotatedParameterTypes | -| file://:0:0:0:0 | getAnnotatedReceiverType | -| file://:0:0:0:0 | getAnnotatedReceiverType | -| file://:0:0:0:0 | getAnnotatedReceiverType | -| file://:0:0:0:0 | getAnnotatedReturnType | -| file://:0:0:0:0 | getAnnotatedReturnType | -| file://:0:0:0:0 | getAnnotatedReturnType | -| file://:0:0:0:0 | getAnnotatedReturnType0 | -| file://:0:0:0:0 | getAnnotatedReturnType0 | -| file://:0:0:0:0 | getAnnotatedReturnType0 | -| file://:0:0:0:0 | getAnnotatedSuperclass | -| file://:0:0:0:0 | getAnnotatedType | -| file://:0:0:0:0 | getAnnotatedType | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotation | -| file://:0:0:0:0 | getAnnotationBytes | -| file://:0:0:0:0 | getAnnotationBytes | -| file://:0:0:0:0 | getAnnotationBytes | -| file://:0:0:0:0 | getAnnotationType | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotations | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getAnnotationsByType | -| file://:0:0:0:0 | getArgumentTypes | -| file://:0:0:0:0 | getArgumentTypes | -| file://:0:0:0:0 | getArgumentTypes | -| file://:0:0:0:0 | getArgumentsAndReturnSizes | -| file://:0:0:0:0 | getArgumentsAndReturnSizes | -| file://:0:0:0:0 | getAsDouble | -| file://:0:0:0:0 | getAsDouble | -| file://:0:0:0:0 | getAsInt | -| file://:0:0:0:0 | getAsInt | -| file://:0:0:0:0 | getAsLong | -| file://:0:0:0:0 | getAsLong | -| file://:0:0:0:0 | getAssignedCombiner | -| file://:0:0:0:0 | getAsyncMode | -| file://:0:0:0:0 | getAttribute | -| file://:0:0:0:0 | getAttribute | -| file://:0:0:0:0 | getAttribute | -| file://:0:0:0:0 | getAttributes | -| file://:0:0:0:0 | getAuthority | -| file://:0:0:0:0 | getAuthority | -| file://:0:0:0:0 | getAvailableChronologies | -| file://:0:0:0:0 | getAvailableChronologies | -| file://:0:0:0:0 | getAvailableChronologies | -| file://:0:0:0:0 | getAvailableLocales | -| file://:0:0:0:0 | getAvailableLocales | -| file://:0:0:0:0 | getAvailableZoneIds | -| file://:0:0:0:0 | getAvailableZoneIds | -| file://:0:0:0:0 | getAverage | -| file://:0:0:0:0 | getAverage | -| file://:0:0:0:0 | getAverage | -| file://:0:0:0:0 | getBaseLocale | -| file://:0:0:0:0 | getBaseUnit | -| file://:0:0:0:0 | getBaseUnit | -| file://:0:0:0:0 | getBeginIndex | -| file://:0:0:0:0 | getBeginIndex | -| file://:0:0:0:0 | getBeginIndex | -| file://:0:0:0:0 | getBlockSize | -| file://:0:0:0:0 | getBoolean | -| file://:0:0:0:0 | getBoolean | -| file://:0:0:0:0 | getBoolean | -| file://:0:0:0:0 | getBoolean | -| file://:0:0:0:0 | getBooleanAcquire | -| file://:0:0:0:0 | getBooleanOpaque | -| file://:0:0:0:0 | getBooleanVolatile | -| file://:0:0:0:0 | getBounds | -| file://:0:0:0:0 | getBounds | -| file://:0:0:0:0 | getBroadcast | -| file://:0:0:0:0 | getBuiltinAppClassLoader | -| file://:0:0:0:0 | getBuiltinPlatformClassLoader | -| file://:0:0:0:0 | getByAddress | -| file://:0:0:0:0 | getByAddress | -| file://:0:0:0:0 | getByIndex | -| file://:0:0:0:0 | getByInetAddress | -| file://:0:0:0:0 | getByName | -| file://:0:0:0:0 | getByName | -| file://:0:0:0:0 | getByte | -| file://:0:0:0:0 | getByte | -| file://:0:0:0:0 | getByte | -| file://:0:0:0:0 | getByte | -| file://:0:0:0:0 | getByteAcquire | -| file://:0:0:0:0 | getByteCodeIndex | -| file://:0:0:0:0 | getByteCodeIndex | -| file://:0:0:0:0 | getByteOpaque | -| file://:0:0:0:0 | getByteVolatile | -| file://:0:0:0:0 | getBytes | -| file://:0:0:0:0 | getBytes | -| file://:0:0:0:0 | getBytes | -| file://:0:0:0:0 | getBytes | -| file://:0:0:0:0 | getBytes | -| file://:0:0:0:0 | getBytes | -| file://:0:0:0:0 | getBytes | -| file://:0:0:0:0 | getBytes | -| file://:0:0:0:0 | getCache | -| file://:0:0:0:0 | getCalendarType | -| file://:0:0:0:0 | getCalendarType | -| file://:0:0:0:0 | getCalendarType | -| file://:0:0:0:0 | getCallSiteTarget | -| file://:0:0:0:0 | getCallerClass | -| file://:0:0:0:0 | getCanonicalFile | -| file://:0:0:0:0 | getCanonicalHostName | -| file://:0:0:0:0 | getCanonicalName | -| file://:0:0:0:0 | getCanonicalName | -| file://:0:0:0:0 | getCanonicalName | -| file://:0:0:0:0 | getCanonicalName | -| file://:0:0:0:0 | getCanonicalName | -| file://:0:0:0:0 | getCanonicalPath | -| file://:0:0:0:0 | getCause | -| file://:0:0:0:0 | getCertificates | -| file://:0:0:0:0 | getCertificates | -| file://:0:0:0:0 | getChar | -| file://:0:0:0:0 | getChar | -| file://:0:0:0:0 | getChar | -| file://:0:0:0:0 | getChar | -| file://:0:0:0:0 | getChar | -| file://:0:0:0:0 | getChar | -| file://:0:0:0:0 | getChar | -| file://:0:0:0:0 | getChar | -| file://:0:0:0:0 | getCharAcquire | -| file://:0:0:0:0 | getCharOpaque | -| file://:0:0:0:0 | getCharUnaligned | -| file://:0:0:0:0 | getCharUnaligned | -| file://:0:0:0:0 | getCharVolatile | -| file://:0:0:0:0 | getChars | -| file://:0:0:0:0 | getChars | -| file://:0:0:0:0 | getChars | -| file://:0:0:0:0 | getChars | -| file://:0:0:0:0 | getChars | -| file://:0:0:0:0 | getChars | -| file://:0:0:0:0 | getChronology | -| file://:0:0:0:0 | getChronology | -| file://:0:0:0:0 | getChronology | -| file://:0:0:0:0 | getChronology | -| file://:0:0:0:0 | getChronology | -| file://:0:0:0:0 | getChronology | -| file://:0:0:0:0 | getChronology | -| file://:0:0:0:0 | getChronology | -| file://:0:0:0:0 | getChronology | -| file://:0:0:0:0 | getClass | -| file://:0:0:0:0 | getClassAt | -| file://:0:0:0:0 | getClassAtIfLoaded | -| file://:0:0:0:0 | getClassDataLayout | -| file://:0:0:0:0 | getClassLoader | -| file://:0:0:0:0 | getClassLoader | -| file://:0:0:0:0 | getClassLoader | -| file://:0:0:0:0 | getClassLoader | -| file://:0:0:0:0 | getClassLoader | -| file://:0:0:0:0 | getClassLoader0 | -| file://:0:0:0:0 | getClassLoaderName | -| file://:0:0:0:0 | getClassLoadingLock | -| file://:0:0:0:0 | getClassName | -| file://:0:0:0:0 | getClassName | -| file://:0:0:0:0 | getClassName | -| file://:0:0:0:0 | getClassName | -| file://:0:0:0:0 | getClassName | -| file://:0:0:0:0 | getClassName | -| file://:0:0:0:0 | getClassRefIndexAt | -| file://:0:0:0:0 | getClassSignature | -| file://:0:0:0:0 | getClasses | -| file://:0:0:0:0 | getCleanerImpl | -| file://:0:0:0:0 | getCodeSigners | -| file://:0:0:0:0 | getCodeSource | -| file://:0:0:0:0 | getCoder | -| file://:0:0:0:0 | getCoder | -| file://:0:0:0:0 | getCoder | -| file://:0:0:0:0 | getCombiner | -| file://:0:0:0:0 | getCommonPoolParallelism | -| file://:0:0:0:0 | getCommonSuperClass | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getComparator | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getCompleter | -| file://:0:0:0:0 | getComponentType | -| file://:0:0:0:0 | getComponentType | -| file://:0:0:0:0 | getConnectTimeout | -| file://:0:0:0:0 | getConstantPool | -| file://:0:0:0:0 | getConstructor | -| file://:0:0:0:0 | getConstructorAccessor | -| file://:0:0:0:0 | getConstructorAccessor | -| file://:0:0:0:0 | getConstructorAccessor | -| file://:0:0:0:0 | getConstructorAnnotations | -| file://:0:0:0:0 | getConstructorDescriptor | -| file://:0:0:0:0 | getConstructorParameterAnnotations | -| file://:0:0:0:0 | getConstructorSignature | -| file://:0:0:0:0 | getConstructorSlot | -| file://:0:0:0:0 | getConstructors | -| file://:0:0:0:0 | getConstructors | -| file://:0:0:0:0 | getContent | -| file://:0:0:0:0 | getContent | -| file://:0:0:0:0 | getContent | -| file://:0:0:0:0 | getContent | -| file://:0:0:0:0 | getContent | -| file://:0:0:0:0 | getContent | -| file://:0:0:0:0 | getContentEncoding | -| file://:0:0:0:0 | getContentLength | -| file://:0:0:0:0 | getContentLengthLong | -| file://:0:0:0:0 | getContentType | -| file://:0:0:0:0 | getContentTypeFor | -| file://:0:0:0:0 | getContext | -| file://:0:0:0:0 | getContextClassLoader | -| file://:0:0:0:0 | getContextClassLoader | -| file://:0:0:0:0 | getContextClassLoader | -| file://:0:0:0:0 | getCount | -| file://:0:0:0:0 | getCount | -| file://:0:0:0:0 | getCount | -| file://:0:0:0:0 | getCount | -| file://:0:0:0:0 | getCount | -| file://:0:0:0:0 | getCount | -| file://:0:0:0:0 | getCountry | -| file://:0:0:0:0 | getDate | -| file://:0:0:0:0 | getDate | -| file://:0:0:0:0 | getDateTimeAfter | -| file://:0:0:0:0 | getDateTimeBefore | -| file://:0:0:0:0 | getDay | -| file://:0:0:0:0 | getDayOfMonth | -| file://:0:0:0:0 | getDayOfMonth | -| file://:0:0:0:0 | getDayOfMonth | -| file://:0:0:0:0 | getDayOfMonth | -| file://:0:0:0:0 | getDayOfMonthIndicator | -| file://:0:0:0:0 | getDayOfWeek | -| file://:0:0:0:0 | getDayOfWeek | -| file://:0:0:0:0 | getDayOfWeek | -| file://:0:0:0:0 | getDayOfWeek | -| file://:0:0:0:0 | getDayOfWeek | -| file://:0:0:0:0 | getDayOfYear | -| file://:0:0:0:0 | getDayOfYear | -| file://:0:0:0:0 | getDayOfYear | -| file://:0:0:0:0 | getDayOfYear | -| file://:0:0:0:0 | getDaylightSavings | -| file://:0:0:0:0 | getDays | -| file://:0:0:0:0 | getDebug | -| file://:0:0:0:0 | getDecimalSeparator | -| file://:0:0:0:0 | getDecimalStyle | -| file://:0:0:0:0 | getDecimalStyle | -| file://:0:0:0:0 | getDecimalStyle | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotation | -| file://:0:0:0:0 | getDeclaredAnnotationMap | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotations | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | -| file://:0:0:0:0 | getDeclaredClasses | -| file://:0:0:0:0 | getDeclaredConstructor | -| file://:0:0:0:0 | getDeclaredConstructors | -| file://:0:0:0:0 | getDeclaredField | -| file://:0:0:0:0 | getDeclaredFields | -| file://:0:0:0:0 | getDeclaredMethod | -| file://:0:0:0:0 | getDeclaredMethods | -| file://:0:0:0:0 | getDeclaredPublicMethods | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringClass | -| file://:0:0:0:0 | getDeclaringExecutable | -| file://:0:0:0:0 | getDefault | -| file://:0:0:0:0 | getDefault | -| file://:0:0:0:0 | getDefault | -| file://:0:0:0:0 | getDefaultAllowUserInteraction | -| file://:0:0:0:0 | getDefaultPort | -| file://:0:0:0:0 | getDefaultPort | -| file://:0:0:0:0 | getDefaultRequestProperty | -| file://:0:0:0:0 | getDefaultSecureRandomService | -| file://:0:0:0:0 | getDefaultUncaughtExceptionHandler | -| file://:0:0:0:0 | getDefaultUncaughtExceptionHandler | -| file://:0:0:0:0 | getDefaultUncaughtExceptionHandler | -| file://:0:0:0:0 | getDefaultUseCaches | -| file://:0:0:0:0 | getDefaultUseCaches | -| file://:0:0:0:0 | getDefaultValue | -| file://:0:0:0:0 | getDefinedPackage | -| file://:0:0:0:0 | getDefinedPackages | -| file://:0:0:0:0 | getDefinition | -| file://:0:0:0:0 | getDesc | -| file://:0:0:0:0 | getDescriptor | -| file://:0:0:0:0 | getDescriptor | -| file://:0:0:0:0 | getDescriptor | -| file://:0:0:0:0 | getDescriptor | -| file://:0:0:0:0 | getDescriptor | -| file://:0:0:0:0 | getDimensions | -| file://:0:0:0:0 | getDirectionality | -| file://:0:0:0:0 | getDirectionality | -| file://:0:0:0:0 | getDisplayCountry | -| file://:0:0:0:0 | getDisplayCountry | -| file://:0:0:0:0 | getDisplayLanguage | -| file://:0:0:0:0 | getDisplayLanguage | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayName | -| file://:0:0:0:0 | getDisplayScript | -| file://:0:0:0:0 | getDisplayScript | -| file://:0:0:0:0 | getDisplayVariant | -| file://:0:0:0:0 | getDisplayVariant | -| file://:0:0:0:0 | getDoInput | -| file://:0:0:0:0 | getDoOutput | -| file://:0:0:0:0 | getDollar | -| file://:0:0:0:0 | getDomainCombiner | -| file://:0:0:0:0 | getDouble | -| file://:0:0:0:0 | getDouble | -| file://:0:0:0:0 | getDouble | -| file://:0:0:0:0 | getDouble | -| file://:0:0:0:0 | getDouble | -| file://:0:0:0:0 | getDouble | -| file://:0:0:0:0 | getDouble | -| file://:0:0:0:0 | getDouble | -| file://:0:0:0:0 | getDoubleAcquire | -| file://:0:0:0:0 | getDoubleAt | -| file://:0:0:0:0 | getDoubleOpaque | -| file://:0:0:0:0 | getDoubleVolatile | -| file://:0:0:0:0 | getDuration | -| file://:0:0:0:0 | getDuration | -| file://:0:0:0:0 | getDuration | -| file://:0:0:0:0 | getEffectiveChronology | -| file://:0:0:0:0 | getElementType | -| file://:0:0:0:0 | getEnclosingClass | -| file://:0:0:0:0 | getEnclosingConstructor | -| file://:0:0:0:0 | getEnclosingMethod | -| file://:0:0:0:0 | getEncoded | -| file://:0:0:0:0 | getEncoded | -| file://:0:0:0:0 | getEncoded | -| file://:0:0:0:0 | getEncoded | -| file://:0:0:0:0 | getEncoded | -| file://:0:0:0:0 | getEncodings | -| file://:0:0:0:0 | getEndIndex | -| file://:0:0:0:0 | getEndIndex | -| file://:0:0:0:0 | getEndIndex | -| file://:0:0:0:0 | getEntry | -| file://:0:0:0:0 | getEntry | -| file://:0:0:0:0 | getEnumConstants | -| file://:0:0:0:0 | getEnumConstantsShared | -| file://:0:0:0:0 | getEnumeration | -| file://:0:0:0:0 | getEnumeration | -| file://:0:0:0:0 | getEpochSecond | -| file://:0:0:0:0 | getEra | -| file://:0:0:0:0 | getEra | -| file://:0:0:0:0 | getErrorIndex | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getExactSizeIfKnown | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getException | -| file://:0:0:0:0 | getExceptionTypes | -| file://:0:0:0:0 | getExceptionTypes | -| file://:0:0:0:0 | getExceptionTypes | -| file://:0:0:0:0 | getExceptionTypes | -| file://:0:0:0:0 | getExceptionTypes | -| file://:0:0:0:0 | getExceptionTypes | -| file://:0:0:0:0 | getExclusiveOwnerThread | -| file://:0:0:0:0 | getExclusiveOwnerThread | -| file://:0:0:0:0 | getExclusiveOwnerThread | -| file://:0:0:0:0 | getExclusiveOwnerThread | -| file://:0:0:0:0 | getExclusiveOwnerThread | -| file://:0:0:0:0 | getExclusiveQueuedThreads | -| file://:0:0:0:0 | getExclusiveQueuedThreads | -| file://:0:0:0:0 | getExclusiveQueuedThreads | -| file://:0:0:0:0 | getExclusiveQueuedThreads | -| file://:0:0:0:0 | getExecutableSharedParameterTypes | -| file://:0:0:0:0 | getExecutableSharedParameterTypes | -| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | -| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | -| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | -| file://:0:0:0:0 | getExpiration | -| file://:0:0:0:0 | getExtension | -| file://:0:0:0:0 | getExtension | -| file://:0:0:0:0 | getExtensionKeys | -| file://:0:0:0:0 | getExtensionValue | -| file://:0:0:0:0 | getFactory | -| file://:0:0:0:0 | getFactory | -| file://:0:0:0:0 | getFactory | -| file://:0:0:0:0 | getFactory | -| file://:0:0:0:0 | getFactory | -| file://:0:0:0:0 | getFamily | -| file://:0:0:0:0 | getFence | -| file://:0:0:0:0 | getFence | -| file://:0:0:0:0 | getFence | -| file://:0:0:0:0 | getFence | -| file://:0:0:0:0 | getField | -| file://:0:0:0:0 | getField | -| file://:0:0:0:0 | getField | -| file://:0:0:0:0 | getField | -| file://:0:0:0:0 | getField | -| file://:0:0:0:0 | getFieldAt | -| file://:0:0:0:0 | getFieldAtIfLoaded | -| file://:0:0:0:0 | getFieldAttribute | -| file://:0:0:0:0 | getFieldDelegate | -| file://:0:0:0:0 | getFieldType | -| file://:0:0:0:0 | getFields | -| file://:0:0:0:0 | getFields | -| file://:0:0:0:0 | getFields | -| file://:0:0:0:0 | getFields | -| file://:0:0:0:0 | getFields | -| file://:0:0:0:0 | getFile | -| file://:0:0:0:0 | getFileAttributeView | -| file://:0:0:0:0 | getFileName | -| file://:0:0:0:0 | getFileName | -| file://:0:0:0:0 | getFileName | -| file://:0:0:0:0 | getFileName | -| file://:0:0:0:0 | getFileNameMap | -| file://:0:0:0:0 | getFileStore | -| file://:0:0:0:0 | getFileStoreAttributeView | -| file://:0:0:0:0 | getFileStores | -| file://:0:0:0:0 | getFileSystem | -| file://:0:0:0:0 | getFileSystem | -| file://:0:0:0:0 | getFirst | -| file://:0:0:0:0 | getFirst | -| file://:0:0:0:0 | getFirstQueuedThread | -| file://:0:0:0:0 | getFirstQueuedThread | -| file://:0:0:0:0 | getFirstQueuedThread | -| file://:0:0:0:0 | getFirstQueuedThread | -| file://:0:0:0:0 | getFloat | -| file://:0:0:0:0 | getFloat | -| file://:0:0:0:0 | getFloat | -| file://:0:0:0:0 | getFloat | -| file://:0:0:0:0 | getFloat | -| file://:0:0:0:0 | getFloat | -| file://:0:0:0:0 | getFloat | -| file://:0:0:0:0 | getFloat | -| file://:0:0:0:0 | getFloatAcquire | -| file://:0:0:0:0 | getFloatAt | -| file://:0:0:0:0 | getFloatOpaque | -| file://:0:0:0:0 | getFloatVolatile | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getForkJoinTaskTag | -| file://:0:0:0:0 | getFormalTypeParameters | -| file://:0:0:0:0 | getFormalTypeParameters | -| file://:0:0:0:0 | getFormalTypeParameters | -| file://:0:0:0:0 | getFormat | -| file://:0:0:0:0 | getFormat | -| file://:0:0:0:0 | getFragment | -| file://:0:0:0:0 | getFreeSpace | -| file://:0:0:0:0 | getFrom | -| file://:0:0:0:0 | getFrom | -| file://:0:0:0:0 | getFromClass | -| file://:0:0:0:0 | getGenericDeclaration | -| file://:0:0:0:0 | getGenericExceptionTypes | -| file://:0:0:0:0 | getGenericExceptionTypes | -| file://:0:0:0:0 | getGenericExceptionTypes | -| file://:0:0:0:0 | getGenericInfo | -| file://:0:0:0:0 | getGenericInfo | -| file://:0:0:0:0 | getGenericInfo | -| file://:0:0:0:0 | getGenericInterfaces | -| file://:0:0:0:0 | getGenericParameterTypes | -| file://:0:0:0:0 | getGenericParameterTypes | -| file://:0:0:0:0 | getGenericParameterTypes | -| file://:0:0:0:0 | getGenericReturnType | -| file://:0:0:0:0 | getGenericSuperclass | -| file://:0:0:0:0 | getGenericType | -| file://:0:0:0:0 | getHardwareAddress | -| file://:0:0:0:0 | getHeaderField | -| file://:0:0:0:0 | getHeaderField | -| file://:0:0:0:0 | getHeaderFieldDate | -| file://:0:0:0:0 | getHeaderFieldInt | -| file://:0:0:0:0 | getHeaderFieldKey | -| file://:0:0:0:0 | getHeaderFieldLong | -| file://:0:0:0:0 | getHeaderFields | -| file://:0:0:0:0 | getHoldCount | -| file://:0:0:0:0 | getHoldCount | -| file://:0:0:0:0 | getHoldCount | -| file://:0:0:0:0 | getHoldCount | -| file://:0:0:0:0 | getHoldCount | -| file://:0:0:0:0 | getHost | -| file://:0:0:0:0 | getHost | -| file://:0:0:0:0 | getHostAddress | -| file://:0:0:0:0 | getHostAddress | -| file://:0:0:0:0 | getHostAddress | -| file://:0:0:0:0 | getHostByAddr | -| file://:0:0:0:0 | getHostName | -| file://:0:0:0:0 | getHostName | -| file://:0:0:0:0 | getHostName | -| file://:0:0:0:0 | getHour | -| file://:0:0:0:0 | getHour | -| file://:0:0:0:0 | getHour | -| file://:0:0:0:0 | getHour | -| file://:0:0:0:0 | getHour | -| file://:0:0:0:0 | getHours | -| file://:0:0:0:0 | getID | -| file://:0:0:0:0 | getID | -| file://:0:0:0:0 | getISO3Country | -| file://:0:0:0:0 | getISO3Language | -| file://:0:0:0:0 | getISOCountries | -| file://:0:0:0:0 | getISOCountries | -| file://:0:0:0:0 | getISOLanguages | -| file://:0:0:0:0 | getId | -| file://:0:0:0:0 | getId | -| file://:0:0:0:0 | getId | -| file://:0:0:0:0 | getId | -| file://:0:0:0:0 | getId | -| file://:0:0:0:0 | getId | -| file://:0:0:0:0 | getId | -| file://:0:0:0:0 | getId | -| file://:0:0:0:0 | getIdentifier | -| file://:0:0:0:0 | getIfModifiedSince | -| file://:0:0:0:0 | getImplementationTitle | -| file://:0:0:0:0 | getImplementationVendor | -| file://:0:0:0:0 | getImplementationVersion | -| file://:0:0:0:0 | getIndex | -| file://:0:0:0:0 | getIndex | -| file://:0:0:0:0 | getIndex | -| file://:0:0:0:0 | getIndex | -| file://:0:0:0:0 | getInetAddresses | -| file://:0:0:0:0 | getInfo | -| file://:0:0:0:0 | getInputStream | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstance | -| file://:0:0:0:0 | getInstant | -| file://:0:0:0:0 | getInt | -| file://:0:0:0:0 | getInt | -| file://:0:0:0:0 | getInt | -| file://:0:0:0:0 | getInt | -| file://:0:0:0:0 | getInt | -| file://:0:0:0:0 | getInt | -| file://:0:0:0:0 | getInt | -| file://:0:0:0:0 | getInt | -| file://:0:0:0:0 | getIntAcquire | -| file://:0:0:0:0 | getIntAt | -| file://:0:0:0:0 | getIntOpaque | -| file://:0:0:0:0 | getIntUnaligned | -| file://:0:0:0:0 | getIntUnaligned | -| file://:0:0:0:0 | getIntVolatile | -| file://:0:0:0:0 | getInteger | -| file://:0:0:0:0 | getInteger | -| file://:0:0:0:0 | getInteger | -| file://:0:0:0:0 | getInterfaceAddresses | -| file://:0:0:0:0 | getInterfaces | -| file://:0:0:0:0 | getInterfaces | -| file://:0:0:0:0 | getInternalName | -| file://:0:0:0:0 | getInternalName | -| file://:0:0:0:0 | getInvocationType | -| file://:0:0:0:0 | getItem | -| file://:0:0:0:0 | getItemCount | -| file://:0:0:0:0 | getIterator | -| file://:0:0:0:0 | getIterator | -| file://:0:0:0:0 | getKey | -| file://:0:0:0:0 | getKey | -| file://:0:0:0:0 | getKeys | -| file://:0:0:0:0 | getLabels | -| file://:0:0:0:0 | getLabels | -| file://:0:0:0:0 | getLabels | -| file://:0:0:0:0 | getLanguage | -| file://:0:0:0:0 | getLanguage | -| file://:0:0:0:0 | getLargestMinimum | -| file://:0:0:0:0 | getLast | -| file://:0:0:0:0 | getLastModified | -| file://:0:0:0:0 | getLayer | -| file://:0:0:0:0 | getLength | -| file://:0:0:0:0 | getLineNumber | -| file://:0:0:0:0 | getLineNumber | -| file://:0:0:0:0 | getLineNumber | -| file://:0:0:0:0 | getLoadAverage | -| file://:0:0:0:0 | getLocalDesc | -| file://:0:0:0:0 | getLocalHost | -| file://:0:0:0:0 | getLocalHostName | -| file://:0:0:0:0 | getLocalTime | -| file://:0:0:0:0 | getLocale | -| file://:0:0:0:0 | getLocale | -| file://:0:0:0:0 | getLocale | -| file://:0:0:0:0 | getLocaleExtensions | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocalizedMessage | -| file://:0:0:0:0 | getLocation | -| file://:0:0:0:0 | getLocationNoFragString | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLong | -| file://:0:0:0:0 | getLongAcquire | -| file://:0:0:0:0 | getLongAt | -| file://:0:0:0:0 | getLongOpaque | -| file://:0:0:0:0 | getLongUnaligned | -| file://:0:0:0:0 | getLongUnaligned | -| file://:0:0:0:0 | getLongVolatile | -| file://:0:0:0:0 | getLoopbackAddress | -| file://:0:0:0:0 | getLowerBounds | -| file://:0:0:0:0 | getLowerBounds | -| file://:0:0:0:0 | getLowestSetBit | -| file://:0:0:0:0 | getMTU | -| file://:0:0:0:0 | getMap | -| file://:0:0:0:0 | getMap | -| file://:0:0:0:0 | getMap | -| file://:0:0:0:0 | getMap | -| file://:0:0:0:0 | getMap | -| file://:0:0:0:0 | getMap | -| file://:0:0:0:0 | getMappedValue | -| file://:0:0:0:0 | getMax | -| file://:0:0:0:0 | getMax | -| file://:0:0:0:0 | getMax | -| file://:0:0:0:0 | getMaxPriority | -| file://:0:0:0:0 | getMaxStringLength | -| file://:0:0:0:0 | getMaximum | -| file://:0:0:0:0 | getMemberName | -| file://:0:0:0:0 | getMemberName | -| file://:0:0:0:0 | getMemberRefInfoAt | -| file://:0:0:0:0 | getMembers | -| file://:0:0:0:0 | getMergedType | -| file://:0:0:0:0 | getMessage | -| file://:0:0:0:0 | getMethod | -| file://:0:0:0:0 | getMethodAccessor | -| file://:0:0:0:0 | getMethodAccessor | -| file://:0:0:0:0 | getMethodAccessor | -| file://:0:0:0:0 | getMethodAt | -| file://:0:0:0:0 | getMethodAtIfLoaded | -| file://:0:0:0:0 | getMethodDescriptor | -| file://:0:0:0:0 | getMethodDescriptor | -| file://:0:0:0:0 | getMethodDescriptor | -| file://:0:0:0:0 | getMethodHandle | -| file://:0:0:0:0 | getMethodName | -| file://:0:0:0:0 | getMethodName | -| file://:0:0:0:0 | getMethodName | -| file://:0:0:0:0 | getMethodOrFieldType | -| file://:0:0:0:0 | getMethodType | -| file://:0:0:0:0 | getMethodType | -| file://:0:0:0:0 | getMethodType | -| file://:0:0:0:0 | getMethodType | -| file://:0:0:0:0 | getMethodType | -| file://:0:0:0:0 | getMethodType | -| file://:0:0:0:0 | getMethodType_V | -| file://:0:0:0:0 | getMethodType_V_init | -| file://:0:0:0:0 | getMethods | -| file://:0:0:0:0 | getMethods | -| file://:0:0:0:0 | getMethods | -| file://:0:0:0:0 | getMillisOf | -| file://:0:0:0:0 | getMin | -| file://:0:0:0:0 | getMin | -| file://:0:0:0:0 | getMin | -| file://:0:0:0:0 | getMinimum | -| file://:0:0:0:0 | getMinute | -| file://:0:0:0:0 | getMinute | -| file://:0:0:0:0 | getMinute | -| file://:0:0:0:0 | getMinute | -| file://:0:0:0:0 | getMinute | -| file://:0:0:0:0 | getMinutes | -| file://:0:0:0:0 | getModifiers | -| file://:0:0:0:0 | getModifiers | -| file://:0:0:0:0 | getModifiers | -| file://:0:0:0:0 | getModifiers | -| file://:0:0:0:0 | getModifiers | -| file://:0:0:0:0 | getModifiers | -| file://:0:0:0:0 | getModifiers | -| file://:0:0:0:0 | getModifiers | -| file://:0:0:0:0 | getModule | -| file://:0:0:0:0 | getModuleName | -| file://:0:0:0:0 | getModuleVersion | -| file://:0:0:0:0 | getMonth | -| file://:0:0:0:0 | getMonth | -| file://:0:0:0:0 | getMonth | -| file://:0:0:0:0 | getMonth | -| file://:0:0:0:0 | getMonth | -| file://:0:0:0:0 | getMonth | -| file://:0:0:0:0 | getMonthValue | -| file://:0:0:0:0 | getMonthValue | -| file://:0:0:0:0 | getMonthValue | -| file://:0:0:0:0 | getMonthValue | -| file://:0:0:0:0 | getMonths | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getName | -| file://:0:0:0:0 | getNameAndTypeRefIndexAt | -| file://:0:0:0:0 | getNameAndTypeRefInfoAt | -| file://:0:0:0:0 | getNameCount | -| file://:0:0:0:0 | getNano | -| file://:0:0:0:0 | getNano | -| file://:0:0:0:0 | getNano | -| file://:0:0:0:0 | getNano | -| file://:0:0:0:0 | getNano | -| file://:0:0:0:0 | getNano | -| file://:0:0:0:0 | getNano | -| file://:0:0:0:0 | getNegativeSign | -| file://:0:0:0:0 | getNestHost | -| file://:0:0:0:0 | getNestMembers | -| file://:0:0:0:0 | getNestedTypes | -| file://:0:0:0:0 | getNetworkInterfaces | -| file://:0:0:0:0 | getNetworkPrefixLength | -| file://:0:0:0:0 | getNumObjFields | -| file://:0:0:0:0 | getNumericValue | -| file://:0:0:0:0 | getNumericValue | -| file://:0:0:0:0 | getObjFieldValues | -| file://:0:0:0:0 | getObject | -| file://:0:0:0:0 | getObjectAcquire | -| file://:0:0:0:0 | getObjectInputFilter | -| file://:0:0:0:0 | getObjectOpaque | -| file://:0:0:0:0 | getObjectStreamClass | -| file://:0:0:0:0 | getObjectType | -| file://:0:0:0:0 | getObjectVolatile | -| file://:0:0:0:0 | getOffset | -| file://:0:0:0:0 | getOffset | -| file://:0:0:0:0 | getOffset | -| file://:0:0:0:0 | getOffset | -| file://:0:0:0:0 | getOffset | -| file://:0:0:0:0 | getOffset | -| file://:0:0:0:0 | getOffset | -| file://:0:0:0:0 | getOffset | -| file://:0:0:0:0 | getOffsetAfter | -| file://:0:0:0:0 | getOffsetAfter | -| file://:0:0:0:0 | getOffsetBefore | -| file://:0:0:0:0 | getOffsetBefore | -| file://:0:0:0:0 | getOpaque | -| file://:0:0:0:0 | getOpaque | -| file://:0:0:0:0 | getOpaque | -| file://:0:0:0:0 | getOpcode | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOrDefault | -| file://:0:0:0:0 | getOriginalHostName | -| file://:0:0:0:0 | getOutputStream | -| file://:0:0:0:0 | getOwner | -| file://:0:0:0:0 | getOwner | -| file://:0:0:0:0 | getOwner | -| file://:0:0:0:0 | getOwner | -| file://:0:0:0:0 | getOwner | -| file://:0:0:0:0 | getOwner | -| file://:0:0:0:0 | getOwnerType | -| file://:0:0:0:0 | getPackage | -| file://:0:0:0:0 | getPackage | -| file://:0:0:0:0 | getPackage | -| file://:0:0:0:0 | getPackageName | -| file://:0:0:0:0 | getPackages | -| file://:0:0:0:0 | getPackages | -| file://:0:0:0:0 | getPackages | -| file://:0:0:0:0 | getParallelism | -| file://:0:0:0:0 | getParameterAnnotations | -| file://:0:0:0:0 | getParameterAnnotations | -| file://:0:0:0:0 | getParameterAnnotations | -| file://:0:0:0:0 | getParameterCount | -| file://:0:0:0:0 | getParameterCount | -| file://:0:0:0:0 | getParameterCount | -| file://:0:0:0:0 | getParameterTypes | -| file://:0:0:0:0 | getParameterTypes | -| file://:0:0:0:0 | getParameterTypes | -| file://:0:0:0:0 | getParameterTypes | -| file://:0:0:0:0 | getParameterTypes | -| file://:0:0:0:0 | getParameterTypes | -| file://:0:0:0:0 | getParameterTypes | -| file://:0:0:0:0 | getParameterizedType | -| file://:0:0:0:0 | getParameters | -| file://:0:0:0:0 | getParameters | -| file://:0:0:0:0 | getParameters | -| file://:0:0:0:0 | getParameters0 | -| file://:0:0:0:0 | getParameters0 | -| file://:0:0:0:0 | getParent | -| file://:0:0:0:0 | getParent | -| file://:0:0:0:0 | getParent | -| file://:0:0:0:0 | getParent | -| file://:0:0:0:0 | getParent | -| file://:0:0:0:0 | getParentFile | -| file://:0:0:0:0 | getParsed | -| file://:0:0:0:0 | getPath | -| file://:0:0:0:0 | getPath | -| file://:0:0:0:0 | getPath | -| file://:0:0:0:0 | getPath | -| file://:0:0:0:0 | getPath | -| file://:0:0:0:0 | getPath | -| file://:0:0:0:0 | getPathMatcher | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPendingCount | -| file://:0:0:0:0 | getPermission | -| file://:0:0:0:0 | getPermissions | -| file://:0:0:0:0 | getPlain | -| file://:0:0:0:0 | getPlain | -| file://:0:0:0:0 | getPlatformClassLoader | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPool | -| file://:0:0:0:0 | getPoolIndex | -| file://:0:0:0:0 | getPoolIndex | -| file://:0:0:0:0 | getPoolIndex | -| file://:0:0:0:0 | getPoolSize | -| file://:0:0:0:0 | getPort | -| file://:0:0:0:0 | getPort | -| file://:0:0:0:0 | getPositiveSign | -| file://:0:0:0:0 | getPrefixLength | -| file://:0:0:0:0 | getPrimDataSize | -| file://:0:0:0:0 | getPrimFieldValues | -| file://:0:0:0:0 | getPrimitiveClass | -| file://:0:0:0:0 | getPrincipals | -| file://:0:0:0:0 | getPrincipals | -| file://:0:0:0:0 | getPrincipals | -| file://:0:0:0:0 | getPrintStream | -| file://:0:0:0:0 | getPriority | -| file://:0:0:0:0 | getPriority | -| file://:0:0:0:0 | getPriority | -| file://:0:0:0:0 | getPrivateCredentials | -| file://:0:0:0:0 | getPrivateCredentials | -| file://:0:0:0:0 | getProperty | -| file://:0:0:0:0 | getProperty | -| file://:0:0:0:0 | getProperty | -| file://:0:0:0:0 | getProperty | -| file://:0:0:0:0 | getProtectionDomain | -| file://:0:0:0:0 | getProtocol | -| file://:0:0:0:0 | getProtocolVersion | -| file://:0:0:0:0 | getProvider | -| file://:0:0:0:0 | getPublicCredentials | -| file://:0:0:0:0 | getPublicCredentials | -| file://:0:0:0:0 | getPublicKey | -| file://:0:0:0:0 | getQuery | -| file://:0:0:0:0 | getQuery | -| file://:0:0:0:0 | getQueueLength | -| file://:0:0:0:0 | getQueueLength | -| file://:0:0:0:0 | getQueueLength | -| file://:0:0:0:0 | getQueueLength | -| file://:0:0:0:0 | getQueueLength | -| file://:0:0:0:0 | getQueueLength | -| file://:0:0:0:0 | getQueuedSubmissionCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedTaskCount | -| file://:0:0:0:0 | getQueuedThreads | -| file://:0:0:0:0 | getQueuedThreads | -| file://:0:0:0:0 | getQueuedThreads | -| file://:0:0:0:0 | getQueuedThreads | -| file://:0:0:0:0 | getQueuedThreads | -| file://:0:0:0:0 | getQueuedThreads | -| file://:0:0:0:0 | getRange | -| file://:0:0:0:0 | getRangeUnit | -| file://:0:0:0:0 | getRangeUnit | -| file://:0:0:0:0 | getRawAnnotations | -| file://:0:0:0:0 | getRawAnnotations | -| file://:0:0:0:0 | getRawAuthority | -| file://:0:0:0:0 | getRawFragment | -| file://:0:0:0:0 | getRawParameterAnnotations | -| file://:0:0:0:0 | getRawPath | -| file://:0:0:0:0 | getRawQuery | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawResult | -| file://:0:0:0:0 | getRawSchemeSpecificPart | -| file://:0:0:0:0 | getRawType | -| file://:0:0:0:0 | getRawTypeAnnotations | -| file://:0:0:0:0 | getRawUserInfo | -| file://:0:0:0:0 | getReadTimeout | -| file://:0:0:0:0 | getRealName | -| file://:0:0:0:0 | getRef | -| file://:0:0:0:0 | getReferenceKind | -| file://:0:0:0:0 | getReflectionFactory | -| file://:0:0:0:0 | getRegion | -| file://:0:0:0:0 | getReifier | -| file://:0:0:0:0 | getReifier | -| file://:0:0:0:0 | getReifier | -| file://:0:0:0:0 | getReifier | -| file://:0:0:0:0 | getRequestProperties | -| file://:0:0:0:0 | getRequestProperty | -| file://:0:0:0:0 | getResolveException | -| file://:0:0:0:0 | getResolverFields | -| file://:0:0:0:0 | getResolverStyle | -| file://:0:0:0:0 | getResource | -| file://:0:0:0:0 | getResource | -| file://:0:0:0:0 | getResourceAsStream | -| file://:0:0:0:0 | getResourceAsStream | -| file://:0:0:0:0 | getResourceAsStream | -| file://:0:0:0:0 | getResources | -| file://:0:0:0:0 | getResult | -| file://:0:0:0:0 | getResult | -| file://:0:0:0:0 | getResult | -| file://:0:0:0:0 | getReturnType | -| file://:0:0:0:0 | getReturnType | -| file://:0:0:0:0 | getReturnType | -| file://:0:0:0:0 | getReturnType | -| file://:0:0:0:0 | getReturnType | -| file://:0:0:0:0 | getReturnType | -| file://:0:0:0:0 | getReturnType | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRoot | -| file://:0:0:0:0 | getRootDirectories | -| file://:0:0:0:0 | getRules | -| file://:0:0:0:0 | getRules | -| file://:0:0:0:0 | getRunLimit | -| file://:0:0:0:0 | getRunLimit | -| file://:0:0:0:0 | getRunLimit | -| file://:0:0:0:0 | getRunStart | -| file://:0:0:0:0 | getRunStart | -| file://:0:0:0:0 | getRunStart | -| file://:0:0:0:0 | getRunningThreadCount | -| file://:0:0:0:0 | getScheme | -| file://:0:0:0:0 | getScheme | -| file://:0:0:0:0 | getSchemeSpecificPart | -| file://:0:0:0:0 | getScript | -| file://:0:0:0:0 | getScript | -| file://:0:0:0:0 | getSecond | -| file://:0:0:0:0 | getSecond | -| file://:0:0:0:0 | getSecond | -| file://:0:0:0:0 | getSecond | -| file://:0:0:0:0 | getSecond | -| file://:0:0:0:0 | getSeconds | -| file://:0:0:0:0 | getSeconds | -| file://:0:0:0:0 | getSeparator | -| file://:0:0:0:0 | getSerialFilter | -| file://:0:0:0:0 | getSerialVersionUID | -| file://:0:0:0:0 | getService | -| file://:0:0:0:0 | getServices | -| file://:0:0:0:0 | getServicesCatalog | -| file://:0:0:0:0 | getServicesCatalog | -| file://:0:0:0:0 | getServicesCatalogOrNull | -| file://:0:0:0:0 | getSeverity | -| file://:0:0:0:0 | getSharedExceptionTypes | -| file://:0:0:0:0 | getSharedExceptionTypes | -| file://:0:0:0:0 | getSharedExceptionTypes | -| file://:0:0:0:0 | getSharedParameterTypes | -| file://:0:0:0:0 | getSharedParameterTypes | -| file://:0:0:0:0 | getSharedParameterTypes | -| file://:0:0:0:0 | getSharedQueuedThreads | -| file://:0:0:0:0 | getSharedQueuedThreads | -| file://:0:0:0:0 | getSharedQueuedThreads | -| file://:0:0:0:0 | getSharedQueuedThreads | -| file://:0:0:0:0 | getShort | -| file://:0:0:0:0 | getShort | -| file://:0:0:0:0 | getShort | -| file://:0:0:0:0 | getShort | -| file://:0:0:0:0 | getShort | -| file://:0:0:0:0 | getShort | -| file://:0:0:0:0 | getShort | -| file://:0:0:0:0 | getShort | -| file://:0:0:0:0 | getShortAcquire | -| file://:0:0:0:0 | getShortOpaque | -| file://:0:0:0:0 | getShortUnaligned | -| file://:0:0:0:0 | getShortUnaligned | -| file://:0:0:0:0 | getShortVolatile | -| file://:0:0:0:0 | getSignature | -| file://:0:0:0:0 | getSignature | -| file://:0:0:0:0 | getSignature | -| file://:0:0:0:0 | getSignerCertPath | -| file://:0:0:0:0 | getSignerCertPath | -| file://:0:0:0:0 | getSigners | -| file://:0:0:0:0 | getSimpleName | -| file://:0:0:0:0 | getSize | -| file://:0:0:0:0 | getSize | -| file://:0:0:0:0 | getSize | -| file://:0:0:0:0 | getSize | -| file://:0:0:0:0 | getSize | -| file://:0:0:0:0 | getSize | -| file://:0:0:0:0 | getSize | -| file://:0:0:0:0 | getSlot | -| file://:0:0:0:0 | getSmallestMaximum | -| file://:0:0:0:0 | getSort | -| file://:0:0:0:0 | getSpecificationTitle | -| file://:0:0:0:0 | getSpecificationVendor | -| file://:0:0:0:0 | getSpecificationVersion | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStackTrace | -| file://:0:0:0:0 | getStandardOffset | -| file://:0:0:0:0 | getStandardOffset | -| file://:0:0:0:0 | getState | -| file://:0:0:0:0 | getState | -| file://:0:0:0:0 | getState | -| file://:0:0:0:0 | getState | -| file://:0:0:0:0 | getState | -| file://:0:0:0:0 | getState | -| file://:0:0:0:0 | getState | -| file://:0:0:0:0 | getStealCount | -| file://:0:0:0:0 | getStep | -| file://:0:0:0:0 | getStepArgument | -| file://:0:0:0:0 | getStringAt | -| file://:0:0:0:0 | getSubInterfaces | -| file://:0:0:0:0 | getSubject | -| file://:0:0:0:0 | getSum | -| file://:0:0:0:0 | getSum | -| file://:0:0:0:0 | getSum | -| file://:0:0:0:0 | getSuperDesc | -| file://:0:0:0:0 | getSuperInterfaces | -| file://:0:0:0:0 | getSuperName | -| file://:0:0:0:0 | getSuperclass | -| file://:0:0:0:0 | getSuperclass | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSuppressed | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSurplusQueuedTaskCount | -| file://:0:0:0:0 | getSystemClassLoader | -| file://:0:0:0:0 | getSystemResource | -| file://:0:0:0:0 | getSystemResourceAsStream | -| file://:0:0:0:0 | getSystemResources | -| file://:0:0:0:0 | getTable | -| file://:0:0:0:0 | getTag | -| file://:0:0:0:0 | getTagAt | -| file://:0:0:0:0 | getTarget | -| file://:0:0:0:0 | getTargetVolatile | -| file://:0:0:0:0 | getTemporal | -| file://:0:0:0:0 | getThreadGroup | -| file://:0:0:0:0 | getThreadGroup | -| file://:0:0:0:0 | getThreadGroup | -| file://:0:0:0:0 | getThreads | -| file://:0:0:0:0 | getThreads | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getThrowableException | -| file://:0:0:0:0 | getTime | -| file://:0:0:0:0 | getTimeDefinition | -| file://:0:0:0:0 | getTimestamp | -| file://:0:0:0:0 | getTimestamp | -| file://:0:0:0:0 | getTimezoneOffset | -| file://:0:0:0:0 | getTotalSeconds | -| file://:0:0:0:0 | getTotalSpace | -| file://:0:0:0:0 | getTotalSpace | -| file://:0:0:0:0 | getTransition | -| file://:0:0:0:0 | getTransitionRules | -| file://:0:0:0:0 | getTransitions | -| file://:0:0:0:0 | getTree | -| file://:0:0:0:0 | getTree | -| file://:0:0:0:0 | getTree | -| file://:0:0:0:0 | getTree | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getType | -| file://:0:0:0:0 | getTypeAnnotationBytes | -| file://:0:0:0:0 | getTypeAnnotationBytes | -| file://:0:0:0:0 | getTypeAnnotationBytes | -| file://:0:0:0:0 | getTypeAnnotationBytes0 | -| file://:0:0:0:0 | getTypeAnnotationBytes0 | -| file://:0:0:0:0 | getTypeAnnotationBytes0 | -| file://:0:0:0:0 | getTypeArguments | -| file://:0:0:0:0 | getTypeCode | -| file://:0:0:0:0 | getTypeName | -| file://:0:0:0:0 | getTypeName | -| file://:0:0:0:0 | getTypeName | -| file://:0:0:0:0 | getTypeName | -| file://:0:0:0:0 | getTypeName | -| file://:0:0:0:0 | getTypeParameters | -| file://:0:0:0:0 | getTypeParameters | -| file://:0:0:0:0 | getTypeParameters | -| file://:0:0:0:0 | getTypeParameters | -| file://:0:0:0:0 | getTypeParameters | -| file://:0:0:0:0 | getTypeParameters | -| file://:0:0:0:0 | getTypeParameters | -| file://:0:0:0:0 | getTypeParameters | -| file://:0:0:0:0 | getTypeString | -| file://:0:0:0:0 | getURL | -| file://:0:0:0:0 | getURLStreamHandler | -| file://:0:0:0:0 | getUTF8At | -| file://:0:0:0:0 | getUnallocatedSpace | -| file://:0:0:0:0 | getUncaughtExceptionHandler | -| file://:0:0:0:0 | getUncaughtExceptionHandler | -| file://:0:0:0:0 | getUncaughtExceptionHandler | -| file://:0:0:0:0 | getUncaughtExceptionHandler | -| file://:0:0:0:0 | getUnchecked | -| file://:0:0:0:0 | getUncompressedObject | -| file://:0:0:0:0 | getUnicodeLocaleAttributes | -| file://:0:0:0:0 | getUnicodeLocaleAttributes | -| file://:0:0:0:0 | getUnicodeLocaleKeys | -| file://:0:0:0:0 | getUnicodeLocaleKeys | -| file://:0:0:0:0 | getUnicodeLocaleType | -| file://:0:0:0:0 | getUnicodeLocaleType | -| file://:0:0:0:0 | getUnits | -| file://:0:0:0:0 | getUnits | -| file://:0:0:0:0 | getUnits | -| file://:0:0:0:0 | getUnits | -| file://:0:0:0:0 | getUnnamedModule | -| file://:0:0:0:0 | getUnsafe | -| file://:0:0:0:0 | getUpperBounds | -| file://:0:0:0:0 | getUpperBounds | -| file://:0:0:0:0 | getUsableSpace | -| file://:0:0:0:0 | getUsableSpace | -| file://:0:0:0:0 | getUseCaches | -| file://:0:0:0:0 | getUserInfo | -| file://:0:0:0:0 | getUserInfo | -| file://:0:0:0:0 | getUserPrincipalLookupService | -| file://:0:0:0:0 | getValidOffsets | -| file://:0:0:0:0 | getValidOffsets | -| file://:0:0:0:0 | getValue | -| file://:0:0:0:0 | getValue | -| file://:0:0:0:0 | getValue | -| file://:0:0:0:0 | getValue | -| file://:0:0:0:0 | getValue | -| file://:0:0:0:0 | getValue | -| file://:0:0:0:0 | getValue | -| file://:0:0:0:0 | getValue | -| file://:0:0:0:0 | getValue | -| file://:0:0:0:0 | getValue | -| file://:0:0:0:0 | getValue | -| file://:0:0:0:0 | getVariant | -| file://:0:0:0:0 | getVariant | -| file://:0:0:0:0 | getVersion | -| file://:0:0:0:0 | getVersionStr | -| file://:0:0:0:0 | getVolatile | -| file://:0:0:0:0 | getWaitQueueLength | -| file://:0:0:0:0 | getWaitQueueLength | -| file://:0:0:0:0 | getWaitQueueLength | -| file://:0:0:0:0 | getWaitQueueLength | -| file://:0:0:0:0 | getWaitQueueLength | -| file://:0:0:0:0 | getWaitQueueLength | -| file://:0:0:0:0 | getWaitQueueLength | -| file://:0:0:0:0 | getWaitingThreads | -| file://:0:0:0:0 | getWaitingThreads | -| file://:0:0:0:0 | getWaitingThreads | -| file://:0:0:0:0 | getWaitingThreads | -| file://:0:0:0:0 | getWaitingThreads | -| file://:0:0:0:0 | getWaitingThreads | -| file://:0:0:0:0 | getWaitingThreads | -| file://:0:0:0:0 | getWeight | -| file://:0:0:0:0 | getYear | -| file://:0:0:0:0 | getYear | -| file://:0:0:0:0 | getYear | -| file://:0:0:0:0 | getYear | -| file://:0:0:0:0 | getYear | -| file://:0:0:0:0 | getYears | -| file://:0:0:0:0 | getZeroDigit | -| file://:0:0:0:0 | getZone | -| file://:0:0:0:0 | getZone | -| file://:0:0:0:0 | getZone | -| file://:0:0:0:0 | getZone | -| file://:0:0:0:0 | getZone | -| file://:0:0:0:0 | getZone | -| file://:0:0:0:0 | getZone | -| file://:0:0:0:0 | getZone | -| file://:0:0:0:0 | getter | -| file://:0:0:0:0 | getter | -| file://:0:0:0:0 | getterFunction | -| file://:0:0:0:0 | getterFunction | -| file://:0:0:0:0 | getterFunctions | -| file://:0:0:0:0 | getterFunctions | -| file://:0:0:0:0 | getters | -| file://:0:0:0:0 | getters | -| file://:0:0:0:0 | growArray | -| file://:0:0:0:0 | guessContentTypeFromName | -| file://:0:0:0:0 | guessContentTypeFromStream | -| file://:0:0:0:0 | handleParameterNumberMismatch | -| file://:0:0:0:0 | handleParameterNumberMismatch | -| file://:0:0:0:0 | handleParameterNumberMismatch | -| file://:0:0:0:0 | hasArray | -| file://:0:0:0:0 | hasArray | -| file://:0:0:0:0 | hasArray | -| file://:0:0:0:0 | hasArray | -| file://:0:0:0:0 | hasArray | -| file://:0:0:0:0 | hasArray | -| file://:0:0:0:0 | hasArray | -| file://:0:0:0:0 | hasArray | -| file://:0:0:0:0 | hasArray | -| file://:0:0:0:0 | hasBlockExternalData | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasCharacteristics | -| file://:0:0:0:0 | hasContended | -| file://:0:0:0:0 | hasContended | -| file://:0:0:0:0 | hasContended | -| file://:0:0:0:0 | hasContended | -| file://:0:0:0:0 | hasExtensions | -| file://:0:0:0:0 | hasGenericInformation | -| file://:0:0:0:0 | hasGenericInformation | -| file://:0:0:0:0 | hasGenericInformation | -| file://:0:0:0:0 | hasLocalsOperandsOption | -| file://:0:0:0:0 | hasLongPrimitives | -| file://:0:0:0:0 | hasMoreElements | -| file://:0:0:0:0 | hasMoreElements | -| file://:0:0:0:0 | hasMoreElements | -| file://:0:0:0:0 | hasMoreElements | -| file://:0:0:0:0 | hasMoreElements | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNext | -| file://:0:0:0:0 | hasNonVoidPrimitives | -| file://:0:0:0:0 | hasOption | -| file://:0:0:0:0 | hasPrevious | -| file://:0:0:0:0 | hasPrevious | -| file://:0:0:0:0 | hasPrevious | -| file://:0:0:0:0 | hasPrimitives | -| file://:0:0:0:0 | hasPrimitives | -| file://:0:0:0:0 | hasQueuedPredecessors | -| file://:0:0:0:0 | hasQueuedPredecessors | -| file://:0:0:0:0 | hasQueuedPredecessors | -| file://:0:0:0:0 | hasQueuedPredecessors | -| file://:0:0:0:0 | hasQueuedSubmissions | -| file://:0:0:0:0 | hasQueuedThread | -| file://:0:0:0:0 | hasQueuedThread | -| file://:0:0:0:0 | hasQueuedThreads | -| file://:0:0:0:0 | hasQueuedThreads | -| file://:0:0:0:0 | hasQueuedThreads | -| file://:0:0:0:0 | hasQueuedThreads | -| file://:0:0:0:0 | hasQueuedThreads | -| file://:0:0:0:0 | hasQueuedThreads | -| file://:0:0:0:0 | hasReadObjectMethod | -| file://:0:0:0:0 | hasReadObjectNoDataMethod | -| file://:0:0:0:0 | hasReadResolveMethod | -| file://:0:0:0:0 | hasRealParameterData | -| file://:0:0:0:0 | hasRealParameterData | -| file://:0:0:0:0 | hasRealParameterData | -| file://:0:0:0:0 | hasReceiverTypeDispatch | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasReferencePendingList | -| file://:0:0:0:0 | hasRemaining | -| file://:0:0:0:0 | hasRemaining | -| file://:0:0:0:0 | hasRemaining | -| file://:0:0:0:0 | hasRemaining | -| file://:0:0:0:0 | hasRemaining | -| file://:0:0:0:0 | hasRemaining | -| file://:0:0:0:0 | hasRemaining | -| file://:0:0:0:0 | hasRemaining | -| file://:0:0:0:0 | hasRemaining | -| file://:0:0:0:0 | hasStaticInitializerForSerialization | -| file://:0:0:0:0 | hasWaiters | -| file://:0:0:0:0 | hasWaiters | -| file://:0:0:0:0 | hasWaiters | -| file://:0:0:0:0 | hasWaiters | -| file://:0:0:0:0 | hasWaiters | -| file://:0:0:0:0 | hasWaiters | -| file://:0:0:0:0 | hasWaiters | -| file://:0:0:0:0 | hasWrappers | -| file://:0:0:0:0 | hasWriteObjectData | -| file://:0:0:0:0 | hasWriteObjectMethod | -| file://:0:0:0:0 | hasWriteReplaceMethod | -| file://:0:0:0:0 | hash | -| file://:0:0:0:0 | hash | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCode | -| file://:0:0:0:0 | hashCodeRange | -| file://:0:0:0:0 | headMap | -| file://:0:0:0:0 | helpAsyncBlocker | -| file://:0:0:0:0 | helpAsyncBlocker | -| file://:0:0:0:0 | helpCC | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpComplete | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpExpungeStaleExceptions | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiesce | -| file://:0:0:0:0 | helpQuiescePool | -| file://:0:0:0:0 | helpTransfer | -| file://:0:0:0:0 | highSurrogate | -| file://:0:0:0:0 | highestOneBit | -| file://:0:0:0:0 | highestOneBit | -| file://:0:0:0:0 | holder | -| file://:0:0:0:0 | holdsLock | -| file://:0:0:0:0 | holdsLock | -| file://:0:0:0:0 | holdsLock | -| file://:0:0:0:0 | hostsEqual | -| file://:0:0:0:0 | hugeCapacity | -| file://:0:0:0:0 | hugeCapacity | -| file://:0:0:0:0 | hugeCapacity | -| file://:0:0:0:0 | hugeCapacity | -| file://:0:0:0:0 | hugeCapacity | -| file://:0:0:0:0 | identity | -| file://:0:0:0:0 | identity | -| file://:0:0:0:0 | identity | -| file://:0:0:0:0 | identity | -| file://:0:0:0:0 | identity | -| file://:0:0:0:0 | identity | -| file://:0:0:0:0 | identityForm | -| file://:0:0:0:0 | ifPresent | -| file://:0:0:0:0 | ifPresent | -| file://:0:0:0:0 | ifPresent | -| file://:0:0:0:0 | ifPresent | -| file://:0:0:0:0 | ifPresentOrElse | -| file://:0:0:0:0 | ifPresentOrElse | -| file://:0:0:0:0 | ifPresentOrElse | -| file://:0:0:0:0 | ifPresentOrElse | -| file://:0:0:0:0 | implAddExports | -| file://:0:0:0:0 | implAddExports | -| file://:0:0:0:0 | implAddExportsNoSync | -| file://:0:0:0:0 | implAddExportsNoSync | -| file://:0:0:0:0 | implAddExportsToAllUnnamed | -| file://:0:0:0:0 | implAddOpens | -| file://:0:0:0:0 | implAddOpens | -| file://:0:0:0:0 | implAddOpensToAllUnnamed | -| file://:0:0:0:0 | implAddOpensToAllUnnamed | -| file://:0:0:0:0 | implAddReads | -| file://:0:0:0:0 | implAddReadsAllUnnamed | -| file://:0:0:0:0 | implAddReadsNoSync | -| file://:0:0:0:0 | implAddUses | -| file://:0:0:0:0 | implCloseChannel | -| file://:0:0:0:0 | implCloseChannel | -| file://:0:0:0:0 | implFlush | -| file://:0:0:0:0 | implFlush | -| file://:0:0:0:0 | implOnMalformedInput | -| file://:0:0:0:0 | implOnMalformedInput | -| file://:0:0:0:0 | implOnUnmappableCharacter | -| file://:0:0:0:0 | implOnUnmappableCharacter | -| file://:0:0:0:0 | implReplaceWith | -| file://:0:0:0:0 | implReplaceWith | -| file://:0:0:0:0 | implReset | -| file://:0:0:0:0 | implReset | -| file://:0:0:0:0 | implies | -| file://:0:0:0:0 | implies | -| file://:0:0:0:0 | implies | -| file://:0:0:0:0 | implies | -| file://:0:0:0:0 | implies | -| file://:0:0:0:0 | implies | -| file://:0:0:0:0 | implies | -| file://:0:0:0:0 | implies | -| file://:0:0:0:0 | implies | -| file://:0:0:0:0 | implies | -| file://:0:0:0:0 | implies | -| file://:0:0:0:0 | impliesCreateAccessControlContext | -| file://:0:0:0:0 | impliesWithAltFilePerm | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inForkJoinPool | -| file://:0:0:0:0 | inSameSubroutine | -| file://:0:0:0:0 | inSubroutine | -| file://:0:0:0:0 | inc | -| file://:0:0:0:0 | inc | -| file://:0:0:0:0 | inc | -| file://:0:0:0:0 | inc | -| file://:0:0:0:0 | incrementAndGet | -| file://:0:0:0:0 | index | -| file://:0:0:0:0 | indexFor | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOf | -| file://:0:0:0:0 | indexOfRange | -| file://:0:0:0:0 | inetAddresses | -| file://:0:0:0:0 | inflate | -| file://:0:0:0:0 | inflate | -| file://:0:0:0:0 | inflationThreshold | -| file://:0:0:0:0 | init | -| file://:0:0:0:0 | init | -| file://:0:0:0:0 | init | -| file://:0:0:0:0 | init | -| file://:0:0:0:0 | initBytes | -| file://:0:0:0:0 | initBytes | -| file://:0:0:0:0 | initBytes | -| file://:0:0:0:0 | initCache | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initCause | -| file://:0:0:0:0 | initIndex | -| file://:0:0:0:0 | initInputFrame | -| file://:0:0:0:0 | initLibraryPaths | -| file://:0:0:0:0 | initNonProxy | -| file://:0:0:0:0 | initProxy | -| file://:0:0:0:0 | initResolved | -| file://:0:0:0:0 | initSystemClassLoader | -| file://:0:0:0:0 | initialValue | -| file://:0:0:0:0 | initialValue | -| file://:0:0:0:0 | initializeSyncQueue | -| file://:0:0:0:0 | initializeSyncQueue | -| file://:0:0:0:0 | initializeSyncQueue | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insert | -| file://:0:0:0:0 | insertParameterTypes | -| file://:0:0:0:0 | insertParameterTypes | -| file://:0:0:0:0 | installedProviders | -| file://:0:0:0:0 | instant | -| file://:0:0:0:0 | instant | -| file://:0:0:0:0 | instant | -| file://:0:0:0:0 | instant | -| file://:0:0:0:0 | instant | -| file://:0:0:0:0 | intValue | -| file://:0:0:0:0 | intValueExact | -| file://:0:0:0:0 | intern | -| file://:0:0:0:0 | internArgument | -| file://:0:0:0:0 | internArguments | -| file://:0:0:0:0 | internalCallerClass | -| file://:0:0:0:0 | internalCallerClass | -| file://:0:0:0:0 | internalForm | -| file://:0:0:0:0 | internalForm | -| file://:0:0:0:0 | internalMemberName | -| file://:0:0:0:0 | internalMemberName | -| file://:0:0:0:0 | internalNextDouble | -| file://:0:0:0:0 | internalNextInt | -| file://:0:0:0:0 | internalNextLong | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalPropagateException | -| file://:0:0:0:0 | internalProperties | -| file://:0:0:0:0 | internalProperties | -| file://:0:0:0:0 | internalValues | -| file://:0:0:0:0 | internalValues | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | internalWait | -| file://:0:0:0:0 | interpretName | -| file://:0:0:0:0 | interpretWithArguments | -| file://:0:0:0:0 | interpretWithArgumentsTracing | -| file://:0:0:0:0 | interrupt | -| file://:0:0:0:0 | interrupt | -| file://:0:0:0:0 | interrupt | -| file://:0:0:0:0 | interrupt | -| file://:0:0:0:0 | interrupt | -| file://:0:0:0:0 | interrupt0 | -| file://:0:0:0:0 | interrupt0 | -| file://:0:0:0:0 | interrupted | -| file://:0:0:0:0 | interrupted | -| file://:0:0:0:0 | interrupted | -| file://:0:0:0:0 | intrinsicName | -| file://:0:0:0:0 | intrinsicName | -| file://:0:0:0:0 | intrinsicName | -| file://:0:0:0:0 | ints | -| file://:0:0:0:0 | ints | -| file://:0:0:0:0 | ints | -| file://:0:0:0:0 | ints | -| file://:0:0:0:0 | inv | -| file://:0:0:0:0 | inv | -| file://:0:0:0:0 | invocationHandlerReturnType | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invoke | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAll | -| file://:0:0:0:0 | invokeAny | -| file://:0:0:0:0 | invokeAny | -| file://:0:0:0:0 | invokeAny | -| file://:0:0:0:0 | invokeAny | -| file://:0:0:0:0 | invokeAny | -| file://:0:0:0:0 | invokeAny | -| file://:0:0:0:0 | invokeBasic | -| file://:0:0:0:0 | invokeBasic | -| file://:0:0:0:0 | invokeBasicMethod | -| file://:0:0:0:0 | invokeExact | -| file://:0:0:0:0 | invokeExact | -| file://:0:0:0:0 | invokeHandleForm | -| file://:0:0:0:0 | invokeReadObject | -| file://:0:0:0:0 | invokeReadObjectNoData | -| file://:0:0:0:0 | invokeReadResolve | -| file://:0:0:0:0 | invokeWithArguments | -| file://:0:0:0:0 | invokeWithArguments | -| file://:0:0:0:0 | invokeWithArguments | -| file://:0:0:0:0 | invokeWithArguments | -| file://:0:0:0:0 | invokeWithArguments | -| file://:0:0:0:0 | invokeWithArgumentsTracing | -| file://:0:0:0:0 | invokeWriteObject | -| file://:0:0:0:0 | invokeWriteReplace | -| file://:0:0:0:0 | invokerType | -| file://:0:0:0:0 | invokers | -| file://:0:0:0:0 | isAbsolute | -| file://:0:0:0:0 | isAbsolute | -| file://:0:0:0:0 | isAbsolute | -| file://:0:0:0:0 | isAbstract | -| file://:0:0:0:0 | isAccessModeSupported | -| file://:0:0:0:0 | isAccessible | -| file://:0:0:0:0 | isAccessible | -| file://:0:0:0:0 | isAccessible | -| file://:0:0:0:0 | isAccessible | -| file://:0:0:0:0 | isAccessible | -| file://:0:0:0:0 | isAccessibleFrom | -| file://:0:0:0:0 | isAfter | -| file://:0:0:0:0 | isAfter | -| file://:0:0:0:0 | isAfter | -| file://:0:0:0:0 | isAfter | -| file://:0:0:0:0 | isAfter | -| file://:0:0:0:0 | isAfter | -| file://:0:0:0:0 | isAfter | -| file://:0:0:0:0 | isAfter | -| file://:0:0:0:0 | isAfter | -| file://:0:0:0:0 | isAfter | -| file://:0:0:0:0 | isAlive | -| file://:0:0:0:0 | isAlive | -| file://:0:0:0:0 | isAlive | -| file://:0:0:0:0 | isAlphabetic | -| file://:0:0:0:0 | isAncestor | -| file://:0:0:0:0 | isAnnotation | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnnotationPresent | -| file://:0:0:0:0 | isAnonymousClass | -| file://:0:0:0:0 | isAnyLocalAddress | -| file://:0:0:0:0 | isApparentlyUnblocked | -| file://:0:0:0:0 | isArgBasicTypeChar | -| file://:0:0:0:0 | isArray | -| file://:0:0:0:0 | isAssignableFrom | -| file://:0:0:0:0 | isAuthorized | -| file://:0:0:0:0 | isAutoDetecting | -| file://:0:0:0:0 | isAutomatic | -| file://:0:0:0:0 | isBasicTypeChar | -| file://:0:0:0:0 | isBefore | -| file://:0:0:0:0 | isBefore | -| file://:0:0:0:0 | isBefore | -| file://:0:0:0:0 | isBefore | -| file://:0:0:0:0 | isBefore | -| file://:0:0:0:0 | isBefore | -| file://:0:0:0:0 | isBefore | -| file://:0:0:0:0 | isBefore | -| file://:0:0:0:0 | isBefore | -| file://:0:0:0:0 | isBefore | -| file://:0:0:0:0 | isBigEndian | -| file://:0:0:0:0 | isBlank | -| file://:0:0:0:0 | isBmpCodePoint | -| file://:0:0:0:0 | isBridge | -| file://:0:0:0:0 | isBridge | -| file://:0:0:0:0 | isBuiltinStreamHandler | -| file://:0:0:0:0 | isCCLOverridden | -| file://:0:0:0:0 | isCCLOverridden | -| file://:0:0:0:0 | isCallerSensitive | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCancelled | -| file://:0:0:0:0 | isCaseSensitive | -| file://:0:0:0:0 | isCharsetDetected | -| file://:0:0:0:0 | isCodeAttribute | -| file://:0:0:0:0 | isCodeAttribute | -| file://:0:0:0:0 | isCodeAttribute | -| file://:0:0:0:0 | isCompatibleWith | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedAbnormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isCompletedNormally | -| file://:0:0:0:0 | isConfigured | -| file://:0:0:0:0 | isConstantZero | -| file://:0:0:0:0 | isConstantZero | -| file://:0:0:0:0 | isConstructor | -| file://:0:0:0:0 | isConvertibleFrom | -| file://:0:0:0:0 | isConvertibleTo | -| file://:0:0:0:0 | isDaemon | -| file://:0:0:0:0 | isDaemon | -| file://:0:0:0:0 | isDaemon | -| file://:0:0:0:0 | isDaemon | -| file://:0:0:0:0 | isDateBased | -| file://:0:0:0:0 | isDateBased | -| file://:0:0:0:0 | isDateBased | -| file://:0:0:0:0 | isDateBased | -| file://:0:0:0:0 | isDaylightSavings | -| file://:0:0:0:0 | isDefault | -| file://:0:0:0:0 | isDefined | -| file://:0:0:0:0 | isDefined | -| file://:0:0:0:0 | isDestroyed | -| file://:0:0:0:0 | isDigit | -| file://:0:0:0:0 | isDigit | -| file://:0:0:0:0 | isDirect | -| file://:0:0:0:0 | isDirect | -| file://:0:0:0:0 | isDirect | -| file://:0:0:0:0 | isDirect | -| file://:0:0:0:0 | isDirect | -| file://:0:0:0:0 | isDirect | -| file://:0:0:0:0 | isDirect | -| file://:0:0:0:0 | isDirect | -| file://:0:0:0:0 | isDirect | -| file://:0:0:0:0 | isDirectory | -| file://:0:0:0:0 | isDirectory | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDone | -| file://:0:0:0:0 | isDoubleWord | -| file://:0:0:0:0 | isDurationEstimated | -| file://:0:0:0:0 | isDurationEstimated | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEmpty | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnqueued | -| file://:0:0:0:0 | isEnum | -| file://:0:0:0:0 | isEnum | -| file://:0:0:0:0 | isEnumConstant | -| file://:0:0:0:0 | isEqual | -| file://:0:0:0:0 | isEqual | -| file://:0:0:0:0 | isEqual | -| file://:0:0:0:0 | isEqual | -| file://:0:0:0:0 | isEqual | -| file://:0:0:0:0 | isEqual | -| file://:0:0:0:0 | isEqual | -| file://:0:0:0:0 | isEqual | -| file://:0:0:0:0 | isEqual | -| file://:0:0:0:0 | isEqualTo | -| file://:0:0:0:0 | isError | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExceptionalStatus | -| file://:0:0:0:0 | isExported | -| file://:0:0:0:0 | isExported | -| file://:0:0:0:0 | isExternalizable | -| file://:0:0:0:0 | isFair | -| file://:0:0:0:0 | isFair | -| file://:0:0:0:0 | isField | -| file://:0:0:0:0 | isFieldOrMethod | -| file://:0:0:0:0 | isFile | -| file://:0:0:0:0 | isFinal | -| file://:0:0:0:0 | isFinite | -| file://:0:0:0:0 | isFixed | -| file://:0:0:0:0 | isFixedOffset | -| file://:0:0:0:0 | isFloating | -| file://:0:0:0:0 | isGap | -| file://:0:0:0:0 | isGeneric | -| file://:0:0:0:0 | isGetter | -| file://:0:0:0:0 | isGuardWithCatch | -| file://:0:0:0:0 | isHeldByCurrentThread | -| file://:0:0:0:0 | isHeldByCurrentThread | -| file://:0:0:0:0 | isHeldExclusively | -| file://:0:0:0:0 | isHeldExclusively | -| file://:0:0:0:0 | isHeldExclusively | -| file://:0:0:0:0 | isHeldExclusively | -| file://:0:0:0:0 | isHidden | -| file://:0:0:0:0 | isHidden | -| file://:0:0:0:0 | isHighSurrogate | -| file://:0:0:0:0 | isISOControl | -| file://:0:0:0:0 | isISOControl | -| file://:0:0:0:0 | isIdentifierIgnorable | -| file://:0:0:0:0 | isIdentifierIgnorable | -| file://:0:0:0:0 | isIdentity | -| file://:0:0:0:0 | isIdeographic | -| file://:0:0:0:0 | isImplicit | -| file://:0:0:0:0 | isInfinite | -| file://:0:0:0:0 | isInfinite | -| file://:0:0:0:0 | isInherited | -| file://:0:0:0:0 | isInstance | -| file://:0:0:0:0 | isInstantiable | -| file://:0:0:0:0 | isIntValue | -| file://:0:0:0:0 | isIntegral | -| file://:0:0:0:0 | isInterface | -| file://:0:0:0:0 | isInterface | -| file://:0:0:0:0 | isInterrupted | -| file://:0:0:0:0 | isInterrupted | -| file://:0:0:0:0 | isInterrupted | -| file://:0:0:0:0 | isInterrupted | -| file://:0:0:0:0 | isInterrupted | -| file://:0:0:0:0 | isInvalid | -| file://:0:0:0:0 | isInvocable | -| file://:0:0:0:0 | isInvokeBasic | -| file://:0:0:0:0 | isInvokeSpecial | -| file://:0:0:0:0 | isInvokeSpecial | -| file://:0:0:0:0 | isJavaIdentifierPart | -| file://:0:0:0:0 | isJavaIdentifierPart | -| file://:0:0:0:0 | isJavaIdentifierStart | -| file://:0:0:0:0 | isJavaIdentifierStart | -| file://:0:0:0:0 | isJavaLetter | -| file://:0:0:0:0 | isJavaLetterOrDigit | -| file://:0:0:0:0 | isLatin1 | -| file://:0:0:0:0 | isLatin1 | -| file://:0:0:0:0 | isLatin1 | -| file://:0:0:0:0 | isLeapYear | -| file://:0:0:0:0 | isLeapYear | -| file://:0:0:0:0 | isLeapYear | -| file://:0:0:0:0 | isLeapYear | -| file://:0:0:0:0 | isLeapYear | -| file://:0:0:0:0 | isLegalReplacement | -| file://:0:0:0:0 | isLetter | -| file://:0:0:0:0 | isLetter | -| file://:0:0:0:0 | isLetterOrDigit | -| file://:0:0:0:0 | isLetterOrDigit | -| file://:0:0:0:0 | isLinkLocalAddress | -| file://:0:0:0:0 | isLinkerMethodInvoke | -| file://:0:0:0:0 | isListEmpty | -| file://:0:0:0:0 | isListEmpty | -| file://:0:0:0:0 | isListEmpty | -| file://:0:0:0:0 | isListEmpty | -| file://:0:0:0:0 | isListEmpty | -| file://:0:0:0:0 | isListEmpty | -| file://:0:0:0:0 | isListEmpty | -| file://:0:0:0:0 | isLive | -| file://:0:0:0:0 | isLive | -| file://:0:0:0:0 | isLoaded | -| file://:0:0:0:0 | isLocalClass | -| file://:0:0:0:0 | isLocked | -| file://:0:0:0:0 | isLocked | -| file://:0:0:0:0 | isLocked | -| file://:0:0:0:0 | isLocked | -| file://:0:0:0:0 | isLocked | -| file://:0:0:0:0 | isLoop | -| file://:0:0:0:0 | isLoopback | -| file://:0:0:0:0 | isLoopbackAddress | -| file://:0:0:0:0 | isLowSurrogate | -| file://:0:0:0:0 | isLowerCase | -| file://:0:0:0:0 | isLowerCase | -| file://:0:0:0:0 | isMCGlobal | -| file://:0:0:0:0 | isMCLinkLocal | -| file://:0:0:0:0 | isMCNodeLocal | -| file://:0:0:0:0 | isMCOrgLocal | -| file://:0:0:0:0 | isMCSiteLocal | -| file://:0:0:0:0 | isMalformed | -| file://:0:0:0:0 | isMemberClass | -| file://:0:0:0:0 | isMethod | -| file://:0:0:0:0 | isMethodHandleInvoke | -| file://:0:0:0:0 | isMethodHandleInvokeName | -| file://:0:0:0:0 | isMidnightEndOfDay | -| file://:0:0:0:0 | isMirrored | -| file://:0:0:0:0 | isMirrored | -| file://:0:0:0:0 | isMulticastAddress | -| file://:0:0:0:0 | isNaN | -| file://:0:0:0:0 | isNaN | -| file://:0:0:0:0 | isNamePresent | -| file://:0:0:0:0 | isNamed | -| file://:0:0:0:0 | isNative | -| file://:0:0:0:0 | isNativeMethod | -| file://:0:0:0:0 | isNativeMethod | -| file://:0:0:0:0 | isNativeMethod | -| file://:0:0:0:0 | isNegative | -| file://:0:0:0:0 | isNegative | -| file://:0:0:0:0 | isNegative | -| file://:0:0:0:0 | isNestmateOf | -| file://:0:0:0:0 | isNumeric | -| file://:0:0:0:0 | isOn | -| file://:0:0:0:0 | isOnSyncQueue | -| file://:0:0:0:0 | isOnSyncQueue | -| file://:0:0:0:0 | isOnSyncQueue | -| file://:0:0:0:0 | isOnSyncQueue | -| file://:0:0:0:0 | isOpaque | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOpen | -| file://:0:0:0:0 | isOther | -| file://:0:0:0:0 | isOther | -| file://:0:0:0:0 | isOverflow | -| file://:0:0:0:0 | isOverlap | -| file://:0:0:0:0 | isOverrideable | -| file://:0:0:0:0 | isOwnedBy | -| file://:0:0:0:0 | isPackage | -| file://:0:0:0:0 | isParallel | -| file://:0:0:0:0 | isParallel | -| file://:0:0:0:0 | isParallel | -| file://:0:0:0:0 | isParallel | -| file://:0:0:0:0 | isParallel | -| file://:0:0:0:0 | isParam | -| file://:0:0:0:0 | isPointToPoint | -| file://:0:0:0:0 | isPresent | -| file://:0:0:0:0 | isPresent | -| file://:0:0:0:0 | isPresent | -| file://:0:0:0:0 | isPresent | -| file://:0:0:0:0 | isPresent | -| file://:0:0:0:0 | isPresent | -| file://:0:0:0:0 | isPrimitive | -| file://:0:0:0:0 | isPrimitive | -| file://:0:0:0:0 | isPrimitiveType | -| file://:0:0:0:0 | isPrivate | -| file://:0:0:0:0 | isPrivileged | -| file://:0:0:0:0 | isProbablePrime | -| file://:0:0:0:0 | isPromise | -| file://:0:0:0:0 | isProtected | -| file://:0:0:0:0 | isProxy | -| file://:0:0:0:0 | isPublic | -| file://:0:0:0:0 | isQualified | -| file://:0:0:0:0 | isQualified | -| file://:0:0:0:0 | isQueued | -| file://:0:0:0:0 | isQueued | -| file://:0:0:0:0 | isQueued | -| file://:0:0:0:0 | isQueued | -| file://:0:0:0:0 | isQuiescent | -| file://:0:0:0:0 | isReachable | -| file://:0:0:0:0 | isReachable | -| file://:0:0:0:0 | isReachable | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReadOnly | -| file://:0:0:0:0 | isReflectivelyExported | -| file://:0:0:0:0 | isReflectivelyOpened | -| file://:0:0:0:0 | isRegistered | -| file://:0:0:0:0 | isRegisteredAsParallelCapable | -| file://:0:0:0:0 | isRegularFile | -| file://:0:0:0:0 | isReleasable | -| file://:0:0:0:0 | isResolved | -| file://:0:0:0:0 | isResolved | -| file://:0:0:0:0 | isResolved | -| file://:0:0:0:0 | isSameFile | -| file://:0:0:0:0 | isSealed | -| file://:0:0:0:0 | isSealed | -| file://:0:0:0:0 | isSelectAlternative | -| file://:0:0:0:0 | isSerializable | -| file://:0:0:0:0 | isSetter | -| file://:0:0:0:0 | isShared | -| file://:0:0:0:0 | isShared | -| file://:0:0:0:0 | isShutdown | -| file://:0:0:0:0 | isShutdown | -| file://:0:0:0:0 | isShutdown | -| file://:0:0:0:0 | isSigned | -| file://:0:0:0:0 | isSingleWord | -| file://:0:0:0:0 | isSiteLocalAddress | -| file://:0:0:0:0 | isSpace | -| file://:0:0:0:0 | isSpaceChar | -| file://:0:0:0:0 | isSpaceChar | -| file://:0:0:0:0 | isStandalone | -| file://:0:0:0:0 | isStatic | -| file://:0:0:0:0 | isStrict | -| file://:0:0:0:0 | isSubclassOf | -| file://:0:0:0:0 | isSubclassOf | -| file://:0:0:0:0 | isSubclassOf | -| file://:0:0:0:0 | isSubclassOf | -| file://:0:0:0:0 | isSubwordOrInt | -| file://:0:0:0:0 | isSupplementaryCodePoint | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupported | -| file://:0:0:0:0 | isSupportedBy | -| file://:0:0:0:0 | isSupportedBy | -| file://:0:0:0:0 | isSupportedBy | -| file://:0:0:0:0 | isSupportedBy | -| file://:0:0:0:0 | isSurrogate | -| file://:0:0:0:0 | isSurrogatePair | -| file://:0:0:0:0 | isSymbolicLink | -| file://:0:0:0:0 | isSynthetic | -| file://:0:0:0:0 | isSynthetic | -| file://:0:0:0:0 | isSynthetic | -| file://:0:0:0:0 | isSynthetic | -| file://:0:0:0:0 | isSynthetic | -| file://:0:0:0:0 | isSynthetic | -| file://:0:0:0:0 | isSynthetic | -| file://:0:0:0:0 | isSynthetic | -| file://:0:0:0:0 | isTerminated | -| file://:0:0:0:0 | isTerminated | -| file://:0:0:0:0 | isTerminated | -| file://:0:0:0:0 | isTerminating | -| file://:0:0:0:0 | isTimeBased | -| file://:0:0:0:0 | isTimeBased | -| file://:0:0:0:0 | isTimeBased | -| file://:0:0:0:0 | isTimeBased | -| file://:0:0:0:0 | isTitleCase | -| file://:0:0:0:0 | isTitleCase | -| file://:0:0:0:0 | isTryFinally | -| file://:0:0:0:0 | isType | -| file://:0:0:0:0 | isUnderflow | -| file://:0:0:0:0 | isUnicodeIdentifierPart | -| file://:0:0:0:0 | isUnicodeIdentifierPart | -| file://:0:0:0:0 | isUnicodeIdentifierStart | -| file://:0:0:0:0 | isUnicodeIdentifierStart | -| file://:0:0:0:0 | isUnknown | -| file://:0:0:0:0 | isUnknown | -| file://:0:0:0:0 | isUnknown | -| file://:0:0:0:0 | isUnmappable | -| file://:0:0:0:0 | isUnshared | -| file://:0:0:0:0 | isUnsigned | -| file://:0:0:0:0 | isUp | -| file://:0:0:0:0 | isUpperCase | -| file://:0:0:0:0 | isUpperCase | -| file://:0:0:0:0 | isValid | -| file://:0:0:0:0 | isValid | -| file://:0:0:0:0 | isValidCodePoint | -| file://:0:0:0:0 | isValidIntValue | -| file://:0:0:0:0 | isValidKey | -| file://:0:0:0:0 | isValidOffset | -| file://:0:0:0:0 | isValidOffset | -| file://:0:0:0:0 | isValidSignature | -| file://:0:0:0:0 | isValidUnicodeLocaleKey | -| file://:0:0:0:0 | isValidValue | -| file://:0:0:0:0 | isVarArgs | -| file://:0:0:0:0 | isVarArgs | -| file://:0:0:0:0 | isVarArgs | -| file://:0:0:0:0 | isVarArgs | -| file://:0:0:0:0 | isVarHandleMethodInvoke | -| file://:0:0:0:0 | isVarHandleMethodInvokeName | -| file://:0:0:0:0 | isVarargs | -| file://:0:0:0:0 | isVarargsCollector | -| file://:0:0:0:0 | isVarargsCollector | -| file://:0:0:0:0 | isVerbose | -| file://:0:0:0:0 | isViewableAs | -| file://:0:0:0:0 | isVirtual | -| file://:0:0:0:0 | isVolatile | -| file://:0:0:0:0 | isWhitespace | -| file://:0:0:0:0 | isWhitespace | -| file://:0:0:0:0 | isWrapperType | -| file://:0:0:0:0 | isZero | -| file://:0:0:0:0 | isZero | -| file://:0:0:0:0 | isZero | -| file://:0:0:0:0 | iterate | -| file://:0:0:0:0 | iterate | -| file://:0:0:0:0 | iterate | -| file://:0:0:0:0 | iterate | -| file://:0:0:0:0 | iterate | -| file://:0:0:0:0 | iterate | -| file://:0:0:0:0 | iterate | -| file://:0:0:0:0 | iterate | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | iterator | -| file://:0:0:0:0 | javaIncrement | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | join | -| file://:0:0:0:0 | key | -| file://:0:0:0:0 | key | -| file://:0:0:0:0 | keySet | -| file://:0:0:0:0 | keySet | -| file://:0:0:0:0 | keyType | -| file://:0:0:0:0 | keyType | -| file://:0:0:0:0 | keys | -| file://:0:0:0:0 | keys | -| file://:0:0:0:0 | keys | -| file://:0:0:0:0 | keys | -| file://:0:0:0:0 | keys | -| file://:0:0:0:0 | kind | -| file://:0:0:0:0 | lambdaFormEditor | -| file://:0:0:0:0 | lambdaName | -| file://:0:0:0:0 | last | -| file://:0:0:0:0 | last | -| file://:0:0:0:0 | lastAccessTime | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOf | -| file://:0:0:0:0 | lastIndexOfRange | -| file://:0:0:0:0 | lastKey | -| file://:0:0:0:0 | lastModified | -| file://:0:0:0:0 | lastModifiedTime | -| file://:0:0:0:0 | lastParameterType | -| file://:0:0:0:0 | lastUseIndex | -| file://:0:0:0:0 | lastUseIndex | -| file://:0:0:0:0 | layer | -| file://:0:0:0:0 | layers | -| file://:0:0:0:0 | layers | -| file://:0:0:0:0 | lazySet | -| file://:0:0:0:0 | lazySet | -| file://:0:0:0:0 | leadingReferenceParameter | -| file://:0:0:0:0 | leafCopy | -| file://:0:0:0:0 | leafCopyMethod | -| file://:0:0:0:0 | leafCopyMethod | -| file://:0:0:0:0 | length | -| file://:0:0:0:0 | length | -| file://:0:0:0:0 | length | -| file://:0:0:0:0 | length | -| file://:0:0:0:0 | lengthOfMonth | -| file://:0:0:0:0 | lengthOfMonth | -| file://:0:0:0:0 | lengthOfYear | -| file://:0:0:0:0 | lengthOfYear | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | limit | -| file://:0:0:0:0 | lines | -| file://:0:0:0:0 | linkCodeToSpeciesData | -| file://:0:0:0:0 | linkCodeToSpeciesData | -| file://:0:0:0:0 | linkSpeciesDataToCode | -| file://:0:0:0:0 | linkSpeciesDataToCode | -| file://:0:0:0:0 | linkToCallSiteMethod | -| file://:0:0:0:0 | linkToInterface | -| file://:0:0:0:0 | linkToInterface | -| file://:0:0:0:0 | linkToSpecial | -| file://:0:0:0:0 | linkToSpecial | -| file://:0:0:0:0 | linkToStatic | -| file://:0:0:0:0 | linkToStatic | -| file://:0:0:0:0 | linkToTargetMethod | -| file://:0:0:0:0 | linkToVirtual | -| file://:0:0:0:0 | linkToVirtual | -| file://:0:0:0:0 | list | -| file://:0:0:0:0 | list | -| file://:0:0:0:0 | list | -| file://:0:0:0:0 | list | -| file://:0:0:0:0 | list | -| file://:0:0:0:0 | list | -| file://:0:0:0:0 | list | -| file://:0:0:0:0 | list | -| file://:0:0:0:0 | list | -| file://:0:0:0:0 | listFiles | -| file://:0:0:0:0 | listFiles | -| file://:0:0:0:0 | listFiles | -| file://:0:0:0:0 | listIterator | -| file://:0:0:0:0 | listIterator | -| file://:0:0:0:0 | listIterator | -| file://:0:0:0:0 | listIterator | -| file://:0:0:0:0 | listIterator | -| file://:0:0:0:0 | listIterator | -| file://:0:0:0:0 | listIterator | -| file://:0:0:0:0 | listIterator | -| file://:0:0:0:0 | listIterator | -| file://:0:0:0:0 | listIterator | -| file://:0:0:0:0 | listRoots | -| file://:0:0:0:0 | load | -| file://:0:0:0:0 | load | -| file://:0:0:0:0 | load | -| file://:0:0:0:0 | load | -| file://:0:0:0:0 | load | -| file://:0:0:0:0 | load | -| file://:0:0:0:0 | load0 | -| file://:0:0:0:0 | load0 | -| file://:0:0:0:0 | loadClass | -| file://:0:0:0:0 | loadClass | -| file://:0:0:0:0 | loadClass | -| file://:0:0:0:0 | loadConvert | -| file://:0:0:0:0 | loadFence | -| file://:0:0:0:0 | loadFromCache | -| file://:0:0:0:0 | loadFromXML | -| file://:0:0:0:0 | loadFromXML | -| file://:0:0:0:0 | loadImpl | -| file://:0:0:0:0 | loadLibrary | -| file://:0:0:0:0 | loadLibrary | -| file://:0:0:0:0 | loadLoadFence | -| file://:0:0:0:0 | loadLoadFence | -| file://:0:0:0:0 | loadSpecies | -| file://:0:0:0:0 | loadSpecies | -| file://:0:0:0:0 | loadSpeciesDataFromCode | -| file://:0:0:0:0 | loadSpeciesDataFromCode | -| file://:0:0:0:0 | localDateTime | -| file://:0:0:0:0 | localDateTime | -| file://:0:0:0:0 | localDateTime | -| file://:0:0:0:0 | localizedBy | -| file://:0:0:0:0 | location | -| file://:0:0:0:0 | location | -| file://:0:0:0:0 | location | -| file://:0:0:0:0 | lock | -| file://:0:0:0:0 | lock | -| file://:0:0:0:0 | lock | -| file://:0:0:0:0 | lock | -| file://:0:0:0:0 | lock | -| file://:0:0:0:0 | lock | -| file://:0:0:0:0 | lock | -| file://:0:0:0:0 | lock | -| file://:0:0:0:0 | lock | -| file://:0:0:0:0 | lockInterruptibly | -| file://:0:0:0:0 | lockInterruptibly | -| file://:0:0:0:0 | lockInterruptibly | -| file://:0:0:0:0 | lockedPush | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | -| file://:0:0:0:0 | logicalAnd | -| file://:0:0:0:0 | logicalOr | -| file://:0:0:0:0 | logicalXor | -| file://:0:0:0:0 | longBitsToDouble | -| file://:0:0:0:0 | longPrimitiveParameterCount | -| file://:0:0:0:0 | longPrimitiveReturnCount | -| file://:0:0:0:0 | longValue | -| file://:0:0:0:0 | longValueExact | -| file://:0:0:0:0 | longs | -| file://:0:0:0:0 | longs | -| file://:0:0:0:0 | longs | -| file://:0:0:0:0 | longs | -| file://:0:0:0:0 | lookup | -| file://:0:0:0:0 | lookup | -| file://:0:0:0:0 | lookup | -| file://:0:0:0:0 | lookupAllHostAddr | -| file://:0:0:0:0 | lookupAny | -| file://:0:0:0:0 | lookupPrincipalByGroupName | -| file://:0:0:0:0 | lookupPrincipalByName | -| file://:0:0:0:0 | lookupTag | -| file://:0:0:0:0 | loopbackAddress | -| file://:0:0:0:0 | lowSurrogate | -| file://:0:0:0:0 | lowestOneBit | -| file://:0:0:0:0 | lowestOneBit | -| file://:0:0:0:0 | mainClass | -| file://:0:0:0:0 | mainClass | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | make | -| file://:0:0:0:0 | makeAccessException | -| file://:0:0:0:0 | makeAccessException | -| file://:0:0:0:0 | makeArray | -| file://:0:0:0:0 | makeArrayType | -| file://:0:0:0:0 | makeBool | -| file://:0:0:0:0 | makeByte | -| file://:0:0:0:0 | makeChar | -| file://:0:0:0:0 | makeDouble | -| file://:0:0:0:0 | makeDynamicInvoker | -| file://:0:0:0:0 | makeEntry | -| file://:0:0:0:0 | makeFactory | -| file://:0:0:0:0 | makeFactory | -| file://:0:0:0:0 | makeFloat | -| file://:0:0:0:0 | makeImpl | -| file://:0:0:0:0 | makeInt | -| file://:0:0:0:0 | makeLong | -| file://:0:0:0:0 | makeMethodHandleInvoke | -| file://:0:0:0:0 | makeMethodHandleInvoke | -| file://:0:0:0:0 | makeNamedType | -| file://:0:0:0:0 | makeNominalGetters | -| file://:0:0:0:0 | makeNominalGetters | -| file://:0:0:0:0 | makeParameterizedType | -| file://:0:0:0:0 | makeReinvoker | -| file://:0:0:0:0 | makeShort | -| file://:0:0:0:0 | makeSite | -| file://:0:0:0:0 | makeTypeVariable | -| file://:0:0:0:0 | makeVarHandleMethodInvoke | -| file://:0:0:0:0 | makeVarHandleMethodInvoke | -| file://:0:0:0:0 | makeVoid | -| file://:0:0:0:0 | makeWildcard | -| file://:0:0:0:0 | malformedForLength | -| file://:0:0:0:0 | malformedInputAction | -| file://:0:0:0:0 | malformedInputAction | -| file://:0:0:0:0 | managedBlock | -| file://:0:0:0:0 | map | -| file://:0:0:0:0 | map | -| file://:0:0:0:0 | map | -| file://:0:0:0:0 | map | -| file://:0:0:0:0 | map | -| file://:0:0:0:0 | map | -| file://:0:0:0:0 | mapEquivalents | -| file://:0:0:0:0 | mapToDouble | -| file://:0:0:0:0 | mapToDouble | -| file://:0:0:0:0 | mapToDouble | -| file://:0:0:0:0 | mapToInt | -| file://:0:0:0:0 | mapToInt | -| file://:0:0:0:0 | mapToInt | -| file://:0:0:0:0 | mapToLong | -| file://:0:0:0:0 | mapToLong | -| file://:0:0:0:0 | mapToLong | -| file://:0:0:0:0 | mapToObj | -| file://:0:0:0:0 | mapToObj | -| file://:0:0:0:0 | mapToObj | -| file://:0:0:0:0 | mappingCount | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | mark | -| file://:0:0:0:0 | markSupported | -| file://:0:0:0:0 | markSupported | -| file://:0:0:0:0 | markSupported | -| file://:0:0:0:0 | markValue | -| file://:0:0:0:0 | markValue | -| file://:0:0:0:0 | markValue | -| file://:0:0:0:0 | markValue | -| file://:0:0:0:0 | markValue | -| file://:0:0:0:0 | markValue | -| file://:0:0:0:0 | markValue | -| file://:0:0:0:0 | markValue | -| file://:0:0:0:0 | markValue | -| file://:0:0:0:0 | maskNull | -| file://:0:0:0:0 | match | -| file://:0:0:0:0 | matchCerts | -| file://:0:0:0:0 | matches | -| file://:0:0:0:0 | matches | -| file://:0:0:0:0 | max | -| file://:0:0:0:0 | max | -| file://:0:0:0:0 | max | -| file://:0:0:0:0 | max | -| file://:0:0:0:0 | max | -| file://:0:0:0:0 | max | -| file://:0:0:0:0 | max | -| file://:0:0:0:0 | max | -| file://:0:0:0:0 | maxBy | -| file://:0:0:0:0 | maxBytesPerChar | -| file://:0:0:0:0 | maxCharsPerByte | -| file://:0:0:0:0 | maxLength | -| file://:0:0:0:0 | maybeCustomize | -| file://:0:0:0:0 | member | -| file://:0:0:0:0 | memberDeclaringClassOrNull | -| file://:0:0:0:0 | memberDefaults | -| file://:0:0:0:0 | memberTypes | -| file://:0:0:0:0 | members | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | merge | -| file://:0:0:0:0 | metaType | -| file://:0:0:0:0 | metaType | -| file://:0:0:0:0 | methodHandleInvokeLinkerMethod | -| file://:0:0:0:0 | methodName | -| file://:0:0:0:0 | methodSig | -| file://:0:0:0:0 | methodSig | -| file://:0:0:0:0 | methodType | -| file://:0:0:0:0 | methodType | -| file://:0:0:0:0 | methodType | -| file://:0:0:0:0 | methodType | -| file://:0:0:0:0 | methodType | -| file://:0:0:0:0 | methodType | -| file://:0:0:0:0 | methodType | -| file://:0:0:0:0 | methodType | -| file://:0:0:0:0 | millis | -| file://:0:0:0:0 | millis | -| file://:0:0:0:0 | millis | -| file://:0:0:0:0 | millis | -| file://:0:0:0:0 | millis | -| file://:0:0:0:0 | min | -| file://:0:0:0:0 | min | -| file://:0:0:0:0 | min | -| file://:0:0:0:0 | min | -| file://:0:0:0:0 | min | -| file://:0:0:0:0 | min | -| file://:0:0:0:0 | min | -| file://:0:0:0:0 | min | -| file://:0:0:0:0 | minBy | -| file://:0:0:0:0 | minLength | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minus | -| file://:0:0:0:0 | minusDays | -| file://:0:0:0:0 | minusDays | -| file://:0:0:0:0 | minusDays | -| file://:0:0:0:0 | minusDays | -| file://:0:0:0:0 | minusDays | -| file://:0:0:0:0 | minusDays | -| file://:0:0:0:0 | minusHours | -| file://:0:0:0:0 | minusHours | -| file://:0:0:0:0 | minusHours | -| file://:0:0:0:0 | minusHours | -| file://:0:0:0:0 | minusHours | -| file://:0:0:0:0 | minusHours | -| file://:0:0:0:0 | minusMillis | -| file://:0:0:0:0 | minusMillis | -| file://:0:0:0:0 | minusMinutes | -| file://:0:0:0:0 | minusMinutes | -| file://:0:0:0:0 | minusMinutes | -| file://:0:0:0:0 | minusMinutes | -| file://:0:0:0:0 | minusMinutes | -| file://:0:0:0:0 | minusMinutes | -| file://:0:0:0:0 | minusMonths | -| file://:0:0:0:0 | minusMonths | -| file://:0:0:0:0 | minusMonths | -| file://:0:0:0:0 | minusMonths | -| file://:0:0:0:0 | minusMonths | -| file://:0:0:0:0 | minusNanos | -| file://:0:0:0:0 | minusNanos | -| file://:0:0:0:0 | minusNanos | -| file://:0:0:0:0 | minusNanos | -| file://:0:0:0:0 | minusNanos | -| file://:0:0:0:0 | minusNanos | -| file://:0:0:0:0 | minusNanos | -| file://:0:0:0:0 | minusSeconds | -| file://:0:0:0:0 | minusSeconds | -| file://:0:0:0:0 | minusSeconds | -| file://:0:0:0:0 | minusSeconds | -| file://:0:0:0:0 | minusSeconds | -| file://:0:0:0:0 | minusSeconds | -| file://:0:0:0:0 | minusSeconds | -| file://:0:0:0:0 | minusWeeks | -| file://:0:0:0:0 | minusWeeks | -| file://:0:0:0:0 | minusWeeks | -| file://:0:0:0:0 | minusWeeks | -| file://:0:0:0:0 | minusYears | -| file://:0:0:0:0 | minusYears | -| file://:0:0:0:0 | minusYears | -| file://:0:0:0:0 | minusYears | -| file://:0:0:0:0 | minusYears | -| file://:0:0:0:0 | mismatch | -| file://:0:0:0:0 | mismatch | -| file://:0:0:0:0 | mismatch | -| file://:0:0:0:0 | mismatch | -| file://:0:0:0:0 | mismatch | -| file://:0:0:0:0 | mismatch | -| file://:0:0:0:0 | mismatch | -| file://:0:0:0:0 | mismatch | -| file://:0:0:0:0 | mkdir | -| file://:0:0:0:0 | mkdirs | -| file://:0:0:0:0 | mod | -| file://:0:0:0:0 | modInverse | -| file://:0:0:0:0 | modPow | -| file://:0:0:0:0 | modifiers | -| file://:0:0:0:0 | modifiers | -| file://:0:0:0:0 | modifiers | -| file://:0:0:0:0 | modifiers | -| file://:0:0:0:0 | module | -| file://:0:0:0:0 | module | -| file://:0:0:0:0 | module | -| file://:0:0:0:0 | modules | -| file://:0:0:0:0 | modules | -| file://:0:0:0:0 | move | -| file://:0:0:0:0 | mulAdd | -| file://:0:0:0:0 | multipliedBy | -| file://:0:0:0:0 | multipliedBy | -| file://:0:0:0:0 | multipliedBy | -| file://:0:0:0:0 | multiply | -| file://:0:0:0:0 | multiply | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | name | -| file://:0:0:0:0 | nameRefsAreLegal | -| file://:0:0:0:0 | nativeOrder | -| file://:0:0:0:0 | naturalOrder | -| file://:0:0:0:0 | negate | -| file://:0:0:0:0 | negate | -| file://:0:0:0:0 | negate | -| file://:0:0:0:0 | negate | -| file://:0:0:0:0 | negate | -| file://:0:0:0:0 | negated | -| file://:0:0:0:0 | negated | -| file://:0:0:0:0 | negated | -| file://:0:0:0:0 | networkInterfaces | -| file://:0:0:0:0 | newAsynchronousFileChannel | -| file://:0:0:0:0 | newAutomaticModule | -| file://:0:0:0:0 | newByteChannel | -| file://:0:0:0:0 | newCapacity | -| file://:0:0:0:0 | newCapacity | -| file://:0:0:0:0 | newClass | -| file://:0:0:0:0 | newCondition | -| file://:0:0:0:0 | newCondition | -| file://:0:0:0:0 | newCondition | -| file://:0:0:0:0 | newCondition | -| file://:0:0:0:0 | newCondition | -| file://:0:0:0:0 | newCondition | -| file://:0:0:0:0 | newConst | -| file://:0:0:0:0 | newConstItem | -| file://:0:0:0:0 | newConstructor | -| file://:0:0:0:0 | newConstructor | -| file://:0:0:0:0 | newConstructorAccessor | -| file://:0:0:0:0 | newConstructorForExternalization | -| file://:0:0:0:0 | newConstructorForSerialization | -| file://:0:0:0:0 | newConstructorForSerialization | -| file://:0:0:0:0 | newDecoder | -| file://:0:0:0:0 | newDirectoryStream | -| file://:0:0:0:0 | newDouble | -| file://:0:0:0:0 | newEncoder | -| file://:0:0:0:0 | newField | -| file://:0:0:0:0 | newField | -| file://:0:0:0:0 | newField | -| file://:0:0:0:0 | newFieldAccessor | -| file://:0:0:0:0 | newFieldItem | -| file://:0:0:0:0 | newFileChannel | -| file://:0:0:0:0 | newFileSystem | -| file://:0:0:0:0 | newFileSystem | -| file://:0:0:0:0 | newFloat | -| file://:0:0:0:0 | newHandle | -| file://:0:0:0:0 | newHandle | -| file://:0:0:0:0 | newHandleItem | -| file://:0:0:0:0 | newIAE | -| file://:0:0:0:0 | newIndex | -| file://:0:0:0:0 | newInputStream | -| file://:0:0:0:0 | newInstance | -| file://:0:0:0:0 | newInstance | -| file://:0:0:0:0 | newInstance | -| file://:0:0:0:0 | newInstance | -| file://:0:0:0:0 | newInstance | -| file://:0:0:0:0 | newInstance | -| file://:0:0:0:0 | newInteger | -| file://:0:0:0:0 | newInvokeDynamic | -| file://:0:0:0:0 | newInvokeDynamicItem | -| file://:0:0:0:0 | newKeySet | -| file://:0:0:0:0 | newKeySet | -| file://:0:0:0:0 | newLine | -| file://:0:0:0:0 | newLong | -| file://:0:0:0:0 | newMethod | -| file://:0:0:0:0 | newMethod | -| file://:0:0:0:0 | newMethod | -| file://:0:0:0:0 | newMethodAccessor | -| file://:0:0:0:0 | newMethodItem | -| file://:0:0:0:0 | newMethodType | -| file://:0:0:0:0 | newModule | -| file://:0:0:0:0 | newModule | -| file://:0:0:0:0 | newModule | -| file://:0:0:0:0 | newNameType | -| file://:0:0:0:0 | newNameTypeItem | -| file://:0:0:0:0 | newOpenModule | -| file://:0:0:0:0 | newOptionalDataExceptionForSerialization | -| file://:0:0:0:0 | newOutputStream | -| file://:0:0:0:0 | newPackage | -| file://:0:0:0:0 | newPermissionCollection | -| file://:0:0:0:0 | newPermissionCollection | -| file://:0:0:0:0 | newPermissionCollection | -| file://:0:0:0:0 | newPermissionCollection | -| file://:0:0:0:0 | newPermissionCollection | -| file://:0:0:0:0 | newSpeciesData | -| file://:0:0:0:0 | newSpeciesData | -| file://:0:0:0:0 | newStringishItem | -| file://:0:0:0:0 | newTable | -| file://:0:0:0:0 | newTaskFor | -| file://:0:0:0:0 | newTaskFor | -| file://:0:0:0:0 | newTaskFor | -| file://:0:0:0:0 | newTaskFor | -| file://:0:0:0:0 | newThread | -| file://:0:0:0:0 | newThread | -| file://:0:0:0:0 | newThread | -| file://:0:0:0:0 | newUTF8 | -| file://:0:0:0:0 | newWatchService | -| file://:0:0:0:0 | newWrongMethodTypeException | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | next | -| file://:0:0:0:0 | nextBoolean | -| file://:0:0:0:0 | nextByte | -| file://:0:0:0:0 | nextBytes | -| file://:0:0:0:0 | nextChar | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextComplete | -| file://:0:0:0:0 | nextDouble | -| file://:0:0:0:0 | nextDouble | -| file://:0:0:0:0 | nextDouble | -| file://:0:0:0:0 | nextElement | -| file://:0:0:0:0 | nextElement | -| file://:0:0:0:0 | nextElement | -| file://:0:0:0:0 | nextFloat | -| file://:0:0:0:0 | nextFloat | -| file://:0:0:0:0 | nextGaussian | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextGetIndex | -| file://:0:0:0:0 | nextHashCode | -| file://:0:0:0:0 | nextIndex | -| file://:0:0:0:0 | nextIndex | -| file://:0:0:0:0 | nextIndex | -| file://:0:0:0:0 | nextInt | -| file://:0:0:0:0 | nextInt | -| file://:0:0:0:0 | nextInt | -| file://:0:0:0:0 | nextInt | -| file://:0:0:0:0 | nextLocalTask | -| file://:0:0:0:0 | nextLong | -| file://:0:0:0:0 | nextLong | -| file://:0:0:0:0 | nextLong | -| file://:0:0:0:0 | nextProbablePrime | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextPutIndex | -| file://:0:0:0:0 | nextShort | -| file://:0:0:0:0 | nextTaskFor | -| file://:0:0:0:0 | nextThreadID | -| file://:0:0:0:0 | nextThreadID | -| file://:0:0:0:0 | nextThreadNum | -| file://:0:0:0:0 | nextThreadNum | -| file://:0:0:0:0 | nextTransition | -| file://:0:0:0:0 | noneMatch | -| file://:0:0:0:0 | noneMatch | -| file://:0:0:0:0 | noneMatch | -| file://:0:0:0:0 | noneMatch | -| file://:0:0:0:0 | noneOf | -| file://:0:0:0:0 | nonfairTryAcquire | -| file://:0:0:0:0 | nonfairTryAcquire | -| file://:0:0:0:0 | nonfairTryAcquire | -| file://:0:0:0:0 | normalize | -| file://:0:0:0:0 | normalize | -| file://:0:0:0:0 | normalized | -| file://:0:0:0:0 | normalized | -| file://:0:0:0:0 | normalized | -| file://:0:0:0:0 | normalized | -| file://:0:0:0:0 | not | -| file://:0:0:0:0 | not | -| file://:0:0:0:0 | not | -| file://:0:0:0:0 | noteLoopLocalTypesForm | -| file://:0:0:0:0 | notify | -| file://:0:0:0:0 | notifyAll | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | now | -| file://:0:0:0:0 | nullInputStream | -| file://:0:0:0:0 | nullInputStream | -| file://:0:0:0:0 | nullOutputStream | -| file://:0:0:0:0 | nullOutputStream | -| file://:0:0:0:0 | nullOutputStream | -| file://:0:0:0:0 | nullOutputStream | -| file://:0:0:0:0 | nullReader | -| file://:0:0:0:0 | nullWriter | -| file://:0:0:0:0 | nullWriter | -| file://:0:0:0:0 | nullWriter | -| file://:0:0:0:0 | nullsFirst | -| file://:0:0:0:0 | nullsLast | -| file://:0:0:0:0 | numberOfLeadingZeros | -| file://:0:0:0:0 | numberOfLeadingZeros | -| file://:0:0:0:0 | numberOfTrailingZeros | -| file://:0:0:0:0 | numberOfTrailingZeros | -| file://:0:0:0:0 | objectFieldOffset | -| file://:0:0:0:0 | objectFieldOffset | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of | -| file://:0:0:0:0 | of0 | -| file://:0:0:0:0 | ofDays | -| file://:0:0:0:0 | ofDays | -| file://:0:0:0:0 | ofDefaultLocale | -| file://:0:0:0:0 | ofEntries | -| file://:0:0:0:0 | ofEpochDay | -| file://:0:0:0:0 | ofEpochMilli | -| file://:0:0:0:0 | ofEpochSecond | -| file://:0:0:0:0 | ofEpochSecond | -| file://:0:0:0:0 | ofEpochSecond | -| file://:0:0:0:0 | ofHours | -| file://:0:0:0:0 | ofHours | -| file://:0:0:0:0 | ofHoursMinutes | -| file://:0:0:0:0 | ofHoursMinutesSeconds | -| file://:0:0:0:0 | ofInstant | -| file://:0:0:0:0 | ofInstant | -| file://:0:0:0:0 | ofInstant | -| file://:0:0:0:0 | ofInstant | -| file://:0:0:0:0 | ofInstant | -| file://:0:0:0:0 | ofInstant | -| file://:0:0:0:0 | ofInstant | -| file://:0:0:0:0 | ofLocal | -| file://:0:0:0:0 | ofLocale | -| file://:0:0:0:0 | ofLocale | -| file://:0:0:0:0 | ofLocale | -| file://:0:0:0:0 | ofLocalizedDate | -| file://:0:0:0:0 | ofLocalizedDateTime | -| file://:0:0:0:0 | ofLocalizedDateTime | -| file://:0:0:0:0 | ofLocalizedTime | -| file://:0:0:0:0 | ofMillis | -| file://:0:0:0:0 | ofMinutes | -| file://:0:0:0:0 | ofMonths | -| file://:0:0:0:0 | ofNanoOfDay | -| file://:0:0:0:0 | ofNanos | -| file://:0:0:0:0 | ofNullable | -| file://:0:0:0:0 | ofNullable | -| file://:0:0:0:0 | ofOffset | -| file://:0:0:0:0 | ofOffset | -| file://:0:0:0:0 | ofPattern | -| file://:0:0:0:0 | ofPattern | -| file://:0:0:0:0 | ofSecondOfDay | -| file://:0:0:0:0 | ofSeconds | -| file://:0:0:0:0 | ofSeconds | -| file://:0:0:0:0 | ofStrict | -| file://:0:0:0:0 | ofSystem | -| file://:0:0:0:0 | ofTotalSeconds | -| file://:0:0:0:0 | ofWeeks | -| file://:0:0:0:0 | ofWithPrefix | -| file://:0:0:0:0 | ofYearDay | -| file://:0:0:0:0 | ofYears | -| file://:0:0:0:0 | offer | -| file://:0:0:0:0 | offer | -| file://:0:0:0:0 | offerFirst | -| file://:0:0:0:0 | offerLast | -| file://:0:0:0:0 | offset | -| file://:0:0:0:0 | offset | -| file://:0:0:0:0 | offset | -| file://:0:0:0:0 | offset | -| file://:0:0:0:0 | offset | -| file://:0:0:0:0 | offsetByCodePoints | -| file://:0:0:0:0 | offsetByCodePoints | -| file://:0:0:0:0 | offsetByCodePoints | -| file://:0:0:0:0 | offsetByCodePoints | -| file://:0:0:0:0 | offsetByCodePoints | -| file://:0:0:0:0 | offsetByCodePoints | -| file://:0:0:0:0 | offsetByCodePointsImpl | -| file://:0:0:0:0 | onClose | -| file://:0:0:0:0 | onClose | -| file://:0:0:0:0 | onClose | -| file://:0:0:0:0 | onClose | -| file://:0:0:0:0 | onClose | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onExceptionalCompletion | -| file://:0:0:0:0 | onMalformedInput | -| file://:0:0:0:0 | onMalformedInput | -| file://:0:0:0:0 | onSpinWait | -| file://:0:0:0:0 | onSpinWait | -| file://:0:0:0:0 | onSpinWait | -| file://:0:0:0:0 | onStart | -| file://:0:0:0:0 | onStart | -| file://:0:0:0:0 | onTermination | -| file://:0:0:0:0 | onTermination | -| file://:0:0:0:0 | onUnmappableCharacter | -| file://:0:0:0:0 | onUnmappableCharacter | -| file://:0:0:0:0 | open | -| file://:0:0:0:0 | open | -| file://:0:0:0:0 | open | -| file://:0:0:0:0 | open | -| file://:0:0:0:0 | open | -| file://:0:0:0:0 | open | -| file://:0:0:0:0 | openConnection | -| file://:0:0:0:0 | openConnection | -| file://:0:0:0:0 | openConnection | -| file://:0:0:0:0 | openConnection | -| file://:0:0:0:0 | openStream | -| file://:0:0:0:0 | opens | -| file://:0:0:0:0 | opens | -| file://:0:0:0:0 | opens | -| file://:0:0:0:0 | opens | -| file://:0:0:0:0 | opens | -| file://:0:0:0:0 | opens | -| file://:0:0:0:0 | optimize | -| file://:0:0:0:0 | or | -| file://:0:0:0:0 | or | -| file://:0:0:0:0 | or | -| file://:0:0:0:0 | or | -| file://:0:0:0:0 | or | -| file://:0:0:0:0 | or | -| file://:0:0:0:0 | or | -| file://:0:0:0:0 | or | -| file://:0:0:0:0 | or | -| file://:0:0:0:0 | orElse | -| file://:0:0:0:0 | orElse | -| file://:0:0:0:0 | orElse | -| file://:0:0:0:0 | orElse | -| file://:0:0:0:0 | orElseGet | -| file://:0:0:0:0 | orElseGet | -| file://:0:0:0:0 | orElseGet | -| file://:0:0:0:0 | orElseGet | -| file://:0:0:0:0 | orElseThrow | -| file://:0:0:0:0 | orElseThrow | -| file://:0:0:0:0 | orElseThrow | -| file://:0:0:0:0 | orElseThrow | -| file://:0:0:0:0 | orElseThrow | -| file://:0:0:0:0 | orElseThrow | -| file://:0:0:0:0 | orElseThrow | -| file://:0:0:0:0 | orElseThrow | -| file://:0:0:0:0 | order | -| file://:0:0:0:0 | order | -| file://:0:0:0:0 | order | -| file://:0:0:0:0 | order | -| file://:0:0:0:0 | order | -| file://:0:0:0:0 | order | -| file://:0:0:0:0 | order | -| file://:0:0:0:0 | order | -| file://:0:0:0:0 | order | -| file://:0:0:0:0 | order | -| file://:0:0:0:0 | ordinal | -| file://:0:0:0:0 | outer | -| file://:0:0:0:0 | outer | -| file://:0:0:0:0 | overlaps | -| file://:0:0:0:0 | owns | -| file://:0:0:0:0 | owns | -| file://:0:0:0:0 | owns | -| file://:0:0:0:0 | owns | -| file://:0:0:0:0 | packageName | -| file://:0:0:0:0 | packageName | -| file://:0:0:0:0 | packages | -| file://:0:0:0:0 | packages | -| file://:0:0:0:0 | packages | -| file://:0:0:0:0 | packages | -| file://:0:0:0:0 | pageSize | -| file://:0:0:0:0 | parallel | -| file://:0:0:0:0 | parallel | -| file://:0:0:0:0 | parallel | -| file://:0:0:0:0 | parallel | -| file://:0:0:0:0 | parallel | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | parallelStream | -| file://:0:0:0:0 | paramString | -| file://:0:0:0:0 | parameter | -| file://:0:0:0:0 | parameterArray | -| file://:0:0:0:0 | parameterConstraint | -| file://:0:0:0:0 | parameterCount | -| file://:0:0:0:0 | parameterCount | -| file://:0:0:0:0 | parameterList | -| file://:0:0:0:0 | parameterSlotCount | -| file://:0:0:0:0 | parameterSlotCount | -| file://:0:0:0:0 | parameterSlotDepth | -| file://:0:0:0:0 | parameterToArgSlot | -| file://:0:0:0:0 | parameterType | -| file://:0:0:0:0 | parameterType | -| file://:0:0:0:0 | parameterType | -| file://:0:0:0:0 | parentOf | -| file://:0:0:0:0 | parents | -| file://:0:0:0:0 | parents | -| file://:0:0:0:0 | park | -| file://:0:0:0:0 | parkAndCheckInterrupt | -| file://:0:0:0:0 | parkAndCheckInterrupt | -| file://:0:0:0:0 | parkAndCheckInterrupt | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parse | -| file://:0:0:0:0 | parseBest | -| file://:0:0:0:0 | parseBoolean | -| file://:0:0:0:0 | parseDouble | -| file://:0:0:0:0 | parseInt | -| file://:0:0:0:0 | parseInt | -| file://:0:0:0:0 | parseInt | -| file://:0:0:0:0 | parseLong | -| file://:0:0:0:0 | parseLong | -| file://:0:0:0:0 | parseLong | -| file://:0:0:0:0 | parseObject | -| file://:0:0:0:0 | parseObject | -| file://:0:0:0:0 | parseObject | -| file://:0:0:0:0 | parseObject | -| file://:0:0:0:0 | parseParameterAnnotations | -| file://:0:0:0:0 | parseParameterAnnotations | -| file://:0:0:0:0 | parseParameterAnnotations | -| file://:0:0:0:0 | parseServerAuthority | -| file://:0:0:0:0 | parseURL | -| file://:0:0:0:0 | parseUnresolved | -| file://:0:0:0:0 | parseUnsignedInt | -| file://:0:0:0:0 | parseUnsignedInt | -| file://:0:0:0:0 | parseUnsignedInt | -| file://:0:0:0:0 | parseUnsignedLong | -| file://:0:0:0:0 | parseUnsignedLong | -| file://:0:0:0:0 | parseUnsignedLong | -| file://:0:0:0:0 | parsedExcessDays | -| file://:0:0:0:0 | parsedLeapSecond | -| file://:0:0:0:0 | peek | -| file://:0:0:0:0 | peek | -| file://:0:0:0:0 | peek | -| file://:0:0:0:0 | peek | -| file://:0:0:0:0 | peek | -| file://:0:0:0:0 | peek | -| file://:0:0:0:0 | peek | -| file://:0:0:0:0 | peekFirst | -| file://:0:0:0:0 | peekLast | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | peekNextLocalTask | -| file://:0:0:0:0 | performCleanup | -| file://:0:0:0:0 | performCleanup | -| file://:0:0:0:0 | performCleanup | -| file://:0:0:0:0 | performCleanup | -| file://:0:0:0:0 | performCleanup | -| file://:0:0:0:0 | performCleanup | -| file://:0:0:0:0 | performCleanup | -| file://:0:0:0:0 | period | -| file://:0:0:0:0 | period | -| file://:0:0:0:0 | period | -| file://:0:0:0:0 | permuteArgumentsForm | -| file://:0:0:0:0 | permutedTypesMatch | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plus | -| file://:0:0:0:0 | plusDays | -| file://:0:0:0:0 | plusDays | -| file://:0:0:0:0 | plusDays | -| file://:0:0:0:0 | plusDays | -| file://:0:0:0:0 | plusDays | -| file://:0:0:0:0 | plusDays | -| file://:0:0:0:0 | plusHours | -| file://:0:0:0:0 | plusHours | -| file://:0:0:0:0 | plusHours | -| file://:0:0:0:0 | plusHours | -| file://:0:0:0:0 | plusHours | -| file://:0:0:0:0 | plusHours | -| file://:0:0:0:0 | plusMillis | -| file://:0:0:0:0 | plusMillis | -| file://:0:0:0:0 | plusMinutes | -| file://:0:0:0:0 | plusMinutes | -| file://:0:0:0:0 | plusMinutes | -| file://:0:0:0:0 | plusMinutes | -| file://:0:0:0:0 | plusMinutes | -| file://:0:0:0:0 | plusMinutes | -| file://:0:0:0:0 | plusMonths | -| file://:0:0:0:0 | plusMonths | -| file://:0:0:0:0 | plusMonths | -| file://:0:0:0:0 | plusMonths | -| file://:0:0:0:0 | plusMonths | -| file://:0:0:0:0 | plusNanos | -| file://:0:0:0:0 | plusNanos | -| file://:0:0:0:0 | plusNanos | -| file://:0:0:0:0 | plusNanos | -| file://:0:0:0:0 | plusNanos | -| file://:0:0:0:0 | plusNanos | -| file://:0:0:0:0 | plusNanos | -| file://:0:0:0:0 | plusSeconds | -| file://:0:0:0:0 | plusSeconds | -| file://:0:0:0:0 | plusSeconds | -| file://:0:0:0:0 | plusSeconds | -| file://:0:0:0:0 | plusSeconds | -| file://:0:0:0:0 | plusSeconds | -| file://:0:0:0:0 | plusSeconds | -| file://:0:0:0:0 | plusWeeks | -| file://:0:0:0:0 | plusWeeks | -| file://:0:0:0:0 | plusWeeks | -| file://:0:0:0:0 | plusWeeks | -| file://:0:0:0:0 | plusYears | -| file://:0:0:0:0 | plusYears | -| file://:0:0:0:0 | plusYears | -| file://:0:0:0:0 | plusYears | -| file://:0:0:0:0 | plusYears | -| file://:0:0:0:0 | poll | -| file://:0:0:0:0 | poll | -| file://:0:0:0:0 | poll | -| file://:0:0:0:0 | poll | -| file://:0:0:0:0 | poll | -| file://:0:0:0:0 | poll | -| file://:0:0:0:0 | pollEvents | -| file://:0:0:0:0 | pollFirst | -| file://:0:0:0:0 | pollLast | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollNextLocalTask | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollSubmission | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pollTask | -| file://:0:0:0:0 | pop | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | position | -| file://:0:0:0:0 | pow | -| file://:0:0:0:0 | predecessor | -| file://:0:0:0:0 | prepare | -| file://:0:0:0:0 | previous | -| file://:0:0:0:0 | previous | -| file://:0:0:0:0 | previous | -| file://:0:0:0:0 | previous | -| file://:0:0:0:0 | previous | -| file://:0:0:0:0 | previousIndex | -| file://:0:0:0:0 | previousIndex | -| file://:0:0:0:0 | previousIndex | -| file://:0:0:0:0 | previousTransition | -| file://:0:0:0:0 | primeToCertainty | -| file://:0:0:0:0 | primitiveLeftShift | -| file://:0:0:0:0 | primitiveParameterCount | -| file://:0:0:0:0 | primitiveReturnCount | -| file://:0:0:0:0 | primitiveRightShift | -| file://:0:0:0:0 | primitiveSimpleName | -| file://:0:0:0:0 | primitiveType | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | print | -| file://:0:0:0:0 | printModifiersIfNonzero | -| file://:0:0:0:0 | printModifiersIfNonzero | -| file://:0:0:0:0 | printModifiersIfNonzero | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTrace | -| file://:0:0:0:0 | printStackTraceWhenAccessFails | -| file://:0:0:0:0 | printStackTraceWhenAccessFails | -| file://:0:0:0:0 | printStackTraceWhenAccessFails | -| file://:0:0:0:0 | printStackTraceWhenAccessFails | -| file://:0:0:0:0 | printf | -| file://:0:0:0:0 | printf | -| file://:0:0:0:0 | printf | -| file://:0:0:0:0 | printf | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | println | -| file://:0:0:0:0 | privateGetParameters | -| file://:0:0:0:0 | privateGetParameters | -| file://:0:0:0:0 | probablePrime | -| file://:0:0:0:0 | probeBackupLocations | -| file://:0:0:0:0 | probeHomeLocation | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processPendingReferences | -| file://:0:0:0:0 | processQueue | -| file://:0:0:0:0 | processQueue | -| file://:0:0:0:0 | processQueue | -| file://:0:0:0:0 | processQueue | -| file://:0:0:0:0 | prolepticYear | -| file://:0:0:0:0 | prolepticYear | -| file://:0:0:0:0 | prolepticYear | -| file://:0:0:0:0 | promise | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propagateCompletion | -| file://:0:0:0:0 | propertyNames | -| file://:0:0:0:0 | propertyNames | -| file://:0:0:0:0 | provider | -| file://:0:0:0:0 | providerName | -| file://:0:0:0:0 | providers | -| file://:0:0:0:0 | provides | -| file://:0:0:0:0 | provides | -| file://:0:0:0:0 | provides | -| file://:0:0:0:0 | ptypes | -| file://:0:0:0:0 | push | -| file://:0:0:0:0 | push | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | pushState | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put | -| file://:0:0:0:0 | put11 | -| file://:0:0:0:0 | put12 | -| file://:0:0:0:0 | putAddress | -| file://:0:0:0:0 | putAddress | -| file://:0:0:0:0 | putAll | -| file://:0:0:0:0 | putAll | -| file://:0:0:0:0 | putAll | -| file://:0:0:0:0 | putAll | -| file://:0:0:0:0 | putAll | -| file://:0:0:0:0 | putAll | -| file://:0:0:0:0 | putAll | -| file://:0:0:0:0 | putAll | -| file://:0:0:0:0 | putAll | -| file://:0:0:0:0 | putAll | -| file://:0:0:0:0 | putAll | -| file://:0:0:0:0 | putBoolean | -| file://:0:0:0:0 | putBooleanOpaque | -| file://:0:0:0:0 | putBooleanRelease | -| file://:0:0:0:0 | putBooleanVolatile | -| file://:0:0:0:0 | putByte | -| file://:0:0:0:0 | putByte | -| file://:0:0:0:0 | putByte | -| file://:0:0:0:0 | putByteArray | -| file://:0:0:0:0 | putByteOpaque | -| file://:0:0:0:0 | putByteRelease | -| file://:0:0:0:0 | putByteVolatile | -| file://:0:0:0:0 | putChar | -| file://:0:0:0:0 | putChar | -| file://:0:0:0:0 | putChar | -| file://:0:0:0:0 | putChar | -| file://:0:0:0:0 | putChar | -| file://:0:0:0:0 | putChar | -| file://:0:0:0:0 | putCharOpaque | -| file://:0:0:0:0 | putCharRelease | -| file://:0:0:0:0 | putCharUnaligned | -| file://:0:0:0:0 | putCharUnaligned | -| file://:0:0:0:0 | putCharVolatile | -| file://:0:0:0:0 | putCharsAt | -| file://:0:0:0:0 | putCharsAt | -| file://:0:0:0:0 | putCharsAt | -| file://:0:0:0:0 | putCharsAt | -| file://:0:0:0:0 | putDouble | -| file://:0:0:0:0 | putDouble | -| file://:0:0:0:0 | putDouble | -| file://:0:0:0:0 | putDouble | -| file://:0:0:0:0 | putDouble | -| file://:0:0:0:0 | putDouble | -| file://:0:0:0:0 | putDoubleOpaque | -| file://:0:0:0:0 | putDoubleRelease | -| file://:0:0:0:0 | putDoubleVolatile | -| file://:0:0:0:0 | putFields | -| file://:0:0:0:0 | putFloat | -| file://:0:0:0:0 | putFloat | -| file://:0:0:0:0 | putFloat | -| file://:0:0:0:0 | putFloat | -| file://:0:0:0:0 | putFloat | -| file://:0:0:0:0 | putFloat | -| file://:0:0:0:0 | putFloatOpaque | -| file://:0:0:0:0 | putFloatRelease | -| file://:0:0:0:0 | putFloatVolatile | -| file://:0:0:0:0 | putIfAbsent | -| file://:0:0:0:0 | putIfAbsent | -| file://:0:0:0:0 | putIfAbsent | -| file://:0:0:0:0 | putIfAbsent | -| file://:0:0:0:0 | putIfAbsent | -| file://:0:0:0:0 | putIfAbsent | -| file://:0:0:0:0 | putIfAbsent | -| file://:0:0:0:0 | putIfAbsent | -| file://:0:0:0:0 | putIfAbsent | -| file://:0:0:0:0 | putIfAbsent | -| file://:0:0:0:0 | putIfAbsent | -| file://:0:0:0:0 | putInt | -| file://:0:0:0:0 | putInt | -| file://:0:0:0:0 | putInt | -| file://:0:0:0:0 | putInt | -| file://:0:0:0:0 | putInt | -| file://:0:0:0:0 | putInt | -| file://:0:0:0:0 | putInt | -| file://:0:0:0:0 | putIntOpaque | -| file://:0:0:0:0 | putIntRelease | -| file://:0:0:0:0 | putIntUnaligned | -| file://:0:0:0:0 | putIntUnaligned | -| file://:0:0:0:0 | putIntVolatile | -| file://:0:0:0:0 | putLong | -| file://:0:0:0:0 | putLong | -| file://:0:0:0:0 | putLong | -| file://:0:0:0:0 | putLong | -| file://:0:0:0:0 | putLong | -| file://:0:0:0:0 | putLong | -| file://:0:0:0:0 | putLong | -| file://:0:0:0:0 | putLongOpaque | -| file://:0:0:0:0 | putLongRelease | -| file://:0:0:0:0 | putLongUnaligned | -| file://:0:0:0:0 | putLongUnaligned | -| file://:0:0:0:0 | putLongVolatile | -| file://:0:0:0:0 | putObject | -| file://:0:0:0:0 | putObjectOpaque | -| file://:0:0:0:0 | putObjectRelease | -| file://:0:0:0:0 | putObjectVolatile | -| file://:0:0:0:0 | putService | -| file://:0:0:0:0 | putShort | -| file://:0:0:0:0 | putShort | -| file://:0:0:0:0 | putShort | -| file://:0:0:0:0 | putShort | -| file://:0:0:0:0 | putShort | -| file://:0:0:0:0 | putShort | -| file://:0:0:0:0 | putShort | -| file://:0:0:0:0 | putShortOpaque | -| file://:0:0:0:0 | putShortRelease | -| file://:0:0:0:0 | putShortUnaligned | -| file://:0:0:0:0 | putShortUnaligned | -| file://:0:0:0:0 | putShortVolatile | -| file://:0:0:0:0 | putStringAt | -| file://:0:0:0:0 | putStringAt | -| file://:0:0:0:0 | putTreeVal | -| file://:0:0:0:0 | putUTF8 | -| file://:0:0:0:0 | putVal | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | query | -| file://:0:0:0:0 | queryFrom | -| file://:0:0:0:0 | queueSize | -| file://:0:0:0:0 | quiesceCommonPool | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyComplete | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyCompleteRoot | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyInvoke | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | quietlyJoin | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | range | -| file://:0:0:0:0 | rangeClosed | -| file://:0:0:0:0 | rangeClosed | -| file://:0:0:0:0 | rangeRefinedBy | -| file://:0:0:0:0 | rangeRefinedBy | -| file://:0:0:0:0 | rangeTo | -| file://:0:0:0:0 | rangeTo | -| file://:0:0:0:0 | rangeTo | -| file://:0:0:0:0 | rangeTo | -| file://:0:0:0:0 | rangeTo | -| file://:0:0:0:0 | rangeTo | -| file://:0:0:0:0 | rangeTo | -| file://:0:0:0:0 | rangeTo | -| file://:0:0:0:0 | rangeTo | -| file://:0:0:0:0 | rawCompiledVersion | -| file://:0:0:0:0 | rawVersion | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | reachabilityFence | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | read | -| file://:0:0:0:0 | readAllBytes | -| file://:0:0:0:0 | readAllBytes | -| file://:0:0:0:0 | readAttributes | -| file://:0:0:0:0 | readAttributes | -| file://:0:0:0:0 | readBoolean | -| file://:0:0:0:0 | readBoolean | -| file://:0:0:0:0 | readBoolean | -| file://:0:0:0:0 | readByte | -| file://:0:0:0:0 | readByte | -| file://:0:0:0:0 | readByte | -| file://:0:0:0:0 | readByte | -| file://:0:0:0:0 | readChar | -| file://:0:0:0:0 | readChar | -| file://:0:0:0:0 | readChar | -| file://:0:0:0:0 | readClass | -| file://:0:0:0:0 | readClassDescriptor | -| file://:0:0:0:0 | readConst | -| file://:0:0:0:0 | readDouble | -| file://:0:0:0:0 | readDouble | -| file://:0:0:0:0 | readDouble | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readExternal | -| file://:0:0:0:0 | readFields | -| file://:0:0:0:0 | readFloat | -| file://:0:0:0:0 | readFloat | -| file://:0:0:0:0 | readFloat | -| file://:0:0:0:0 | readFully | -| file://:0:0:0:0 | readFully | -| file://:0:0:0:0 | readFully | -| file://:0:0:0:0 | readFully | -| file://:0:0:0:0 | readFully | -| file://:0:0:0:0 | readFully | -| file://:0:0:0:0 | readHashtable | -| file://:0:0:0:0 | readHashtable | -| file://:0:0:0:0 | readHashtable | -| file://:0:0:0:0 | readInt | -| file://:0:0:0:0 | readInt | -| file://:0:0:0:0 | readInt | -| file://:0:0:0:0 | readInt | -| file://:0:0:0:0 | readLabel | -| file://:0:0:0:0 | readLine | -| file://:0:0:0:0 | readLine | -| file://:0:0:0:0 | readLine | -| file://:0:0:0:0 | readLine | -| file://:0:0:0:0 | readLong | -| file://:0:0:0:0 | readLong | -| file://:0:0:0:0 | readLong | -| file://:0:0:0:0 | readLong | -| file://:0:0:0:0 | readModule | -| file://:0:0:0:0 | readNBytes | -| file://:0:0:0:0 | readNBytes | -| file://:0:0:0:0 | readNBytes | -| file://:0:0:0:0 | readNBytes | -| file://:0:0:0:0 | readNonProxy | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObject | -| file://:0:0:0:0 | readObjectForSerialization | -| file://:0:0:0:0 | readObjectNoDataForSerialization | -| file://:0:0:0:0 | readObjectOverride | -| file://:0:0:0:0 | readPackage | -| file://:0:0:0:0 | readResolve | -| file://:0:0:0:0 | readResolve | -| file://:0:0:0:0 | readResolve | -| file://:0:0:0:0 | readResolve | -| file://:0:0:0:0 | readResolveForSerialization | -| file://:0:0:0:0 | readShort | -| file://:0:0:0:0 | readShort | -| file://:0:0:0:0 | readShort | -| file://:0:0:0:0 | readShort | -| file://:0:0:0:0 | readSpeciesDataFromCode | -| file://:0:0:0:0 | readStreamHeader | -| file://:0:0:0:0 | readSymbolicLink | -| file://:0:0:0:0 | readTypeString | -| file://:0:0:0:0 | readUTF | -| file://:0:0:0:0 | readUTF | -| file://:0:0:0:0 | readUTF | -| file://:0:0:0:0 | readUTF8 | -| file://:0:0:0:0 | readUnshared | -| file://:0:0:0:0 | readUnsignedByte | -| file://:0:0:0:0 | readUnsignedByte | -| file://:0:0:0:0 | readUnsignedByte | -| file://:0:0:0:0 | readUnsignedShort | -| file://:0:0:0:0 | readUnsignedShort | -| file://:0:0:0:0 | readUnsignedShort | -| file://:0:0:0:0 | readUnsignedShort | -| file://:0:0:0:0 | reads | -| file://:0:0:0:0 | reads | -| file://:0:0:0:0 | ready | -| file://:0:0:0:0 | reallocateMemory | -| file://:0:0:0:0 | rebind | -| file://:0:0:0:0 | rebind | -| file://:0:0:0:0 | reconstitutionPut | -| file://:0:0:0:0 | reconstitutionPut | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recordExceptionalCompletion | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | recoverState | -| file://:0:0:0:0 | reduce | -| file://:0:0:0:0 | reduce | -| file://:0:0:0:0 | reduce | -| file://:0:0:0:0 | reduce | -| file://:0:0:0:0 | reduce | -| file://:0:0:0:0 | reduce | -| file://:0:0:0:0 | reduce | -| file://:0:0:0:0 | reduce | -| file://:0:0:0:0 | reduce | -| file://:0:0:0:0 | reduce | -| file://:0:0:0:0 | reduceEntries | -| file://:0:0:0:0 | reduceEntries | -| file://:0:0:0:0 | reduceEntriesToDouble | -| file://:0:0:0:0 | reduceEntriesToInt | -| file://:0:0:0:0 | reduceEntriesToLong | -| file://:0:0:0:0 | reduceKeys | -| file://:0:0:0:0 | reduceKeys | -| file://:0:0:0:0 | reduceKeysToDouble | -| file://:0:0:0:0 | reduceKeysToInt | -| file://:0:0:0:0 | reduceKeysToLong | -| file://:0:0:0:0 | reduceToDouble | -| file://:0:0:0:0 | reduceToInt | -| file://:0:0:0:0 | reduceToLong | -| file://:0:0:0:0 | reduceValues | -| file://:0:0:0:0 | reduceValues | -| file://:0:0:0:0 | reduceValuesToDouble | -| file://:0:0:0:0 | reduceValuesToInt | -| file://:0:0:0:0 | reduceValuesToLong | -| file://:0:0:0:0 | reference | -| file://:0:0:0:0 | referenceKindIsConsistentWith | -| file://:0:0:0:0 | references | -| file://:0:0:0:0 | references | -| file://:0:0:0:0 | refersTo | -| file://:0:0:0:0 | refersTo | -| file://:0:0:0:0 | reflectConstructor | -| file://:0:0:0:0 | reflectConstructor | -| file://:0:0:0:0 | reflectField | -| file://:0:0:0:0 | reflectField | -| file://:0:0:0:0 | reflectSDField | -| file://:0:0:0:0 | refreshVersion | -| file://:0:0:0:0 | regionMatches | -| file://:0:0:0:0 | regionMatches | -| file://:0:0:0:0 | register | -| file://:0:0:0:0 | register | -| file://:0:0:0:0 | register | -| file://:0:0:0:0 | register | -| file://:0:0:0:0 | register | -| file://:0:0:0:0 | register | -| file://:0:0:0:0 | registerAsParallelCapable | -| file://:0:0:0:0 | registerChrono | -| file://:0:0:0:0 | registerChrono | -| file://:0:0:0:0 | registerChrono | -| file://:0:0:0:0 | registerChrono | -| file://:0:0:0:0 | registerCleanup | -| file://:0:0:0:0 | registerNatives | -| file://:0:0:0:0 | registerNatives | -| file://:0:0:0:0 | registerValidation | -| file://:0:0:0:0 | registerWorker | -| file://:0:0:0:0 | rehash | -| file://:0:0:0:0 | rehash | -| file://:0:0:0:0 | rehash | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | reinitialize | -| file://:0:0:0:0 | relativize | -| file://:0:0:0:0 | relativize | -| file://:0:0:0:0 | release | -| file://:0:0:0:0 | release | -| file://:0:0:0:0 | release | -| file://:0:0:0:0 | release | -| file://:0:0:0:0 | release | -| file://:0:0:0:0 | release | -| file://:0:0:0:0 | releaseFence | -| file://:0:0:0:0 | releasePhaseLock | -| file://:0:0:0:0 | releaseShared | -| file://:0:0:0:0 | releaseShared | -| file://:0:0:0:0 | releaseShared | -| file://:0:0:0:0 | releaseShared | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | rem | -| file://:0:0:0:0 | remainder | -| file://:0:0:0:0 | remainderUnsigned | -| file://:0:0:0:0 | remainderUnsigned | -| file://:0:0:0:0 | remaining | -| file://:0:0:0:0 | remaining | -| file://:0:0:0:0 | remaining | -| file://:0:0:0:0 | remaining | -| file://:0:0:0:0 | remaining | -| file://:0:0:0:0 | remaining | -| file://:0:0:0:0 | remaining | -| file://:0:0:0:0 | remaining | -| file://:0:0:0:0 | remaining | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | remove | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAll | -| file://:0:0:0:0 | removeAt | -| file://:0:0:0:0 | removeAt | -| file://:0:0:0:0 | removeAt | -| file://:0:0:0:0 | removeEntry | -| file://:0:0:0:0 | removeEntryIf | -| file://:0:0:0:0 | removeFirst | -| file://:0:0:0:0 | removeFirstOccurrence | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeIf | -| file://:0:0:0:0 | removeLast | -| file://:0:0:0:0 | removeLastOccurrence | -| file://:0:0:0:0 | removeMapping | -| file://:0:0:0:0 | removeMapping | -| file://:0:0:0:0 | removeRange | -| file://:0:0:0:0 | removeRange | -| file://:0:0:0:0 | removeService | -| file://:0:0:0:0 | removeTreeNode | -| file://:0:0:0:0 | removeUnicodeLocaleAttribute | -| file://:0:0:0:0 | removeValueIf | -| file://:0:0:0:0 | renameTo | -| file://:0:0:0:0 | repeat | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replace | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceAll | -| file://:0:0:0:0 | replaceFirst | -| file://:0:0:0:0 | replaceName | -| file://:0:0:0:0 | replaceNames | -| file://:0:0:0:0 | replaceNode | -| file://:0:0:0:0 | replaceObject | -| file://:0:0:0:0 | replaceParameterTypes | -| file://:0:0:0:0 | replaceWith | -| file://:0:0:0:0 | replaceWith | -| file://:0:0:0:0 | replacement | -| file://:0:0:0:0 | replacement | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | reportException | -| file://:0:0:0:0 | requires | -| file://:0:0:0:0 | requires | -| file://:0:0:0:0 | requires | -| file://:0:0:0:0 | requires | -| file://:0:0:0:0 | requires | -| file://:0:0:0:0 | requires | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | reset | -| file://:0:0:0:0 | resize | -| file://:0:0:0:0 | resize | -| file://:0:0:0:0 | resizeStamp | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolve | -| file://:0:0:0:0 | resolveAligned | -| file://:0:0:0:0 | resolveAligned | -| file://:0:0:0:0 | resolveAndBind | -| file://:0:0:0:0 | resolveAndBind | -| file://:0:0:0:0 | resolveAndBind | -| file://:0:0:0:0 | resolveClass | -| file://:0:0:0:0 | resolveClass | -| file://:0:0:0:0 | resolveDate | -| file://:0:0:0:0 | resolveDate | -| file://:0:0:0:0 | resolveDate | -| file://:0:0:0:0 | resolveObject | -| file://:0:0:0:0 | resolveOrFail | -| file://:0:0:0:0 | resolveOrNull | -| file://:0:0:0:0 | resolveProlepticMonth | -| file://:0:0:0:0 | resolveProlepticMonth | -| file://:0:0:0:0 | resolveProxyClass | -| file://:0:0:0:0 | resolveSibling | -| file://:0:0:0:0 | resolveSibling | -| file://:0:0:0:0 | resolveYAA | -| file://:0:0:0:0 | resolveYAA | -| file://:0:0:0:0 | resolveYAD | -| file://:0:0:0:0 | resolveYAD | -| file://:0:0:0:0 | resolveYD | -| file://:0:0:0:0 | resolveYD | -| file://:0:0:0:0 | resolveYMAA | -| file://:0:0:0:0 | resolveYMAA | -| file://:0:0:0:0 | resolveYMAD | -| file://:0:0:0:0 | resolveYMAD | -| file://:0:0:0:0 | resolveYMD | -| file://:0:0:0:0 | resolveYMD | -| file://:0:0:0:0 | resolveYearOfEra | -| file://:0:0:0:0 | resolveYearOfEra | -| file://:0:0:0:0 | resolvedHandle | -| file://:0:0:0:0 | resources | -| file://:0:0:0:0 | resume | -| file://:0:0:0:0 | resume | -| file://:0:0:0:0 | resume | -| file://:0:0:0:0 | resume | -| file://:0:0:0:0 | resume0 | -| file://:0:0:0:0 | resume0 | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retainAll | -| file://:0:0:0:0 | retention | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | rethrow | -| file://:0:0:0:0 | retrieveISOCountryCodes | -| file://:0:0:0:0 | returnCount | -| file://:0:0:0:0 | returnSlotCount | -| file://:0:0:0:0 | returnSlotCount | -| file://:0:0:0:0 | returnType | -| file://:0:0:0:0 | returnType | -| file://:0:0:0:0 | returnType | -| file://:0:0:0:0 | reverse | -| file://:0:0:0:0 | reverse | -| file://:0:0:0:0 | reverse | -| file://:0:0:0:0 | reverse | -| file://:0:0:0:0 | reverse | -| file://:0:0:0:0 | reverseBytes | -| file://:0:0:0:0 | reverseBytes | -| file://:0:0:0:0 | reverseBytes | -| file://:0:0:0:0 | reverseOrder | -| file://:0:0:0:0 | reversed | -| file://:0:0:0:0 | rewind | -| file://:0:0:0:0 | rewind | -| file://:0:0:0:0 | rewind | -| file://:0:0:0:0 | rewind | -| file://:0:0:0:0 | rewind | -| file://:0:0:0:0 | rewind | -| file://:0:0:0:0 | rewind | -| file://:0:0:0:0 | rewind | -| file://:0:0:0:0 | rewind | -| file://:0:0:0:0 | rotateLeft | -| file://:0:0:0:0 | rotateLeft | -| file://:0:0:0:0 | rotateLeft | -| file://:0:0:0:0 | rotateRight | -| file://:0:0:0:0 | rotateRight | -| file://:0:0:0:0 | rotateRight | -| file://:0:0:0:0 | rtype | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | run | -| file://:0:0:0:0 | runWorker | -| file://:0:0:0:0 | sameFile | -| file://:0:0:0:0 | sameFile | -| file://:0:0:0:0 | save | -| file://:0:0:0:0 | save | -| file://:0:0:0:0 | saveConvert | -| file://:0:0:0:0 | search | -| file://:0:0:0:0 | searchEntries | -| file://:0:0:0:0 | searchKeys | -| file://:0:0:0:0 | searchValues | -| file://:0:0:0:0 | selfInterrupt | -| file://:0:0:0:0 | selfInterrupt | -| file://:0:0:0:0 | selfInterrupt | -| file://:0:0:0:0 | selfInterrupt | -| file://:0:0:0:0 | sequential | -| file://:0:0:0:0 | sequential | -| file://:0:0:0:0 | sequential | -| file://:0:0:0:0 | sequential | -| file://:0:0:0:0 | sequential | -| file://:0:0:0:0 | serialClass | -| file://:0:0:0:0 | serialClass | -| file://:0:0:0:0 | service | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | set | -| file://:0:0:0:0 | setAccessible | -| file://:0:0:0:0 | setAccessible | -| file://:0:0:0:0 | setAccessible | -| file://:0:0:0:0 | setAccessible | -| file://:0:0:0:0 | setAccessible | -| file://:0:0:0:0 | setAccessible | -| file://:0:0:0:0 | setAccessible | -| file://:0:0:0:0 | setAccessible | -| file://:0:0:0:0 | setAccessible | -| file://:0:0:0:0 | setAccessible | -| file://:0:0:0:0 | setAccessible0 | -| file://:0:0:0:0 | setAccessible0 | -| file://:0:0:0:0 | setAccessible0 | -| file://:0:0:0:0 | setAccessible0 | -| file://:0:0:0:0 | setAccessible0 | -| file://:0:0:0:0 | setAllowUserInteraction | -| file://:0:0:0:0 | setAttribute | -| file://:0:0:0:0 | setBeginIndex | -| file://:0:0:0:0 | setBit | -| file://:0:0:0:0 | setBoolean | -| file://:0:0:0:0 | setBoolean | -| file://:0:0:0:0 | setByte | -| file://:0:0:0:0 | setByte | -| file://:0:0:0:0 | setCachedLambdaForm | -| file://:0:0:0:0 | setCachedMethodHandle | -| file://:0:0:0:0 | setCaseSensitive | -| file://:0:0:0:0 | setChar | -| file://:0:0:0:0 | setChar | -| file://:0:0:0:0 | setCharAt | -| file://:0:0:0:0 | setCharAt | -| file://:0:0:0:0 | setCharAt | -| file://:0:0:0:0 | setClassAssertionStatus | -| file://:0:0:0:0 | setCleanerImplAccess | -| file://:0:0:0:0 | setConnectTimeout | -| file://:0:0:0:0 | setConstructorAccessor | -| file://:0:0:0:0 | setConstructorAccessor | -| file://:0:0:0:0 | setConstructorAccessor | -| file://:0:0:0:0 | setContentHandlerFactory | -| file://:0:0:0:0 | setContextClassLoader | -| file://:0:0:0:0 | setContextClassLoader | -| file://:0:0:0:0 | setContextClassLoader | -| file://:0:0:0:0 | setDaemon | -| file://:0:0:0:0 | setDaemon | -| file://:0:0:0:0 | setDaemon | -| file://:0:0:0:0 | setDaemon | -| file://:0:0:0:0 | setDate | -| file://:0:0:0:0 | setDefault | -| file://:0:0:0:0 | setDefault | -| file://:0:0:0:0 | setDefaultAllowUserInteraction | -| file://:0:0:0:0 | setDefaultAssertionStatus | -| file://:0:0:0:0 | setDefaultRequestProperty | -| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | -| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | -| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | -| file://:0:0:0:0 | setDefaultUseCaches | -| file://:0:0:0:0 | setDefaultUseCaches | -| file://:0:0:0:0 | setDoInput | -| file://:0:0:0:0 | setDoOutput | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDone | -| file://:0:0:0:0 | setDouble | -| file://:0:0:0:0 | setDouble | -| file://:0:0:0:0 | setEndIndex | -| file://:0:0:0:0 | setError | -| file://:0:0:0:0 | setError | -| file://:0:0:0:0 | setErrorIndex | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExceptionalCompletion | -| file://:0:0:0:0 | setExclusiveOwnerThread | -| file://:0:0:0:0 | setExclusiveOwnerThread | -| file://:0:0:0:0 | setExclusiveOwnerThread | -| file://:0:0:0:0 | setExclusiveOwnerThread | -| file://:0:0:0:0 | setExclusiveOwnerThread | -| file://:0:0:0:0 | setExecutable | -| file://:0:0:0:0 | setExecutable | -| file://:0:0:0:0 | setExtension | -| file://:0:0:0:0 | setFileNameMap | -| file://:0:0:0:0 | setFloat | -| file://:0:0:0:0 | setFloat | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForkJoinTaskTag | -| file://:0:0:0:0 | setForm | -| file://:0:0:0:0 | setHandle | -| file://:0:0:0:0 | setHead | -| file://:0:0:0:0 | setHead | -| file://:0:0:0:0 | setHead | -| file://:0:0:0:0 | setHeadAndPropagate | -| file://:0:0:0:0 | setHeadAndPropagate | -| file://:0:0:0:0 | setHeadAndPropagate | -| file://:0:0:0:0 | setHours | -| file://:0:0:0:0 | setIfModifiedSince | -| file://:0:0:0:0 | setIndex | -| file://:0:0:0:0 | setIndex | -| file://:0:0:0:0 | setIndex | -| file://:0:0:0:0 | setInitialValue | -| file://:0:0:0:0 | setInt | -| file://:0:0:0:0 | setInt | -| file://:0:0:0:0 | setLangReflectAccess | -| file://:0:0:0:0 | setLanguage | -| file://:0:0:0:0 | setLanguageTag | -| file://:0:0:0:0 | setLastModified | -| file://:0:0:0:0 | setLength | -| file://:0:0:0:0 | setLength | -| file://:0:0:0:0 | setLength | -| file://:0:0:0:0 | setLocale | -| file://:0:0:0:0 | setLong | -| file://:0:0:0:0 | setLong | -| file://:0:0:0:0 | setMaxPriority | -| file://:0:0:0:0 | setMemory | -| file://:0:0:0:0 | setMemory | -| file://:0:0:0:0 | setMethodAccessor | -| file://:0:0:0:0 | setMethodAccessor | -| file://:0:0:0:0 | setMethodAccessor | -| file://:0:0:0:0 | setMinutes | -| file://:0:0:0:0 | setMonth | -| file://:0:0:0:0 | setName | -| file://:0:0:0:0 | setName | -| file://:0:0:0:0 | setName | -| file://:0:0:0:0 | setNativeName | -| file://:0:0:0:0 | setNativeName | -| file://:0:0:0:0 | setObjFieldValues | -| file://:0:0:0:0 | setObjectInputFilter | -| file://:0:0:0:0 | setOffset | -| file://:0:0:0:0 | setOpaque | -| file://:0:0:0:0 | setOpaque | -| file://:0:0:0:0 | setOpaque | -| file://:0:0:0:0 | setPackageAssertionStatus | -| file://:0:0:0:0 | setParsed | -| file://:0:0:0:0 | setParsed | -| file://:0:0:0:0 | setParsedField | -| file://:0:0:0:0 | setParsedLeapSecond | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPendingCount | -| file://:0:0:0:0 | setPlain | -| file://:0:0:0:0 | setPlain | -| file://:0:0:0:0 | setPrevRelaxed | -| file://:0:0:0:0 | setPrimFieldValues | -| file://:0:0:0:0 | setPriority | -| file://:0:0:0:0 | setPriority | -| file://:0:0:0:0 | setPriority | -| file://:0:0:0:0 | setPriority0 | -| file://:0:0:0:0 | setPriority0 | -| file://:0:0:0:0 | setProperty | -| file://:0:0:0:0 | setProperty | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setRawResult | -| file://:0:0:0:0 | setReadOnly | -| file://:0:0:0:0 | setReadOnly | -| file://:0:0:0:0 | setReadOnly | -| file://:0:0:0:0 | setReadTimeout | -| file://:0:0:0:0 | setReadable | -| file://:0:0:0:0 | setReadable | -| file://:0:0:0:0 | setRegion | -| file://:0:0:0:0 | setRelease | -| file://:0:0:0:0 | setRelease | -| file://:0:0:0:0 | setRelease | -| file://:0:0:0:0 | setRequestProperty | -| file://:0:0:0:0 | setScript | -| file://:0:0:0:0 | setSeconds | -| file://:0:0:0:0 | setSeed | -| file://:0:0:0:0 | setSerialFilter | -| file://:0:0:0:0 | setShort | -| file://:0:0:0:0 | setShort | -| file://:0:0:0:0 | setSigners | -| file://:0:0:0:0 | setSigners | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setStackTrace | -| file://:0:0:0:0 | setState | -| file://:0:0:0:0 | setState | -| file://:0:0:0:0 | setState | -| file://:0:0:0:0 | setState | -| file://:0:0:0:0 | setStrict | -| file://:0:0:0:0 | setTabAt | -| file://:0:0:0:0 | setTarget | -| file://:0:0:0:0 | setTargetNormal | -| file://:0:0:0:0 | setTargetVolatile | -| file://:0:0:0:0 | setTime | -| file://:0:0:0:0 | setURL | -| file://:0:0:0:0 | setURL | -| file://:0:0:0:0 | setURLStreamHandlerFactory | -| file://:0:0:0:0 | setUncaughtExceptionHandler | -| file://:0:0:0:0 | setUncaughtExceptionHandler | -| file://:0:0:0:0 | setUncaughtExceptionHandler | -| file://:0:0:0:0 | setUnicodeLocaleKeyword | -| file://:0:0:0:0 | setUseCaches | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setValue | -| file://:0:0:0:0 | setVarargs | -| file://:0:0:0:0 | setVarargs | -| file://:0:0:0:0 | setVariant | -| file://:0:0:0:0 | setVolatile | -| file://:0:0:0:0 | setWritable | -| file://:0:0:0:0 | setWritable | -| file://:0:0:0:0 | setYear | -| file://:0:0:0:0 | sharedGetParameterAnnotations | -| file://:0:0:0:0 | sharedGetParameterAnnotations | -| file://:0:0:0:0 | sharedGetParameterAnnotations | -| file://:0:0:0:0 | sharedToGenericString | -| file://:0:0:0:0 | sharedToGenericString | -| file://:0:0:0:0 | sharedToGenericString | -| file://:0:0:0:0 | sharedToString | -| file://:0:0:0:0 | sharedToString | -| file://:0:0:0:0 | sharedToString | -| file://:0:0:0:0 | shift | -| file://:0:0:0:0 | shift | -| file://:0:0:0:0 | shiftLeft | -| file://:0:0:0:0 | shiftRight | -| file://:0:0:0:0 | shl | -| file://:0:0:0:0 | shl | -| file://:0:0:0:0 | shortValue | -| file://:0:0:0:0 | shortValueExact | -| file://:0:0:0:0 | shortenSignature | -| file://:0:0:0:0 | shouldBeInitialized | -| file://:0:0:0:0 | shouldParkAfterFailedAcquire | -| file://:0:0:0:0 | shouldParkAfterFailedAcquire | -| file://:0:0:0:0 | shouldParkAfterFailedAcquire | -| file://:0:0:0:0 | shr | -| file://:0:0:0:0 | shr | -| file://:0:0:0:0 | shutdown | -| file://:0:0:0:0 | shutdown | -| file://:0:0:0:0 | shutdown | -| file://:0:0:0:0 | shutdownNow | -| file://:0:0:0:0 | shutdownNow | -| file://:0:0:0:0 | shutdownNow | -| file://:0:0:0:0 | signal | -| file://:0:0:0:0 | signal | -| file://:0:0:0:0 | signalAll | -| file://:0:0:0:0 | signalAll | -| file://:0:0:0:0 | signalWork | -| file://:0:0:0:0 | signatureArity | -| file://:0:0:0:0 | signatureReturn | -| file://:0:0:0:0 | signatureType | -| file://:0:0:0:0 | signum | -| file://:0:0:0:0 | signum | -| file://:0:0:0:0 | signum | -| file://:0:0:0:0 | size | -| file://:0:0:0:0 | size | -| file://:0:0:0:0 | size | -| file://:0:0:0:0 | size | -| file://:0:0:0:0 | size | -| file://:0:0:0:0 | size | -| file://:0:0:0:0 | size | -| file://:0:0:0:0 | size | -| file://:0:0:0:0 | skip | -| file://:0:0:0:0 | skip | -| file://:0:0:0:0 | skip | -| file://:0:0:0:0 | skip | -| file://:0:0:0:0 | skip | -| file://:0:0:0:0 | skip | -| file://:0:0:0:0 | skip | -| file://:0:0:0:0 | skip | -| file://:0:0:0:0 | skipBytes | -| file://:0:0:0:0 | skipBytes | -| file://:0:0:0:0 | skipBytes | -| file://:0:0:0:0 | sleep | -| file://:0:0:0:0 | sleep | -| file://:0:0:0:0 | sleep | -| file://:0:0:0:0 | sleep | -| file://:0:0:0:0 | sleep | -| file://:0:0:0:0 | sleep | -| file://:0:0:0:0 | sleep | -| file://:0:0:0:0 | slice | -| file://:0:0:0:0 | slice | -| file://:0:0:0:0 | slice | -| file://:0:0:0:0 | slice | -| file://:0:0:0:0 | slice | -| file://:0:0:0:0 | slice | -| file://:0:0:0:0 | slice | -| file://:0:0:0:0 | slice | -| file://:0:0:0:0 | slice | -| file://:0:0:0:0 | slice | -| file://:0:0:0:0 | slice | -| file://:0:0:0:0 | slowVerifyAccess | -| file://:0:0:0:0 | slowVerifyAccess | -| file://:0:0:0:0 | slowVerifyAccess | -| file://:0:0:0:0 | slowVerifyAccess | -| file://:0:0:0:0 | sort | -| file://:0:0:0:0 | sort | -| file://:0:0:0:0 | sort | -| file://:0:0:0:0 | sort | -| file://:0:0:0:0 | sorted | -| file://:0:0:0:0 | sorted | -| file://:0:0:0:0 | sorted | -| file://:0:0:0:0 | sorted | -| file://:0:0:0:0 | sorted | -| file://:0:0:0:0 | source | -| file://:0:0:0:0 | source | -| file://:0:0:0:0 | speciesCode | -| file://:0:0:0:0 | speciesCode | -| file://:0:0:0:0 | speciesData | -| file://:0:0:0:0 | speciesDataFor | -| file://:0:0:0:0 | speciesData_L | -| file://:0:0:0:0 | speciesData_LL | -| file://:0:0:0:0 | speciesData_LLL | -| file://:0:0:0:0 | speciesData_LLLL | -| file://:0:0:0:0 | speciesData_LLLLL | -| file://:0:0:0:0 | specificToGenericStringHeader | -| file://:0:0:0:0 | specificToGenericStringHeader | -| file://:0:0:0:0 | specificToGenericStringHeader | -| file://:0:0:0:0 | specificToStringHeader | -| file://:0:0:0:0 | specificToStringHeader | -| file://:0:0:0:0 | specificToStringHeader | -| file://:0:0:0:0 | split | -| file://:0:0:0:0 | split | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spliterator | -| file://:0:0:0:0 | spread | -| file://:0:0:0:0 | spreadArgumentsForm | -| file://:0:0:0:0 | spreadArrayChecks | -| file://:0:0:0:0 | spreadInvoker | -| file://:0:0:0:0 | sqrt | -| file://:0:0:0:0 | sqrtAndRemainder | -| file://:0:0:0:0 | stackSlots | -| file://:0:0:0:0 | standardString | -| file://:0:0:0:0 | standardString | -| file://:0:0:0:0 | start | -| file://:0:0:0:0 | start | -| file://:0:0:0:0 | start | -| file://:0:0:0:0 | start | -| file://:0:0:0:0 | start0 | -| file://:0:0:0:0 | start0 | -| file://:0:0:0:0 | startEntry | -| file://:0:0:0:0 | startOptional | -| file://:0:0:0:0 | startOptional | -| file://:0:0:0:0 | startsWith | -| file://:0:0:0:0 | startsWith | -| file://:0:0:0:0 | startsWith | -| file://:0:0:0:0 | startsWith | -| file://:0:0:0:0 | staticFieldBase | -| file://:0:0:0:0 | staticFieldOffset | -| file://:0:0:0:0 | staticPermissionsOnly | -| file://:0:0:0:0 | stop | -| file://:0:0:0:0 | stop | -| file://:0:0:0:0 | stop | -| file://:0:0:0:0 | stop | -| file://:0:0:0:0 | stop0 | -| file://:0:0:0:0 | stop0 | -| file://:0:0:0:0 | store | -| file://:0:0:0:0 | store | -| file://:0:0:0:0 | store | -| file://:0:0:0:0 | store | -| file://:0:0:0:0 | store0 | -| file://:0:0:0:0 | storeFence | -| file://:0:0:0:0 | storeStoreFence | -| file://:0:0:0:0 | storeStoreFence | -| file://:0:0:0:0 | storeToXML | -| file://:0:0:0:0 | storeToXML | -| file://:0:0:0:0 | storeToXML | -| file://:0:0:0:0 | storeToXML | -| file://:0:0:0:0 | storeToXML | -| file://:0:0:0:0 | storeToXML | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | stream | -| file://:0:0:0:0 | streamBytes | -| file://:0:0:0:0 | streamBytes | -| file://:0:0:0:0 | stringPropertyNames | -| file://:0:0:0:0 | stringPropertyNames | -| file://:0:0:0:0 | stringSize | -| file://:0:0:0:0 | stringSize | -| file://:0:0:0:0 | strip | -| file://:0:0:0:0 | strip | -| file://:0:0:0:0 | stripExtensions | -| file://:0:0:0:0 | stripLeading | -| file://:0:0:0:0 | stripLeading | -| file://:0:0:0:0 | stripTrailing | -| file://:0:0:0:0 | stripTrailing | -| file://:0:0:0:0 | subInterfaces | -| file://:0:0:0:0 | subList | -| file://:0:0:0:0 | subList | -| file://:0:0:0:0 | subList | -| file://:0:0:0:0 | subList | -| file://:0:0:0:0 | subList | -| file://:0:0:0:0 | subListRangeCheck | -| file://:0:0:0:0 | subListRangeCheck | -| file://:0:0:0:0 | subMap | -| file://:0:0:0:0 | subSequence | -| file://:0:0:0:0 | subSequence | -| file://:0:0:0:0 | subSequence | -| file://:0:0:0:0 | subSequence | -| file://:0:0:0:0 | subSequence | -| file://:0:0:0:0 | subSequence | -| file://:0:0:0:0 | subSequence | -| file://:0:0:0:0 | subSequence | -| file://:0:0:0:0 | subSequenceEquals | -| file://:0:0:0:0 | submit | -| file://:0:0:0:0 | submit | -| file://:0:0:0:0 | submit | -| file://:0:0:0:0 | submit | -| file://:0:0:0:0 | submit | -| file://:0:0:0:0 | submit | -| file://:0:0:0:0 | submit | -| file://:0:0:0:0 | submit | -| file://:0:0:0:0 | submit | -| file://:0:0:0:0 | submit | -| file://:0:0:0:0 | subpath | -| file://:0:0:0:0 | substring | -| file://:0:0:0:0 | substring | -| file://:0:0:0:0 | substring | -| file://:0:0:0:0 | substring | -| file://:0:0:0:0 | substring | -| file://:0:0:0:0 | substring | -| file://:0:0:0:0 | substring | -| file://:0:0:0:0 | substring | -| file://:0:0:0:0 | subtract | -| file://:0:0:0:0 | subtractFrom | -| file://:0:0:0:0 | subtractFrom | -| file://:0:0:0:0 | subtractFrom | -| file://:0:0:0:0 | subtractFrom | -| file://:0:0:0:0 | sum | -| file://:0:0:0:0 | sum | -| file://:0:0:0:0 | sum | -| file://:0:0:0:0 | sum | -| file://:0:0:0:0 | sum | -| file://:0:0:0:0 | sum | -| file://:0:0:0:0 | sumCount | -| file://:0:0:0:0 | summaryStatistics | -| file://:0:0:0:0 | summaryStatistics | -| file://:0:0:0:0 | summaryStatistics | -| file://:0:0:0:0 | supplier | -| file://:0:0:0:0 | supportedFileAttributeViews | -| file://:0:0:0:0 | supportsFileAttributeView | -| file://:0:0:0:0 | supportsFileAttributeView | -| file://:0:0:0:0 | supportsMulticast | -| file://:0:0:0:0 | supportsParameter | -| file://:0:0:0:0 | suspend | -| file://:0:0:0:0 | suspend | -| file://:0:0:0:0 | suspend | -| file://:0:0:0:0 | suspend | -| file://:0:0:0:0 | suspend0 | -| file://:0:0:0:0 | suspend0 | -| file://:0:0:0:0 | sync | -| file://:0:0:0:0 | synthesizeAllParams | -| file://:0:0:0:0 | synthesizeAllParams | -| file://:0:0:0:0 | system | -| file://:0:0:0:0 | system | -| file://:0:0:0:0 | system | -| file://:0:0:0:0 | system | -| file://:0:0:0:0 | system | -| file://:0:0:0:0 | systemDefault | -| file://:0:0:0:0 | systemDefault | -| file://:0:0:0:0 | systemDefaultZone | -| file://:0:0:0:0 | systemDefaultZone | -| file://:0:0:0:0 | systemDefaultZone | -| file://:0:0:0:0 | systemDefaultZone | -| file://:0:0:0:0 | systemDefaultZone | -| file://:0:0:0:0 | systemUTC | -| file://:0:0:0:0 | systemUTC | -| file://:0:0:0:0 | systemUTC | -| file://:0:0:0:0 | systemUTC | -| file://:0:0:0:0 | systemUTC | -| file://:0:0:0:0 | tabAt | -| file://:0:0:0:0 | tailMap | -| file://:0:0:0:0 | take | -| file://:0:0:0:0 | takeWhile | -| file://:0:0:0:0 | takeWhile | -| file://:0:0:0:0 | takeWhile | -| file://:0:0:0:0 | takeWhile | -| file://:0:0:0:0 | targetPlatform | -| file://:0:0:0:0 | targets | -| file://:0:0:0:0 | targets | -| file://:0:0:0:0 | test | -| file://:0:0:0:0 | test | -| file://:0:0:0:0 | test | -| file://:0:0:0:0 | test | -| file://:0:0:0:0 | testBit | -| file://:0:0:0:0 | thenComparing | -| file://:0:0:0:0 | thenComparing | -| file://:0:0:0:0 | thenComparing | -| file://:0:0:0:0 | thenComparingDouble | -| file://:0:0:0:0 | thenComparingInt | -| file://:0:0:0:0 | thenComparingLong | -| file://:0:0:0:0 | threadStartFailed | -| file://:0:0:0:0 | threadTerminated | -| file://:0:0:0:0 | throwException | -| file://:0:0:0:0 | throwException | -| file://:0:0:0:0 | tick | -| file://:0:0:0:0 | tick | -| file://:0:0:0:0 | tick | -| file://:0:0:0:0 | tick | -| file://:0:0:0:0 | tick | -| file://:0:0:0:0 | tickMillis | -| file://:0:0:0:0 | tickMillis | -| file://:0:0:0:0 | tickMillis | -| file://:0:0:0:0 | tickMillis | -| file://:0:0:0:0 | tickMillis | -| file://:0:0:0:0 | tickMinutes | -| file://:0:0:0:0 | tickMinutes | -| file://:0:0:0:0 | tickMinutes | -| file://:0:0:0:0 | tickMinutes | -| file://:0:0:0:0 | tickMinutes | -| file://:0:0:0:0 | tickSeconds | -| file://:0:0:0:0 | tickSeconds | -| file://:0:0:0:0 | tickSeconds | -| file://:0:0:0:0 | tickSeconds | -| file://:0:0:0:0 | tickSeconds | -| file://:0:0:0:0 | tieBreakOrder | -| file://:0:0:0:0 | timeLineOrder | -| file://:0:0:0:0 | timeLineOrder | -| file://:0:0:0:0 | timeLineOrder | -| file://:0:0:0:0 | timeLineOrder | -| file://:0:0:0:0 | timedJoin | -| file://:0:0:0:0 | timedWait | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | times | -| file://:0:0:0:0 | to | -| file://:0:0:0:0 | toASCIIString | -| file://:0:0:0:0 | toAbsolutePath | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toArray | -| file://:0:0:0:0 | toBinaryString | -| file://:0:0:0:0 | toBinaryString | -| file://:0:0:0:0 | toByte | -| file://:0:0:0:0 | toByte | -| file://:0:0:0:0 | toByte | -| file://:0:0:0:0 | toByte | -| file://:0:0:0:0 | toByte | -| file://:0:0:0:0 | toByte | -| file://:0:0:0:0 | toByte | -| file://:0:0:0:0 | toByte | -| file://:0:0:0:0 | toByte | -| file://:0:0:0:0 | toByte | -| file://:0:0:0:0 | toByteArray | -| file://:0:0:0:0 | toByteArray | -| file://:0:0:0:0 | toCalendarStyle | -| file://:0:0:0:0 | toChar | -| file://:0:0:0:0 | toChar | -| file://:0:0:0:0 | toChar | -| file://:0:0:0:0 | toChar | -| file://:0:0:0:0 | toChar | -| file://:0:0:0:0 | toChar | -| file://:0:0:0:0 | toChar | -| file://:0:0:0:0 | toChar | -| file://:0:0:0:0 | toChar | -| file://:0:0:0:0 | toChar | -| file://:0:0:0:0 | toCharArray | -| file://:0:0:0:0 | toChars | -| file://:0:0:0:0 | toChars | -| file://:0:0:0:0 | toChronoUnit | -| file://:0:0:0:0 | toCodePoint | -| file://:0:0:0:0 | toDays | -| file://:0:0:0:0 | toDays | -| file://:0:0:0:0 | toDaysPart | -| file://:0:0:0:0 | toDouble | -| file://:0:0:0:0 | toDouble | -| file://:0:0:0:0 | toDouble | -| file://:0:0:0:0 | toDouble | -| file://:0:0:0:0 | toDouble | -| file://:0:0:0:0 | toDouble | -| file://:0:0:0:0 | toDouble | -| file://:0:0:0:0 | toDouble | -| file://:0:0:0:0 | toDouble | -| file://:0:0:0:0 | toDouble | -| file://:0:0:0:0 | toEpochDay | -| file://:0:0:0:0 | toEpochDay | -| file://:0:0:0:0 | toEpochMilli | -| file://:0:0:0:0 | toEpochSecond | -| file://:0:0:0:0 | toEpochSecond | -| file://:0:0:0:0 | toEpochSecond | -| file://:0:0:0:0 | toEpochSecond | -| file://:0:0:0:0 | toEpochSecond | -| file://:0:0:0:0 | toEpochSecond | -| file://:0:0:0:0 | toEpochSecond | -| file://:0:0:0:0 | toEpochSecond | -| file://:0:0:0:0 | toEpochSecond | -| file://:0:0:0:0 | toExternalForm | -| file://:0:0:0:0 | toExternalForm | -| file://:0:0:0:0 | toFieldDescriptorString | -| file://:0:0:0:0 | toFile | -| file://:0:0:0:0 | toFloat | -| file://:0:0:0:0 | toFloat | -| file://:0:0:0:0 | toFloat | -| file://:0:0:0:0 | toFloat | -| file://:0:0:0:0 | toFloat | -| file://:0:0:0:0 | toFloat | -| file://:0:0:0:0 | toFloat | -| file://:0:0:0:0 | toFloat | -| file://:0:0:0:0 | toFloat | -| file://:0:0:0:0 | toFloat | -| file://:0:0:0:0 | toFormat | -| file://:0:0:0:0 | toFormat | -| file://:0:0:0:0 | toGMTString | -| file://:0:0:0:0 | toGenericString | -| file://:0:0:0:0 | toGenericString | -| file://:0:0:0:0 | toGenericString | -| file://:0:0:0:0 | toGenericString | -| file://:0:0:0:0 | toGenericString | -| file://:0:0:0:0 | toHex | -| file://:0:0:0:0 | toHexString | -| file://:0:0:0:0 | toHexString | -| file://:0:0:0:0 | toHexString | -| file://:0:0:0:0 | toHexString | -| file://:0:0:0:0 | toHours | -| file://:0:0:0:0 | toHours | -| file://:0:0:0:0 | toHoursPart | -| file://:0:0:0:0 | toInstant | -| file://:0:0:0:0 | toInstant | -| file://:0:0:0:0 | toInstant | -| file://:0:0:0:0 | toInstant | -| file://:0:0:0:0 | toInstant | -| file://:0:0:0:0 | toInstant | -| file://:0:0:0:0 | toInstant | -| file://:0:0:0:0 | toInt | -| file://:0:0:0:0 | toInt | -| file://:0:0:0:0 | toInt | -| file://:0:0:0:0 | toInt | -| file://:0:0:0:0 | toInt | -| file://:0:0:0:0 | toInt | -| file://:0:0:0:0 | toInt | -| file://:0:0:0:0 | toInt | -| file://:0:0:0:0 | toInt | -| file://:0:0:0:0 | toInt | -| file://:0:0:0:0 | toLanguageTag | -| file://:0:0:0:0 | toLocalDate | -| file://:0:0:0:0 | toLocalDate | -| file://:0:0:0:0 | toLocalDate | -| file://:0:0:0:0 | toLocalDate | -| file://:0:0:0:0 | toLocalDate | -| file://:0:0:0:0 | toLocalDateTime | -| file://:0:0:0:0 | toLocalDateTime | -| file://:0:0:0:0 | toLocalDateTime | -| file://:0:0:0:0 | toLocalTime | -| file://:0:0:0:0 | toLocalTime | -| file://:0:0:0:0 | toLocalTime | -| file://:0:0:0:0 | toLocalTime | -| file://:0:0:0:0 | toLocalTime | -| file://:0:0:0:0 | toLocalTime | -| file://:0:0:0:0 | toLocaleString | -| file://:0:0:0:0 | toLong | -| file://:0:0:0:0 | toLong | -| file://:0:0:0:0 | toLong | -| file://:0:0:0:0 | toLong | -| file://:0:0:0:0 | toLong | -| file://:0:0:0:0 | toLong | -| file://:0:0:0:0 | toLong | -| file://:0:0:0:0 | toLong | -| file://:0:0:0:0 | toLong | -| file://:0:0:0:0 | toLong | -| file://:0:0:0:0 | toLowerCase | -| file://:0:0:0:0 | toLowerCase | -| file://:0:0:0:0 | toLowerCase | -| file://:0:0:0:0 | toLowerCase | -| file://:0:0:0:0 | toLowerCase | -| file://:0:0:0:0 | toMethodDescriptorString | -| file://:0:0:0:0 | toMethodHandle | -| file://:0:0:0:0 | toMicros | -| file://:0:0:0:0 | toMillis | -| file://:0:0:0:0 | toMillis | -| file://:0:0:0:0 | toMillis | -| file://:0:0:0:0 | toMillisPart | -| file://:0:0:0:0 | toMinutes | -| file://:0:0:0:0 | toMinutes | -| file://:0:0:0:0 | toMinutesPart | -| file://:0:0:0:0 | toNameAndVersion | -| file://:0:0:0:0 | toNanoOfDay | -| file://:0:0:0:0 | toNanos | -| file://:0:0:0:0 | toNanos | -| file://:0:0:0:0 | toNanosPart | -| file://:0:0:0:0 | toOctalString | -| file://:0:0:0:0 | toOctalString | -| file://:0:0:0:0 | toOffsetDateTime | -| file://:0:0:0:0 | toOffsetTime | -| file://:0:0:0:0 | toPackage | -| file://:0:0:0:0 | toPackage | -| file://:0:0:0:0 | toPath | -| file://:0:0:0:0 | toPrinterParser | -| file://:0:0:0:0 | toRealPath | -| file://:0:0:0:0 | toResolved | -| file://:0:0:0:0 | toSecondOfDay | -| file://:0:0:0:0 | toSeconds | -| file://:0:0:0:0 | toSeconds | -| file://:0:0:0:0 | toSecondsPart | -| file://:0:0:0:0 | toShort | -| file://:0:0:0:0 | toShort | -| file://:0:0:0:0 | toShort | -| file://:0:0:0:0 | toShort | -| file://:0:0:0:0 | toShort | -| file://:0:0:0:0 | toShort | -| file://:0:0:0:0 | toShort | -| file://:0:0:0:0 | toShort | -| file://:0:0:0:0 | toShort | -| file://:0:0:0:0 | toShort | -| file://:0:0:0:0 | toShortString | -| file://:0:0:0:0 | toShortString | -| file://:0:0:0:0 | toShortString | -| file://:0:0:0:0 | toShortString | -| file://:0:0:0:0 | toShortString | -| file://:0:0:0:0 | toStackTraceElement | -| file://:0:0:0:0 | toStackTraceElement | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toString | -| file://:0:0:0:0 | toSurrogates | -| file://:0:0:0:0 | toTemporal | -| file://:0:0:0:0 | toTitleCase | -| file://:0:0:0:0 | toTitleCase | -| file://:0:0:0:0 | toTotalMonths | -| file://:0:0:0:0 | toURI | -| file://:0:0:0:0 | toURI | -| file://:0:0:0:0 | toURL | -| file://:0:0:0:0 | toURL | -| file://:0:0:0:0 | toUnresolved | -| file://:0:0:0:0 | toUnsignedLong | -| file://:0:0:0:0 | toUnsignedString | -| file://:0:0:0:0 | toUnsignedString | -| file://:0:0:0:0 | toUnsignedString | -| file://:0:0:0:0 | toUnsignedString | -| file://:0:0:0:0 | toUnsignedString0 | -| file://:0:0:0:0 | toUpperCase | -| file://:0:0:0:0 | toUpperCase | -| file://:0:0:0:0 | toUpperCase | -| file://:0:0:0:0 | toUpperCase | -| file://:0:0:0:0 | toUpperCaseCharArray | -| file://:0:0:0:0 | toUpperCaseEx | -| file://:0:0:0:0 | toUri | -| file://:0:0:0:0 | toZonedDateTime | -| file://:0:0:0:0 | topClass | -| file://:0:0:0:0 | topClass | -| file://:0:0:0:0 | topLevelExec | -| file://:0:0:0:0 | topSpecies | -| file://:0:0:0:0 | topSpecies | -| file://:0:0:0:0 | topSpeciesKey | -| file://:0:0:0:0 | topSpeciesKey | -| file://:0:0:0:0 | traceInterpreter | -| file://:0:0:0:0 | traceInterpreter | -| file://:0:0:0:0 | transfer | -| file://:0:0:0:0 | transferAfterCancelledWait | -| file://:0:0:0:0 | transferAfterCancelledWait | -| file://:0:0:0:0 | transferAfterCancelledWait | -| file://:0:0:0:0 | transferAfterCancelledWait | -| file://:0:0:0:0 | transferForSignal | -| file://:0:0:0:0 | transferForSignal | -| file://:0:0:0:0 | transferForSignal | -| file://:0:0:0:0 | transferForSignal | -| file://:0:0:0:0 | transferFrom | -| file://:0:0:0:0 | transferTo | -| file://:0:0:0:0 | transferTo | -| file://:0:0:0:0 | transferTo | -| file://:0:0:0:0 | transferTo | -| file://:0:0:0:0 | transformHelper | -| file://:0:0:0:0 | transformHelper | -| file://:0:0:0:0 | transformHelperType | -| file://:0:0:0:0 | transformMethods | -| file://:0:0:0:0 | transformMethods | -| file://:0:0:0:0 | trim | -| file://:0:0:0:0 | trimToSize | -| file://:0:0:0:0 | trimToSize | -| file://:0:0:0:0 | trimToSize | -| file://:0:0:0:0 | trimToSize | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncate | -| file://:0:0:0:0 | truncatedTo | -| file://:0:0:0:0 | truncatedTo | -| file://:0:0:0:0 | truncatedTo | -| file://:0:0:0:0 | truncatedTo | -| file://:0:0:0:0 | truncatedTo | -| file://:0:0:0:0 | truncatedTo | -| file://:0:0:0:0 | truncatedTo | -| file://:0:0:0:0 | tryAcquire | -| file://:0:0:0:0 | tryAcquire | -| file://:0:0:0:0 | tryAcquire | -| file://:0:0:0:0 | tryAcquire | -| file://:0:0:0:0 | tryAcquireNanos | -| file://:0:0:0:0 | tryAcquireNanos | -| file://:0:0:0:0 | tryAcquireNanos | -| file://:0:0:0:0 | tryAcquireNanos | -| file://:0:0:0:0 | tryAcquireShared | -| file://:0:0:0:0 | tryAcquireShared | -| file://:0:0:0:0 | tryAcquireShared | -| file://:0:0:0:0 | tryAcquireShared | -| file://:0:0:0:0 | tryAcquireSharedNanos | -| file://:0:0:0:0 | tryAcquireSharedNanos | -| file://:0:0:0:0 | tryAcquireSharedNanos | -| file://:0:0:0:0 | tryAcquireSharedNanos | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryAdvance | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryComplete | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalHelp | -| file://:0:0:0:0 | tryExternalUnpush | -| file://:0:0:0:0 | tryLock | -| file://:0:0:0:0 | tryLock | -| file://:0:0:0:0 | tryLock | -| file://:0:0:0:0 | tryLock | -| file://:0:0:0:0 | tryLock | -| file://:0:0:0:0 | tryLock | -| file://:0:0:0:0 | tryLock | -| file://:0:0:0:0 | tryLock | -| file://:0:0:0:0 | tryLock | -| file://:0:0:0:0 | tryLock | -| file://:0:0:0:0 | tryLockPhase | -| file://:0:0:0:0 | tryLockedUnpush | -| file://:0:0:0:0 | tryRelease | -| file://:0:0:0:0 | tryRelease | -| file://:0:0:0:0 | tryRelease | -| file://:0:0:0:0 | tryRelease | -| file://:0:0:0:0 | tryReleaseShared | -| file://:0:0:0:0 | tryReleaseShared | -| file://:0:0:0:0 | tryReleaseShared | -| file://:0:0:0:0 | tryReleaseShared | -| file://:0:0:0:0 | tryRemoveAndExec | -| file://:0:0:0:0 | trySetAccessible | -| file://:0:0:0:0 | trySetAccessible | -| file://:0:0:0:0 | trySetAccessible | -| file://:0:0:0:0 | trySetAccessible | -| file://:0:0:0:0 | trySetAccessible | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | trySplit | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnfork | -| file://:0:0:0:0 | tryUnpush | -| file://:0:0:0:0 | type | -| file://:0:0:0:0 | type | -| file://:0:0:0:0 | type | -| file://:0:0:0:0 | type | -| file://:0:0:0:0 | type | -| file://:0:0:0:0 | type | -| file://:0:0:0:0 | type | -| file://:0:0:0:0 | type | -| file://:0:0:0:0 | typeChar | -| file://:0:0:0:0 | typeCheck | -| file://:0:0:0:0 | typeLoadOp | -| file://:0:0:0:0 | unalignedAccess | -| file://:0:0:0:0 | unaryMinus | -| file://:0:0:0:0 | unaryMinus | -| file://:0:0:0:0 | unaryMinus | -| file://:0:0:0:0 | unaryPlus | -| file://:0:0:0:0 | unaryPlus | -| file://:0:0:0:0 | unaryPlus | -| file://:0:0:0:0 | uncaughtException | -| file://:0:0:0:0 | uncaughtException | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncheckedThrow | -| file://:0:0:0:0 | uncustomize | -| file://:0:0:0:0 | unload | -| file://:0:0:0:0 | unlock | -| file://:0:0:0:0 | unlock | -| file://:0:0:0:0 | unlock | -| file://:0:0:0:0 | unmappableCharacterAction | -| file://:0:0:0:0 | unmappableCharacterAction | -| file://:0:0:0:0 | unmappableForLength | -| file://:0:0:0:0 | unmaskNull | -| file://:0:0:0:0 | unmaskNull | -| file://:0:0:0:0 | unordered | -| file://:0:0:0:0 | unordered | -| file://:0:0:0:0 | unordered | -| file://:0:0:0:0 | unordered | -| file://:0:0:0:0 | unordered | -| file://:0:0:0:0 | unpark | -| file://:0:0:0:0 | unparkSuccessor | -| file://:0:0:0:0 | unparkSuccessor | -| file://:0:0:0:0 | unparkSuccessor | -| file://:0:0:0:0 | unregisterCleanup | -| file://:0:0:0:0 | unsupported | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | until | -| file://:0:0:0:0 | untreeify | -| file://:0:0:0:0 | unwrap | -| file://:0:0:0:0 | updateAndGet | -| file://:0:0:0:0 | updateAndGet | -| file://:0:0:0:0 | updateForm | -| file://:0:0:0:0 | updateForm | -| file://:0:0:0:0 | updateVarForm | -| file://:0:0:0:0 | useCount | -| file://:0:0:0:0 | useCount | -| file://:0:0:0:0 | useProtocolVersion | -| file://:0:0:0:0 | uses | -| file://:0:0:0:0 | uses | -| file://:0:0:0:0 | ushr | -| file://:0:0:0:0 | ushr | -| file://:0:0:0:0 | valid | -| file://:0:0:0:0 | validateObject | -| file://:0:0:0:0 | value | -| file://:0:0:0:0 | value | -| file://:0:0:0:0 | value | -| file://:0:0:0:0 | value | -| file://:0:0:0:0 | value | -| file://:0:0:0:0 | valueFromMethodName | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOf | -| file://:0:0:0:0 | valueOfCodePoint | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | values | -| file://:0:0:0:0 | varHandleInvokeLinkerMethod | -| file://:0:0:0:0 | varHandleMethodExactInvoker | -| file://:0:0:0:0 | varHandleMethodInvoker | -| file://:0:0:0:0 | varType | -| file://:0:0:0:0 | verify | -| file://:0:0:0:0 | verify | -| file://:0:0:0:0 | verify | -| file://:0:0:0:0 | verifyAccess | -| file://:0:0:0:0 | verifyAccess | -| file://:0:0:0:0 | verifyAccess | -| file://:0:0:0:0 | verifyAccess | -| file://:0:0:0:0 | verifyAccess | -| file://:0:0:0:0 | verifyParameters | -| file://:0:0:0:0 | verifyParameters | -| file://:0:0:0:0 | version | -| file://:0:0:0:0 | version | -| file://:0:0:0:0 | version | -| file://:0:0:0:0 | version | -| file://:0:0:0:0 | version | -| file://:0:0:0:0 | viewAsType | -| file://:0:0:0:0 | viewAsType | -| file://:0:0:0:0 | viewAsTypeChecks | -| file://:0:0:0:0 | viewAsTypeChecks | -| file://:0:0:0:0 | visit | -| file://:0:0:0:0 | visit | -| file://:0:0:0:0 | visit | -| file://:0:0:0:0 | visitAnnotation | -| file://:0:0:0:0 | visitAnnotation | -| file://:0:0:0:0 | visitAnnotation | -| file://:0:0:0:0 | visitAnnotation | -| file://:0:0:0:0 | visitAnnotation | -| file://:0:0:0:0 | visitAnnotation | -| file://:0:0:0:0 | visitAnnotation | -| file://:0:0:0:0 | visitAnnotationDefault | -| file://:0:0:0:0 | visitAnnotationDefault | -| file://:0:0:0:0 | visitArray | -| file://:0:0:0:0 | visitArrayTypeSignature | -| file://:0:0:0:0 | visitArrayTypeSignature | -| file://:0:0:0:0 | visitArrayTypeSignature | -| file://:0:0:0:0 | visitAttribute | -| file://:0:0:0:0 | visitAttribute | -| file://:0:0:0:0 | visitAttribute | -| file://:0:0:0:0 | visitAttribute | -| file://:0:0:0:0 | visitAttribute | -| file://:0:0:0:0 | visitAttribute | -| file://:0:0:0:0 | visitBooleanSignature | -| file://:0:0:0:0 | visitBooleanSignature | -| file://:0:0:0:0 | visitBooleanSignature | -| file://:0:0:0:0 | visitBottomSignature | -| file://:0:0:0:0 | visitBottomSignature | -| file://:0:0:0:0 | visitBottomSignature | -| file://:0:0:0:0 | visitByteSignature | -| file://:0:0:0:0 | visitByteSignature | -| file://:0:0:0:0 | visitByteSignature | -| file://:0:0:0:0 | visitCharSignature | -| file://:0:0:0:0 | visitCharSignature | -| file://:0:0:0:0 | visitCharSignature | -| file://:0:0:0:0 | visitClassSignature | -| file://:0:0:0:0 | visitClassTypeSignature | -| file://:0:0:0:0 | visitClassTypeSignature | -| file://:0:0:0:0 | visitClassTypeSignature | -| file://:0:0:0:0 | visitCode | -| file://:0:0:0:0 | visitCode | -| file://:0:0:0:0 | visitDoubleSignature | -| file://:0:0:0:0 | visitDoubleSignature | -| file://:0:0:0:0 | visitDoubleSignature | -| file://:0:0:0:0 | visitEnd | -| file://:0:0:0:0 | visitEnd | -| file://:0:0:0:0 | visitEnd | -| file://:0:0:0:0 | visitEnd | -| file://:0:0:0:0 | visitEnd | -| file://:0:0:0:0 | visitEnd | -| file://:0:0:0:0 | visitEnd | -| file://:0:0:0:0 | visitEnd | -| file://:0:0:0:0 | visitEnum | -| file://:0:0:0:0 | visitExport | -| file://:0:0:0:0 | visitField | -| file://:0:0:0:0 | visitField | -| file://:0:0:0:0 | visitFieldInsn | -| file://:0:0:0:0 | visitFieldInsn | -| file://:0:0:0:0 | visitFloatSignature | -| file://:0:0:0:0 | visitFloatSignature | -| file://:0:0:0:0 | visitFloatSignature | -| file://:0:0:0:0 | visitFormalTypeParameter | -| file://:0:0:0:0 | visitFormalTypeParameter | -| file://:0:0:0:0 | visitFormalTypeParameter | -| file://:0:0:0:0 | visitFrame | -| file://:0:0:0:0 | visitFrame | -| file://:0:0:0:0 | visitIincInsn | -| file://:0:0:0:0 | visitIincInsn | -| file://:0:0:0:0 | visitInnerClass | -| file://:0:0:0:0 | visitInnerClass | -| file://:0:0:0:0 | visitInsn | -| file://:0:0:0:0 | visitInsn | -| file://:0:0:0:0 | visitInsnAnnotation | -| file://:0:0:0:0 | visitInsnAnnotation | -| file://:0:0:0:0 | visitIntInsn | -| file://:0:0:0:0 | visitIntInsn | -| file://:0:0:0:0 | visitIntSignature | -| file://:0:0:0:0 | visitIntSignature | -| file://:0:0:0:0 | visitIntSignature | -| file://:0:0:0:0 | visitInvokeDynamicInsn | -| file://:0:0:0:0 | visitInvokeDynamicInsn | -| file://:0:0:0:0 | visitJumpInsn | -| file://:0:0:0:0 | visitJumpInsn | -| file://:0:0:0:0 | visitLabel | -| file://:0:0:0:0 | visitLabel | -| file://:0:0:0:0 | visitLdcInsn | -| file://:0:0:0:0 | visitLdcInsn | -| file://:0:0:0:0 | visitLineNumber | -| file://:0:0:0:0 | visitLineNumber | -| file://:0:0:0:0 | visitLocalVariable | -| file://:0:0:0:0 | visitLocalVariable | -| file://:0:0:0:0 | visitLocalVariableAnnotation | -| file://:0:0:0:0 | visitLocalVariableAnnotation | -| file://:0:0:0:0 | visitLongSignature | -| file://:0:0:0:0 | visitLongSignature | -| file://:0:0:0:0 | visitLongSignature | -| file://:0:0:0:0 | visitLookupSwitchInsn | -| file://:0:0:0:0 | visitLookupSwitchInsn | -| file://:0:0:0:0 | visitMainClass | -| file://:0:0:0:0 | visitMaxs | -| file://:0:0:0:0 | visitMaxs | -| file://:0:0:0:0 | visitMethod | -| file://:0:0:0:0 | visitMethod | -| file://:0:0:0:0 | visitMethodInsn | -| file://:0:0:0:0 | visitMethodInsn | -| file://:0:0:0:0 | visitMethodInsn | -| file://:0:0:0:0 | visitMethodInsn | -| file://:0:0:0:0 | visitMethodTypeSignature | -| file://:0:0:0:0 | visitModule | -| file://:0:0:0:0 | visitModule | -| file://:0:0:0:0 | visitMultiANewArrayInsn | -| file://:0:0:0:0 | visitMultiANewArrayInsn | -| file://:0:0:0:0 | visitOpen | -| file://:0:0:0:0 | visitOuterClass | -| file://:0:0:0:0 | visitOuterClass | -| file://:0:0:0:0 | visitPackage | -| file://:0:0:0:0 | visitParameter | -| file://:0:0:0:0 | visitParameter | -| file://:0:0:0:0 | visitParameterAnnotation | -| file://:0:0:0:0 | visitParameterAnnotation | -| file://:0:0:0:0 | visitProvide | -| file://:0:0:0:0 | visitRequire | -| file://:0:0:0:0 | visitShortSignature | -| file://:0:0:0:0 | visitShortSignature | -| file://:0:0:0:0 | visitShortSignature | -| file://:0:0:0:0 | visitSimpleClassTypeSignature | -| file://:0:0:0:0 | visitSimpleClassTypeSignature | -| file://:0:0:0:0 | visitSimpleClassTypeSignature | -| file://:0:0:0:0 | visitSource | -| file://:0:0:0:0 | visitSource | -| file://:0:0:0:0 | visitSubroutine | -| file://:0:0:0:0 | visitTableSwitchInsn | -| file://:0:0:0:0 | visitTableSwitchInsn | -| file://:0:0:0:0 | visitTryCatchAnnotation | -| file://:0:0:0:0 | visitTryCatchAnnotation | -| file://:0:0:0:0 | visitTryCatchBlock | -| file://:0:0:0:0 | visitTryCatchBlock | -| file://:0:0:0:0 | visitTypeAnnotation | -| file://:0:0:0:0 | visitTypeAnnotation | -| file://:0:0:0:0 | visitTypeAnnotation | -| file://:0:0:0:0 | visitTypeAnnotation | -| file://:0:0:0:0 | visitTypeAnnotation | -| file://:0:0:0:0 | visitTypeAnnotation | -| file://:0:0:0:0 | visitTypeInsn | -| file://:0:0:0:0 | visitTypeInsn | -| file://:0:0:0:0 | visitTypeVariableSignature | -| file://:0:0:0:0 | visitTypeVariableSignature | -| file://:0:0:0:0 | visitTypeVariableSignature | -| file://:0:0:0:0 | visitUse | -| file://:0:0:0:0 | visitVarInsn | -| file://:0:0:0:0 | visitVarInsn | -| file://:0:0:0:0 | visitVoidDescriptor | -| file://:0:0:0:0 | visitVoidDescriptor | -| file://:0:0:0:0 | visitVoidDescriptor | -| file://:0:0:0:0 | visitWildcard | -| file://:0:0:0:0 | visitWildcard | -| file://:0:0:0:0 | visitWildcard | -| file://:0:0:0:0 | wait | -| file://:0:0:0:0 | wait | -| file://:0:0:0:0 | wait | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferencePendingList | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | waitForReferenceProcessing | -| file://:0:0:0:0 | walk | -| file://:0:0:0:0 | watchable | -| file://:0:0:0:0 | weakCompareAndSet | -| file://:0:0:0:0 | weakCompareAndSet | -| file://:0:0:0:0 | weakCompareAndSet | -| file://:0:0:0:0 | weakCompareAndSetAcquire | -| file://:0:0:0:0 | weakCompareAndSetAcquire | -| file://:0:0:0:0 | weakCompareAndSetAcquire | -| file://:0:0:0:0 | weakCompareAndSetBoolean | -| file://:0:0:0:0 | weakCompareAndSetBooleanAcquire | -| file://:0:0:0:0 | weakCompareAndSetBooleanPlain | -| file://:0:0:0:0 | weakCompareAndSetBooleanRelease | -| file://:0:0:0:0 | weakCompareAndSetByte | -| file://:0:0:0:0 | weakCompareAndSetByteAcquire | -| file://:0:0:0:0 | weakCompareAndSetBytePlain | -| file://:0:0:0:0 | weakCompareAndSetByteRelease | -| file://:0:0:0:0 | weakCompareAndSetChar | -| file://:0:0:0:0 | weakCompareAndSetCharAcquire | -| file://:0:0:0:0 | weakCompareAndSetCharPlain | -| file://:0:0:0:0 | weakCompareAndSetCharRelease | -| file://:0:0:0:0 | weakCompareAndSetDouble | -| file://:0:0:0:0 | weakCompareAndSetDoubleAcquire | -| file://:0:0:0:0 | weakCompareAndSetDoublePlain | -| file://:0:0:0:0 | weakCompareAndSetDoubleRelease | -| file://:0:0:0:0 | weakCompareAndSetFloat | -| file://:0:0:0:0 | weakCompareAndSetFloatAcquire | -| file://:0:0:0:0 | weakCompareAndSetFloatPlain | -| file://:0:0:0:0 | weakCompareAndSetFloatRelease | -| file://:0:0:0:0 | weakCompareAndSetInt | -| file://:0:0:0:0 | weakCompareAndSetIntAcquire | -| file://:0:0:0:0 | weakCompareAndSetIntPlain | -| file://:0:0:0:0 | weakCompareAndSetIntRelease | -| file://:0:0:0:0 | weakCompareAndSetLong | -| file://:0:0:0:0 | weakCompareAndSetLongAcquire | -| file://:0:0:0:0 | weakCompareAndSetLongPlain | -| file://:0:0:0:0 | weakCompareAndSetLongRelease | -| file://:0:0:0:0 | weakCompareAndSetObject | -| file://:0:0:0:0 | weakCompareAndSetObjectAcquire | -| file://:0:0:0:0 | weakCompareAndSetObjectPlain | -| file://:0:0:0:0 | weakCompareAndSetObjectRelease | -| file://:0:0:0:0 | weakCompareAndSetPlain | -| file://:0:0:0:0 | weakCompareAndSetPlain | -| file://:0:0:0:0 | weakCompareAndSetPlain | -| file://:0:0:0:0 | weakCompareAndSetRelease | -| file://:0:0:0:0 | weakCompareAndSetRelease | -| file://:0:0:0:0 | weakCompareAndSetRelease | -| file://:0:0:0:0 | weakCompareAndSetShort | -| file://:0:0:0:0 | weakCompareAndSetShortAcquire | -| file://:0:0:0:0 | weakCompareAndSetShortPlain | -| file://:0:0:0:0 | weakCompareAndSetShortRelease | -| file://:0:0:0:0 | weakCompareAndSetVolatile | -| file://:0:0:0:0 | weakCompareAndSetVolatile | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | with | -| file://:0:0:0:0 | withChronology | -| file://:0:0:0:0 | withConstraint | -| file://:0:0:0:0 | withDayOfMonth | -| file://:0:0:0:0 | withDayOfMonth | -| file://:0:0:0:0 | withDayOfMonth | -| file://:0:0:0:0 | withDayOfMonth | -| file://:0:0:0:0 | withDayOfYear | -| file://:0:0:0:0 | withDayOfYear | -| file://:0:0:0:0 | withDayOfYear | -| file://:0:0:0:0 | withDayOfYear | -| file://:0:0:0:0 | withDays | -| file://:0:0:0:0 | withDecimalSeparator | -| file://:0:0:0:0 | withDecimalStyle | -| file://:0:0:0:0 | withEarlierOffsetAtOverlap | -| file://:0:0:0:0 | withEarlierOffsetAtOverlap | -| file://:0:0:0:0 | withFixedOffsetZone | -| file://:0:0:0:0 | withHour | -| file://:0:0:0:0 | withHour | -| file://:0:0:0:0 | withHour | -| file://:0:0:0:0 | withHour | -| file://:0:0:0:0 | withHour | -| file://:0:0:0:0 | withInitial | -| file://:0:0:0:0 | withInitial | -| file://:0:0:0:0 | withInternalMemberName | -| file://:0:0:0:0 | withInternalMemberName | -| file://:0:0:0:0 | withLaterOffsetAtOverlap | -| file://:0:0:0:0 | withLaterOffsetAtOverlap | -| file://:0:0:0:0 | withLocale | -| file://:0:0:0:0 | withMinute | -| file://:0:0:0:0 | withMinute | -| file://:0:0:0:0 | withMinute | -| file://:0:0:0:0 | withMinute | -| file://:0:0:0:0 | withMinute | -| file://:0:0:0:0 | withMonth | -| file://:0:0:0:0 | withMonth | -| file://:0:0:0:0 | withMonth | -| file://:0:0:0:0 | withMonth | -| file://:0:0:0:0 | withMonths | -| file://:0:0:0:0 | withNano | -| file://:0:0:0:0 | withNano | -| file://:0:0:0:0 | withNano | -| file://:0:0:0:0 | withNano | -| file://:0:0:0:0 | withNano | -| file://:0:0:0:0 | withNanos | -| file://:0:0:0:0 | withNegativeSign | -| file://:0:0:0:0 | withOffsetSameInstant | -| file://:0:0:0:0 | withOffsetSameInstant | -| file://:0:0:0:0 | withOffsetSameLocal | -| file://:0:0:0:0 | withOffsetSameLocal | -| file://:0:0:0:0 | withOptional | -| file://:0:0:0:0 | withPositiveSign | -| file://:0:0:0:0 | withResolverFields | -| file://:0:0:0:0 | withResolverFields | -| file://:0:0:0:0 | withResolverStyle | -| file://:0:0:0:0 | withSecond | -| file://:0:0:0:0 | withSecond | -| file://:0:0:0:0 | withSecond | -| file://:0:0:0:0 | withSecond | -| file://:0:0:0:0 | withSecond | -| file://:0:0:0:0 | withSeconds | -| file://:0:0:0:0 | withVarargs | -| file://:0:0:0:0 | withVarargs | -| file://:0:0:0:0 | withYear | -| file://:0:0:0:0 | withYear | -| file://:0:0:0:0 | withYear | -| file://:0:0:0:0 | withYear | -| file://:0:0:0:0 | withYears | -| file://:0:0:0:0 | withZeroDigit | -| file://:0:0:0:0 | withZone | -| file://:0:0:0:0 | withZone | -| file://:0:0:0:0 | withZone | -| file://:0:0:0:0 | withZone | -| file://:0:0:0:0 | withZone | -| file://:0:0:0:0 | withZone | -| file://:0:0:0:0 | withZoneSameInstant | -| file://:0:0:0:0 | withZoneSameInstant | -| file://:0:0:0:0 | withZoneSameLocal | -| file://:0:0:0:0 | withZoneSameLocal | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrap | -| file://:0:0:0:0 | wrapperSimpleName | -| file://:0:0:0:0 | wrapperType | -| file://:0:0:0:0 | wrapperType | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | write | -| file://:0:0:0:0 | writeBoolean | -| file://:0:0:0:0 | writeBoolean | -| file://:0:0:0:0 | writeBoolean | -| file://:0:0:0:0 | writeByte | -| file://:0:0:0:0 | writeByte | -| file://:0:0:0:0 | writeByte | -| file://:0:0:0:0 | writeBytes | -| file://:0:0:0:0 | writeBytes | -| file://:0:0:0:0 | writeBytes | -| file://:0:0:0:0 | writeChar | -| file://:0:0:0:0 | writeChar | -| file://:0:0:0:0 | writeChar | -| file://:0:0:0:0 | writeChars | -| file://:0:0:0:0 | writeChars | -| file://:0:0:0:0 | writeChars | -| file://:0:0:0:0 | writeClassDescriptor | -| file://:0:0:0:0 | writeComments | -| file://:0:0:0:0 | writeDouble | -| file://:0:0:0:0 | writeDouble | -| file://:0:0:0:0 | writeDouble | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeExternal | -| file://:0:0:0:0 | writeFields | -| file://:0:0:0:0 | writeFloat | -| file://:0:0:0:0 | writeFloat | -| file://:0:0:0:0 | writeFloat | -| file://:0:0:0:0 | writeHashtable | -| file://:0:0:0:0 | writeHashtable | -| file://:0:0:0:0 | writeHashtable | -| file://:0:0:0:0 | writeInt | -| file://:0:0:0:0 | writeInt | -| file://:0:0:0:0 | writeInt | -| file://:0:0:0:0 | writeLong | -| file://:0:0:0:0 | writeLong | -| file://:0:0:0:0 | writeLong | -| file://:0:0:0:0 | writeNonProxy | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObject | -| file://:0:0:0:0 | writeObjectForSerialization | -| file://:0:0:0:0 | writeObjectOverride | -| file://:0:0:0:0 | writeReplace | -| file://:0:0:0:0 | writeReplace | -| file://:0:0:0:0 | writeReplace | -| file://:0:0:0:0 | writeReplace | -| file://:0:0:0:0 | writeReplace | -| file://:0:0:0:0 | writeReplaceForSerialization | -| file://:0:0:0:0 | writeShort | -| file://:0:0:0:0 | writeShort | -| file://:0:0:0:0 | writeShort | -| file://:0:0:0:0 | writeStreamHeader | -| file://:0:0:0:0 | writeTypeString | -| file://:0:0:0:0 | writeUTF | -| file://:0:0:0:0 | writeUTF | -| file://:0:0:0:0 | writeUTF | -| file://:0:0:0:0 | writeUnshared | -| file://:0:0:0:0 | xor | -| file://:0:0:0:0 | xor | -| file://:0:0:0:0 | xor | -| file://:0:0:0:0 | xor | -| file://:0:0:0:0 | yield | -| file://:0:0:0:0 | yield | -| file://:0:0:0:0 | yield | -| file://:0:0:0:0 | zero | -| file://:0:0:0:0 | zero | -| file://:0:0:0:0 | zeroForm | -| file://:0:0:0:0 | zoneNameStyleIndex | -| file://:0:0:0:0 | zonedDateTime | -| file://:0:0:0:0 | zonedDateTime | -| file://:0:0:0:0 | zonedDateTime | -| file://:0:0:0:0 | zonedDateTime | -| file://:0:0:0:0 | zonedDateTime | -| file://:0:0:0:0 | zonedDateTime | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | | methods2.kt:7:1:10:1 | | | methods2.kt:7:1:10:1 | equals | @@ -13937,620 +19,6 @@ methods | methods.kt:6:5:7:5 | classMethod | | methods.kt:9:5:12:5 | anotherClassMethod | constructors -| file://:0:0:0:0 | AbstractChronology | -| file://:0:0:0:0 | AbstractCollection | -| file://:0:0:0:0 | AbstractExecutorService | -| file://:0:0:0:0 | AbstractInterruptibleChannel | -| file://:0:0:0:0 | AbstractList | -| file://:0:0:0:0 | AbstractMap | -| file://:0:0:0:0 | AbstractOwnableSynchronizer | -| file://:0:0:0:0 | AbstractQueuedSynchronizer | -| file://:0:0:0:0 | AbstractRepository | -| file://:0:0:0:0 | AbstractSet | -| file://:0:0:0:0 | AbstractStringBuilder | -| file://:0:0:0:0 | AbstractStringBuilder | -| file://:0:0:0:0 | AccessControlContext | -| file://:0:0:0:0 | AccessControlContext | -| file://:0:0:0:0 | AccessControlContext | -| file://:0:0:0:0 | AccessControlContext | -| file://:0:0:0:0 | AccessControlContext | -| file://:0:0:0:0 | AccessControlContext | -| file://:0:0:0:0 | AccessDescriptor | -| file://:0:0:0:0 | AccessibleObject | -| file://:0:0:0:0 | AdaptedCallable | -| file://:0:0:0:0 | AdaptedRunnable | -| file://:0:0:0:0 | AdaptedRunnableAction | -| file://:0:0:0:0 | AnnotationVisitor | -| file://:0:0:0:0 | AnnotationVisitor | -| file://:0:0:0:0 | Any | -| file://:0:0:0:0 | Array | -| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | -| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | -| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | -| file://:0:0:0:0 | ArrayList | -| file://:0:0:0:0 | ArrayList | -| file://:0:0:0:0 | ArrayList | -| file://:0:0:0:0 | ArrayListSpliterator | -| file://:0:0:0:0 | AsynchronousFileChannel | -| file://:0:0:0:0 | AtomicInteger | -| file://:0:0:0:0 | AtomicInteger | -| file://:0:0:0:0 | AtomicReference | -| file://:0:0:0:0 | AtomicReference | -| file://:0:0:0:0 | Attribute | -| file://:0:0:0:0 | Attribute | -| file://:0:0:0:0 | AuthPermission | -| file://:0:0:0:0 | AuthPermission | -| file://:0:0:0:0 | AuthPermissionHolder | -| file://:0:0:0:0 | BaseIterator | -| file://:0:0:0:0 | BasicPermission | -| file://:0:0:0:0 | BasicPermission | -| file://:0:0:0:0 | BigInteger | -| file://:0:0:0:0 | BigInteger | -| file://:0:0:0:0 | BigInteger | -| file://:0:0:0:0 | BigInteger | -| file://:0:0:0:0 | BigInteger | -| file://:0:0:0:0 | BigInteger | -| file://:0:0:0:0 | BigInteger | -| file://:0:0:0:0 | BigInteger | -| file://:0:0:0:0 | BigInteger | -| file://:0:0:0:0 | BigInteger | -| file://:0:0:0:0 | Boolean | -| file://:0:0:0:0 | Boolean | -| file://:0:0:0:0 | BoundMethodHandle | -| file://:0:0:0:0 | Buffer | -| file://:0:0:0:0 | BufferedWriter | -| file://:0:0:0:0 | BufferedWriter | -| file://:0:0:0:0 | Builder | -| file://:0:0:0:0 | Builder | -| file://:0:0:0:0 | BulkTask | -| file://:0:0:0:0 | ByteArray | -| file://:0:0:0:0 | ByteArray | -| file://:0:0:0:0 | ByteBuffer | -| file://:0:0:0:0 | ByteBuffer | -| file://:0:0:0:0 | ByteIterator | -| file://:0:0:0:0 | ByteVector | -| file://:0:0:0:0 | ByteVector | -| file://:0:0:0:0 | CallSite | -| file://:0:0:0:0 | CallSite | -| file://:0:0:0:0 | CallSite | -| file://:0:0:0:0 | CaseInsensitiveChar | -| file://:0:0:0:0 | CaseInsensitiveString | -| file://:0:0:0:0 | CertPath | -| file://:0:0:0:0 | CertPathRep | -| file://:0:0:0:0 | Certificate | -| file://:0:0:0:0 | CertificateRep | -| file://:0:0:0:0 | CharArray | -| file://:0:0:0:0 | CharArray | -| file://:0:0:0:0 | CharBuffer | -| file://:0:0:0:0 | CharBuffer | -| file://:0:0:0:0 | CharIterator | -| file://:0:0:0:0 | CharProgression | -| file://:0:0:0:0 | CharRange | -| file://:0:0:0:0 | Character | -| file://:0:0:0:0 | Charset | -| file://:0:0:0:0 | CharsetDecoder | -| file://:0:0:0:0 | CharsetEncoder | -| file://:0:0:0:0 | CharsetEncoder | -| file://:0:0:0:0 | ClassDataSlot | -| file://:0:0:0:0 | ClassLoader | -| file://:0:0:0:0 | ClassLoader | -| file://:0:0:0:0 | ClassLoader | -| file://:0:0:0:0 | ClassNotFoundException | -| file://:0:0:0:0 | ClassNotFoundException | -| file://:0:0:0:0 | ClassNotFoundException | -| file://:0:0:0:0 | ClassReader | -| file://:0:0:0:0 | ClassReader | -| file://:0:0:0:0 | ClassReader | -| file://:0:0:0:0 | ClassReader | -| file://:0:0:0:0 | ClassSpecializer | -| file://:0:0:0:0 | ClassValue | -| file://:0:0:0:0 | ClassValueMap | -| file://:0:0:0:0 | ClassVisitor | -| file://:0:0:0:0 | ClassVisitor | -| file://:0:0:0:0 | ClassWriter | -| file://:0:0:0:0 | ClassWriter | -| file://:0:0:0:0 | ClassicFormat | -| file://:0:0:0:0 | CleanerCleanable | -| file://:0:0:0:0 | CleanerImpl | -| file://:0:0:0:0 | Clock | -| file://:0:0:0:0 | CodeSigner | -| file://:0:0:0:0 | CodeSource | -| file://:0:0:0:0 | CodeSource | -| file://:0:0:0:0 | CollectionView | -| file://:0:0:0:0 | Compiled | -| file://:0:0:0:0 | CompositePrinterParser | -| file://:0:0:0:0 | CompositePrinterParser | -| file://:0:0:0:0 | ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentWeakInternSet | -| file://:0:0:0:0 | ConditionObject | -| file://:0:0:0:0 | Configuration | -| file://:0:0:0:0 | ConstantPool | -| file://:0:0:0:0 | Constructor | -| file://:0:0:0:0 | ConstructorRepository | -| file://:0:0:0:0 | ContentHandler | -| file://:0:0:0:0 | Controller | -| file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | CountedCompleter | -| file://:0:0:0:0 | CounterCell | -| file://:0:0:0:0 | Date | -| file://:0:0:0:0 | Date | -| file://:0:0:0:0 | Date | -| file://:0:0:0:0 | Date | -| file://:0:0:0:0 | Date | -| file://:0:0:0:0 | Date | -| file://:0:0:0:0 | DateTimeFormatter | -| file://:0:0:0:0 | DateTimeParseContext | -| file://:0:0:0:0 | DateTimePrintContext | -| file://:0:0:0:0 | Debug | -| file://:0:0:0:0 | Dictionary | -| file://:0:0:0:0 | Double | -| file://:0:0:0:0 | Double | -| file://:0:0:0:0 | DoubleArray | -| file://:0:0:0:0 | DoubleArray | -| file://:0:0:0:0 | DoubleBuffer | -| file://:0:0:0:0 | DoubleBuffer | -| file://:0:0:0:0 | DoubleIterator | -| file://:0:0:0:0 | DoubleSummaryStatistics | -| file://:0:0:0:0 | DoubleSummaryStatistics | -| file://:0:0:0:0 | Edge | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | Entry | -| file://:0:0:0:0 | EntryIterator | -| file://:0:0:0:0 | EntrySetView | -| file://:0:0:0:0 | EntrySpliterator | -| file://:0:0:0:0 | EntrySpliterator | -| file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | Enum | -| file://:0:0:0:0 | EnumSet | -| file://:0:0:0:0 | Exception | -| file://:0:0:0:0 | Exception | -| file://:0:0:0:0 | Exception | -| file://:0:0:0:0 | Exception | -| file://:0:0:0:0 | Exception | -| file://:0:0:0:0 | ExceptionNode | -| file://:0:0:0:0 | Executable | -| file://:0:0:0:0 | Extension | -| file://:0:0:0:0 | Extension | -| file://:0:0:0:0 | Factory | -| file://:0:0:0:0 | Factory | -| file://:0:0:0:0 | FairSync | -| file://:0:0:0:0 | Field | -| file://:0:0:0:0 | Field | -| file://:0:0:0:0 | FieldPosition | -| file://:0:0:0:0 | FieldPosition | -| file://:0:0:0:0 | FieldPosition | -| file://:0:0:0:0 | FieldVisitor | -| file://:0:0:0:0 | FieldVisitor | -| file://:0:0:0:0 | FieldWriter | -| file://:0:0:0:0 | File | -| file://:0:0:0:0 | File | -| file://:0:0:0:0 | File | -| file://:0:0:0:0 | File | -| file://:0:0:0:0 | FileChannel | -| file://:0:0:0:0 | FileDescriptor | -| file://:0:0:0:0 | FileLock | -| file://:0:0:0:0 | FileLock | -| file://:0:0:0:0 | FileStore | -| file://:0:0:0:0 | FileSystem | -| file://:0:0:0:0 | FileSystemProvider | -| file://:0:0:0:0 | FilterOutputStream | -| file://:0:0:0:0 | FilterValues | -| file://:0:0:0:0 | FixedClock | -| file://:0:0:0:0 | FloatArray | -| file://:0:0:0:0 | FloatArray | -| file://:0:0:0:0 | FloatBuffer | -| file://:0:0:0:0 | FloatBuffer | -| file://:0:0:0:0 | FloatIterator | -| file://:0:0:0:0 | ForEachEntryTask | -| file://:0:0:0:0 | ForEachKeyTask | -| file://:0:0:0:0 | ForEachMappingTask | -| file://:0:0:0:0 | ForEachTransformedEntryTask | -| file://:0:0:0:0 | ForEachTransformedKeyTask | -| file://:0:0:0:0 | ForEachTransformedMappingTask | -| file://:0:0:0:0 | ForEachTransformedValueTask | -| file://:0:0:0:0 | ForEachValueTask | -| file://:0:0:0:0 | ForkJoinPool | -| file://:0:0:0:0 | ForkJoinPool | -| file://:0:0:0:0 | ForkJoinPool | -| file://:0:0:0:0 | ForkJoinPool | -| file://:0:0:0:0 | ForkJoinTask | -| file://:0:0:0:0 | ForkJoinWorkerThread | -| file://:0:0:0:0 | ForkJoinWorkerThread | -| file://:0:0:0:0 | ForkJoinWorkerThread | -| file://:0:0:0:0 | Format | -| file://:0:0:0:0 | ForwardingNode | -| file://:0:0:0:0 | Frame | -| file://:0:0:0:0 | GenericDeclRepository | -| file://:0:0:0:0 | GetField | -| file://:0:0:0:0 | GetReflectionFactoryAction | -| file://:0:0:0:0 | Handle | -| file://:0:0:0:0 | Handle | -| file://:0:0:0:0 | Hashtable | -| file://:0:0:0:0 | Hashtable | -| file://:0:0:0:0 | Hashtable | -| file://:0:0:0:0 | Hashtable | -| file://:0:0:0:0 | Hashtable | -| file://:0:0:0:0 | Hidden | -| file://:0:0:0:0 | IOException | -| file://:0:0:0:0 | IOException | -| file://:0:0:0:0 | IOException | -| file://:0:0:0:0 | IOException | -| file://:0:0:0:0 | Identity | -| file://:0:0:0:0 | IllegalAccessException | -| file://:0:0:0:0 | IllegalAccessException | -| file://:0:0:0:0 | IllegalArgumentException | -| file://:0:0:0:0 | IllegalArgumentException | -| file://:0:0:0:0 | IllegalArgumentException | -| file://:0:0:0:0 | IllegalArgumentException | -| file://:0:0:0:0 | IndexOutOfBoundsException | -| file://:0:0:0:0 | IndexOutOfBoundsException | -| file://:0:0:0:0 | IndexOutOfBoundsException | -| file://:0:0:0:0 | InetAddress | -| file://:0:0:0:0 | InetAddressHolder | -| file://:0:0:0:0 | InetAddressHolder | -| file://:0:0:0:0 | InnocuousForkJoinWorkerThread | -| file://:0:0:0:0 | InnocuousThreadFactory | -| file://:0:0:0:0 | InputStream | -| file://:0:0:0:0 | IntArray | -| file://:0:0:0:0 | IntArray | -| file://:0:0:0:0 | IntBuffer | -| file://:0:0:0:0 | IntBuffer | -| file://:0:0:0:0 | IntIterator | -| file://:0:0:0:0 | IntProgression | -| file://:0:0:0:0 | IntRange | -| file://:0:0:0:0 | IntSummaryStatistics | -| file://:0:0:0:0 | IntSummaryStatistics | -| file://:0:0:0:0 | Integer | -| file://:0:0:0:0 | Integer | -| file://:0:0:0:0 | InterfaceAddress | -| file://:0:0:0:0 | Invokers | -| file://:0:0:0:0 | Item | -| file://:0:0:0:0 | Item | -| file://:0:0:0:0 | Item | -| file://:0:0:0:0 | Key | -| file://:0:0:0:0 | KeyIterator | -| file://:0:0:0:0 | KeySetView | -| file://:0:0:0:0 | KeySpliterator | -| file://:0:0:0:0 | KeySpliterator | -| file://:0:0:0:0 | Label | -| file://:0:0:0:0 | LambdaForm | -| file://:0:0:0:0 | LambdaForm | -| file://:0:0:0:0 | LambdaForm | -| file://:0:0:0:0 | LambdaForm | -| file://:0:0:0:0 | LambdaForm | -| file://:0:0:0:0 | LambdaForm | -| file://:0:0:0:0 | LambdaForm | -| file://:0:0:0:0 | LambdaForm | -| file://:0:0:0:0 | LambdaForm | -| file://:0:0:0:0 | LambdaForm | -| file://:0:0:0:0 | LanguageRange | -| file://:0:0:0:0 | LanguageRange | -| file://:0:0:0:0 | LineReader | -| file://:0:0:0:0 | LineReader | -| file://:0:0:0:0 | Locale | -| file://:0:0:0:0 | Locale | -| file://:0:0:0:0 | Locale | -| file://:0:0:0:0 | LocaleExtensions | -| file://:0:0:0:0 | Long | -| file://:0:0:0:0 | Long | -| file://:0:0:0:0 | LongArray | -| file://:0:0:0:0 | LongArray | -| file://:0:0:0:0 | LongBuffer | -| file://:0:0:0:0 | LongBuffer | -| file://:0:0:0:0 | LongIterator | -| file://:0:0:0:0 | LongProgression | -| file://:0:0:0:0 | LongRange | -| file://:0:0:0:0 | LongSummaryStatistics | -| file://:0:0:0:0 | LongSummaryStatistics | -| file://:0:0:0:0 | MapEntry | -| file://:0:0:0:0 | MapReduceEntriesTask | -| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | -| file://:0:0:0:0 | MapReduceEntriesToIntTask | -| file://:0:0:0:0 | MapReduceEntriesToLongTask | -| file://:0:0:0:0 | MapReduceKeysTask | -| file://:0:0:0:0 | MapReduceKeysToDoubleTask | -| file://:0:0:0:0 | MapReduceKeysToIntTask | -| file://:0:0:0:0 | MapReduceKeysToLongTask | -| file://:0:0:0:0 | MapReduceMappingsTask | -| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | -| file://:0:0:0:0 | MapReduceMappingsToIntTask | -| file://:0:0:0:0 | MapReduceMappingsToLongTask | -| file://:0:0:0:0 | MapReduceValuesTask | -| file://:0:0:0:0 | MapReduceValuesToDoubleTask | -| file://:0:0:0:0 | MapReduceValuesToIntTask | -| file://:0:0:0:0 | MapReduceValuesToLongTask | -| file://:0:0:0:0 | MappedByteBuffer | -| file://:0:0:0:0 | MappedByteBuffer | -| file://:0:0:0:0 | MemberName | -| file://:0:0:0:0 | MemberName | -| file://:0:0:0:0 | MemberName | -| file://:0:0:0:0 | MemberName | -| file://:0:0:0:0 | MemberName | -| file://:0:0:0:0 | MemberName | -| file://:0:0:0:0 | MemberName | -| file://:0:0:0:0 | MemberName | -| file://:0:0:0:0 | MemberName | -| file://:0:0:0:0 | MemberName | -| file://:0:0:0:0 | Method | -| file://:0:0:0:0 | MethodHandle | -| file://:0:0:0:0 | MethodTypeForm | -| file://:0:0:0:0 | MethodVisitor | -| file://:0:0:0:0 | MethodVisitor | -| file://:0:0:0:0 | MethodWriter | -| file://:0:0:0:0 | Module | -| file://:0:0:0:0 | Module | -| file://:0:0:0:0 | Module | -| file://:0:0:0:0 | ModuleDescriptor | -| file://:0:0:0:0 | ModuleReference | -| file://:0:0:0:0 | ModuleVisitor | -| file://:0:0:0:0 | ModuleVisitor | -| file://:0:0:0:0 | Name | -| file://:0:0:0:0 | Name | -| file://:0:0:0:0 | Name | -| file://:0:0:0:0 | Name | -| file://:0:0:0:0 | Name | -| file://:0:0:0:0 | Name | -| file://:0:0:0:0 | NamedFunction | -| file://:0:0:0:0 | NamedFunction | -| file://:0:0:0:0 | NamedFunction | -| file://:0:0:0:0 | NamedFunction | -| file://:0:0:0:0 | NamedFunction | -| file://:0:0:0:0 | NamedFunction | -| file://:0:0:0:0 | NamedFunction | -| file://:0:0:0:0 | NamedPackage | -| file://:0:0:0:0 | NativeLibrary | -| file://:0:0:0:0 | NestHost | -| file://:0:0:0:0 | NestMembers | -| file://:0:0:0:0 | NetworkInterface | -| file://:0:0:0:0 | NetworkInterface | -| file://:0:0:0:0 | Node | -| file://:0:0:0:0 | Node | -| file://:0:0:0:0 | Node | -| file://:0:0:0:0 | Node | -| file://:0:0:0:0 | Node | -| file://:0:0:0:0 | NonfairSync | -| file://:0:0:0:0 | Number | -| file://:0:0:0:0 | Number | -| file://:0:0:0:0 | Object | -| file://:0:0:0:0 | ObjectInputStream | -| file://:0:0:0:0 | ObjectInputStream | -| file://:0:0:0:0 | ObjectOutputStream | -| file://:0:0:0:0 | ObjectOutputStream | -| file://:0:0:0:0 | ObjectStreamClass | -| file://:0:0:0:0 | ObjectStreamException | -| file://:0:0:0:0 | ObjectStreamException | -| file://:0:0:0:0 | ObjectStreamField | -| file://:0:0:0:0 | ObjectStreamField | -| file://:0:0:0:0 | ObjectStreamField | -| file://:0:0:0:0 | ObjectStreamField | -| file://:0:0:0:0 | OffsetClock | -| file://:0:0:0:0 | OptionalDataException | -| file://:0:0:0:0 | OptionalDataException | -| file://:0:0:0:0 | OutputStream | -| file://:0:0:0:0 | Package | -| file://:0:0:0:0 | Package | -| file://:0:0:0:0 | Parameter | -| file://:0:0:0:0 | ParsePosition | -| file://:0:0:0:0 | Parsed | -| file://:0:0:0:0 | Permission | -| file://:0:0:0:0 | PermissionCollection | -| file://:0:0:0:0 | PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanableRef | -| file://:0:0:0:0 | PhantomCleanableRef | -| file://:0:0:0:0 | PhantomReference | -| file://:0:0:0:0 | PolymorphicSignature | -| file://:0:0:0:0 | PrintStream | -| file://:0:0:0:0 | PrintStream | -| file://:0:0:0:0 | PrintStream | -| file://:0:0:0:0 | PrintStream | -| file://:0:0:0:0 | PrintStream | -| file://:0:0:0:0 | PrintStream | -| file://:0:0:0:0 | PrintStream | -| file://:0:0:0:0 | PrintStream | -| file://:0:0:0:0 | PrintStream | -| file://:0:0:0:0 | PrintStream | -| file://:0:0:0:0 | PrintWriter | -| file://:0:0:0:0 | PrintWriter | -| file://:0:0:0:0 | PrintWriter | -| file://:0:0:0:0 | PrintWriter | -| file://:0:0:0:0 | PrintWriter | -| file://:0:0:0:0 | PrintWriter | -| file://:0:0:0:0 | PrintWriter | -| file://:0:0:0:0 | PrintWriter | -| file://:0:0:0:0 | PrintWriter | -| file://:0:0:0:0 | PrintWriter | -| file://:0:0:0:0 | PrintWriter | -| file://:0:0:0:0 | Properties | -| file://:0:0:0:0 | Properties | -| file://:0:0:0:0 | Properties | -| file://:0:0:0:0 | ProtectionDomain | -| file://:0:0:0:0 | ProtectionDomain | -| file://:0:0:0:0 | Provider | -| file://:0:0:0:0 | Provider | -| file://:0:0:0:0 | Proxy | -| file://:0:0:0:0 | PutField | -| file://:0:0:0:0 | Random | -| file://:0:0:0:0 | Random | -| file://:0:0:0:0 | RandomAccessSpliterator | -| file://:0:0:0:0 | RandomDoublesSpliterator | -| file://:0:0:0:0 | RandomIntsSpliterator | -| file://:0:0:0:0 | RandomLongsSpliterator | -| file://:0:0:0:0 | Reader | -| file://:0:0:0:0 | Reader | -| file://:0:0:0:0 | ReduceEntriesTask | -| file://:0:0:0:0 | ReduceKeysTask | -| file://:0:0:0:0 | ReduceValuesTask | -| file://:0:0:0:0 | ReentrantLock | -| file://:0:0:0:0 | ReentrantLock | -| file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | Reference | -| file://:0:0:0:0 | ReferenceQueue | -| file://:0:0:0:0 | ReflectiveOperationException | -| file://:0:0:0:0 | ReflectiveOperationException | -| file://:0:0:0:0 | ReflectiveOperationException | -| file://:0:0:0:0 | ReflectiveOperationException | -| file://:0:0:0:0 | ReservationNode | -| file://:0:0:0:0 | ResolvedModule | -| file://:0:0:0:0 | RunnableExecuteAction | -| file://:0:0:0:0 | RuntimeException | -| file://:0:0:0:0 | RuntimeException | -| file://:0:0:0:0 | RuntimeException | -| file://:0:0:0:0 | RuntimeException | -| file://:0:0:0:0 | RuntimeException | -| file://:0:0:0:0 | RuntimePermission | -| file://:0:0:0:0 | RuntimePermission | -| file://:0:0:0:0 | SearchEntriesTask | -| file://:0:0:0:0 | SearchKeysTask | -| file://:0:0:0:0 | SearchMappingsTask | -| file://:0:0:0:0 | SearchValuesTask | -| file://:0:0:0:0 | Segment | -| file://:0:0:0:0 | SerializablePermission | -| file://:0:0:0:0 | SerializablePermission | -| file://:0:0:0:0 | Service | -| file://:0:0:0:0 | ServiceProvider | -| file://:0:0:0:0 | ShortArray | -| file://:0:0:0:0 | ShortArray | -| file://:0:0:0:0 | ShortBuffer | -| file://:0:0:0:0 | ShortBuffer | -| file://:0:0:0:0 | ShortIterator | -| file://:0:0:0:0 | SimpleEntry | -| file://:0:0:0:0 | SimpleEntry | -| file://:0:0:0:0 | SimpleImmutableEntry | -| file://:0:0:0:0 | SimpleImmutableEntry | -| file://:0:0:0:0 | SocketAddress | -| file://:0:0:0:0 | SoftCleanable | -| file://:0:0:0:0 | SoftCleanable | -| file://:0:0:0:0 | SoftCleanableRef | -| file://:0:0:0:0 | SoftCleanableRef | -| file://:0:0:0:0 | SoftReference | -| file://:0:0:0:0 | SoftReference | -| file://:0:0:0:0 | SpeciesData | -| file://:0:0:0:0 | SpeciesData | -| file://:0:0:0:0 | StackFrameInfo | -| file://:0:0:0:0 | StackTraceElement | -| file://:0:0:0:0 | StackTraceElement | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | String | -| file://:0:0:0:0 | StringBuffer | -| file://:0:0:0:0 | StringBuffer | -| file://:0:0:0:0 | StringBuffer | -| file://:0:0:0:0 | StringBuffer | -| file://:0:0:0:0 | StringBuilder | -| file://:0:0:0:0 | StringBuilder | -| file://:0:0:0:0 | StringBuilder | -| file://:0:0:0:0 | StringBuilder | -| file://:0:0:0:0 | Subject | -| file://:0:0:0:0 | Subject | -| file://:0:0:0:0 | Subset | -| file://:0:0:0:0 | SuppliedThreadLocal | -| file://:0:0:0:0 | Sync | -| file://:0:0:0:0 | SystemClock | -| file://:0:0:0:0 | TableStack | -| file://:0:0:0:0 | Thread | -| file://:0:0:0:0 | Thread | -| file://:0:0:0:0 | Thread | -| file://:0:0:0:0 | Thread | -| file://:0:0:0:0 | Thread | -| file://:0:0:0:0 | Thread | -| file://:0:0:0:0 | Thread | -| file://:0:0:0:0 | Thread | -| file://:0:0:0:0 | Thread | -| file://:0:0:0:0 | Thread | -| file://:0:0:0:0 | ThreadGroup | -| file://:0:0:0:0 | ThreadGroup | -| file://:0:0:0:0 | ThreadLocal | -| file://:0:0:0:0 | ThreadLocalMap | -| file://:0:0:0:0 | Throwable | -| file://:0:0:0:0 | Throwable | -| file://:0:0:0:0 | Throwable | -| file://:0:0:0:0 | Throwable | -| file://:0:0:0:0 | Throwable | -| file://:0:0:0:0 | Throwable | -| file://:0:0:0:0 | Throwable | -| file://:0:0:0:0 | Throwable | -| file://:0:0:0:0 | Throwable | -| file://:0:0:0:0 | Throwable | -| file://:0:0:0:0 | TickClock | -| file://:0:0:0:0 | Timestamp | -| file://:0:0:0:0 | Traverser | -| file://:0:0:0:0 | TreeBin | -| file://:0:0:0:0 | TreeNode | -| file://:0:0:0:0 | TypePath | -| file://:0:0:0:0 | TypesAndInvokers | -| file://:0:0:0:0 | URI | -| file://:0:0:0:0 | URI | -| file://:0:0:0:0 | URI | -| file://:0:0:0:0 | URI | -| file://:0:0:0:0 | URI | -| file://:0:0:0:0 | URI | -| file://:0:0:0:0 | URL | -| file://:0:0:0:0 | URL | -| file://:0:0:0:0 | URL | -| file://:0:0:0:0 | URL | -| file://:0:0:0:0 | URL | -| file://:0:0:0:0 | URL | -| file://:0:0:0:0 | URLConnection | -| file://:0:0:0:0 | URLStreamHandler | -| file://:0:0:0:0 | Unloader | -| file://:0:0:0:0 | UserPrincipalLookupService | -| file://:0:0:0:0 | ValueIterator | -| file://:0:0:0:0 | ValueSpliterator | -| file://:0:0:0:0 | ValueSpliterator | -| file://:0:0:0:0 | ValuesView | -| file://:0:0:0:0 | VarForm | -| file://:0:0:0:0 | VarHandle | -| file://:0:0:0:0 | Version | -| file://:0:0:0:0 | WeakClassKey | -| file://:0:0:0:0 | WeakClassKey | -| file://:0:0:0:0 | WeakCleanable | -| file://:0:0:0:0 | WeakCleanable | -| file://:0:0:0:0 | WeakCleanableRef | -| file://:0:0:0:0 | WeakCleanableRef | -| file://:0:0:0:0 | WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | -| file://:0:0:0:0 | WeakHashMapSpliterator | -| file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | WeakReference | -| file://:0:0:0:0 | WorkQueue | -| file://:0:0:0:0 | Writer | -| file://:0:0:0:0 | Writer | -| file://:0:0:0:0 | WrongMethodTypeException | -| file://:0:0:0:0 | WrongMethodTypeException | -| file://:0:0:0:0 | WrongMethodTypeException | -| file://:0:0:0:0 | WrongMethodTypeException | -| file://:0:0:0:0 | ZoneId | -| file://:0:0:0:0 | ZoneOffsetTransition | -| file://:0:0:0:0 | ZoneOffsetTransition | -| file://:0:0:0:0 | ZoneOffsetTransitionRule | -| file://:0:0:0:0 | ZoneRules | | methods2.kt:7:1:10:1 | Class2 | | methods3.kt:5:1:7:1 | Class3 | | methods.kt:5:1:13:1 | Class | diff --git a/java/ql/test/kotlin/library-tests/methods/methods.ql b/java/ql/test/kotlin/library-tests/methods/methods.ql index 3a169e71ebd..a8a6abad06f 100644 --- a/java/ql/test/kotlin/library-tests/methods/methods.ql +++ b/java/ql/test/kotlin/library-tests/methods/methods.ql @@ -1,7 +1,7 @@ import java -query predicate methods(Method m) { any() } +query predicate methods(Method m) { m.fromSource() } -query predicate constructors(Constructor c) { any() } +query predicate constructors(Constructor c) { c.fromSource() } -query predicate extensions(ExtensionMethod m, Type t) { m.getExtendedType() = t } +query predicate extensions(ExtensionMethod m, Type t) { m.getExtendedType() = t and m.fromSource() } diff --git a/java/ql/test/kotlin/library-tests/methods/parameters.expected b/java/ql/test/kotlin/library-tests/methods/parameters.expected index 27c89d0ca34..094784980bf 100644 --- a/java/ql/test/kotlin/library-tests/methods/parameters.expected +++ b/java/ql/test/kotlin/library-tests/methods/parameters.expected @@ -1,10838 +1,3 @@ -| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | UTC | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | abnormalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | accept | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | accessModeType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accessModeType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accessModeType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | accessModeType | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | accessModeTypeUncached | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accumulateAndGet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accumulateAndGet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | accumulateAndGet | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | accumulateAndGet | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | acquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | acquireQueued | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | acquireShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | acquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adapt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 1 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 1 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | element | 1 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | add | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 1 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 1 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | elements | 1 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addAndGet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addArgumentForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addArgumentForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addAttribute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addChronoChangedListener | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | addEntry | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | addExports | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addExports | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addExports | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addExports | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addExports | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | addFieldValue | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | addFirst | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addLast | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addOne | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addOne | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addOne | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | addOne | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | addOpens | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addOpens | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addOpens | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addOpens | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addOpens | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | addProvider | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addProvider | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addProvider | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | addRange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addRange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addReads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addReads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addReads | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addRequestProperty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addRequestProperty | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addSuppressed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addTo | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToSubroutine | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addToSubroutine | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addUnicodeLocaleAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addUninitializedType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addUninitializedType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | addUses | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addWaiter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addWaiter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | addWaiter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | adjustInto | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | after | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | alignedSlice | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | alignedSlice | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | alignmentOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | alignmentOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | alignmentOffset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | alignmentOffset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | allMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocateDirect | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocateDirect | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocateInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocateMemory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocateUninitializedArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | allocateUninitializedArray | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | allowThreadSuspension | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | and | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | and | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | and | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | and | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | and | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | and | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | and | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | and | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andNot | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | andThen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | annotateClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | annotateProxyClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | anyMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | anyMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | anyMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | anyMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | append | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | appendChars | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | appendClassSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | appendClassSignature | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | appendCodePoint | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | appendCodePoint | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | appendCodePoint | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | appendParameterTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | appendParameterTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | apply | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | apply | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | apply | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | applyAsDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | applyAsInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | applyAsLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | arg | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | argSlotToParameter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | argument | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | argument | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | arguments | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | arguments | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | arrayBaseOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | arrayIndexScale | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | asCollector | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | asCollectorChecks | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | asCollectorType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asCollectorType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asCollectorType | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | asPrimitiveType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | asSpreader | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | asSpreaderChecks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asSpreaderChecks | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asSpreaderChecks | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | asSpreaderType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asSpreaderType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | asSpreaderType | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | asSubclass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asTypeCached | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asTypeUncached | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asTypeUncached | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asVarargsCollector | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asVarargsCollector | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | asWrapperType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | associateWithDebugName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | associateWithDebugName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | atDate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atDate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atStartOfDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | atTime | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | atZone | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atZone | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atZone | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atZoneSameInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | atZoneSimilarLocal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | attach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | auditSubclass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | auditSubclass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | await | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | await | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | await | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | await | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | awaitJoin | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | awaitJoin | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | awaitJoin | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | awaitNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | awaitNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | awaitQuiescence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | awaitQuiescence | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | awaitTermination | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | awaitUntil | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | awaitUntil | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | balanceDeletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | balanceDeletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | balanceInsertion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | balanceInsertion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | basicMethodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | basicType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | basicType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | basicType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | basicType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | basicTypeChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | basicTypeChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | basicTypeDesc | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | basicTypeOrds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | basicTypeSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | basicTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | basicTypesOrd | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | batchFor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | batchRemove | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | batchRemove | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | batchRemove | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | batchRemove | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | before | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | between | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | between | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | between | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | between | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | between | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | between | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | between | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | between | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | between | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | between | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentD | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentD | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentD | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentD | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentD | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | bindArgumentF | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentF | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentF | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentF | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentF | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | bindArgumentForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentI | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentI | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentI | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentI | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentI | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | bindArgumentJ | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentJ | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentJ | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentJ | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentJ | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindArgumentL | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | bindSingle | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | bindTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bindToLoader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | bitLengthForInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | blockedOn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | blockedOn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | blockedOn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | blockedOn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | blockedOn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cachedLambdaForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cachedMethodHandle | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | callSiteForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | callSiteForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | canAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canConvert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canConvert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | canEncode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canEncode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canRead | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canUse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cancelIgnoringExceptions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canonicalize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canonicalize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canonicalize | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | canonicalize | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | canonicalize | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | canonicalizeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | canonicalizeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | casAnnotationType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | casAnnotationType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | casTabAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | casTabAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | casTabAt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | casTabAt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | cast | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cast | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cast | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | castEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | changeEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | changeEntry | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | changeParameterType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | changeParameterType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | changeReturnType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | charAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | charCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | charEquals | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | charEquals | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | charEqualsIgnoreCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | charEqualsIgnoreCase | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkAbstractListModCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkAbstractListModCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | checkAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkBounds | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkBoundsBeginEnd | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkBoundsBeginEnd | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkBoundsBeginEnd | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkBoundsOffCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkBoundsOffCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkBoundsOffCount | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkCanSetAccessible | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkClassLoaderPermission | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkClassLoaderPermission | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkCustomized | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkExactType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkExactType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkForTypeAlias | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkGenericType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkGenericType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkGuard | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkIndex | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkInput | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkInput | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkInvariants | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkObjFieldValueTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkObjFieldValueTypes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkOffset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkPermission | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkRange | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkRangeSIOOBE | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | checkSlotCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkTargetChange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkTargetChange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkValidIntValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkValidIntValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkValidIntValue | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkValidValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkValidValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkValidValue | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkVarHandleExactType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkVarHandleExactType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | checkVarHandleGenericType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | checkVarHandleGenericType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | childValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | childValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | chooseFieldName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | chooseFieldName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | chooseFieldName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | chooseFieldName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | classBCName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | classBCName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | classBCName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | classBCName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | className | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | className | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | classSig | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | classSig | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | classSig | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | classSig | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | clearBit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | cloneWithIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | closeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointAt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | codePointAtImpl | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointAtImpl | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointAtImpl | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointBefore | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | codePointBeforeImpl | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointBeforeImpl | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointBeforeImpl | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | codePointCount | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | codePointCountImpl | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | codePointCountImpl | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | codePointCountImpl | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | codePointOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | collect | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | collectArgumentArrayForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | collectArgumentArrayForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | collectArgumentsForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | collectArgumentsForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | combine | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | combine | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | combine | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | combine | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | combine | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | comparableClassFor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compare | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeBoolean | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeBoolean | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeBoolean | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeBooleanAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeBooleanAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeBooleanAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeBooleanAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeBooleanRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeBooleanRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeBooleanRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeBooleanRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeByte | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeByte | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeByteAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeByteAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeByteAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeByteAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeByteRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeByteRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeByteRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeByteRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeChar | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeChar | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeCharAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeCharAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeCharAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeCharAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeCharRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeCharRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeCharRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeCharRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeDouble | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeDouble | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeDoubleAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeDoubleAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeDoubleAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeDoubleAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeDoubleRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeDoubleRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeDoubleRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeDoubleRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeFloat | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeFloat | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeFloatAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeFloatAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeFloatAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeFloatAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeFloatRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeFloatRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeFloatRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeFloatRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeInt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeIntAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeIntAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeIntAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeIntAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeIntRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeIntRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeIntRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeIntRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeLong | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeLongAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeLongAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeLongAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeLongAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeLongRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeLongRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeLongRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeLongRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeObject | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeObject | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeObject | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeObjectAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeObjectAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeObjectAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeObjectAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeObjectRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeObjectRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeObjectRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeObjectRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeShort | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeShort | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeShortAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeShortAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeShortAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeShortAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndExchangeShortRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndExchangeShortRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndExchangeShortRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndExchangeShortRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndSet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSet | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSet | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetBoolean | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetBoolean | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndSetBoolean | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndSetByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetByte | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndSetByte | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndSetChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetChar | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndSetChar | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndSetDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetDouble | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndSetDouble | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndSetFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetFloat | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndSetFloat | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetForkJoinTaskTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndSetInt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndSetLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndSetLong | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndSetNext | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetNext | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetObject | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetObject | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndSetObject | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetPendingCount | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetShort | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareAndSetShort | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetTail | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareAndSetWaitStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareAndSetWaitStatus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareComparables | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareComparables | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareComparables | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | compareMagnitude | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareMagnitude | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareTo0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareToIgnoreCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareUnsigned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareUnsigned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compareUnsigned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compareUnsigned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | comparing | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | comparing | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | comparing | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | comparingByKey | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | comparingByValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | comparingDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | comparingInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | comparingLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complementOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | complete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completeExceptionally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | completed | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compose | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | compute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeIfPresent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | computeValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | concat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | concat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | concat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | concat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | concat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | concat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | concat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | concat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | concat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | configure | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | constantZero | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | contains | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | containsAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | containsKey | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | containsValue | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | contentEquals | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contentEquals | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | contextWithPermissions | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | convert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | convert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | convert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | convert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | convert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | convertNumberToI18N | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | convertToDigit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copy | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copy | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copyArrayBoxing | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyArrayBoxing | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyArrayBoxing | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copyArrayBoxing | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | copyArrayBoxing | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | copyArrayUnboxing | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyArrayUnboxing | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyArrayUnboxing | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copyArrayUnboxing | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | copyArrayUnboxing | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | copyConstructor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyConstructor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | copyMemory | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | copyMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyPool | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | copySwapMemory | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | copyValueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyValueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyValueOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyValueOf | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copyWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyWith | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyWith | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyWithExtendD | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyWithExtendD | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyWithExtendD | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copyWithExtendF | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyWithExtendF | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyWithExtendF | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copyWithExtendI | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyWithExtendI | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyWithExtendI | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copyWithExtendJ | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyWithExtendJ | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyWithExtendJ | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | copyWithExtendL | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | copyWithExtendL | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | copyWithExtendL | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | create | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | create | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | createAttributedCharacterIterator | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createCapacityException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createContentHandler | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createDateTime | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createDateTime | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | createDirectory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createDirectory | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createFilter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createFilter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createFilter | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createFilter2 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createInheritedMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createInheritedMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createInstance | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createLimitException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createLink | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createLink | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createMap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createMap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createPositionException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createSymbolicLink | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createSymbolicLink | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createSymbolicLink | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | createTempFile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createTempFile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createTempFile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createTempFile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | createTempFile | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | createTransition | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | createURLStreamHandler | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | customize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | date | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | dateEpochDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateEpochDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateEpochDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateNow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | dateYearDay | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | datesUntil | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | datesUntil | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | datesUntil | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | daysUntil | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | decode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | decode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | decode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | decode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | decode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | decode | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | decode | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | decodeLoop | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | decodeLoop | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defaultWriteHashtable | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defaulted | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineAnonymousClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineAnonymousClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineAnonymousClass | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | defineClass | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | defineClass0 | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | defineClass1 | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | defineClass2 | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineModules | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineModulesWithManyLoaders | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineModulesWithManyLoaders | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineModulesWithManyLoaders | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineModulesWithManyLoaders | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineModulesWithManyLoaders | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | defineModulesWithOneLoader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineModulesWithOneLoader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | defineModulesWithOneLoader | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineModulesWithOneLoader | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | defineModulesWithOneLoader | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | definePackage | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | delete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | delete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | delete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | delete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | delete | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | delete | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | delete | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | deleteCharAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | deleteCharAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | deleteCharAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | deleteIfExists | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | deregisterWorker | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | deregisterWorker | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | deriveFieldTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | deriveFieldTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | deriveTransformHelper | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | deriveTransformHelper | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | deriveTransformHelper | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | deriveTransformHelper | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | deriveTransformHelperArguments | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | desiredAssertionStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | digit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | digit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | digit | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | digit | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | dispatchUncaughtException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dispatchUncaughtException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | displayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | div | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | divide | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | divideAndRemainder | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | divideUnsigned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | divideUnsigned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | divideUnsigned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | divideUnsigned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | dividedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dividedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doAcquireNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doAcquireShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireSharedInterruptibly | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doAs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAs | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doAs | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | doAsPrivileged | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | doInvokeAny | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doInvokeAny | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doInvokeAny | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | doubleToLongBits | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doubleToRawLongBits | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | doubles | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | drainTasksTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dropParameterTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dropParameterTypes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | dropWhile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dropWhile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dropWhile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dropWhile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dumpThreads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dumpThreads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dupArgumentForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | dupArgumentForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | effectivelyIdenticalParameters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | effectivelyIdenticalParameters | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | elementAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | elementAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | elementData | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | emitIntConstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | emitIntConstant | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | enableReplaceObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enableResolveObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | encode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | encode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | encode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | encode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | encode | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | encode | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | encodeLoop | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | encodeLoop | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | encodeUTF8 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | encodeUTF8 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | encodeUTF8 | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | end | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | end | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | endOptional | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | endsWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | endsWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | endsWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enq | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enq | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enq | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enqueue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ensureCapacity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ensureCapacity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ensureCapacity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ensureCapacity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ensureCapacityInternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ensureCapacityInternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ensureClassInitialized | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | entry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | entry | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | enumerate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | enumerateStringProperties | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | epochSecond | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | eq | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | eq | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | eq | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | eq | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | equalParamTypes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | equals | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | equalsIgnoreCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | equalsRange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | equalsRange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | equalsRange | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | eraOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | eraOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | eraOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | execute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | execute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | execute | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | execute | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | explicitCastEquivalentToAsType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | exports | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | exports | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | exports | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | exports | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | exports | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | exports | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | exports | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | exports | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | exports | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | extendWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | externalHelpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | externalHelpComplete | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | externalPush | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | failed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | failed | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | fastUUID | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fastUUID | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filter | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | filter | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | filter | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | filterArgumentForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filterArgumentForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | filterLog | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filterLog | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | filterLog | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | filterReturnForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filterReturnForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | filterTags | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filterTags | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | filterTags | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | filterTags | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | filterTags | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | find | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | findBootstrapClassOrNull | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | findEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findFactories | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findFactories | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | findFactory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findFactory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findFactory | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | findFactory | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | findForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findGetter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findGetter | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | findGetter | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | findGetters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findGetters | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | findLibrary | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findLoadedClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findLoader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findModule | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findModule | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findNodeFromTail | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findNodeFromTail | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findNodeFromTail | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findPrimitiveType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findResource | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findResource | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findResource | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | findResources | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findServices | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findSpecies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findSpecies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findSystemClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findTreeNode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findTreeNode | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | findTreeNode | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | findTypeVariable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | findWrapperType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | finishEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | finishEntry | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | finishToArray | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | firstDayOfYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | fixed | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | flatMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | flatMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | flatMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | flatMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | flatMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | flatMapToDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | flatMapToInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | flatMapToLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | flipBit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | flush | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | flush | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | foldArgumentsForm | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | forBasicType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forBasicType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forDigit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forDigit | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | forEach | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | forEachEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachEntry | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | forEachEntry | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | forEachEntry | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | forEachKey | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachKey | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachKey | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | forEachKey | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | forEachKey | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | forEachOrdered | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachOrdered | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachOrdered | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachOrdered | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachRemaining | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forEachValue | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | forEachValue | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | forEachValue | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | forLanguageTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | forName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | forName | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | forPrimitiveType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forPrimitiveType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forWrapperType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | force | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | force | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forceType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | forceType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | format | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | formatTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | formatTo | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | formatToCharacterIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | formatToCharacterIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | formatUnsignedInt | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | formatUnsignedLong0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | formatUnsignedLong0 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | formatUnsignedLong0 | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | formatUnsignedLong0 | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | formatUnsignedLong0 | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | formatted | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | freeMemory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | from | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeEnd | 1 | -| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeEnd | 1 | -| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeEnd | 1 | -| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeStart | 0 | -| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeStart | 0 | -| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | rangeStart | 0 | -| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | step | 2 | -| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | step | 2 | -| file://:0:0:0:0 | fromClosedRange | file://:0:0:0:0 | step | 2 | -| file://:0:0:0:0 | fromDescriptor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fromDescriptor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | fromMethodDescriptorString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fromMethodDescriptorString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | fromMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fromString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fromURI | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fullyRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fullyRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fullyRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | fullyRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | gcd | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | generate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | generate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | generate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | generate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | generateConcreteSpeciesCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | generateConcreteSpeciesCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | generateConcreteSpeciesCode | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | generateConcreteSpeciesCode | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | generateConcreteSpeciesCodeFile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | genericMethodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | genericMethodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | genericMethodType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | get | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAddress | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAddress | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAddress | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAddressesFromNameService | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAddressesFromNameService | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAllByName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAllByName0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAllByName0 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAccumulate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAccumulate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAccumulate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAccumulate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAdd | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAdd | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddByte | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddByteAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddByteAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddByteAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddByteRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddByteRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddByteRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddChar | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddCharAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddCharAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddCharAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddCharRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddCharRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddCharRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddDouble | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddDoubleAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddDoubleAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddDoubleAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddDoubleRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddDoubleRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddDoubleRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddFloat | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddFloatAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddFloatAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddFloatAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddFloatRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddFloatRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddFloatRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddIntAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddIntAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddIntAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddIntRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddIntRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddIntRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddLongAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddLongAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddLongAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddLongRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddLongRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddLongRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddShort | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddShortAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddShortAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddShortAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndAddShortRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndAddShortRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndAddShortRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAnd | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndBoolean | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndBoolean | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndBooleanAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndBooleanAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndBooleanAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndBooleanRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndBooleanRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndBooleanRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndByte | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndByteAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndByteAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndByteAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndByteRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndByteRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndByteRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndChar | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndCharAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndCharAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndCharAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndCharRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndCharRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndCharRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndIntAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndIntAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndIntAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndIntRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndIntRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndIntRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndLongAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndLongAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndLongAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndLongRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndLongRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndLongRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndShort | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndShortAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndShortAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndShortAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseAndShortRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseAndShortRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseAndShortRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOr | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrBoolean | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrBoolean | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrBooleanAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrBooleanAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrBooleanAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrBooleanRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrBooleanRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrBooleanRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrByte | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrByteAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrByteAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrByteAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrByteRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrByteRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrByteRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrChar | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrCharAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrCharAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrCharAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrCharRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrCharRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrCharRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrIntAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrIntAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrIntAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrIntRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrIntRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrIntRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrLongAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrLongAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrLongAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrLongRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrLongRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrLongRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrShort | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrShortAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrShortAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrShortAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseOrShortRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseOrShortRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseOrShortRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorBoolean | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorBoolean | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorBooleanAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorBooleanAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorBooleanAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorBooleanRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorBooleanRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorBooleanRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorByte | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorByteAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorByteAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorByteAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorByteRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorByteRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorByteRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorChar | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorCharAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorCharAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorCharAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorCharRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorCharRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorCharRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorIntAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorIntAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorIntAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorIntRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorIntRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorIntRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorLongAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorLongAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorLongAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorLongRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorLongRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorLongRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorShort | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorShortAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorShortAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorShortAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndBitwiseXorShortRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndBitwiseXorShortRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndBitwiseXorShortRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetBoolean | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetBoolean | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetBooleanAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetBooleanAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetBooleanAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetBooleanRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetBooleanRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetBooleanRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetByte | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetByteAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetByteAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetByteAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetByteRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetByteRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetByteRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetChar | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetCharAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetCharAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetCharAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetCharRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetCharRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetCharRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetDouble | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetDoubleAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetDoubleAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetDoubleAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetDoubleRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetDoubleRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetDoubleRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetFloat | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetFloatAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetFloatAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetFloatAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetFloatRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetFloatRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetFloatRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetIntAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetIntAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetIntAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetIntRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetIntRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetIntRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetLongAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetLongAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetLongAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetLongRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetLongRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetLongRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetObject | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetObject | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetObjectAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetObjectAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetObjectAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetObjectRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetObjectRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetObjectRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetShort | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetShortAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetShortAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetShortAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndSetShortRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndSetShortRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getAndSetShortRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getAndUpdate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAndUpdate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotatedReturnType0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotatedReturnType0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotatedReturnType0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getArgumentTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getArgumentTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getArgumentsAndReturnSizes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBoolean | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getBooleanAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBooleanAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getBooleanOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBooleanOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getBooleanVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBooleanVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getByAddress | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByAddress | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByAddress | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getByIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByInetAddress | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getByteAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByteAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getByteOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByteOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getByteVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getByteVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getBytes | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getCallSiteTarget | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getCharAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getCharAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getCharOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getCharOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getCharUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getCharUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getCharUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getCharUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getCharUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getCharVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getCharVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getChars | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getClassAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getClassAtIfLoaded | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getClassLoader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getClassLoadingLock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getClassRefIndexAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getClassSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getCleanerImpl | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getCommonSuperClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getCommonSuperClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getConstructor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getConstructorAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getConstructorAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getConstructorAnnotations | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getConstructorDescriptor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getConstructorParameterAnnotations | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getConstructorSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getConstructorSlot | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getConstructors | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getConstructors | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getContent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getContent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getContent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getContent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getContent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getContentTypeFor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDaylightSavings | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredAnnotationsByType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredConstructor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredMethod | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDeclaredPublicMethods | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDeclaredPublicMethods | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDefault | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDefaultRequestProperty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDefaultUseCaches | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDefinedPackage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDescriptor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDirectionality | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDirectionality | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayCountry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayLanguage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDisplayName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDisplayScript | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDisplayVariant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDoubleAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDoubleAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDoubleAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDoubleOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDoubleOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getDoubleVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getDoubleVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getEncoded | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getEnumeration | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getEnumeration | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getExecutableSharedParameterTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getExecutableSharedParameterTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getExecutableTypeAnnotationBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getExtension | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getExtension | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getExtensionValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getField | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getFieldAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFieldAtIfLoaded | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getFields | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | getFileAttributeView | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFileAttributeView | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getFileAttributeView | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getFileStore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFileStoreAttributeView | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFileSystem | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getFloatAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFloatAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getFloatAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFloatOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFloatOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getFloatVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFloatVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getFrom | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getFrom | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getHeaderField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getHeaderField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getHeaderFieldDate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getHeaderFieldDate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getHeaderFieldInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getHeaderFieldInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getHeaderFieldKey | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getHeaderFieldLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getHeaderFieldLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getHostAddress | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getHostByAddr | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getHostName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getISOCountries | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | getInstance | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getIntAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getIntAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getIntAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getIntOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getIntOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getIntUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getIntUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getIntUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getIntUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getIntUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getIntVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getIntVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getInteger | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInteger | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInteger | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getInteger | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getInteger | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getInternalName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getItem | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLoadAverage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLoadAverage | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getLongAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLongAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getLongAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLongOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLongOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getLongUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLongUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLongUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getLongUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getLongUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getLongVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getLongVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMemberName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMemberName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMemberName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getMemberRefInfoAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMembers | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMembers | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getMembers | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getMembers | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getMembers | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | getMergedType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMergedType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethod | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getMethodAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethodAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethodAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethodAtIfLoaded | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethodDescriptor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethodDescriptor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethodDescriptor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getMethodHandle | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethodType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getMethodType_V | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getMethods | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | getMillisOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getNameAndTypeRefIndexAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getNameAndTypeRefInfoAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getNestedTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getNestedTypes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getNestedTypes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getNumericValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getNumericValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getObjFieldValues | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getObjFieldValues | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getObject | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getObjectAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getObjectAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getObjectOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getObjectOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getObjectType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getObjectVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getObjectVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getOpcode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | defaultValue | 1 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getOrDefault | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getPackage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getPackage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getParsed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getPath | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getPath | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getPath | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getPathMatcher | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getPrimFieldValues | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getPrimFieldValues | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getPrimitiveClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getPrincipals | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getPrivateCredentials | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getProperty | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getPublicCredentials | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getRequestProperty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getResource | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getResource | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getResourceAsStream | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getResourceAsStream | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getResourceAsStream | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getResources | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getReturnType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getReturnType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getRoot | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getRunLimit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getRunLimit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getRunStart | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getRunStart | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getService | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getService | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getServicesCatalog | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getServicesCatalogOrNull | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getShortAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShortAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getShortOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShortOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getShortUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShortUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShortUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getShortUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getShortUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getShortVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getShortVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | getSize | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | getStandardOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getStep | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getStepArgument | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getStringAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getSubject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getSystemResource | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getSystemResourceAsStream | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getSystemResources | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getTagAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getTransition | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getURLStreamHandler | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getUTF8At | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getUnchecked | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getUncompressedObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getUnicodeLocaleType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getUnicodeLocaleType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getValidOffsets | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitQueueLength | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getWaitingThreads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getterFunction | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | getterFunction | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | growArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | guessContentTypeFromName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | guessContentTypeFromStream | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | handleParameterNumberMismatch | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasCharacteristics | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasOption | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasQueuedThread | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasQueuedThread | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasStaticInitializerForSerialization | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hasWaiters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hash | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hash | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hashCodeRange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hashCodeRange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | headMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpAsyncBlocker | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpAsyncBlocker | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpAsyncBlocker | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | helpCC | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpCC | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | helpCC | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | helpComplete | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | helpQuiescePool | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpTransfer | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | helpTransfer | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | highSurrogate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | highestOneBit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | highestOneBit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | holdsLock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | holdsLock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | holdsLock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hostsEqual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hostsEqual | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | hugeCapacity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hugeCapacity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hugeCapacity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hugeCapacity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | hugeCapacity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | identity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | identityForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ifPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ifPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ifPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ifPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ifPresentOrElse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | implAddExports | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implAddExports | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implAddExports | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | implAddExportsNoSync | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implAddExportsNoSync | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implAddExportsNoSync | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | implAddExportsToAllUnnamed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implAddOpens | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implAddOpens | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implAddOpens | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | implAddOpensToAllUnnamed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implAddOpensToAllUnnamed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implAddReads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implAddReadsNoSync | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implAddUses | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implFlush | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implFlush | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implOnMalformedInput | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implOnMalformedInput | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implOnUnmappableCharacter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implOnUnmappableCharacter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implReplaceWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implReplaceWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | implies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | impliesWithAltFilePerm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | inSameSubroutine | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | inSubroutine | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexFor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexFor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | indexOf | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | indexOfRange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | indexOfRange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | indexOfRange | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | init | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | init | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | init | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | init | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | init | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | initBytes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initCause | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initInputFrame | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initInputFrame | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | initInputFrame | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | initInputFrame | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | initNonProxy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initNonProxy | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | initNonProxy | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | initNonProxy | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | initProxy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | initProxy | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | initProxy | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | initResolved | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | insert | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | insertParameterTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insertParameterTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | insertParameterTypes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | insertParameterTypes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | internArgument | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalNextDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalNextDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | internalNextInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalNextInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | internalNextLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalNextLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalPropagateException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | internalWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | interpretName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | interpretName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | interpretWithArguments | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | interpretWithArgumentsTracing | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | interrupt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ints | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ints | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ints | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ints | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ints | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ints | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | invocationHandlerReturnType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p1 | 0 | -| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p1 | 0 | -| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invoke | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | invokeAll | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | invokeAny | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | invokeBasic | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeBasic | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeBasicMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeExact | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeExact | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeHandleForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeHandleForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeHandleForm | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | invokeReadObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeReadObject | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeReadObjectNoData | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeReadResolve | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeWithArguments | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeWithArguments | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeWithArguments | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeWithArguments | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeWithArguments | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeWithArgumentsTracing | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeWriteObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | invokeWriteObject | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | invokeWriteReplace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAccessModeSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAccessibleFrom | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAfter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAlphabetic | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAncestor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAnnotationPresent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isArgBasicTypeChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isAssignableFrom | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBasicTypeChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBefore | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBmpCodePoint | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isBuiltinStreamHandler | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isCCLOverridden | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isCCLOverridden | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isCompatibleWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isConvertibleFrom | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isConvertibleTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isDaylightSavings | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isDefined | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isDefined | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isDigit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isDigit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isEqual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isEqualTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExceptionalStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isExported | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isFinite | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isGuardWithCatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isHidden | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isHighSurrogate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isISOControl | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isISOControl | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isIdentifierIgnorable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isIdentifierIgnorable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isIdeographic | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isInfinite | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isInterrupted | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isInterrupted | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isJavaIdentifierPart | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isJavaIdentifierPart | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isJavaIdentifierStart | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isJavaIdentifierStart | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isJavaLetter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isJavaLetterOrDigit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLeapYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLeapYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLeapYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLegalReplacement | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLetter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLetter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLetterOrDigit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLetterOrDigit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLoop | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLowSurrogate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLowerCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isLowerCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isMethodHandleInvokeName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isMirrored | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isMirrored | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isNaN | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isNestmateOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isOn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isOnSyncQueue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isOnSyncQueue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isOnSyncQueue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isOnSyncQueue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isOpen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isOpen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isOpen | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isOverrideable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isOwnedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isPrimitiveType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isProbablePrime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isQueued | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isQueued | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isQueued | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isQueued | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | isReachable | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | isReflectivelyExported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isReflectivelyExported | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isReflectivelyOpened | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isReflectivelyOpened | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isSameFile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSameFile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isSealed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSelectAlternative | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSpace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSpaceChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSpaceChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isSubclassOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isSupplementaryCodePoint | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupported | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupportedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupportedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupportedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSupportedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSurrogate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSurrogatePair | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isSurrogatePair | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isTitleCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isTitleCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isTryFinally | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isUnicodeIdentifierPart | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isUnicodeIdentifierPart | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isUnicodeIdentifierStart | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isUnicodeIdentifierStart | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isUpperCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isUpperCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isValidCodePoint | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isValidIntValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isValidKey | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isValidOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isValidOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isValidOffset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isValidSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isValidUnicodeLocaleKey | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isValidValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isVarHandleMethodInvokeName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isViewableAs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isViewableAs | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | isWhitespace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isWhitespace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | isWrapperType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | iterate | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | javaIncrement | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | join | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | keySet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lambdaFormEditor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | lastIndexOf | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | lastIndexOfRange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastIndexOfRange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lastIndexOfRange | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | lastUseIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lastUseIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | layers | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lazySet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lazySet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | leafCopyMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | leafCopyMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | length | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | linkCodeToSpeciesData | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | linkSpeciesDataToCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkSpeciesDataToCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkSpeciesDataToCode | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | linkSpeciesDataToCode | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | linkToCallSiteMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkToInterface | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkToInterface | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkToSpecial | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkToSpecial | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkToStatic | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkToStatic | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkToTargetMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkToVirtual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | linkToVirtual | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | list | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | list | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | listFiles | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | listFiles | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | listIterator | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | listIterator | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | listIterator | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | listIterator | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | listIterator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | load | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | load | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | load | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | load | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | load0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | load0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | load0 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | loadClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | loadClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | loadConvert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadConvert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | loadConvert | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | loadConvert | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | loadFromCache | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadFromCache | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | loadFromXML | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadFromXML | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadImpl | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | loadLibrary | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | loadSpecies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadSpecies | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadSpeciesDataFromCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | loadSpeciesDataFromCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | localDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | localDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | localDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | localizedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | lockedPush | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | logIfExportedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | logIfOpenedForIllegalAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | logicalAnd | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logicalAnd | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | logicalOr | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logicalOr | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | logicalXor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | logicalXor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | longBitsToDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | longs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | longs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | longs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | longs | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | longs | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | longs | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | lookup | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lookup | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lookup | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lookup | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lookup | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lookupAllHostAddr | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lookupAny | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lookupPrincipalByGroupName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lookupPrincipalByName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lookupTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lookupTag | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | lowSurrogate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lowestOneBit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | lowestOneBit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mainClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | make | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | makeAccessException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeAccessException | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeArrayType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeEntry | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeImpl | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeImpl | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeImpl | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | makeMethodHandleInvoke | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeMethodHandleInvoke | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeMethodHandleInvoke | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeMethodHandleInvoke | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeMethodHandleInvoke | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | makeNamedType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeNominalGetters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeNominalGetters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeNominalGetters | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeNominalGetters | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeParameterizedType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeParameterizedType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeParameterizedType | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | makeReinvoker | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeSite | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeSite | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeSite | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | makeSite | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | makeSite | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | makeTypeVariable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeTypeVariable | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeVarHandleMethodInvoke | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeVarHandleMethodInvoke | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeVarHandleMethodInvoke | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeVarHandleMethodInvoke | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | makeVarHandleMethodInvoke | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | makeWildcard | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | makeWildcard | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | malformedForLength | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | managedBlock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | map | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | map | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | map | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | mapEquivalents | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapEquivalents | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | mapToDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapToDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapToDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapToInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapToInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapToInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapToLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapToLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapToLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapToObj | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapToObj | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mapToObj | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mark | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mark | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mark | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | maskNull | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | match | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | matchCerts | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | matchCerts | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | matches | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | matches | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | max | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | max | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | max | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | max | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | max | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | max | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | max | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | max | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | maxBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | maybeCustomize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | merge | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | methodHandleInvokeLinkerMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | methodHandleInvokeLinkerMethod | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | methodHandleInvokeLinkerMethod | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | methodSig | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | methodSig | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | methodType | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | min | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | min | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | min | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | min | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | min | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | min | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | min | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | min | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusWeeks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusWeeks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusWeeks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusWeeks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | minusYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mismatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | modInverse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | modPow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | modPow | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | move | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | move | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | move | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | mulAdd | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | mulAdd | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | mulAdd | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | mulAdd | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | mulAdd | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | multipliedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | multipliedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | multipliedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | multiply | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | multiply | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newAsynchronousFileChannel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newAsynchronousFileChannel | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newAsynchronousFileChannel | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newAsynchronousFileChannel | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newAutomaticModule | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newByteChannel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newByteChannel | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newByteChannel | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newCapacity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newCapacity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newConst | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newConstItem | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | newConstructor | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | newConstructorAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newConstructorForExternalization | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newConstructorForSerialization | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newConstructorForSerialization | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newConstructorForSerialization | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newDirectoryStream | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newDirectoryStream | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | newField | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | newFieldAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newFieldAccessor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newFieldItem | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newFieldItem | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newFieldItem | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newFileChannel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newFileChannel | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newFileChannel | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newFileSystem | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newFileSystem | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newFileSystem | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newFileSystem | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newHandle | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | newHandleItem | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newHandleItem | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newHandleItem | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newHandleItem | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newHandleItem | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | newIAE | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newIAE | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newInputStream | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newInputStream | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newInstance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newInstance | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newInteger | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newInvokeDynamic | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newInvokeDynamic | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newInvokeDynamic | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newInvokeDynamic | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newInvokeDynamicItem | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newInvokeDynamicItem | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newInvokeDynamicItem | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newInvokeDynamicItem | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newKeySet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p9 | 9 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p9 | 9 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p10 | 10 | -| file://:0:0:0:0 | newMethod | file://:0:0:0:0 | p10 | 10 | -| file://:0:0:0:0 | newMethodAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newMethodItem | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newMethodItem | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newMethodItem | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | newMethodItem | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | newMethodType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newModule | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newModule | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newModule | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newModule | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newNameType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newNameType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newNameTypeItem | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newNameTypeItem | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newOpenModule | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newOutputStream | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newOutputStream | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newPackage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newSpeciesData | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newSpeciesData | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newStringishItem | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newStringishItem | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newTable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newTaskFor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | newThread | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newThread | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newThread | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newUTF8 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newWrongMethodTypeException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | newWrongMethodTypeException | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | next | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextGetIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextPutIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextTaskFor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nextTransition | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | noneMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | noneMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | noneMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | noneMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | noneOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nonfairTryAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nonfairTryAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nonfairTryAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | not | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | noteLoopLocalTypesForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | noteLoopLocalTypesForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | now | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nullsFirst | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | nullsLast | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | numberOfLeadingZeros | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | numberOfLeadingZeros | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | numberOfTrailingZeros | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | numberOfTrailingZeros | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | objectFieldOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | objectFieldOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | objectFieldOffset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p9 | 9 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p10 | 10 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p10 | 10 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p10 | 10 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p10 | 10 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p10 | 10 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p11 | 11 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p11 | 11 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p11 | 11 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p11 | 11 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p11 | 11 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p12 | 12 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p12 | 12 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p12 | 12 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p12 | 12 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p13 | 13 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p13 | 13 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p13 | 13 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p13 | 13 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p14 | 14 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p14 | 14 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p14 | 14 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p15 | 15 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p15 | 15 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p15 | 15 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p16 | 16 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p16 | 16 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p17 | 17 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p17 | 17 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p18 | 18 | -| file://:0:0:0:0 | of | file://:0:0:0:0 | p19 | 19 | -| file://:0:0:0:0 | of0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofEntries | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofEpochDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofEpochMilli | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofEpochSecond | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | ofHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofHoursMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofHoursMinutes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofHoursMinutesSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofHoursMinutesSeconds | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofHoursMinutesSeconds | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofInstant | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | ofLocal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofLocal | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofLocal | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | ofLocale | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofLocale | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofLocale | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofLocalizedDate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofLocalizedDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofLocalizedDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofLocalizedDateTime | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofLocalizedTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofNanoOfDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofNullable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofNullable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofOffset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofOffset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofPattern | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofPattern | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofPattern | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofSecondOfDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofSeconds | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofStrict | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofStrict | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofStrict | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | ofTotalSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofWeeks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofWithPrefix | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofWithPrefix | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofWithPrefix | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | ofYearDay | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ofYearDay | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | ofYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offer | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offer | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offerFirst | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offerLast | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | offsetByCodePoints | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | offsetByCodePointsImpl | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | offsetByCodePointsImpl | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | offsetByCodePointsImpl | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | offsetByCodePointsImpl | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | offsetByCodePointsImpl | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | onClose | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onClose | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onClose | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onClose | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onClose | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onExceptionalCompletion | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | onMalformedInput | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onMalformedInput | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onTermination | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onTermination | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onUnmappableCharacter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | onUnmappableCharacter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | open | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | openConnection | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | openConnection | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | openConnection | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | openConnection | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | opens | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | opens | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | opens | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | opens | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | opens | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | opens | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | opens | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | opens | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | opens | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | or | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | or | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | or | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | or | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElseGet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElseGet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElseGet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElseGet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElseThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElseThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElseThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | orElseThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | order | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | order | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | overlaps | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | overlaps | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | owns | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | owns | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | owns | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | owns | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | packages | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parameter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parameterConstraint | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parameterSlotDepth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parameterToArgSlot | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parameterType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parameterType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parameterType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parentOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | park | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | park | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | parse | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | parseBest | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseBest | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | parseInt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | parseLong | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseObject | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseParameterAnnotations | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseParameterAnnotations | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseParameterAnnotations | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseURL | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseURL | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseURL | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | parseURL | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | parseUnresolved | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseUnresolved | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | parseUnsignedInt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | parseUnsignedLong | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | peek | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | peek | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | peek | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | peek | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | period | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | period | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | period | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | period | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | period | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | period | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | period | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | period | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | period | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | permuteArgumentsForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | permuteArgumentsForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | permutedTypesMatch | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | permutedTypesMatch | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | permutedTypesMatch | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | permutedTypesMatch | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusWeeks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusWeeks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusWeeks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusWeeks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | plusYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | poll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | poll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | position | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | previousTransition | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | primeToCertainty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | primeToCertainty | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | primitiveLeftShift | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | primitiveLeftShift | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | primitiveLeftShift | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | primitiveRightShift | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | primitiveRightShift | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | primitiveRightShift | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | print | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | printModifiersIfNonzero | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | printf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | printf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | printf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | printf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | printf | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | printf | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | println | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | probablePrime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | probablePrime | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | probeBackupLocations | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | probeBackupLocations | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | probeHomeLocation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | probeHomeLocation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | processQueue | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | prolepticYear | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | provides | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | provides | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | provides | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | push | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | push | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | pushState | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | put | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | put11 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put11 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | put12 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | put12 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putAddress | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putAddress | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putAddress | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putAddress | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putAddress | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | -| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | -| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | -| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | -| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | -| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | -| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | -| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | -| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | -| file://:0:0:0:0 | putAll | file://:0:0:0:0 | from | 0 | -| file://:0:0:0:0 | putAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putBoolean | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putBoolean | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putBooleanOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putBooleanOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putBooleanOpaque | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putBooleanRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putBooleanRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putBooleanRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putBooleanVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putBooleanVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putBooleanVolatile | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putByte | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putByteArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putByteArray | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putByteArray | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putByteOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putByteOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putByteOpaque | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putByteRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putByteRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putByteRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putByteVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putByteVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putByteVolatile | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putChar | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putCharOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putCharOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putCharOpaque | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putCharRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putCharRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putCharRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putCharUnaligned | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | putCharVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putCharVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putCharVolatile | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | putCharsAt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putDouble | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putDoubleOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putDoubleOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putDoubleOpaque | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putDoubleRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putDoubleRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putDoubleRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putDoubleVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putDoubleVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putDoubleVolatile | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putFloat | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putFloatOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putFloatOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putFloatOpaque | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putFloatRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putFloatRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putFloatRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putFloatVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putFloatVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putFloatVolatile | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIfAbsent | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putIntOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIntOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIntOpaque | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putIntRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIntRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIntRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putIntUnaligned | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | putIntVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putIntVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putIntVolatile | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putLongOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLongOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putLongOpaque | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putLongRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLongRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putLongRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putLongUnaligned | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | putLongVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putLongVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putLongVolatile | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putObject | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putObject | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putObjectOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putObjectOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putObjectOpaque | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putObjectRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putObjectRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putObjectRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putObjectVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putObjectVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putObjectVolatile | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putService | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putShort | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putShortOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShortOpaque | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putShortOpaque | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putShortRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShortRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putShortRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putShortUnaligned | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | putShortVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putShortVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putShortVolatile | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putStringAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putStringAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putStringAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putStringAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putTreeVal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putTreeVal | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putTreeVal | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | putUTF8 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putVal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | putVal | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | putVal | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | query | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | queryFrom | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | range | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | rangeClosed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rangeClosed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rangeClosed | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | rangeClosed | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | rangeRefinedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rangeRefinedBy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rangeTo | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reachabilityFence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | read | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | readAttributes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | readByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readConst | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readConst | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | readFully | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | readHashtable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readHashtable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readHashtable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readLabel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readLabel | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readModule | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readModule | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | readNBytes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | readNonProxy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObjectForSerialization | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readObjectNoDataForSerialization | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readPackage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readPackage | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readResolveForSerialization | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readSpeciesDataFromCode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readSymbolicLink | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readUTF8 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | readUTF8 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | readUnsignedShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reads | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reallocateMemory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reallocateMemory | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reconstitutionPut | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recordExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | recoverState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduce | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceEntries | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceEntries | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceEntries | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceEntries | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceEntries | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceEntriesToDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceEntriesToDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceEntriesToDouble | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceEntriesToDouble | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | reduceEntriesToInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceEntriesToInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceEntriesToInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceEntriesToInt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | reduceEntriesToLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceEntriesToLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceEntriesToLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceEntriesToLong | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | reduceKeys | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceKeys | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceKeys | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceKeys | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceKeys | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceKeysToDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceKeysToDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceKeysToDouble | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceKeysToDouble | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | reduceKeysToInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceKeysToInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceKeysToInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceKeysToInt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | reduceKeysToLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceKeysToLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceKeysToLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceKeysToLong | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | reduceToDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceToDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceToDouble | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceToDouble | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | reduceToInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceToInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceToInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceToInt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | reduceToLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceToLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceToLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceToLong | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | reduceValues | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceValues | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceValues | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceValues | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceValues | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceValuesToDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceValuesToDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceValuesToDouble | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceValuesToDouble | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | reduceValuesToInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceValuesToInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceValuesToInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceValuesToInt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | reduceValuesToLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reduceValuesToLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reduceValuesToLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | reduceValuesToLong | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | referenceKindIsConsistentWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | refersTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | refersTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | refersTo | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | refersTo | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reflectConstructor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reflectConstructor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reflectConstructor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reflectConstructor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reflectField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reflectField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reflectField | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reflectField | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | reflectSDField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | refreshVersion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | regionMatches | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | register | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | registerChrono | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | registerCleanup | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | registerValidation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | registerValidation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | registerWorker | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | relativize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | relativize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | release | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | release | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | release | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | release | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | release | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | releaseShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | releaseShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | releaseShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | releaseShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | rem | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | remainder | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | remainderUnsigned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | remainderUnsigned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | remainderUnsigned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | remainderUnsigned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | key | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | remove | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | removeAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeAt | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | removeAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeEntryIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeFirstOccurrence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | removeIf | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | removeLastOccurrence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeMapping | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeMapping | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeRange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeRange | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeRange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | removeRange | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | removeService | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeTreeNode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeUnicodeLocaleAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | removeValueIf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | renameTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | repeat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replace | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceAll | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replaceFirst | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceFirst | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replaceName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replaceNames | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceNames | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replaceNames | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replaceNames | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | replaceNode | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceNode | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replaceNode | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replaceObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceParameterTypes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceParameterTypes | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | replaceParameterTypes | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | replaceWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | replaceWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reportException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | requires | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | requires | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | requires | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | requires | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | requires | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | requires | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | requires | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | requires | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | requires | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | requires | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resizeStamp | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolve | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | resolveAligned | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolveAndBind | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | resolveClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveDate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveOrFail | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveOrFail | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveOrFail | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolveOrFail | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | resolveOrNull | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveOrNull | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveOrNull | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | resolveProlepticMonth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveProlepticMonth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveProlepticMonth | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveProlepticMonth | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveProxyClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveSibling | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveSibling | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYAA | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYAA | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYAA | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYAA | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYAD | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYAD | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYAD | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYAD | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYD | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYD | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYD | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYD | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYMAA | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYMAA | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYMAA | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYMAA | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYMAD | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYMAD | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYMAD | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYMAD | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYMD | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYMD | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYMD | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYMD | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYearOfEra | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYearOfEra | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | resolveYearOfEra | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resolveYearOfEra | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | resources | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | elements | 0 | -| file://:0:0:0:0 | retainAll | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rethrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | retrieveISOCountryCodes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reverse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reverse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reverseBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reverseBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | reverseBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | rotateLeft | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | rotateRight | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | runWorker | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sameFile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sameFile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sameFile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | save | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | save | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | save | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | save | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | saveConvert | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | saveConvert | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | saveConvert | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | search | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | search | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | searchEntries | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | searchEntries | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | searchKeys | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | searchKeys | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | searchValues | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | searchValues | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | element | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | element | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | element | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | element | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | index | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | set | file://:0:0:0:0 | value | 1 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setAccessible | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setAccessible0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAccessible0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAllowUserInteraction | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setAttribute | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setAttribute | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | setAttribute | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | setBeginIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setBit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setBoolean | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setBoolean | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setCachedLambdaForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setCachedLambdaForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setCachedMethodHandle | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setCachedMethodHandle | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setCaseSensitive | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setCharAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setClassAssertionStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setClassAssertionStatus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setCleanerImplAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setConnectTimeout | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setConstructorAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setConstructorAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setConstructorAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setConstructorAccessor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setConstructorAccessor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setContentHandlerFactory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setContextClassLoader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setContextClassLoader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setContextClassLoader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDaemon | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDaemon | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDaemon | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDaemon | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDefault | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDefault | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDefault | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setDefaultAllowUserInteraction | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDefaultAssertionStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDefaultRequestProperty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDefaultRequestProperty | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDefaultUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDefaultUseCaches | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDefaultUseCaches | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDefaultUseCaches | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setDoInput | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDoOutput | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setEndIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setErrorIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExceptionalCompletion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExclusiveOwnerThread | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExclusiveOwnerThread | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExclusiveOwnerThread | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExclusiveOwnerThread | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExclusiveOwnerThread | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExecutable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExecutable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExecutable | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setExtension | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setExtension | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setFileNameMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForkJoinTaskTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setHandle | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setHead | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setHead | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setHead | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setHeadAndPropagate | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setIfModifiedSince | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setIndex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setLangReflectAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setLanguage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setLanguageTag | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setLastModified | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setLength | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setLength | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setLength | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setLocale | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setMaxPriority | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | setMemory | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | setMethodAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setMethodAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setMethodAccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setMethodAccessor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setMethodAccessor | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setMonth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setNativeName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setNativeName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setObjFieldValues | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setObjFieldValues | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setObjectInputFilter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setOpaque | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPackageAssertionStatus | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPackageAssertionStatus | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setParsed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setParsed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setParsedField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setParsedField | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setParsedField | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | setParsedField | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPendingCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPrevRelaxed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPrimFieldValues | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPrimFieldValues | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setPriority | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPriority | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPriority | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPriority0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setPriority0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setProperty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setProperty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setProperty | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setProperty | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRawResult | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setReadTimeout | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setReadable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setReadable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setReadable | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setRegion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRequestProperty | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setRequestProperty | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setScript | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setSeed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setSerialFilter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setSigners | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setSigners | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setSigners | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStackTrace | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setState | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setStrict | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setTabAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setTabAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setTabAt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | setTarget | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setTargetNormal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setTargetVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p7 | 7 | -| file://:0:0:0:0 | setURL | file://:0:0:0:0 | p8 | 8 | -| file://:0:0:0:0 | setURLStreamHandlerFactory | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setUncaughtExceptionHandler | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setUnicodeLocaleKeyword | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setUnicodeLocaleKeyword | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setUseCaches | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | newValue | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setValue | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setVarargs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setVarargs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setVariant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setWritable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setWritable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | setWritable | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | setYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sharedGetParameterAnnotations | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sharedToGenericString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | sharedToString | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | shift | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | shift | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | shift | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | shift | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | shiftLeft | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | shiftRight | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | shl | file://:0:0:0:0 | bitCount | 0 | -| file://:0:0:0:0 | shl | file://:0:0:0:0 | bitCount | 0 | -| file://:0:0:0:0 | shortenSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | shouldBeInitialized | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | shouldParkAfterFailedAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | shr | file://:0:0:0:0 | bitCount | 0 | -| file://:0:0:0:0 | shr | file://:0:0:0:0 | bitCount | 0 | -| file://:0:0:0:0 | signatureArity | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | signatureReturn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | signatureType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | signum | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | signum | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | skip | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | skipBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | skipBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | skipBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sleep | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | slice | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | slice | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | slice | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | slice | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | slowVerifyAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | sort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sorted | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | speciesDataFor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | specificToGenericStringHeader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | specificToGenericStringHeader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | specificToGenericStringHeader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | specificToStringHeader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | specificToStringHeader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | specificToStringHeader | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | split | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | split | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | split | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | spread | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | spreadArgumentsForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | spreadArgumentsForm | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | spreadArgumentsForm | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | spreadArrayChecks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | spreadArrayChecks | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | spreadInvoker | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | start | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | start | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | startEntry | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | startsWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | startsWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | startsWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | startsWith | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | startsWith | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | staticFieldBase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | staticFieldOffset | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | stop0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | stop0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | store | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | store | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | store | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | store | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | store | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | store | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | store | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | store | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | store0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | store0 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | store0 | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | storeToXML | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | stringSize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | stringSize | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subList | file://:0:0:0:0 | fromIndex | 0 | -| file://:0:0:0:0 | subList | file://:0:0:0:0 | fromIndex | 0 | -| file://:0:0:0:0 | subList | file://:0:0:0:0 | fromIndex | 0 | -| file://:0:0:0:0 | subList | file://:0:0:0:0 | fromIndex | 0 | -| file://:0:0:0:0 | subList | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subList | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | subList | file://:0:0:0:0 | toIndex | 1 | -| file://:0:0:0:0 | subList | file://:0:0:0:0 | toIndex | 1 | -| file://:0:0:0:0 | subList | file://:0:0:0:0 | toIndex | 1 | -| file://:0:0:0:0 | subList | file://:0:0:0:0 | toIndex | 1 | -| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | subListRangeCheck | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | subMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subMap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | endIndex | 1 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | -| file://:0:0:0:0 | subSequence | file://:0:0:0:0 | startIndex | 0 | -| file://:0:0:0:0 | subSequenceEquals | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subSequenceEquals | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | subSequenceEquals | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | subSequenceEquals | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | subSequenceEquals | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | submit | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | subpath | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subpath | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | substring | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | subtract | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subtractFrom | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subtractFrom | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subtractFrom | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | subtractFrom | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sum | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sum | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sum | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | sum | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sum | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | sum | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | supportsFileAttributeView | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | supportsFileAttributeView | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | supportsParameter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | system | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | system | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | system | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | system | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | system | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tabAt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tabAt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tailMap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | takeWhile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | takeWhile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | takeWhile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | takeWhile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | test | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | test | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | test | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | test | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | testBit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | thenComparing | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | thenComparing | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | thenComparing | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | thenComparing | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | thenComparingDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | thenComparingInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | thenComparingLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | threadStartFailed | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | threadTerminated | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | throwException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tick | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tick | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tick | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tick | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tick | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tick | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tick | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tick | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tick | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tick | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tickMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tickSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tieBreakOrder | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tieBreakOrder | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | timedJoin | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | timedJoin | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | timedWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | timedWait | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | times | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | to | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toBinaryString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toBinaryString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toChars | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toChars | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | toCodePoint | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toCodePoint | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toEpochSecond | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toExternalForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toFieldDescriptorString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toFormat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toHex | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toHexString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toHexString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toHexString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toHexString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toHours | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toLowerCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toLowerCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toLowerCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toLowerCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toMethodHandle | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toMicros | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toMillis | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toMinutes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toOctalString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toOctalString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toPackage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toPackage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toPackage | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toPackage | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toPrinterParser | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toRealPath | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toResolved | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toResolved | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toSurrogates | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toSurrogates | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toSurrogates | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | toTitleCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toTitleCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toUnsignedLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toUnsignedString | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toUnsignedString0 | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toUnsignedString0 | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | toUpperCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toUpperCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toUpperCase | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toUpperCaseCharArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | toUpperCaseEx | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | topLevelExec | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | topLevelExec | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | topLevelExec | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | traceInterpreter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | traceInterpreter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | traceInterpreter | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | traceInterpreter | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | traceInterpreter | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | transfer | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transfer | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | transferAfterCancelledWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferAfterCancelledWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferAfterCancelledWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferAfterCancelledWait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferForSignal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferForSignal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferForSignal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferForSignal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferFrom | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferFrom | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | transferFrom | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | transferTo | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | transformHelper | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transformHelper | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | transformHelperType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | truncate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | truncate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | truncate | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | truncatedTo | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryAcquireNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryAcquireShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryAcquireSharedNanos | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryAdvance | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryExternalUnpush | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | tryLock | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | tryLockedUnpush | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryReleaseShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryReleaseShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryReleaseShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryReleaseShared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryRemoveAndExec | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | tryUnpush | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | type | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | type | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | typeCheck | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | typeLoadOp | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncaughtException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncaughtException | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncaughtException | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | uncaughtException | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uncheckedThrow | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | unload | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | unload | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | unload | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | unmappableForLength | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | unmaskNull | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | unmaskNull | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | unpark | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | unparkSuccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | unparkSuccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | unparkSuccessor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | until | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | untreeify | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | updateAndGet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | updateAndGet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | updateForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | updateForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | updateVarForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | useCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | useCount | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | useProtocolVersion | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | uses | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | ushr | file://:0:0:0:0 | bitCount | 0 | -| file://:0:0:0:0 | ushr | file://:0:0:0:0 | bitCount | 0 | -| file://:0:0:0:0 | valueFromMethodName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOf | file://:0:0:0:0 | value | 0 | -| file://:0:0:0:0 | valueOfCodePoint | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | varHandleInvokeLinkerMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | varHandleInvokeLinkerMethod | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | varHandleMethodExactInvoker | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | varHandleMethodInvoker | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | verify | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | verify | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | verify | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | verify | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | verify | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | verifyAccess | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | verifyParameters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | verifyParameters | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | version | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | version | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | viewAsType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | viewAsType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | viewAsType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | viewAsType | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | viewAsTypeChecks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | viewAsTypeChecks | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | viewAsTypeChecks | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | viewAsTypeChecks | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | visit | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitArray | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitArrayTypeSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitArrayTypeSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitArrayTypeSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitAttribute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitBooleanSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitBooleanSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitBooleanSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitBottomSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitBottomSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitBottomSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitByteSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitByteSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitByteSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitCharSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitCharSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitCharSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitClassSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitClassTypeSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitClassTypeSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitClassTypeSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitDoubleSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitDoubleSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitDoubleSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitEnum | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitEnum | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitEnum | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitExport | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitExport | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitExport | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitField | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitFieldInsn | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitFloatSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitFloatSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitFloatSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitFormalTypeParameter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitFormalTypeParameter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitFormalTypeParameter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitFrame | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitIincInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitIincInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitIincInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitIincInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitInnerClass | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitInsnAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitIntInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitIntInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitIntInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitIntInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitIntSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitIntSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitIntSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitInvokeDynamicInsn | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitJumpInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitJumpInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitJumpInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitJumpInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitLabel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLabel | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLdcInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLdcInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLineNumber | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLineNumber | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLineNumber | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitLineNumber | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | visitLocalVariable | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p5 | 5 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | visitLocalVariableAnnotation | file://:0:0:0:0 | p6 | 6 | -| file://:0:0:0:0 | visitLongSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLongSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLongSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitLookupSwitchInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitMainClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitMaxs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitMaxs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitMaxs | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitMaxs | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitMethod | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitMethodInsn | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | visitMethodTypeSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitModule | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitMultiANewArrayInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitMultiANewArrayInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitMultiANewArrayInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitMultiANewArrayInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitOpen | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitOpen | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitOpen | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitOuterClass | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitPackage | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitParameter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitParameter | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitParameter | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitParameter | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitParameterAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitProvide | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitProvide | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitRequire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitRequire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitRequire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitShortSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitShortSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitShortSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitSimpleClassTypeSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitSimpleClassTypeSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitSimpleClassTypeSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitSource | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitSource | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitSource | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitSource | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitSubroutine | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitSubroutine | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitSubroutine | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTableSwitchInsn | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTryCatchAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTryCatchBlock | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTypeAnnotation | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | visitTypeInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTypeInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTypeInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTypeInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitTypeVariableSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTypeVariableSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitTypeVariableSignature | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitUse | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitVarInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitVarInsn | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitVarInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitVarInsn | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | visitVoidDescriptor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitVoidDescriptor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitVoidDescriptor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitWildcard | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitWildcard | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | visitWildcard | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wait | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wait | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | walk | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSet | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSet | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSet | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetBoolean | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetBoolean | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetBoolean | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetBooleanAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetBooleanAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetBooleanAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetBooleanAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetBooleanPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetBooleanPlain | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetBooleanPlain | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetBooleanPlain | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetBooleanRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetBooleanRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetBooleanRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetBooleanRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetByte | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetByte | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetByte | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetByteAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetByteAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetByteAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetByteAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetBytePlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetBytePlain | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetBytePlain | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetBytePlain | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetByteRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetByteRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetByteRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetByteRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetChar | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetChar | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetChar | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetCharAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetCharAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetCharAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetCharAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetCharPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetCharPlain | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetCharPlain | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetCharPlain | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetCharRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetCharRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetCharRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetCharRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetDouble | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetDouble | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetDouble | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetDoubleAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetDoubleAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetDoubleAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetDoubleAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetDoublePlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetDoublePlain | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetDoublePlain | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetDoublePlain | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetDoubleRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetDoubleRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetDoubleRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetDoubleRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetFloat | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetFloat | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetFloat | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetFloatAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetFloatAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetFloatAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetFloatAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetFloatPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetFloatPlain | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetFloatPlain | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetFloatPlain | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetFloatRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetFloatRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetFloatRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetFloatRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetInt | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetInt | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetInt | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetIntAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetIntAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetIntAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetIntAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetIntPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetIntPlain | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetIntPlain | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetIntPlain | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetIntRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetIntRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetIntRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetIntRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetLong | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetLong | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetLong | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetLongAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetLongAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetLongAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetLongAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetLongPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetLongPlain | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetLongPlain | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetLongPlain | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetLongRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetLongRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetLongRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetLongRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetObject | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetObject | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetObject | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetObjectAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetObjectAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetObjectAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetObjectAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetObjectPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetObjectPlain | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetObjectPlain | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetObjectPlain | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetObjectRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetObjectRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetObjectRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetObjectRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetPlain | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetPlain | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetShort | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetShort | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetShort | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetShortAcquire | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetShortAcquire | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetShortAcquire | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetShortAcquire | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetShortPlain | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetShortPlain | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetShortPlain | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetShortPlain | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetShortRelease | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetShortRelease | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetShortRelease | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | weakCompareAndSetShortRelease | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | weakCompareAndSetVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetVolatile | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | weakCompareAndSetVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | weakCompareAndSetVolatile | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | with | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | withChronology | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withConstraint | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withDayOfMonth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withDayOfMonth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withDayOfMonth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withDayOfMonth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withDayOfYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withDayOfYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withDayOfYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withDayOfYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withDays | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withDecimalSeparator | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withDecimalStyle | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withHour | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withHour | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withHour | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withHour | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withHour | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withInitial | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withInitial | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withInternalMemberName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withInternalMemberName | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withInternalMemberName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | withInternalMemberName | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | withLocale | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withMinute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withMinute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withMinute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withMinute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withMinute | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withMonth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withMonth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withMonth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withMonth | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withMonths | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withNano | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withNano | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withNano | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withNano | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withNano | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withNanos | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withNegativeSign | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withOffsetSameInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withOffsetSameInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withOffsetSameLocal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withOffsetSameLocal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withOptional | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withPositiveSign | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withResolverFields | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withResolverFields | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withResolverStyle | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withSecond | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withSeconds | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withVarargs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withVarargs | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withYear | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withYears | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withZeroDigit | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withZone | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withZoneSameInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withZoneSameInstant | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withZoneSameLocal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | withZoneSameLocal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | wrap | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | wrapperType | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p2 | 2 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p3 | 3 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | write | file://:0:0:0:0 | p4 | 4 | -| file://:0:0:0:0 | writeBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeBoolean | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeByte | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeBytes | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeChar | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeChars | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeClassDescriptor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeComments | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeComments | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | writeDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeDouble | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeExternal | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeFloat | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeHashtable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeHashtable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeHashtable | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeInt | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeLong | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeNonProxy | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObject | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObjectForSerialization | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeObjectOverride | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeReplaceForSerialization | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeShort | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeTypeString | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeUTF | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeUTF | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeUTF | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | writeUnshared | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | xor | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | xor | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | xor | file://:0:0:0:0 | other | 0 | -| file://:0:0:0:0 | xor | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | zero | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | zeroForm | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p0 | 0 | -| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p1 | 1 | -| file://:0:0:0:0 | zonedDateTime | file://:0:0:0:0 | p1 | 1 | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:26:4:31 | x | 0 | | methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:34:4:39 | y | 1 | | methods2.kt:7:1:10:1 | equals | methods2.kt:7:1:10:1 | other | 0 | diff --git a/java/ql/test/kotlin/library-tests/methods/parameters.ql b/java/ql/test/kotlin/library-tests/methods/parameters.ql index 63c2a1ca0b7..c24bb8946c7 100644 --- a/java/ql/test/kotlin/library-tests/methods/parameters.ql +++ b/java/ql/test/kotlin/library-tests/methods/parameters.ql @@ -2,4 +2,5 @@ import java from Method m, Parameter p, int i where m.getParameter(i) = p +and m.fromSource() select m, p, i diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected index 21910084034..c6de39d2052 100644 --- a/java/ql/test/kotlin/library-tests/multiple_files/classes.expected +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.expected @@ -4,1315 +4,3 @@ | file2.kt:2:1:2:16 | Class2 | Class2 | | file3.kt:0:0:0:0 | MyJvmName | MyJvmName | | file3.kt:3:1:3:16 | Class3 | Class3 | -| file://:0:0:0:0 | AbstractChronology | java.time.chrono.AbstractChronology | -| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | -| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | -| file://:0:0:0:0 | AbstractCollection | java.util.AbstractCollection | -| file://:0:0:0:0 | AbstractExecutorService | java.util.concurrent.AbstractExecutorService | -| file://:0:0:0:0 | AbstractInterruptibleChannel | java.nio.channels.spi.AbstractInterruptibleChannel | -| file://:0:0:0:0 | AbstractList | java.util.AbstractList | -| file://:0:0:0:0 | AbstractList | java.util.AbstractList | -| file://:0:0:0:0 | AbstractList | java.util.AbstractList | -| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | -| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | -| file://:0:0:0:0 | AbstractMap | java.util.AbstractMap | -| file://:0:0:0:0 | AbstractOwnableSynchronizer | java.util.concurrent.locks.AbstractOwnableSynchronizer | -| file://:0:0:0:0 | AbstractQueuedSynchronizer | java.util.concurrent.locks.AbstractQueuedSynchronizer | -| file://:0:0:0:0 | AbstractRepository | sun.reflect.generics.repository.AbstractRepository | -| file://:0:0:0:0 | AbstractRepository | sun.reflect.generics.repository.AbstractRepository | -| file://:0:0:0:0 | AbstractSet | java.util.AbstractSet | -| file://:0:0:0:0 | AbstractSet | java.util.AbstractSet | -| file://:0:0:0:0 | AbstractStringBuilder | java.lang.AbstractStringBuilder | -| file://:0:0:0:0 | AccessControlContext | java.security.AccessControlContext | -| file://:0:0:0:0 | AccessDescriptor | java.lang.invoke.AccessDescriptor | -| file://:0:0:0:0 | AccessMode | java.lang.invoke.AccessMode | -| file://:0:0:0:0 | AccessMode | java.nio.file.AccessMode | -| file://:0:0:0:0 | AccessType | java.lang.invoke.AccessType | -| file://:0:0:0:0 | AccessibleObject | java.lang.reflect.AccessibleObject | -| file://:0:0:0:0 | AdaptedCallable | java.util.concurrent.AdaptedCallable | -| file://:0:0:0:0 | AdaptedRunnable | java.util.concurrent.AdaptedRunnable | -| file://:0:0:0:0 | AdaptedRunnableAction | java.util.concurrent.AdaptedRunnableAction | -| file://:0:0:0:0 | AnnotationType | sun.reflect.annotation.AnnotationType | -| file://:0:0:0:0 | AnnotationVisitor | jdk.internal.org.objectweb.asm.AnnotationVisitor | -| file://:0:0:0:0 | Any | kotlin.Any | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | Array | kotlin.Array | -| file://:0:0:0:0 | ArrayIndexOutOfBoundsException | java.lang.ArrayIndexOutOfBoundsException | -| file://:0:0:0:0 | ArrayList | java.util.ArrayList | -| file://:0:0:0:0 | ArrayList | java.util.ArrayList | -| file://:0:0:0:0 | ArrayList | java.util.ArrayList | -| file://:0:0:0:0 | ArrayListSpliterator | java.util.ArrayListSpliterator | -| file://:0:0:0:0 | ArrayListSpliterator | java.util.ArrayListSpliterator | -| file://:0:0:0:0 | ArrayTypeSignature | sun.reflect.generics.tree.ArrayTypeSignature | -| file://:0:0:0:0 | AsynchronousFileChannel | java.nio.channels.AsynchronousFileChannel | -| file://:0:0:0:0 | AtomicInteger | java.util.concurrent.atomic.AtomicInteger | -| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | -| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | -| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | -| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | -| file://:0:0:0:0 | AtomicReference | java.util.concurrent.atomic.AtomicReference | -| file://:0:0:0:0 | Attribute | java.text.Attribute | -| file://:0:0:0:0 | Attribute | jdk.internal.org.objectweb.asm.Attribute | -| file://:0:0:0:0 | AuthPermission | javax.security.auth.AuthPermission | -| file://:0:0:0:0 | AuthPermissionHolder | javax.security.auth.AuthPermissionHolder | -| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | -| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | -| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | -| file://:0:0:0:0 | BaseIterator | java.util.concurrent.BaseIterator | -| file://:0:0:0:0 | BaseLocale | sun.util.locale.BaseLocale | -| file://:0:0:0:0 | BasicPermission | java.security.BasicPermission | -| file://:0:0:0:0 | BasicType | java.lang.invoke.BasicType | -| file://:0:0:0:0 | BigInteger | java.math.BigInteger | -| file://:0:0:0:0 | Boolean | java.lang.Boolean | -| file://:0:0:0:0 | Boolean | kotlin.Boolean | -| file://:0:0:0:0 | BooleanSignature | sun.reflect.generics.tree.BooleanSignature | -| file://:0:0:0:0 | BottomSignature | sun.reflect.generics.tree.BottomSignature | -| file://:0:0:0:0 | BoundMethodHandle | java.lang.invoke.BoundMethodHandle | -| file://:0:0:0:0 | Buffer | java.nio.Buffer | -| file://:0:0:0:0 | BufferedWriter | java.io.BufferedWriter | -| file://:0:0:0:0 | Builder | java.lang.module.Builder | -| file://:0:0:0:0 | Builder | java.util.Builder | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | BulkTask | java.util.concurrent.BulkTask | -| file://:0:0:0:0 | Byte | java.lang.Byte | -| file://:0:0:0:0 | Byte | kotlin.Byte | -| file://:0:0:0:0 | ByteArray | kotlin.ByteArray | -| file://:0:0:0:0 | ByteBuffer | java.nio.ByteBuffer | -| file://:0:0:0:0 | ByteIterator | kotlin.collections.ByteIterator | -| file://:0:0:0:0 | ByteOrder | java.nio.ByteOrder | -| file://:0:0:0:0 | ByteSignature | sun.reflect.generics.tree.ByteSignature | -| file://:0:0:0:0 | ByteVector | jdk.internal.org.objectweb.asm.ByteVector | -| file://:0:0:0:0 | CallSite | java.lang.invoke.CallSite | -| file://:0:0:0:0 | CaseInsensitiveChar | sun.util.locale.CaseInsensitiveChar | -| file://:0:0:0:0 | CaseInsensitiveString | sun.util.locale.CaseInsensitiveString | -| file://:0:0:0:0 | Category | java.util.Category | -| file://:0:0:0:0 | CertPath | java.security.cert.CertPath | -| file://:0:0:0:0 | CertPathRep | java.security.cert.CertPathRep | -| file://:0:0:0:0 | Certificate | java.security.cert.Certificate | -| file://:0:0:0:0 | CertificateRep | java.security.cert.CertificateRep | -| file://:0:0:0:0 | Char | kotlin.Char | -| file://:0:0:0:0 | CharArray | kotlin.CharArray | -| file://:0:0:0:0 | CharBuffer | java.nio.CharBuffer | -| file://:0:0:0:0 | CharIterator | kotlin.collections.CharIterator | -| file://:0:0:0:0 | CharProgression | kotlin.ranges.CharProgression | -| file://:0:0:0:0 | CharRange | kotlin.ranges.CharRange | -| file://:0:0:0:0 | CharSignature | sun.reflect.generics.tree.CharSignature | -| file://:0:0:0:0 | Character | java.lang.Character | -| file://:0:0:0:0 | Characteristics | java.util.stream.Characteristics | -| file://:0:0:0:0 | Charset | java.nio.charset.Charset | -| file://:0:0:0:0 | CharsetDecoder | java.nio.charset.CharsetDecoder | -| file://:0:0:0:0 | CharsetEncoder | java.nio.charset.CharsetEncoder | -| file://:0:0:0:0 | ChronoField | java.time.temporal.ChronoField | -| file://:0:0:0:0 | ChronoUnit | java.time.temporal.ChronoUnit | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | Class | java.lang.Class | -| file://:0:0:0:0 | ClassDataSlot | java.io.ClassDataSlot | -| file://:0:0:0:0 | ClassLoader | java.lang.ClassLoader | -| file://:0:0:0:0 | ClassNotFoundException | java.lang.ClassNotFoundException | -| file://:0:0:0:0 | ClassReader | jdk.internal.org.objectweb.asm.ClassReader | -| file://:0:0:0:0 | ClassSignature | sun.reflect.generics.tree.ClassSignature | -| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | -| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | -| file://:0:0:0:0 | ClassSpecializer | java.lang.invoke.ClassSpecializer | -| file://:0:0:0:0 | ClassTypeSignature | sun.reflect.generics.tree.ClassTypeSignature | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValue | java.lang.ClassValue | -| file://:0:0:0:0 | ClassValueMap | java.lang.ClassValueMap | -| file://:0:0:0:0 | ClassVisitor | jdk.internal.org.objectweb.asm.ClassVisitor | -| file://:0:0:0:0 | ClassWriter | jdk.internal.org.objectweb.asm.ClassWriter | -| file://:0:0:0:0 | ClassicFormat | java.time.format.ClassicFormat | -| file://:0:0:0:0 | Cleaner | java.lang.ref.Cleaner | -| file://:0:0:0:0 | CleanerCleanable | jdk.internal.ref.CleanerCleanable | -| file://:0:0:0:0 | CleanerImpl | jdk.internal.ref.CleanerImpl | -| file://:0:0:0:0 | Clock | java.time.Clock | -| file://:0:0:0:0 | CodeSigner | java.security.CodeSigner | -| file://:0:0:0:0 | CodeSource | java.security.CodeSource | -| file://:0:0:0:0 | CoderResult | java.nio.charset.CoderResult | -| file://:0:0:0:0 | CodingErrorAction | java.nio.charset.CodingErrorAction | -| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | -| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | -| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | -| file://:0:0:0:0 | CollectionView | java.util.concurrent.CollectionView | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Companion | kotlin.ranges.Companion | -| file://:0:0:0:0 | Compiled | java.lang.invoke.Compiled | -| file://:0:0:0:0 | CompositePrinterParser | java.time.format.CompositePrinterParser | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentHashMap | java.util.concurrent.ConcurrentHashMap | -| file://:0:0:0:0 | ConcurrentWeakInternSet | java.lang.invoke.ConcurrentWeakInternSet | -| file://:0:0:0:0 | ConcurrentWeakInternSet | java.lang.invoke.ConcurrentWeakInternSet | -| file://:0:0:0:0 | ConditionObject | java.util.concurrent.locks.ConditionObject | -| file://:0:0:0:0 | Config | java.io.Config | -| file://:0:0:0:0 | Configuration | java.lang.module.Configuration | -| file://:0:0:0:0 | ConstantPool | jdk.internal.reflect.ConstantPool | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | Constructor | java.lang.reflect.Constructor | -| file://:0:0:0:0 | ConstructorRepository | sun.reflect.generics.repository.ConstructorRepository | -| file://:0:0:0:0 | ContentHandler | java.net.ContentHandler | -| file://:0:0:0:0 | Controller | java.lang.Controller | -| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | -| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | -| file://:0:0:0:0 | CountedCompleter | java.util.concurrent.CountedCompleter | -| file://:0:0:0:0 | CounterCell | java.util.concurrent.CounterCell | -| file://:0:0:0:0 | Date | java.util.Date | -| file://:0:0:0:0 | DateTimeFormatter | java.time.format.DateTimeFormatter | -| file://:0:0:0:0 | DateTimeParseContext | java.time.format.DateTimeParseContext | -| file://:0:0:0:0 | DateTimePrintContext | java.time.format.DateTimePrintContext | -| file://:0:0:0:0 | DayOfWeek | java.time.DayOfWeek | -| file://:0:0:0:0 | Debug | sun.security.util.Debug | -| file://:0:0:0:0 | DecimalStyle | java.time.format.DecimalStyle | -| file://:0:0:0:0 | Dictionary | java.util.Dictionary | -| file://:0:0:0:0 | Dictionary | java.util.Dictionary | -| file://:0:0:0:0 | Double | java.lang.Double | -| file://:0:0:0:0 | Double | kotlin.Double | -| file://:0:0:0:0 | DoubleArray | kotlin.DoubleArray | -| file://:0:0:0:0 | DoubleBuffer | java.nio.DoubleBuffer | -| file://:0:0:0:0 | DoubleIterator | kotlin.collections.DoubleIterator | -| file://:0:0:0:0 | DoubleSignature | sun.reflect.generics.tree.DoubleSignature | -| file://:0:0:0:0 | DoubleSummaryStatistics | java.util.DoubleSummaryStatistics | -| file://:0:0:0:0 | Duration | java.time.Duration | -| file://:0:0:0:0 | Edge | jdk.internal.org.objectweb.asm.Edge | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.lang.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | Entry | java.util.Entry | -| file://:0:0:0:0 | EntryIterator | java.util.concurrent.EntryIterator | -| file://:0:0:0:0 | EntrySetView | java.util.concurrent.EntrySetView | -| file://:0:0:0:0 | EntrySpliterator | java.util.EntrySpliterator | -| file://:0:0:0:0 | EntrySpliterator | java.util.EntrySpliterator | -| file://:0:0:0:0 | EntrySpliterator | java.util.concurrent.EntrySpliterator | -| file://:0:0:0:0 | EntrySpliterator | java.util.concurrent.EntrySpliterator | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | java.lang.Enum | -| file://:0:0:0:0 | Enum | kotlin.Enum | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | EnumSet | java.util.EnumSet | -| file://:0:0:0:0 | Exception | java.lang.Exception | -| file://:0:0:0:0 | ExceptionNode | java.util.concurrent.ExceptionNode | -| file://:0:0:0:0 | Executable | java.lang.reflect.Executable | -| file://:0:0:0:0 | Exports | java.lang.module.Exports | -| file://:0:0:0:0 | ExtendedOption | java.lang.ExtendedOption | -| file://:0:0:0:0 | Extension | sun.util.locale.Extension | -| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | -| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | -| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | -| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | -| file://:0:0:0:0 | Factory | java.lang.invoke.Factory | -| file://:0:0:0:0 | FairSync | java.util.concurrent.locks.FairSync | -| file://:0:0:0:0 | Field | java.lang.reflect.Field | -| file://:0:0:0:0 | Field | java.text.Field | -| file://:0:0:0:0 | FieldPosition | java.text.FieldPosition | -| file://:0:0:0:0 | FieldVisitor | jdk.internal.org.objectweb.asm.FieldVisitor | -| file://:0:0:0:0 | FieldWriter | jdk.internal.org.objectweb.asm.FieldWriter | -| file://:0:0:0:0 | File | java.io.File | -| file://:0:0:0:0 | FileChannel | java.nio.channels.FileChannel | -| file://:0:0:0:0 | FileDescriptor | java.io.FileDescriptor | -| file://:0:0:0:0 | FileLock | java.nio.channels.FileLock | -| file://:0:0:0:0 | FileStore | java.nio.file.FileStore | -| file://:0:0:0:0 | FileSystem | java.nio.file.FileSystem | -| file://:0:0:0:0 | FileSystemProvider | java.nio.file.spi.FileSystemProvider | -| file://:0:0:0:0 | FileTime | java.nio.file.attribute.FileTime | -| file://:0:0:0:0 | FilterOutputStream | java.io.FilterOutputStream | -| file://:0:0:0:0 | FilterValues | java.io.FilterValues | -| file://:0:0:0:0 | FilteringMode | java.util.FilteringMode | -| file://:0:0:0:0 | FixedClock | java.time.FixedClock | -| file://:0:0:0:0 | Float | java.lang.Float | -| file://:0:0:0:0 | Float | kotlin.Float | -| file://:0:0:0:0 | FloatArray | kotlin.FloatArray | -| file://:0:0:0:0 | FloatBuffer | java.nio.FloatBuffer | -| file://:0:0:0:0 | FloatIterator | kotlin.collections.FloatIterator | -| file://:0:0:0:0 | FloatSignature | sun.reflect.generics.tree.FloatSignature | -| file://:0:0:0:0 | ForEachEntryTask | java.util.concurrent.ForEachEntryTask | -| file://:0:0:0:0 | ForEachKeyTask | java.util.concurrent.ForEachKeyTask | -| file://:0:0:0:0 | ForEachMappingTask | java.util.concurrent.ForEachMappingTask | -| file://:0:0:0:0 | ForEachTransformedEntryTask | java.util.concurrent.ForEachTransformedEntryTask | -| file://:0:0:0:0 | ForEachTransformedKeyTask | java.util.concurrent.ForEachTransformedKeyTask | -| file://:0:0:0:0 | ForEachTransformedMappingTask | java.util.concurrent.ForEachTransformedMappingTask | -| file://:0:0:0:0 | ForEachTransformedValueTask | java.util.concurrent.ForEachTransformedValueTask | -| file://:0:0:0:0 | ForEachValueTask | java.util.concurrent.ForEachValueTask | -| file://:0:0:0:0 | ForkJoinPool | java.util.concurrent.ForkJoinPool | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinTask | java.util.concurrent.ForkJoinTask | -| file://:0:0:0:0 | ForkJoinWorkerThread | java.util.concurrent.ForkJoinWorkerThread | -| file://:0:0:0:0 | FormalTypeParameter | sun.reflect.generics.tree.FormalTypeParameter | -| file://:0:0:0:0 | Format | java.text.Format | -| file://:0:0:0:0 | FormatStyle | java.time.format.FormatStyle | -| file://:0:0:0:0 | ForwardingNode | java.util.concurrent.ForwardingNode | -| file://:0:0:0:0 | Frame | jdk.internal.org.objectweb.asm.Frame | -| file://:0:0:0:0 | GenericDeclRepository | sun.reflect.generics.repository.GenericDeclRepository | -| file://:0:0:0:0 | GenericDeclRepository | sun.reflect.generics.repository.GenericDeclRepository | -| file://:0:0:0:0 | GetField | java.io.GetField | -| file://:0:0:0:0 | GetReflectionFactoryAction | jdk.internal.reflect.GetReflectionFactoryAction | -| file://:0:0:0:0 | Global | java.io.Global | -| file://:0:0:0:0 | Handle | jdk.internal.org.objectweb.asm.Handle | -| file://:0:0:0:0 | Hashtable | java.util.Hashtable | -| file://:0:0:0:0 | Hashtable | java.util.Hashtable | -| file://:0:0:0:0 | Hashtable | java.util.Hashtable | -| file://:0:0:0:0 | Hashtable | java.util.Hashtable | -| file://:0:0:0:0 | Hidden | java.lang.invoke.Hidden | -| file://:0:0:0:0 | IOException | java.io.IOException | -| file://:0:0:0:0 | Identity | java.lang.Identity | -| file://:0:0:0:0 | IllegalAccessException | java.lang.IllegalAccessException | -| file://:0:0:0:0 | IllegalArgumentException | java.lang.IllegalArgumentException | -| file://:0:0:0:0 | IndexOutOfBoundsException | java.lang.IndexOutOfBoundsException | -| file://:0:0:0:0 | InetAddress | java.net.InetAddress | -| file://:0:0:0:0 | InetAddressHolder | java.net.InetAddressHolder | -| file://:0:0:0:0 | InnocuousForkJoinWorkerThread | java.util.concurrent.InnocuousForkJoinWorkerThread | -| file://:0:0:0:0 | InnocuousThreadFactory | jdk.internal.ref.InnocuousThreadFactory | -| file://:0:0:0:0 | InputStream | java.io.InputStream | -| file://:0:0:0:0 | Instant | java.time.Instant | -| file://:0:0:0:0 | Int | kotlin.Int | -| file://:0:0:0:0 | IntArray | kotlin.IntArray | -| file://:0:0:0:0 | IntBuffer | java.nio.IntBuffer | -| file://:0:0:0:0 | IntIterator | kotlin.collections.IntIterator | -| file://:0:0:0:0 | IntProgression | kotlin.ranges.IntProgression | -| file://:0:0:0:0 | IntRange | kotlin.ranges.IntRange | -| file://:0:0:0:0 | IntSignature | sun.reflect.generics.tree.IntSignature | -| file://:0:0:0:0 | IntSummaryStatistics | java.util.IntSummaryStatistics | -| file://:0:0:0:0 | Integer | java.lang.Integer | -| file://:0:0:0:0 | InterfaceAddress | java.net.InterfaceAddress | -| file://:0:0:0:0 | Intrinsic | java.lang.invoke.Intrinsic | -| file://:0:0:0:0 | Invokers | java.lang.invoke.Invokers | -| file://:0:0:0:0 | IsoChronology | java.time.chrono.IsoChronology | -| file://:0:0:0:0 | IsoCountryCode | java.util.IsoCountryCode | -| file://:0:0:0:0 | IsoEra | java.time.chrono.IsoEra | -| file://:0:0:0:0 | Item | jdk.internal.org.objectweb.asm.Item | -| file://:0:0:0:0 | Key | java.security.Key | -| file://:0:0:0:0 | KeyIterator | java.util.concurrent.KeyIterator | -| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | -| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | -| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | -| file://:0:0:0:0 | KeySetView | java.util.concurrent.KeySetView | -| file://:0:0:0:0 | KeySpliterator | java.util.KeySpliterator | -| file://:0:0:0:0 | KeySpliterator | java.util.KeySpliterator | -| file://:0:0:0:0 | KeySpliterator | java.util.concurrent.KeySpliterator | -| file://:0:0:0:0 | KeySpliterator | java.util.concurrent.KeySpliterator | -| file://:0:0:0:0 | Kind | java.lang.invoke.Kind | -| file://:0:0:0:0 | Label | jdk.internal.org.objectweb.asm.Label | -| file://:0:0:0:0 | LambdaForm | java.lang.invoke.LambdaForm | -| file://:0:0:0:0 | LambdaFormEditor | java.lang.invoke.LambdaFormEditor | -| file://:0:0:0:0 | LanguageRange | java.util.LanguageRange | -| file://:0:0:0:0 | Level | java.lang.Level | -| file://:0:0:0:0 | LineReader | java.util.LineReader | -| file://:0:0:0:0 | LinkOption | java.nio.file.LinkOption | -| file://:0:0:0:0 | LocalDate | java.time.LocalDate | -| file://:0:0:0:0 | LocalDateTime | java.time.LocalDateTime | -| file://:0:0:0:0 | LocalTime | java.time.LocalTime | -| file://:0:0:0:0 | Locale | java.util.Locale | -| file://:0:0:0:0 | LocaleExtensions | sun.util.locale.LocaleExtensions | -| file://:0:0:0:0 | Long | java.lang.Long | -| file://:0:0:0:0 | Long | kotlin.Long | -| file://:0:0:0:0 | LongArray | kotlin.LongArray | -| file://:0:0:0:0 | LongBuffer | java.nio.LongBuffer | -| file://:0:0:0:0 | LongIterator | kotlin.collections.LongIterator | -| file://:0:0:0:0 | LongProgression | kotlin.ranges.LongProgression | -| file://:0:0:0:0 | LongRange | kotlin.ranges.LongRange | -| file://:0:0:0:0 | LongSignature | sun.reflect.generics.tree.LongSignature | -| file://:0:0:0:0 | LongSummaryStatistics | java.util.LongSummaryStatistics | -| file://:0:0:0:0 | MapEntry | java.util.concurrent.MapEntry | -| file://:0:0:0:0 | MapMode | java.nio.channels.MapMode | -| file://:0:0:0:0 | MapReduceEntriesTask | java.util.concurrent.MapReduceEntriesTask | -| file://:0:0:0:0 | MapReduceEntriesTask | java.util.concurrent.MapReduceEntriesTask | -| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | java.util.concurrent.MapReduceEntriesToDoubleTask | -| file://:0:0:0:0 | MapReduceEntriesToDoubleTask | java.util.concurrent.MapReduceEntriesToDoubleTask | -| file://:0:0:0:0 | MapReduceEntriesToIntTask | java.util.concurrent.MapReduceEntriesToIntTask | -| file://:0:0:0:0 | MapReduceEntriesToIntTask | java.util.concurrent.MapReduceEntriesToIntTask | -| file://:0:0:0:0 | MapReduceEntriesToLongTask | java.util.concurrent.MapReduceEntriesToLongTask | -| file://:0:0:0:0 | MapReduceEntriesToLongTask | java.util.concurrent.MapReduceEntriesToLongTask | -| file://:0:0:0:0 | MapReduceKeysTask | java.util.concurrent.MapReduceKeysTask | -| file://:0:0:0:0 | MapReduceKeysTask | java.util.concurrent.MapReduceKeysTask | -| file://:0:0:0:0 | MapReduceKeysToDoubleTask | java.util.concurrent.MapReduceKeysToDoubleTask | -| file://:0:0:0:0 | MapReduceKeysToDoubleTask | java.util.concurrent.MapReduceKeysToDoubleTask | -| file://:0:0:0:0 | MapReduceKeysToIntTask | java.util.concurrent.MapReduceKeysToIntTask | -| file://:0:0:0:0 | MapReduceKeysToIntTask | java.util.concurrent.MapReduceKeysToIntTask | -| file://:0:0:0:0 | MapReduceKeysToLongTask | java.util.concurrent.MapReduceKeysToLongTask | -| file://:0:0:0:0 | MapReduceKeysToLongTask | java.util.concurrent.MapReduceKeysToLongTask | -| file://:0:0:0:0 | MapReduceMappingsTask | java.util.concurrent.MapReduceMappingsTask | -| file://:0:0:0:0 | MapReduceMappingsTask | java.util.concurrent.MapReduceMappingsTask | -| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | java.util.concurrent.MapReduceMappingsToDoubleTask | -| file://:0:0:0:0 | MapReduceMappingsToDoubleTask | java.util.concurrent.MapReduceMappingsToDoubleTask | -| file://:0:0:0:0 | MapReduceMappingsToIntTask | java.util.concurrent.MapReduceMappingsToIntTask | -| file://:0:0:0:0 | MapReduceMappingsToIntTask | java.util.concurrent.MapReduceMappingsToIntTask | -| file://:0:0:0:0 | MapReduceMappingsToLongTask | java.util.concurrent.MapReduceMappingsToLongTask | -| file://:0:0:0:0 | MapReduceMappingsToLongTask | java.util.concurrent.MapReduceMappingsToLongTask | -| file://:0:0:0:0 | MapReduceValuesTask | java.util.concurrent.MapReduceValuesTask | -| file://:0:0:0:0 | MapReduceValuesTask | java.util.concurrent.MapReduceValuesTask | -| file://:0:0:0:0 | MapReduceValuesToDoubleTask | java.util.concurrent.MapReduceValuesToDoubleTask | -| file://:0:0:0:0 | MapReduceValuesToDoubleTask | java.util.concurrent.MapReduceValuesToDoubleTask | -| file://:0:0:0:0 | MapReduceValuesToIntTask | java.util.concurrent.MapReduceValuesToIntTask | -| file://:0:0:0:0 | MapReduceValuesToIntTask | java.util.concurrent.MapReduceValuesToIntTask | -| file://:0:0:0:0 | MapReduceValuesToLongTask | java.util.concurrent.MapReduceValuesToLongTask | -| file://:0:0:0:0 | MapReduceValuesToLongTask | java.util.concurrent.MapReduceValuesToLongTask | -| file://:0:0:0:0 | MappedByteBuffer | java.nio.MappedByteBuffer | -| file://:0:0:0:0 | MemberName | java.lang.invoke.MemberName | -| file://:0:0:0:0 | Method | java.lang.reflect.Method | -| file://:0:0:0:0 | MethodHandle | java.lang.invoke.MethodHandle | -| file://:0:0:0:0 | MethodRepository | sun.reflect.generics.repository.MethodRepository | -| file://:0:0:0:0 | MethodType | java.lang.invoke.MethodType | -| file://:0:0:0:0 | MethodTypeForm | java.lang.invoke.MethodTypeForm | -| file://:0:0:0:0 | MethodTypeSignature | sun.reflect.generics.tree.MethodTypeSignature | -| file://:0:0:0:0 | MethodVisitor | jdk.internal.org.objectweb.asm.MethodVisitor | -| file://:0:0:0:0 | MethodWriter | jdk.internal.org.objectweb.asm.MethodWriter | -| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | -| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | -| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | -| file://:0:0:0:0 | Modifier | java.lang.module.Modifier | -| file://:0:0:0:0 | Module | java.lang.Module | -| file://:0:0:0:0 | ModuleDescriptor | java.lang.module.ModuleDescriptor | -| file://:0:0:0:0 | ModuleLayer | java.lang.ModuleLayer | -| file://:0:0:0:0 | ModuleReference | java.lang.module.ModuleReference | -| file://:0:0:0:0 | ModuleVisitor | jdk.internal.org.objectweb.asm.ModuleVisitor | -| file://:0:0:0:0 | Month | java.time.Month | -| file://:0:0:0:0 | Name | java.lang.invoke.Name | -| file://:0:0:0:0 | NamedFunction | java.lang.invoke.NamedFunction | -| file://:0:0:0:0 | NamedPackage | java.lang.NamedPackage | -| file://:0:0:0:0 | NativeLibrary | java.lang.NativeLibrary | -| file://:0:0:0:0 | NestHost | jdk.internal.org.objectweb.asm.NestHost | -| file://:0:0:0:0 | NestMembers | jdk.internal.org.objectweb.asm.NestMembers | -| file://:0:0:0:0 | NetworkInterface | java.net.NetworkInterface | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.Node | -| file://:0:0:0:0 | Node | java.util.concurrent.locks.Node | -| file://:0:0:0:0 | NonfairSync | java.util.concurrent.locks.NonfairSync | -| file://:0:0:0:0 | Nothing | kotlin.Nothing | -| file://:0:0:0:0 | Number | java.lang.Number | -| file://:0:0:0:0 | Number | kotlin.Number | -| file://:0:0:0:0 | Object | java.lang.Object | -| file://:0:0:0:0 | ObjectInputStream | java.io.ObjectInputStream | -| file://:0:0:0:0 | ObjectOutputStream | java.io.ObjectOutputStream | -| file://:0:0:0:0 | ObjectStreamClass | java.io.ObjectStreamClass | -| file://:0:0:0:0 | ObjectStreamException | java.io.ObjectStreamException | -| file://:0:0:0:0 | ObjectStreamField | java.io.ObjectStreamField | -| file://:0:0:0:0 | OffsetClock | java.time.OffsetClock | -| file://:0:0:0:0 | OffsetDateTime | java.time.OffsetDateTime | -| file://:0:0:0:0 | OffsetTime | java.time.OffsetTime | -| file://:0:0:0:0 | Opens | java.lang.module.Opens | -| file://:0:0:0:0 | Option | java.lang.Option | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | Optional | java.util.Optional | -| file://:0:0:0:0 | OptionalDataException | java.io.OptionalDataException | -| file://:0:0:0:0 | OptionalDouble | java.util.OptionalDouble | -| file://:0:0:0:0 | OptionalInt | java.util.OptionalInt | -| file://:0:0:0:0 | OptionalLong | java.util.OptionalLong | -| file://:0:0:0:0 | OutputStream | java.io.OutputStream | -| file://:0:0:0:0 | Package | java.lang.Package | -| file://:0:0:0:0 | Parameter | java.lang.reflect.Parameter | -| file://:0:0:0:0 | ParsePosition | java.text.ParsePosition | -| file://:0:0:0:0 | Parsed | java.time.format.Parsed | -| file://:0:0:0:0 | Period | java.time.Period | -| file://:0:0:0:0 | Permission | java.security.Permission | -| file://:0:0:0:0 | PermissionCollection | java.security.PermissionCollection | -| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanable | jdk.internal.ref.PhantomCleanable | -| file://:0:0:0:0 | PhantomCleanableRef | jdk.internal.ref.PhantomCleanableRef | -| file://:0:0:0:0 | PhantomReference | java.lang.ref.PhantomReference | -| file://:0:0:0:0 | PhantomReference | java.lang.ref.PhantomReference | -| file://:0:0:0:0 | PolymorphicSignature | java.lang.invoke.PolymorphicSignature | -| file://:0:0:0:0 | PrintStream | java.io.PrintStream | -| file://:0:0:0:0 | PrintWriter | java.io.PrintWriter | -| file://:0:0:0:0 | Properties | java.util.Properties | -| file://:0:0:0:0 | ProtectionDomain | java.security.ProtectionDomain | -| file://:0:0:0:0 | Provider | java.security.Provider | -| file://:0:0:0:0 | Provides | java.lang.module.Provides | -| file://:0:0:0:0 | Proxy | java.net.Proxy | -| file://:0:0:0:0 | PutField | java.io.PutField | -| file://:0:0:0:0 | Random | java.util.Random | -| file://:0:0:0:0 | RandomAccessSpliterator | java.util.RandomAccessSpliterator | -| file://:0:0:0:0 | RandomDoublesSpliterator | java.util.RandomDoublesSpliterator | -| file://:0:0:0:0 | RandomIntsSpliterator | java.util.RandomIntsSpliterator | -| file://:0:0:0:0 | RandomLongsSpliterator | java.util.RandomLongsSpliterator | -| file://:0:0:0:0 | Reader | java.io.Reader | -| file://:0:0:0:0 | ReduceEntriesTask | java.util.concurrent.ReduceEntriesTask | -| file://:0:0:0:0 | ReduceEntriesTask | java.util.concurrent.ReduceEntriesTask | -| file://:0:0:0:0 | ReduceKeysTask | java.util.concurrent.ReduceKeysTask | -| file://:0:0:0:0 | ReduceKeysTask | java.util.concurrent.ReduceKeysTask | -| file://:0:0:0:0 | ReduceValuesTask | java.util.concurrent.ReduceValuesTask | -| file://:0:0:0:0 | ReduceValuesTask | java.util.concurrent.ReduceValuesTask | -| file://:0:0:0:0 | ReentrantLock | java.util.concurrent.locks.ReentrantLock | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | Reference | java.lang.ref.Reference | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReferenceQueue | java.lang.ref.ReferenceQueue | -| file://:0:0:0:0 | ReflectionFactory | jdk.internal.reflect.ReflectionFactory | -| file://:0:0:0:0 | ReflectiveOperationException | java.lang.ReflectiveOperationException | -| file://:0:0:0:0 | Reifier | sun.reflect.generics.visitor.Reifier | -| file://:0:0:0:0 | Requires | java.lang.module.Requires | -| file://:0:0:0:0 | ReservationNode | java.util.concurrent.ReservationNode | -| file://:0:0:0:0 | ResolvedModule | java.lang.module.ResolvedModule | -| file://:0:0:0:0 | ResolverStyle | java.time.format.ResolverStyle | -| file://:0:0:0:0 | RetentionPolicy | java.lang.annotation.RetentionPolicy | -| file://:0:0:0:0 | RunnableExecuteAction | java.util.concurrent.RunnableExecuteAction | -| file://:0:0:0:0 | RuntimeException | java.lang.RuntimeException | -| file://:0:0:0:0 | RuntimePermission | java.lang.RuntimePermission | -| file://:0:0:0:0 | SearchEntriesTask | java.util.concurrent.SearchEntriesTask | -| file://:0:0:0:0 | SearchKeysTask | java.util.concurrent.SearchKeysTask | -| file://:0:0:0:0 | SearchMappingsTask | java.util.concurrent.SearchMappingsTask | -| file://:0:0:0:0 | SearchValuesTask | java.util.concurrent.SearchValuesTask | -| file://:0:0:0:0 | Segment | java.util.concurrent.Segment | -| file://:0:0:0:0 | SerializablePermission | java.io.SerializablePermission | -| file://:0:0:0:0 | Service | java.security.Service | -| file://:0:0:0:0 | ServiceProvider | jdk.internal.module.ServiceProvider | -| file://:0:0:0:0 | ServicesCatalog | jdk.internal.module.ServicesCatalog | -| file://:0:0:0:0 | Short | java.lang.Short | -| file://:0:0:0:0 | Short | kotlin.Short | -| file://:0:0:0:0 | ShortArray | kotlin.ShortArray | -| file://:0:0:0:0 | ShortBuffer | java.nio.ShortBuffer | -| file://:0:0:0:0 | ShortIterator | kotlin.collections.ShortIterator | -| file://:0:0:0:0 | ShortSignature | sun.reflect.generics.tree.ShortSignature | -| file://:0:0:0:0 | SimpleClassTypeSignature | sun.reflect.generics.tree.SimpleClassTypeSignature | -| file://:0:0:0:0 | SimpleEntry | java.util.SimpleEntry | -| file://:0:0:0:0 | SimpleImmutableEntry | java.util.SimpleImmutableEntry | -| file://:0:0:0:0 | SocketAddress | java.net.SocketAddress | -| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | -| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | -| file://:0:0:0:0 | SoftCleanable | jdk.internal.ref.SoftCleanable | -| file://:0:0:0:0 | SoftCleanableRef | jdk.internal.ref.SoftCleanableRef | -| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | -| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | -| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | -| file://:0:0:0:0 | SoftReference | java.lang.ref.SoftReference | -| file://:0:0:0:0 | Specializer | java.lang.invoke.Specializer | -| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | -| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | -| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | -| file://:0:0:0:0 | SpeciesData | java.lang.invoke.SpeciesData | -| file://:0:0:0:0 | StackFrameInfo | java.lang.StackFrameInfo | -| file://:0:0:0:0 | StackTraceElement | java.lang.StackTraceElement | -| file://:0:0:0:0 | StackWalker | java.lang.StackWalker | -| file://:0:0:0:0 | State | java.lang.State | -| file://:0:0:0:0 | Status | java.io.Status | -| file://:0:0:0:0 | String | java.lang.String | -| file://:0:0:0:0 | String | kotlin.String | -| file://:0:0:0:0 | StringBuffer | java.lang.StringBuffer | -| file://:0:0:0:0 | StringBuilder | java.lang.StringBuilder | -| file://:0:0:0:0 | Subject | javax.security.auth.Subject | -| file://:0:0:0:0 | Subset | java.lang.Subset | -| file://:0:0:0:0 | SuppliedThreadLocal | java.lang.SuppliedThreadLocal | -| file://:0:0:0:0 | Sync | java.util.concurrent.locks.Sync | -| file://:0:0:0:0 | SystemClock | java.time.SystemClock | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | TableStack | java.util.concurrent.TableStack | -| file://:0:0:0:0 | Tag | jdk.internal.reflect.Tag | -| file://:0:0:0:0 | TextStyle | java.time.format.TextStyle | -| file://:0:0:0:0 | Thread | java.lang.Thread | -| file://:0:0:0:0 | ThreadGroup | java.lang.ThreadGroup | -| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | -| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | -| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | -| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | -| file://:0:0:0:0 | ThreadLocal | java.lang.ThreadLocal | -| file://:0:0:0:0 | ThreadLocalMap | java.lang.ThreadLocalMap | -| file://:0:0:0:0 | Throwable | java.lang.Throwable | -| file://:0:0:0:0 | Throwable | kotlin.Throwable | -| file://:0:0:0:0 | TickClock | java.time.TickClock | -| file://:0:0:0:0 | TimeDefinition | java.time.zone.TimeDefinition | -| file://:0:0:0:0 | TimeUnit | java.util.concurrent.TimeUnit | -| file://:0:0:0:0 | Timestamp | java.security.Timestamp | -| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | -| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | -| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | -| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | -| file://:0:0:0:0 | Traverser | java.util.concurrent.Traverser | -| file://:0:0:0:0 | TreeBin | java.util.concurrent.TreeBin | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | TreeNode | java.util.concurrent.TreeNode | -| file://:0:0:0:0 | Type | java.net.Type | -| file://:0:0:0:0 | Type | jdk.internal.org.objectweb.asm.Type | -| file://:0:0:0:0 | TypeParam | kotlin.TypeParam | -| file://:0:0:0:0 | TypePath | jdk.internal.org.objectweb.asm.TypePath | -| file://:0:0:0:0 | TypeVariableSignature | sun.reflect.generics.tree.TypeVariableSignature | -| file://:0:0:0:0 | TypesAndInvokers | java.lang.invoke.TypesAndInvokers | -| file://:0:0:0:0 | URI | java.net.URI | -| file://:0:0:0:0 | URL | java.net.URL | -| file://:0:0:0:0 | URLConnection | java.net.URLConnection | -| file://:0:0:0:0 | URLStreamHandler | java.net.URLStreamHandler | -| file://:0:0:0:0 | UnicodeBlock | java.lang.UnicodeBlock | -| file://:0:0:0:0 | UnicodeScript | java.lang.UnicodeScript | -| file://:0:0:0:0 | Unloader | java.lang.Unloader | -| file://:0:0:0:0 | Unsafe | jdk.internal.misc.Unsafe | -| file://:0:0:0:0 | UserPrincipalLookupService | java.nio.file.attribute.UserPrincipalLookupService | -| file://:0:0:0:0 | ValueIterator | java.util.concurrent.ValueIterator | -| file://:0:0:0:0 | ValueRange | java.time.temporal.ValueRange | -| file://:0:0:0:0 | ValueSpliterator | java.util.ValueSpliterator | -| file://:0:0:0:0 | ValueSpliterator | java.util.ValueSpliterator | -| file://:0:0:0:0 | ValueSpliterator | java.util.concurrent.ValueSpliterator | -| file://:0:0:0:0 | ValueSpliterator | java.util.concurrent.ValueSpliterator | -| file://:0:0:0:0 | ValuesView | java.util.concurrent.ValuesView | -| file://:0:0:0:0 | VarForm | java.lang.invoke.VarForm | -| file://:0:0:0:0 | VarHandle | java.lang.invoke.VarHandle | -| file://:0:0:0:0 | Version | java.lang.Version | -| file://:0:0:0:0 | Version | java.lang.Version | -| file://:0:0:0:0 | Version | java.lang.Version | -| file://:0:0:0:0 | Version | java.lang.Version | -| file://:0:0:0:0 | Version | java.lang.module.Version | -| file://:0:0:0:0 | VersionInfo | java.lang.VersionInfo | -| file://:0:0:0:0 | Void | java.lang.Void | -| file://:0:0:0:0 | VoidDescriptor | sun.reflect.generics.tree.VoidDescriptor | -| file://:0:0:0:0 | WeakClassKey | java.io.WeakClassKey | -| file://:0:0:0:0 | WeakClassKey | java.lang.WeakClassKey | -| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | -| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | -| file://:0:0:0:0 | WeakCleanable | jdk.internal.ref.WeakCleanable | -| file://:0:0:0:0 | WeakCleanableRef | jdk.internal.ref.WeakCleanableRef | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMap | java.util.WeakHashMap | -| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | -| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | -| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | -| file://:0:0:0:0 | WeakHashMapSpliterator | java.util.WeakHashMapSpliterator | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | WeakReference | java.lang.ref.WeakReference | -| file://:0:0:0:0 | Wildcard | sun.reflect.generics.tree.Wildcard | -| file://:0:0:0:0 | WorkQueue | java.util.concurrent.WorkQueue | -| file://:0:0:0:0 | Wrapper | sun.invoke.util.Wrapper | -| file://:0:0:0:0 | Writer | java.io.Writer | -| file://:0:0:0:0 | WrongMethodTypeException | java.lang.invoke.WrongMethodTypeException | -| file://:0:0:0:0 | ZoneId | java.time.ZoneId | -| file://:0:0:0:0 | ZoneOffset | java.time.ZoneOffset | -| file://:0:0:0:0 | ZoneOffsetTransition | java.time.zone.ZoneOffsetTransition | -| file://:0:0:0:0 | ZoneOffsetTransitionRule | java.time.zone.ZoneOffsetTransitionRule | -| file://:0:0:0:0 | ZoneRules | java.time.zone.ZoneRules | -| file://:0:0:0:0 | ZonedDateTime | java.time.ZonedDateTime | diff --git a/java/ql/test/kotlin/library-tests/multiple_files/classes.ql b/java/ql/test/kotlin/library-tests/multiple_files/classes.ql index 27a702921c1..daf777d3dcd 100644 --- a/java/ql/test/kotlin/library-tests/multiple_files/classes.ql +++ b/java/ql/test/kotlin/library-tests/multiple_files/classes.ql @@ -1,5 +1,6 @@ import java from Class c +where c.fromSource() select c, c.getQualifiedName() diff --git a/java/ql/test/kotlin/library-tests/variables/variables.expected b/java/ql/test/kotlin/library-tests/variables/variables.expected index 8ca1a1ffe00..eb04e63235d 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.expected +++ b/java/ql/test/kotlin/library-tests/variables/variables.expected @@ -1,15062 +1,3 @@ -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ABNORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ACC_CONSTRUCTOR | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ACC_PPP | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ACC_SYNTHETIC_ATTRIBUTE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ADDRESS_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ADLAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | AEGEAN_NUMBERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | AHOM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | AIOOBE_SUPPLIER | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | ALCHEMICAL_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ALL_ACCESS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ALL_KINDS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ALL_TYPES | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | ALPHABETIC_PRESENTATION_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ANATOLIAN_HIEROGLYPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ANCIENT_GREEK_MUSICAL_NOTATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ANCIENT_GREEK_NUMBERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ANCIENT_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ANNOTATION | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | APPEND_FRAME | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARABIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARABIC_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARABIC_PRESENTATION_FORMS_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARABIC_PRESENTATION_FORMS_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARABIC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARG_TYPES | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARG_TYPE_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARMENIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_BOOLEAN_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_BOOLEAN_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_BYTE_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_BYTE_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_CHAR_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_CHAR_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_DOUBLE_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_DOUBLE_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_ELEMENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_FLOAT_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_FLOAT_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_INT_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_INT_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_LONG_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_LONG_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_OBJECT_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_OBJECT_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_OF | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_SHORT_BASE_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARRAY_SHORT_INDEX_SCALE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ARROWS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ASM_LABELW_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ASM_LABEL_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | AVESTAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BALINESE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BAMUM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BAMUM_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BASE | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | BASE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BASE_KIND | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BASE_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BASIC_ISO_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | BASIC_LATIN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BASSA_VAH | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BATAK | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BENGALI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BHAIKSUKI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BIG_ENDIAN | file://:0:0:0:0 | ByteOrder | file://:0:0:0:0 | | -| file://:0:0:0:0 | BLOCK_ELEMENTS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BMH_TRANSFORMS | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | BOOLEAN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BOOLEAN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BOOLEAN_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | BOPOMOFO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BOPOMOFO_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BOX_DRAWING | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BRAHMI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BRAILLE_PATTERNS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BRIDGE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BSM | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BUGINESE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BUHID | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BUILTIN_HANDLERS_PREFIX | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | BURNIKEL_ZIEGLER_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BURNIKEL_ZIEGLER_THRESHOLD | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BYTE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BYTE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | BYTE_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | BYZANTINE_MUSICAL_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | BadBound | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | BadRange | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | BadSize | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | CALENDAR_JAPANESE | file://:0:0:0:0 | LocaleExtensions | file://:0:0:0:0 | | -| file://:0:0:0:0 | CALLER_SENSITIVE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CANADA | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | CANADA_FRENCH | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | CANCELLED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CARIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CASE_INSENSITIVE_ORDER | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | CAUCASIAN_ALBANIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHAKMA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHAR | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHAR | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHAR_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHEROKEE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHEROKEE_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHINA | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHINESE | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHOP_FRAME | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHRONOS_BY_ID | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | CHRONOS_BY_TYPE | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_COMPATIBILITY | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_COMPATIBILITY_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_COMPATIBILITY_IDEOGRAPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_RADICALS_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_STROKES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_SYMBOLS_AND_PUNCTUATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CLASS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | COMBINING_DIACRITICAL_MARKS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | COMBINING_DIACRITICAL_MARKS_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | COMBINING_DIACRITICAL_MARKS_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | COMBINING_HALF_MARKS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | COMBINING_MARKS_FOR_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | COMBINING_SPACING_MARK | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | COMMON_INDIC_NUMBER_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | COMMON_PARALLELISM | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | COMPACT_STRINGS | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | COMPUTE_FRAMES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | COMPUTE_MAXS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONCURRENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONDITION | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONNECTOR_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONSTRUCTOR_NAME | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONTROL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | CONTROL_PICTURES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | COPTIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | COPTIC_EPACT_NUMBERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | COUNT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | COUNTING_ROD_NUMERALS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CREATE_RESERVATION | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | CUNEIFORM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CUNEIFORM_NUMBERS_AND_PUNCTUATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CURRENCY_SYMBOL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | CURRENCY_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CYPRIOT_SYLLABARY | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CYRILLIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CYRILLIC_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CYRILLIC_EXTENDED_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CYRILLIC_EXTENDED_C | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | CYRILLIC_SUPPLEMENTARY | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | DASH_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DAYS_0000_TO_1970 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | DEAD_ENTRY | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | DEBUG | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DECIMAL_DIGIT_NUMBER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DECLARED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DEFAULT_ATTRIBUTE_PROTOS | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | DEFAULT_ATTRIBUTE_PROTOS | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | DEFAULT_ATTRIBUTE_PROTOS | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | DEFAULT_BUFFER_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DEFAULT_EMPTY_OPTION | file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | | -| file://:0:0:0:0 | DEFAULT_INITIAL_CAPACITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DEFAULT_LOAD_FACTOR | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | DESERET | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | DEVANAGARI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | DEVANAGARI_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIM | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DINGBATS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_ARABIC_NUMBER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_BOUNDARY_NEUTRAL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_COMMON_NUMBER_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_EUROPEAN_NUMBER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_FIRST_STRONG_ISOLATE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_LEFT_TO_RIGHT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_LEFT_TO_RIGHT_ISOLATE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_NONSPACING_MARK | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_OTHER_NEUTRALS | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_PARAGRAPH_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_POP_DIRECTIONAL_FORMAT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_POP_DIRECTIONAL_ISOLATE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_RIGHT_TO_LEFT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_RIGHT_TO_LEFT_ISOLATE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_SEGMENT_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_UNDEFINED | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DIRECTIONALITY_WHITESPACE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DISTINCT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DOMINO_TILES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DONE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DORMANT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DOUBLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DOUBLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DOUBLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | DOUBLE_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | DO_AS_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | DO_AS_PRIVILEGED_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | DUPLOYAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | D_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | DigitOnes | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | DigitTens | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | EARLY_DYNASTIC_CUNEIFORM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | EGYPTIAN_HIEROGLYPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ELBASAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ELEMENT_OF | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | EMOTICONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | EMPTYVALUE | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | EMPTYVALUE | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | EMPTY_STACK_TRACE | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | EMPTY_STACK_TRACE | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | ENCLOSED_ALPHANUMERICS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ENCLOSED_ALPHANUMERIC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ENCLOSED_CJK_LETTERS_AND_MONTHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ENCLOSED_IDEOGRAPHIC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ENCLOSING_MARK | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | END_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | ENGLISH | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | ENQUEUED | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | ENTRIES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ENTRIES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ENUM | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | EPOCH | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | EPOCH | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | ERASE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ERROR | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ETHIOPIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ETHIOPIC_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ETHIOPIC_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ETHIOPIC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | EXCEPTION | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | EXCLUSIVE | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | EXPAND_ASM_INSNS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | EXPAND_FRAMES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | E_THROWABLE | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | FALSE | file://:0:0:0:0 | Boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | FIELD | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | FIELDORMETH_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | FIFO | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | FINAL_QUOTE_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | FLOAT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | FLOAT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | FLOAT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | FLOAT_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | FORMAT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | FORM_OFFSET | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | FRAMES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | FRANCE | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | FRENCH | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | FULL_FRAME | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | F_INSERT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | F_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | GENERAL_PUNCTUATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GEOMETRIC_SHAPES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GEOMETRIC_SHAPES_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GEORGIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GEORGIAN_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GERMAN | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | GERMANY | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | GET_SUBJECT_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | GLAGOLITIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GLAGOLITIC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GOTHIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GRANTHA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GREEK | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GREEK_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GUJARATI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | GURMUKHI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HALFWIDTH_AND_FULLWIDTH_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HANDLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | HANDLE_BASE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | HANGUL_COMPATIBILITY_JAMO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HANGUL_JAMO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HANGUL_JAMO_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HANGUL_JAMO_EXTENDED_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HANGUL_SYLLABLES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HANUNOO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HASH_BITS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | HASH_INCREMENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | HASH_MASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | HATRAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HEAD | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | HEAD | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | HEAD | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | HEBREW | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HIGH_PRIVATE_USE_SURROGATES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HIGH_SURROGATES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HIRAGANA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | HOURS_PER_DAY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IDEOGRAPHIC_DESCRIPTION_CHARACTERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | IGNORE | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | IINC_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMETH | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMMUTABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMPERIAL_ARAMAIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | IMPLVAR_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INDY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INDYMETH_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INITIAL_QUEUE_CAPACITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INITIAL_QUOTE_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | INNER_TYPE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INNOCUOUS_ACC | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | INPUT_METHOD_SEGMENT | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | INPUT_METHOD_SEGMENT | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | INSCRIPTIONAL_PAHLAVI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | INSCRIPTIONAL_PARTHIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | INSERTED_FRAMES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INSTANCE | file://:0:0:0:0 | Factory | file://:0:0:0:0 | | -| file://:0:0:0:0 | INSTANCE | file://:0:0:0:0 | IsoChronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | INT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INTEGER | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INTERNED_ARGUMENT_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INTS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INT_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | INVALID_FIELD_OFFSET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INVOKER_METHOD_TYPE | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | INV_BASIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INV_EXACT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INV_GENERIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | INV_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IPA_EXTENSIONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | IPv4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IPv6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_DATE_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_INSTANT | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_LOCAL_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_LOCAL_DATE_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_LOCAL_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_OFFSET_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_OFFSET_DATE_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_OFFSET_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_ORDINAL_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_WEEK_DATE | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ISO_ZONED_DATE_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | IS_CONSTRUCTOR | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IS_FIELD | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IS_FIELD_OR_METHOD | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IS_INVOCABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IS_METHOD | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | IS_TYPE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ITALIAN | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | ITALY | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | ITFMETH_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | I_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | JAPAN | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | JAPANESE | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | JAVANESE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | JSR | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | J_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | KAITHI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KANA_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KANA_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KANBUN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KANGXI_RADICALS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KANNADA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KATAKANA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KATAKANA_PHONETIC_EXTENSIONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KAYAH_LI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KEYS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | KEYS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | KHAROSHTHI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KHMER | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KHMER_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KHOJKI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KHUDAWADI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | KIND | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | KOREA | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | KOREAN | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | LABELW_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LABEL_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LANGUAGE | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | LANGUAGE | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | LAO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LAST_RESULT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LATIN1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | LATIN_1_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LATIN_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LATIN_EXTENDED_ADDITIONAL | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LATIN_EXTENDED_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LATIN_EXTENDED_C | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LATIN_EXTENDED_D | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LATIN_EXTENDED_E | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LDCW_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LDC_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LEPCHA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LETTERLIKE_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LETTER_NUMBER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_CS_LINKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_DELEGATE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_DELEGATE_BLOCK_INLINING | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_EX_INVOKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_EX_LINKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_GEN_INVOKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_GEN_LINKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_GWC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_GWT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_INTERPRET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_INVINTERFACE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_INVSPECIAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_INVSPECIAL_IFC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_INVSTATIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_INVSTATIC_INIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_INVVIRTUAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_LOOP | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_MH_LINKER | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_NEWINVSPECIAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_REBIND | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LF_TF | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LIMBU | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LINEAR_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LINEAR_B_IDEOGRAMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LINEAR_B_SYLLABARY | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LINE_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | LISU | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LITTLE_ENDIAN | file://:0:0:0:0 | ByteOrder | file://:0:0:0:0 | | -| file://:0:0:0:0 | LONG | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LONG | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LONG | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LONGS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LONG_MASK | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | LONG_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | LOOK_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | LOWERCASE_LETTER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | LOW_SURROGATES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LYCIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | LYDIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | L_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAHAJANI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAHJONG_TILES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MALAYALAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MANA_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MANDAIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MANICHAEAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MARCHEN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MASARAM_GONDI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MATHEMATICAL_ALPHANUMERIC_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MATHEMATICAL_OPERATORS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MATH_SYMBOL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAXIMUM_CAPACITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAXIMUM_QUEUE_CAPACITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAXS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_ARRAY_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_BUFFER_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_CAP | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_CODE_POINT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_EXPONENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_HIGH_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_HIGH_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_JVM_ARITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_LOW_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_LOW_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_MH_ARITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_MH_INVOKER_ARITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_RADIX | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_SKIP_BUFFER_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_VALUE | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | MAX_WEIGHT | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | MEETEI_MAYEK | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MEETEI_MAYEK_EXTENSIONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MENDE_KIKAKUI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MEROITIC_CURSIVE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MEROITIC_HIEROGLYPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | METH | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | METHOD | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MH | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | MH_BASIC_INV | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MH_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MH_NF_INV | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MH_SIG | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | MH_UNINIT_CS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIAO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MICROS_PER_DAY | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIDNIGHT | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | MILLIS_PER_DAY | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | MINUTES_PER_DAY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MINUTES_PER_HOUR | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_CODE_POINT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_EXPONENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_HIGH_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_HIGH_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_LOW_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_LOW_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_NORMAL | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_RADIX | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_SUPPLEMENTARY_CODE_POINT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_SURROGATE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_TREEIFY_CAPACITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_VALUE | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | MIN_WEIGHT | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MISCELLANEOUS_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MISCELLANEOUS_SYMBOLS_AND_ARROWS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MISCELLANEOUS_TECHNICAL | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MODI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MODIFIER_LETTER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | MODIFIER_SYMBOL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | MODIFIER_TONE_LETTERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MODIFY_PRINCIPALS_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | MODIFY_PRIVATE_CREDENTIALS_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | MODIFY_PUBLIC_CREDENTIALS_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | MODULE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MONGOLIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MONGOLIAN_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MOVED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MRO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MTYPE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | MULTANI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MUSICAL_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MYANMAR | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MYANMAR_EXTENDED_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | MYANMAR_EXTENDED_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | NABATAEAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | NAME_TYPE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NANOS_PER_DAY | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | NANOS_PER_HOUR | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | NANOS_PER_MILLI | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | NANOS_PER_MINUTE | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | NANOS_PER_SECOND | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | NCPU | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NEGATIVE_INFINITY | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | NEGATIVE_INFINITY | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | NEWA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | NEW_TAI_LUE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | NKO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | NOARG_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NONNULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NON_SPACING_MARK | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | NOON | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | NORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NORM_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NORM_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NORM_PRIORITY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NOTHING | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NO_CHANGE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NO_FIELDS | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | NO_PROXY | file://:0:0:0:0 | Proxy | file://:0:0:0:0 | | -| file://:0:0:0:0 | NO_PTYPES | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | NULL | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | NULL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | NULL_KEY | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | NULL_VERSION_INFO | file://:0:0:0:0 | VersionInfo | file://:0:0:0:0 | | -| file://:0:0:0:0 | NUMBER_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | NUMBER_THAI | file://:0:0:0:0 | LocaleExtensions | file://:0:0:0:0 | | -| file://:0:0:0:0 | NUSHU | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | NaN | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | NaN | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | OBJECT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | OBJECT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | OGHAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | OLD_HUNGARIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | OLD_ITALIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | OLD_NORTH_ARABIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | OLD_PERMIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | OLD_PERSIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | OLD_SOUTH_ARABIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | OLD_TURKIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | OL_CHIKI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ONE | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | OOME_MSG | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | OOME_MSG | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | OOME_MSG | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | OPTICAL_CHARACTER_RECOGNITION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORDERED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORIYA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ORNAMENTAL_DINGBATS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | OSAGE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | OSMANYA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | OTHER_LETTER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | OTHER_NUMBER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | OTHER_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | OTHER_SYMBOL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | OVERFLOW | file://:0:0:0:0 | CoderResult | file://:0:0:0:0 | | -| file://:0:0:0:0 | OWNED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PACKAGE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PAHAWH_HMONG | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | PALMYRENE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | PARAGRAPH_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | PAU_CIN_HAU | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PENDING | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PHAGS_PA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | PHAISTOS_DISC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | PHASE | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | PHOENICIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | PHONETIC_EXTENSIONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | PHONETIC_EXTENSIONS_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | PLAYING_CARDS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | POSITIVE_INFINITY | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | POSITIVE_INFINITY | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | PRC | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | PREFER_IPV4_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PREFER_IPV6_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PREFER_SYSTEM_VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PRIVATE | file://:0:0:0:0 | MapMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | PRIVATE_USE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | PRIVATE_USE_AREA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | PRIVATE_USE_EXTENSION | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | PROPAGATE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PROTOCOL_VERSION_1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PROTOCOL_VERSION_1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PROTOCOL_VERSION_1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PROTOCOL_VERSION_2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PROTOCOL_VERSION_2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PROTOCOL_VERSION_2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PSALTER_PAHLAVI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PUBLIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | PUSHED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | QA | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | QLOCK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | QUIET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | RAW_RETURN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | REACHABLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | READER | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | READING | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | READING | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | READ_ONLY | file://:0:0:0:0 | MapMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | READ_WRITE | file://:0:0:0:0 | MapMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | RECOGNIZED_MODIFIERS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | REJANG | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | REPLACE | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | REPORT | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | RESERVED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | RESERVED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | RESIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | RESOLVED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | RET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | RFC_1123_DATE_TIME | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | ROOT | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | RUMI_NUMERAL_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | RUNIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SAMARITAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SAME_FRAME | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SAME_FRAME_EXTENDED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SAME_LOCALS_1_STACK_ITEM_FRAME | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SAURASHTRA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SBYTE_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_BLOCK_DATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_BLOCK_DATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_BLOCK_DATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_EXTERNALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_EXTERNALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_EXTERNALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_SERIALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_SERIALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_SERIALIZABLE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_WRITE_METHOD | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_WRITE_METHOD | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SC_WRITE_METHOD | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SEARCH_ALL_SUPERS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SECONDS_PER_DAY | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SECONDS_PER_HOUR | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SECONDS_PER_MINUTE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SEP | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | SERIAL_FILTER_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | SERIAL_FILTER_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | SERIAL_FILTER_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | SET_READ_ONLY_PERMISSION | file://:0:0:0:0 | AuthPermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | SHARADA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SHARED | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | SHAVIAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SHORT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SHORT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SHORTHAND_FORMAT_CONTROLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SHORT_IDS | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | SHORT_IDS | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | SHORT_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SHORT_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | SHUTDOWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIDDHAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIGNAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIMPLIFIED_CHINESE | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | SINHALA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SINHALA_ARCHAIC_NUMBERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE_BITS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE_BITS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE_BITS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE_BITS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE_BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE_BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE_BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SIZE_BYTES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SKIP_CODE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SKIP_DEBUG | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SKIP_FRAMES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMALL_FORM_VARIANTS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORA_SOMPENG | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SORTED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SOYOMBO | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPACE_SEPARATOR | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPACING_MODIFIER_LETTERS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPECIALIZER | file://:0:0:0:0 | Specializer | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPECIALS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPECIES_DATA | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPECIES_DATA_MODS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPECIES_DATA_NAME | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPECIES_DATA_SIG | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPIN_FOR_TIMEOUT_THRESHOLD | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPIN_FOR_TIMEOUT_THRESHOLD | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPIN_FOR_TIMEOUT_THRESHOLD | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPIN_FOR_TIMEOUT_THRESHOLD | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SPLITERATOR_CHARACTERISTICS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SQMASK | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SS_SEQ | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | STABLE | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | STABLE_SIG | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | STANDARD | file://:0:0:0:0 | DecimalStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | START_PUNCTUATION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATE | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATE | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATE | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STATUS | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | STOP | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | STORE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | STR | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | STREAM_MAGIC | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | STREAM_MAGIC | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | STREAM_MAGIC | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | STREAM_VERSION | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | STREAM_VERSION | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | STREAM_VERSION | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBCLASS_IMPLEMENTATION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBCLASS_IMPLEMENTATION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBCLASS_IMPLEMENTATION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBROUTINE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSTITUTION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSTITUTION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUBSTITUTION_PERMISSION | file://:0:0:0:0 | SerializablePermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUNDANESE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUNDANESE_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUPERSCRIPTS_AND_SUBSCRIPTS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUPPLEMENTAL_ARROWS_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUPPLEMENTAL_ARROWS_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUPPLEMENTAL_ARROWS_C | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUPPLEMENTAL_MATHEMATICAL_OPERATORS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUPPLEMENTAL_PUNCTUATION | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUPPLEMENTARY_PRIVATE_USE_AREA_A | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUPPLEMENTARY_PRIVATE_USE_AREA_B | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SURROGATE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | SURROGATES_AREA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SUTTON_SIGNWRITING | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SWIDTH | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SYLOTI_NAGRI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SYNTHETIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | SYRIAC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | SYRIAC_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TABL_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAGALOG | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAGBANWA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAGS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAIL | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAIL | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAIL | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAIWAN | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAI_LE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAI_THAM | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAI_VIET | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAI_XUAN_JING_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAKRI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TAMIL | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TANGUT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TANGUT_COMPONENTS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TARGET | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_ARRAY | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_ARRAY | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_ARRAY | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_BASE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_BASE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_BASE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_BLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_BLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_BLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_BLOCKDATALONG | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_BLOCKDATALONG | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_BLOCKDATALONG | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_CLASS | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_CLASS | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_CLASS | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_CLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_CLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_CLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_ENDBLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_ENDBLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_ENDBLOCKDATA | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_ENUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_EXCEPTION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_EXCEPTION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_EXCEPTION | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_LONGSTRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_LONGSTRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_LONGSTRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_MAX | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_MAX | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_MAX | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_NULL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_NULL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_NULL | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_OBJECT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_OBJECT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_OBJECT | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_PROXYCLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_PROXYCLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_PROXYCLASSDESC | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_REFERENCE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_REFERENCE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_REFERENCE | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_RESET | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_RESET | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_RESET | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_STRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_STRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TC_STRING | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TELUGU | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TEN | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | TERMINATED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THAANA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | THAI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | THROWN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TIBETAN | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TIFINAGH | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TIRHUTA | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TITLECASE_LETTER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | TN_COPY_NO_EXTEND | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TOP | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | TOP | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TOP_BOUND_SHIFT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TOP_IF_LONG_OR_DOUBLE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TO_ACC_SYNTHETIC | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TRADITIONAL_CHINESE | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | TRANSFORM_MODS | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | TRANSFORM_NAMES | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | TRANSFORM_TYPES | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | TRANSPORT_AND_MAP_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | TREEBIN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TREEIFY_THRESHOLD | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TRUE | file://:0:0:0:0 | Boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | TWO | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE_ARGUMENT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE_LIMIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE_MERGED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE_NORMAL | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | TYPE_UNINIT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | UGARITIC | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | UK | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNASSIGNED | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNDERFLOW | file://:0:0:0:0 | CoderResult | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNICODE_LOCALE_EXTENSION | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNINITIALIZED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNINITIALIZED_THIS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNLOADER | file://:0:0:0:0 | NativeLibrary | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNSAFE | file://:0:0:0:0 | Unsafe | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNSIGNALLED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNTREEIFY_THRESHOLD | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | UNWRAP | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | UPPERCASE_LETTER | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | US | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | UTC | file://:0:0:0:0 | SystemClock | file://:0:0:0:0 | | -| file://:0:0:0:0 | UTC | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | UTF8 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | UTF16 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | VAI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | VALUE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | VALUES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | VALUES | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | VARARGS | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | VARIATION_SELECTORS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | VARIATION_SELECTORS_SUPPLEMENT | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | VAR_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | VEDIC_EXTENSIONS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | VERTICAL_FORMS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | VISITED | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | VISITED2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | VOID | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | VOID_RESULT | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | VOID_TYPE | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | V_TYPE_NUM | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | WAITER | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | WARANG_CITI | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | WIDE_INSN | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | WILDCARD_BOUND | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | WRAP | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | WRITER | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | WRITE_BUFFER_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | WRITE_BUFFER_SIZE | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | YIJING_HEXAGRAM_SYMBOLS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | YI_RADICALS | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | YI_SYLLABLES | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ZANABAZAR_SQUARE | file://:0:0:0:0 | UnicodeBlock | file://:0:0:0:0 | | -| file://:0:0:0:0 | ZERO | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | ZERO | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | ZERO | file://:0:0:0:0 | Period | file://:0:0:0:0 | | -| file://:0:0:0:0 | action | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | action | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | address | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | address | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | allowUserInteraction | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | api | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | argCounts | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | argToSlotTable | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | arguments | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | arity | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | array | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | arrayLength | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | asTypeCache | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | asTypeCache | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | assertionLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | at | file://:0:0:0:0 | AccessType | file://:0:0:0:0 | | -| file://:0:0:0:0 | automatic | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | av | file://:0:0:0:0 | AnnotationVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | b | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | b | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | base | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseConstructorType | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseLimit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseSize | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseWireHandle | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseWireHandle | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | baseWireHandle | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | basicType | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | basis | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | batch | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | beginIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | bigEndian | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | bigEndian | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | bitCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | blocker | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | -| file://:0:0:0:0 | blocker | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | -| file://:0:0:0:0 | blockerLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | blockerLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | bnExpModThreshTable | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | bootstrapMethods | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | -| file://:0:0:0:0 | bootstrapMethodsCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | bound | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | bound | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | bound | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | bounds | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | btChar | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | btClass | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | btWrapper | file://:0:0:0:0 | Wrapper | file://:0:0:0:0 | | -| file://:0:0:0:0 | bytes | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | bytes | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | cache | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | callable | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | capacity | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | cause | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | cause | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | chrono | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | classAssertionStatus | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | classReaderLength | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | classReaderOffset | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | classValueMap | file://:0:0:0:0 | ClassValueMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | classes | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | clazz | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | clazz | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | cleanerThreadNumber | file://:0:0:0:0 | AtomicInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | clock | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | clock | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | closeLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | closeLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | closed | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | closed | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | coder | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | coder | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | coder | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | common | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | completer | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | connected | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | constraint | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | contextClassLoader | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | contextClassLoader | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | count | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | count | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | count | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | count | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | count | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | countryKey | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | cr | file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | | -| file://:0:0:0:0 | ctl | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | current | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | current | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | current | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | current | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | customizationCount | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | customizationCount | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | customized | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | cv | file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | cv | file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | cw | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | daemon | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | daemon | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | daemon | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | data | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | declaredAnnotations | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | declaredAnnotations | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultForkJoinWorkerThreadFactory | file://:0:0:0:0 | ForkJoinWorkerThreadFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultLambdaName | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultUncaughtExceptionHandler | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultUncaughtExceptionHandler | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaultValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaults | file://:0:0:0:0 | Properties | file://:0:0:0:0 | | -| file://:0:0:0:0 | defaults | file://:0:0:0:0 | Properties | file://:0:0:0:0 | | -| file://:0:0:0:0 | depth | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | desc | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | -| file://:0:0:0:0 | desc | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | destroyed | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | digits | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | discovered | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | doInput | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | doOutput | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | eetop | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | eetop | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | element | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | elementData | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | elementType | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | elements | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | endInclusive | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | endIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | entrySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | entrySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | eof | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | erasedType | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | err | file://:0:0:0:0 | FileDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | errorIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | est | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | est | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | est | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | est | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | est | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | est | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | est | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | ex | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableLock | file://:0:0:0:0 | ReentrantLock | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTableRefQueue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptionTypes | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | exceptions | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | excessDays | file://:0:0:0:0 | Period | file://:0:0:0:0 | | -| file://:0:0:0:0 | exclusiveOwnerThread | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | exclusiveOwnerThread | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | exclusiveOwnerThread | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | exclusiveOwnerThread | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | exitVM | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | exitVM | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | exitVM | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | expectedModCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | expectedModCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | expectedModCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | expectedModCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | exports | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | extensionsKey | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | factories | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | factory | file://:0:0:0:0 | Factory | file://:0:0:0:0 | | -| file://:0:0:0:0 | factory | file://:0:0:0:0 | ForkJoinWorkerThreadFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | factory | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | factory | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | factory | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | factory | file://:0:0:0:0 | ThreadFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | family | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | fence | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | fence | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | fence | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | fence | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | fence | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | fence | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | fence | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | field | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | fieldTypes | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | fieldValues | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | first | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | firstField | file://:0:0:0:0 | FieldWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | firstMethod | file://:0:0:0:0 | MethodWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | forceInline | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | form | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | form | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | frame | file://:0:0:0:0 | Frame | file://:0:0:0:0 | | -| file://:0:0:0:0 | frameCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | from | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | fromClass | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | fromIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | fromIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | fromIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | fromIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | function | file://:0:0:0:0 | NamedFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | fv | file://:0:0:0:0 | FieldVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | fv | file://:0:0:0:0 | FieldVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | getters | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | group | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | -| file://:0:0:0:0 | group | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | -| file://:0:0:0:0 | groups | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | handle | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | handle | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | handler | file://:0:0:0:0 | URLStreamHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | handlers | file://:0:0:0:0 | Hashtable | file://:0:0:0:0 | | -| file://:0:0:0:0 | hasAsmInsns | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | hasData | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | hasRealParameterData | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | hasRealParameterData | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | hash | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | hashCode | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | hashCodeForCache | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | hb | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | hb | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | hb | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | hb | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | hb | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | hb | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | hb | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | hb | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | head | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | head | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | head | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | header | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | hexDigit | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | holder | file://:0:0:0:0 | InetAddressHolder | file://:0:0:0:0 | | -| file://:0:0:0:0 | hostName | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | id | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | identity | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | ifModifiedSince | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | impl | file://:0:0:0:0 | CleanerImpl | file://:0:0:0:0 | | -| file://:0:0:0:0 | impl | file://:0:0:0:0 | InetAddressImpl | file://:0:0:0:0 | | -| file://:0:0:0:0 | in | file://:0:0:0:0 | FileDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | index | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | indexSeed | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | info | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | info | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | inheritableThreadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | inheritableThreadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | inheritableThreadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | inheritedAccessControlContext | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | inheritedAccessControlContext | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | -| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | -| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | -| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | -| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | -| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | -| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | -| file://:0:0:0:0 | init | file://:0:0:0:0 | Function1 | file://:0:0:0:0 | | -| file://:0:0:0:0 | inputLocals | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | inputStack | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | inputStackTop | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | instanceMap | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | intVal | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | internTable | file://:0:0:0:0 | ConcurrentWeakInternSet | file://:0:0:0:0 | | -| file://:0:0:0:0 | interrupted | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | interruptor | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | -| file://:0:0:0:0 | invoker | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | isBuiltin | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | isBuiltin | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | isMonomorphicInReturnType | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | isReadOnly | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | items | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | itf | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | jniVersion | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | keepAlive | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Item | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Key | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | key | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | key2 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | -| file://:0:0:0:0 | key3 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | -| file://:0:0:0:0 | key4 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | -| file://:0:0:0:0 | keySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | keySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | keySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | keySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | keySet | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | keyType | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | kind | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | -| file://:0:0:0:0 | lambdaForm | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | lambdaForms | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | languageKey | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | lastField | file://:0:0:0:0 | FieldWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | lastMethod | file://:0:0:0:0 | MethodWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | lastReturned | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | lastReturned | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | lastReturned | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | lastReturned | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | leapSecond | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | left | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | length | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | length | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | length | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | limit | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | line | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | lineBuf | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | list | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | list | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | list | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | list | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | loadFactor | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | loadFactor | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | loadFactor | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | loadFactor | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | lock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | lockState | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | longVal | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | mag | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | mainClass | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | map | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | mark | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | maxPriority | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | member | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | memberName_table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | message | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | message | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | metaType | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | methodHandle_table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | methodHandles | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | methodName | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | methodName | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | methodNameToAccessMode | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | methodType_V_table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | methodType_table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | methodType_table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | modCount | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | mode | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | mode | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | modifiers | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | modifyThreadPermission | file://:0:0:0:0 | RuntimePermission | file://:0:0:0:0 | | -| file://:0:0:0:0 | module | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | mv | file://:0:0:0:0 | MethodVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | mv | file://:0:0:0:0 | MethodVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | mv | file://:0:0:0:0 | ModuleVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | nUnstartedThreads | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | name | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | names | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | nativeByteOrder | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | nativeByteOrder | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | nativeLibraryContext | file://:0:0:0:0 | Deque | file://:0:0:0:0 | | -| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | newValue | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Edge | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | ExceptionNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Item | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | next | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextHashCode | file://:0:0:0:0 | AtomicInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceEntriesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceEntriesToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceEntriesToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceEntriesToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceKeysTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceKeysToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceKeysToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceKeysToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceMappingsTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceMappingsToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceMappingsToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceMappingsToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceValuesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceValuesToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceValuesToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | MapReduceValuesToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | ReduceEntriesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | ReduceKeysTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextRight | file://:0:0:0:0 | ReduceValuesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | nextWaiter | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | ngroups | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | nominalGetters | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | nsteals | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | nthreads | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | offset | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | open | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | opens | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | ordinal | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | origin | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | origin | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | origin | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | originalHostName | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | AccessType | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Category | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Character | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Characteristics | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Date | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | DoubleBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Exports | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ExtendedOption | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | FileTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | FilteringMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | FloatBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | IntBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Intrinsic | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | IsoCountryCode | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | IsoEra | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Level | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | LinkOption | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | LongBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Modifier | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Modifier | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Modifier | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Modifier | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ModuleDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Month | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Opens | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Option | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Provides | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Requires | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | RetentionPolicy | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ShortBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | State | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Status | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Tag | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | TimeDefinition | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | URI | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | UnicodeScript | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Version | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | Wrapper | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | ZoneOffsetTransition | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | other | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | out | file://:0:0:0:0 | FileDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | out | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | out | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | out | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | -| file://:0:0:0:0 | outputStackMax | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | outputStackTop | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | override | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | override | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | override | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | override | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | override | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | owner | file://:0:0:0:0 | ForkJoinWorkerThread | file://:0:0:0:0 | | -| file://:0:0:0:0 | owner | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | owner | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | A | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractList | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractQueuedSynchronizer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AbstractStringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AccessMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AnnotationType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ArrayList | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ArrayTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ArrayTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ArrayTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AsynchronousFileChannel | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AttributedCharacterIterator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | AttributedCharacterIterator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BaseLocale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BooleanSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BooleanSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BooleanSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BottomSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BottomSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BottomSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BoundMethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BufferedWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BufferedWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | BulkTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteOrder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteOrder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CallSite | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Callable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Category | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Category | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CertPath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CharSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Character | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Character | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoLocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ChronoZonedDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassReader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Clock | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Closeable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Closeable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodeSource | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodeSource | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodeSource | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodeSource | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CodingErrorAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Collector | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CompositePrinterParser | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Condition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConditionObject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Configuration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ConstructorAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ContentHandlerFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DataOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Date | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeParseContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimeParseContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimePrintContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DateTimePrintContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DecimalStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSummaryStatistics | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSupplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleSupplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | DoubleUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | EnumSet | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Era | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Executor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Exports | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FileChannel | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FileFilter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FileNameMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FilenameFilter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FilenameFilter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FilterInfo | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FilterInfo | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FloatSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinWorkerThread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ForkJoinWorkerThread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormalTypeParameter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormalTypeParameter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormalTypeParameter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Frame | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Identity | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InetAddress | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InetAddress | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | InputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Instant | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSummaryStatistics | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSupplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntSupplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Interruptible | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IsoCountryCode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | IsoCountryCode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Iterator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LangReflectAccess | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Level | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LineReader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSummaryStatistics | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSupplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongSupplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | LongUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ManagedBlocker | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ManagedBlocker | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MapMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Method | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodTypeForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | MethodWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleLayer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ModuleLayer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | NamedFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | NetworkInterface | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputFilter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputFilter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectInputValidation | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutput | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetDateTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OffsetTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Opens | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Option | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Option | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | OutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Permission | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PrintWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Properties | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Provider | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Provides | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Proxy | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PublicKey | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PublicKey | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | PublicKey | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | R | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ReadableByteChannel | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Reader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Reader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Reader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Reference | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Requires | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ResolvedModule | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | S | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Service | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Service | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ShortSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SimpleClassTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SimpleClassTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SimpleClassTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Specializer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StackFrameInfo | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StackWalker | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Stream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Subject | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T_CONS | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T_CONS | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | T_CONS | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAdjuster | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalAmount | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TextStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeTreeVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeVariableSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeVariableSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | TypeVariableSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URLConnection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URLConnection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URLStreamHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | URLStreamHandlerFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VarForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VarForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VarHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Visitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Visitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VoidDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VoidDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | VoidDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WatchService | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WatchService | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WatchService | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WatchService | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WeakHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Wildcard | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Wildcard | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Wildcard | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Wrapper | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Wrapper | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | Writer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p0 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | A | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | A | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AccessDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AccessDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AnnotationType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | AnnotationVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Appendable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Attribute | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BigInteger | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CertPath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ChronoField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ChronoLocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassNotFoundException | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassValue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ClassVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Comparator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CompletionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConcurrentMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConcurrentMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConcurrentMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConcurrentMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Constructor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConstructorAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ConstructorAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | CountedCompleter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DateTimeFormatter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DomainCombiner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DomainCombiner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DomainCombiner | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DoublePredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DoubleStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | DoubleUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Duration | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ExtendedOption | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Field | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | FieldVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Filter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinWorkerThread | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinWorkerThreadFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ForkJoinWorkerThreadFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | FormatStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Frame | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | GenericsFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | InetAddress | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Integer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Intrinsic | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Iterable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Iterator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Iterator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Iterator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Iterator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LambdaForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LocalDate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Locale | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LocaleExtensions | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LongPredicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LongStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | LongUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ManagedBlocker | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | MethodVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ModuleDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ModuleReference | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ModuleVisitor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Month | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ObjDoubleConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ObjIntConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ObjLongConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ObjectInputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ObjectOutputStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | P1 | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | P1 | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ParsePosition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ParsePosition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ParsePosition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ParsePosition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Path | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Period | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PermissionCollection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PermissionCollection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PrivilegedAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PrivilegedAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PrivilegedExceptionAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | PrivilegedExceptionAction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Provider | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Proxy | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SocketAddress | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Stream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Supplier | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Temporal | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalAccessor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalField | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalQuery | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TemporalUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ThreadFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Throwable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Timestamp | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToDoubleBiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToIntBiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToLongBiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | TypePath | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | VarForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p1 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | A | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | A | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | BinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ByteBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | CharSequence | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassNotFoundException | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ClassWriter | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | DayOfWeek | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | DecimalStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | DoubleUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ExceptionNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Executable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ExecutorService | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ExecutorService | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | FieldPosition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | FieldPosition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | File | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | FilteringMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | FilteringMode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Handle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Handle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Handle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Handle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | IntUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Intrinsic | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | LongUnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Module | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ModuleDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ModuleFinder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ModuleLayer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Name | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | NetworkInterface | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | PrintStream | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Random | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ReturnType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ThreadGroup | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Type | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | URLStreamHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | UnaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | Version | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | WritableByteChannel | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p2 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | A | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | AccessControlContext | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Charset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | CompletionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | CompletionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Item | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LocalTime | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | ObjectStreamClass | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | ResolverStyle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | StringBuilder | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | URI | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | Void | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p3 | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | CompletionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | DoubleArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | FileDescriptor | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | FloatArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | LocaleExtensions | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | LongArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ShortArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | URLStreamHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p4 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | BiConsumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Chronology | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ConcurrentHashMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Kind | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceEntriesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceEntriesToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceEntriesToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceEntriesToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceKeysTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceKeysToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceKeysToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceKeysToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceMappingsTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceMappingsToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceMappingsToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceMappingsToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceValuesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceValuesToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceValuesToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | MapReduceValuesToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ProtectionDomain | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ReduceEntriesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ReduceKeysTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | ReduceValuesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | StringBuffer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | TimeDefinition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | TimeDefinition | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p5 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Consumer | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToDoubleBiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToIntBiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToLongBiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p6 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p7 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ClassLoader | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | ZoneOffset | file://:0:0:0:0 | | -| file://:0:0:0:0 | p8 | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | E | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | TimeUnit | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p9 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p10 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p10 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p10 | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | p10 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p10 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p10 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p10 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p10 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p10 | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | p11 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p11 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p11 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p11 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p11 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p11 | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | p12 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p12 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p12 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p12 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p13 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p13 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p13 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p13 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p14 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p14 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p14 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p15 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p15 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p15 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p16 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p16 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p17 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p17 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | p18 | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | p19 | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | packages | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | parameterTypes | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | parameters | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | parameters | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | parent | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | parkBlocker | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | parkBlocker | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | parkBlocker | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | path | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | path | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | path | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | pathSeparator | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | pathSeparatorChar | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pending | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | phantomCleanableList | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | phase | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | pool | file://:0:0:0:0 | ByteVector | file://:0:0:0:0 | | -| file://:0:0:0:0 | pool | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | -| file://:0:0:0:0 | pool | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | -| file://:0:0:0:0 | pool | file://:0:0:0:0 | ForkJoinPool | file://:0:0:0:0 | | -| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | position | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | preferIPv6Address | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | prev | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | prev | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | prev | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | prev | file://:0:0:0:0 | PhantomCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | prev | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | prev | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | prev | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | prev | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | prev | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | primCounts | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | principals | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | printStackPropertiesSet | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | printStackPropertiesSet | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | printStackPropertiesSet | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | printStackPropertiesSet | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | printStackWhenAccessFails | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | printStackWhenAccessFails | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | printStackWhenAccessFails | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | printStackWhenAccessFails | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | priority | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | priority | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | privCredentials | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingActive | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | processPendingLock | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | provides | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | pubCredentials | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | queue | file://:0:0:0:0 | ReferenceQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | rangeEnd | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | rangeEnd | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | rangeEnd | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | rangeStart | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | rangeStart | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | rangeStart | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | rawVersionString | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | red | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | DoubleBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | IntBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | reducer | file://:0:0:0:0 | LongBinaryOperator | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | Cleaner | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | ForkJoinTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | ThreadLocal | file://:0:0:0:0 | | -| file://:0:0:0:0 | referent | file://:0:0:0:0 | Version | file://:0:0:0:0 | | -| file://:0:0:0:0 | reflectionFactory | file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | reflectionFactory | file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | reflectionFactory | file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | reflectionFactory | file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | reflectionFactory | file://:0:0:0:0 | ReflectionFactory | file://:0:0:0:0 | | -| file://:0:0:0:0 | requires | file://:0:0:0:0 | Map | file://:0:0:0:0 | | -| file://:0:0:0:0 | resolution | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | AtomicReference | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | K | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | U | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | result | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | retainClassRef | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | returnType | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | returnType | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | right | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceEntriesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceEntriesToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceEntriesToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceEntriesToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceKeysTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceKeysToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceKeysToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceKeysToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceMappingsTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceMappingsToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceMappingsToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceMappingsToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceValuesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceValuesToDoubleTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceValuesToIntTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | MapReduceValuesToLongTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | ReduceEntriesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | ReduceKeysTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rights | file://:0:0:0:0 | ReduceValuesTask | file://:0:0:0:0 | | -| file://:0:0:0:0 | rng | file://:0:0:0:0 | Random | file://:0:0:0:0 | | -| file://:0:0:0:0 | rng | file://:0:0:0:0 | Random | file://:0:0:0:0 | | -| file://:0:0:0:0 | rng | file://:0:0:0:0 | Random | file://:0:0:0:0 | | -| file://:0:0:0:0 | root | file://:0:0:0:0 | TreeNode | file://:0:0:0:0 | | -| file://:0:0:0:0 | runnable | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | runnable | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | runnable | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | saturate | file://:0:0:0:0 | Predicate | file://:0:0:0:0 | | -| file://:0:0:0:0 | scriptKey | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | sdAccessor | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | sdFieldName | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | searchFunction | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | searchFunction | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | searchFunction | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | searchFunction | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | securityCheckCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | securityCheckCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | securityCheckCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | securityCheckCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | securityCheckCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | separator | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | separatorChar | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | serialVersionUID | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | signature | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | signum | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | size | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | sizeTable | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | slotToArgTable | file://:0:0:0:0 | IntArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | softCleanableList | file://:0:0:0:0 | SoftCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | source | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | spare | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | speciesCode | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stack | file://:0:0:0:0 | TableStack | file://:0:0:0:0 | | -| file://:0:0:0:0 | stackPred | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | stackSize | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | stackSize | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | start | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | start | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | start | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | start | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | start | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | start | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | startIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | state | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | state | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | state | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | status | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | stealCount | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | step | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | step | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | step | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | step | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | step | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | step | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | stillborn | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | stillborn | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | strVal1 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | strVal2 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | strVal3 | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | streamBytes | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | strict | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | successor | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | successor | file://:0:0:0:0 | Label | file://:0:0:0:0 | | -| file://:0:0:0:0 | successors | file://:0:0:0:0 | Edge | file://:0:0:0:0 | | -| file://:0:0:0:0 | symbolicMethodTypeErased | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | symbolicMethodTypeInvoker | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | sync | file://:0:0:0:0 | Sync | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tab | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | table | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | tag | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | tail | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | tail | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | tail | file://:0:0:0:0 | Node | file://:0:0:0:0 | | -| file://:0:0:0:0 | target | file://:0:0:0:0 | MethodHandle | file://:0:0:0:0 | | -| file://:0:0:0:0 | target | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | target | file://:0:0:0:0 | Runnable | file://:0:0:0:0 | | -| file://:0:0:0:0 | thisName | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | thread | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadInitNumber | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadInitNumber | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocalHashCode | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocalRandomProbe | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocalRandomProbe | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocalRandomProbe | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocalRandomSecondarySeed | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocalRandomSecondarySeed | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocalRandomSecondarySeed | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocalRandomSeed | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocalRandomSeed | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocalRandomSeed | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadLocals | file://:0:0:0:0 | ThreadLocalMap | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadSeqNumber | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadSeqNumber | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadStatus | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threadStatus | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threads | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | threshold | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threshold | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threshold | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | threshold | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | thrower | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | tid | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | tid | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | timestamp | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | timestamp | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | toIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | toIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | toIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | toIndex | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | top | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | topClass | file://:0:0:0:0 | Class | file://:0:0:0:0 | | -| file://:0:0:0:0 | topClassIsSuper | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | topSpecies | file://:0:0:0:0 | SpeciesData | file://:0:0:0:0 | | -| file://:0:0:0:0 | totalObjectRefs | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformCache | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformHelpers | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformMethods | file://:0:0:0:0 | List | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | BiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | Function | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToDoubleBiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToDoubleFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToIntBiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToIntFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToLongBiFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | transformer | file://:0:0:0:0 | ToLongFunction | file://:0:0:0:0 | | -| file://:0:0:0:0 | tree | file://:0:0:0:0 | MethodTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | tree | file://:0:0:0:0 | MethodTypeSignature | file://:0:0:0:0 | | -| file://:0:0:0:0 | tree | file://:0:0:0:0 | S | file://:0:0:0:0 | | -| file://:0:0:0:0 | type | file://:0:0:0:0 | BasicType | file://:0:0:0:0 | | -| file://:0:0:0:0 | type | file://:0:0:0:0 | MethodType | file://:0:0:0:0 | | -| file://:0:0:0:0 | type | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | type | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | type | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | type | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | type | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | typeParameters | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | typeParameters | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | typeTable | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | typesAndInvokers | file://:0:0:0:0 | TypesAndInvokers | file://:0:0:0:0 | | -| file://:0:0:0:0 | ueh | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | uncaughtExceptionHandler | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | uncaughtExceptionHandler | file://:0:0:0:0 | UncaughtExceptionHandler | file://:0:0:0:0 | | -| file://:0:0:0:0 | universe | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | url | file://:0:0:0:0 | URL | file://:0:0:0:0 | | -| file://:0:0:0:0 | useCaches | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | uses | file://:0:0:0:0 | Set | file://:0:0:0:0 | | -| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | val | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | ByteArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | Entry | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | Object | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | T | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | V | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | byte | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | char | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | double | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | float | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | long | file://:0:0:0:0 | | -| file://:0:0:0:0 | value | file://:0:0:0:0 | short | file://:0:0:0:0 | | -| file://:0:0:0:0 | values | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | values | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | values | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | values | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | values | file://:0:0:0:0 | Collection | file://:0:0:0:0 | | -| file://:0:0:0:0 | variantKey | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | version | file://:0:0:0:0 | Version | file://:0:0:0:0 | | -| file://:0:0:0:0 | version | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | vform | file://:0:0:0:0 | VarForm | file://:0:0:0:0 | | -| file://:0:0:0:0 | vmentry | file://:0:0:0:0 | MemberName | file://:0:0:0:0 | | -| file://:0:0:0:0 | waitStatus | file://:0:0:0:0 | int | file://:0:0:0:0 | | -| file://:0:0:0:0 | waiter | file://:0:0:0:0 | Thread | file://:0:0:0:0 | | -| file://:0:0:0:0 | weakCleanableList | file://:0:0:0:0 | WeakCleanable | file://:0:0:0:0 | | -| file://:0:0:0:0 | wildcard | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | wildcard | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | wildcard | file://:0:0:0:0 | boolean | file://:0:0:0:0 | | -| file://:0:0:0:0 | workQueue | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | workQueue | file://:0:0:0:0 | WorkQueue | file://:0:0:0:0 | | -| file://:0:0:0:0 | workQueues | file://:0:0:0:0 | Array | file://:0:0:0:0 | | -| file://:0:0:0:0 | workerNamePrefix | file://:0:0:0:0 | String | file://:0:0:0:0 | | -| file://:0:0:0:0 | writeBuffer | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | writeBuffer | file://:0:0:0:0 | CharArray | file://:0:0:0:0 | | -| file://:0:0:0:0 | zone | file://:0:0:0:0 | ZoneId | file://:0:0:0:0 | | | variables.kt:2:1:8:1 | other | file://:0:0:0:0 | Object | file://:0:0:0:0 | | | variables.kt:3:5:3:21 | prop | file://:0:0:0:0 | int | variables.kt:3:21:3:21 | 1 | | variables.kt:5:20:5:29 | param | file://:0:0:0:0 | int | file://:0:0:0:0 | | diff --git a/java/ql/test/kotlin/library-tests/variables/variables.ql b/java/ql/test/kotlin/library-tests/variables/variables.ql index 92cf1e45e97..cdcdf4b1119 100644 --- a/java/ql/test/kotlin/library-tests/variables/variables.ql +++ b/java/ql/test/kotlin/library-tests/variables/variables.ql @@ -31,5 +31,6 @@ MaybeExpr initializer(Variable v) { } from Variable v +where v.fromSource() select v, v.getType(), initializer(v) From 715a92c602815fba3f61af8cbb7a6d4336d3f688 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 21 Oct 2021 18:48:15 +0100 Subject: [PATCH 0607/1618] Kotlin: Add CFG for `when` expressions --- .../lib/semmle/code/java/ControlFlowGraph.qll | 65 ++++++++++++++++++- java/ql/lib/semmle/code/java/Expr.qll | 8 +++ 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 8cb1af76999..ef20d4edcee 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -303,6 +303,13 @@ private module ControlFlowGraphImpl { ) or exists(ConditionalStmt condstmt | condstmt.getCondition() = b) + or + exists(WhenBranch whenbranch | + whenbranch.getCondition() = b) + or + exists(WhenExpr whenexpr | + inBooleanContext(whenexpr) and + whenexpr.getBranch(_).getResult() = b) } /** @@ -386,7 +393,7 @@ private module ControlFlowGraphImpl { private Stmt nonReturningStmt() { result instanceof ThrowStmt or - result.(ExprStmt).getExpr() = nonReturningMethodAccess() + result.(ExprStmt).getExpr() = nonReturningExpr() or result.(BlockStmt).getLastStmt() = nonReturningStmt() or @@ -401,6 +408,20 @@ private module ControlFlowGraphImpl { ) } + /** + * Gets an expression that always throws an exception or calls `exit`. + */ + private Expr nonReturningExpr() { + result = nonReturningMethodAccess() + or + exists(WhenExpr whenexpr | whenexpr = result | + whenexpr.getBranch(_).isElseBranch() and + forex(WhenBranch whenbranch | whenbranch = whenexpr.getBranch(_) | + whenbranch.getResult() = nonReturningExpr() + or + whenbranch.getResult() = nonReturningStmt())) + } + /** * Expressions and statements with CFG edges in post-order AST traversal. * @@ -459,6 +480,8 @@ private module ControlFlowGraphImpl { this instanceof LocalTypeDeclStmt or this instanceof AssertStmt + or + this instanceof WhenBranch } /** Gets child nodes in their order of execution. Indexing starts at either -1 or 0. */ @@ -570,6 +593,8 @@ private module ControlFlowGraphImpl { or result = n and n instanceof ConditionalExpr or + result = n and n instanceof WhenExpr + or result = n and n.(PostOrderNode).isLeafNode() or result = first(n.(PostOrderNode).firstChild()) @@ -880,6 +905,23 @@ private module ControlFlowGraphImpl { last(s.getVariable(count(s.getAVariable())), last, completion) and completion = NormalCompletion() ) + or + // The last node in a `when` expression is the last node in any of its branches or + // the last node of the condition in the absence of an else-branch. + exists(WhenExpr whenexpr | whenexpr = n | + last = n and + completion = NormalCompletion() and + not whenexpr.getBranch(_).isElseBranch() + or + last(whenexpr.getBranch(_).getResult(), last, completion) + ) + or + exists(WhenBranch whenbranch | whenbranch = n | + last(whenbranch.getCondition(), last, BooleanCompletion(false, _)) and + completion = NormalCompletion() + or + last(whenbranch.getResult(), last, completion) + ) } /** @@ -1142,6 +1184,27 @@ private module ControlFlowGraphImpl { or exists(int i | last(s.getVariable(i), n, completion) and result = first(s.getVariable(i + 1))) ) + or + // When expressions: + exists(WhenExpr whenexpr | n = whenexpr | + n = whenexpr and result = first(whenexpr.getBranch(0)) and + completion = NormalCompletion() + or + exists(int i | + last(whenexpr.getBranch(i).getCondition(), n, completion) and + completion = BooleanCompletion(false, _) and + result = first(whenexpr.getBranch(i + 1))) + ) + or + // When branches: + exists(WhenBranch whenbranch | n = whenbranch | + completion = NormalCompletion() and + result = first(whenbranch.getCondition()) + or + last(whenbranch.getCondition(), n, completion) and + completion = BooleanCompletion(true, _) and + result = first(whenbranch.getResult()) + ) } /* diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index a5965137d65..9c55b5b0384 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2147,6 +2147,9 @@ class WhenExpr extends Expr, @whenexpr { /** Gets the `i`th branch. */ WhenBranch getBranch(int i) { when_branch(result, this, i) } + + /** Holds if this was written as an `if` expression. */ + predicate isIf() { when_if(this) } } /** A Kotlin `when` branch. */ @@ -2160,6 +2163,11 @@ class WhenBranch extends Top, @whenbranch { result.(Stmt).isNthChildOf(this, 1) } + /** Holds if this is an `else` branch. */ + predicate isElseBranch() { + when_branch_else(this) + } + override string toString() { result = "... -> ..." } override string getAPrimaryQlClass() { result = "WhenBranch" } From d0bf462a45e91410a3a5d824deabee298b01f8b1 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 26 Oct 2021 15:07:44 +0100 Subject: [PATCH 0608/1618] Kotlin: Add a copy of Java's controlflow/basic test --- .../library-tests/controlflow/basic/Test.kt | 80 +++++++++++ .../controlflow/basic/bbStmts.expected | 93 ++++++++++++ .../controlflow/basic/bbStmts.ql | 7 + .../basic/bbStrictDominance.expected | 0 .../controlflow/basic/bbStrictDominance.ql | 6 + .../controlflow/basic/bbSuccessor.expected | 9 ++ .../controlflow/basic/bbSuccessor.ql | 5 + .../controlflow/basic/getASuccessor.expected | 133 ++++++++++++++++++ .../controlflow/basic/getASuccessor.ql | 37 +++++ .../basic/strictDominance.expected | 39 +++++ .../controlflow/basic/strictDominance.ql | 6 + .../basic/strictPostDominance.expected | 83 +++++++++++ .../controlflow/basic/strictPostDominance.ql | 6 + 13 files changed, 504 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/Test.kt create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.ql create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.ql create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.ql create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.ql create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.ql create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.ql diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/Test.kt b/java/ql/test/kotlin/library-tests/controlflow/basic/Test.kt new file mode 100644 index 00000000000..b546dde5167 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/Test.kt @@ -0,0 +1,80 @@ +package dominance; + +public class Test { + fun test() { + var x: Int = 0 + var y: Long = 50 + var z: Int = 0 + var w: Int = 0 + + // if-else, multiple statements in block + if (x > 0) { + y = 20 + z = 10 + } else { + y = 30 + } + + z = 0 + + // if-else with return in one branch + if(x < 0) + y = 40 + else + return + + // this is not the start of a BB due to the return + z = 10 + + // single-branch if-else + if (x == 0) { + y = 60 + z = 10 + } + + z = 20 + + // while loop + while(x > 0) { + y = 10 + x-- + } + + z = 30 + +/* +TODO + // for loop + for(j in 0 .. 19) { + y = 0 + w = 10 + } + + z = 40 + + // nested control flow + for(j in 0 .. 9) { + y = 30 + if(z > 0) + if(y > 0) { + w = 0 + break; + } else { + w = 20 + } + else { + w = 10 + continue + } + x = 0 + } +*/ + + z = 50 + + // nested control-flow + + w = 40 + return + } +} diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected new file mode 100644 index 00000000000..c7bb1906e32 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected @@ -0,0 +1,93 @@ +| Test.kt:3:1:80:1 | { ... } | 0 | Test.kt:3:1:80:1 | { ... } | +| Test.kt:3:1:80:1 | { ... } | 0 | Test.kt:3:1:80:1 | { ... } | +| Test.kt:3:1:80:1 | { ... } | 1 | Test.kt:3:1:80:1 | | +| Test.kt:3:1:80:1 | { ... } | 1 | Test.kt:3:1:80:1 | super(...) | +| Test.kt:3:1:80:1 | { ... } | 2 | Test.kt:3:1:80:1 | ; | +| Test.kt:3:1:80:1 | { ... } | 3 | Test.kt:3:1:80:1 | (...) | +| Test.kt:3:1:80:1 | { ... } | 4 | Test.kt:3:8:80:1 | Test | +| Test.kt:4:2:79:2 | test | 0 | Test.kt:4:2:79:2 | test | +| Test.kt:4:13:79:2 | { ... } | 0 | Test.kt:4:13:79:2 | { ... } | +| Test.kt:4:13:79:2 | { ... } | 1 | Test.kt:5:3:5:16 | var ...; | +| Test.kt:4:13:79:2 | { ... } | 2 | Test.kt:5:16:5:16 | 0 | +| Test.kt:4:13:79:2 | { ... } | 3 | Test.kt:5:3:5:16 | x | +| Test.kt:4:13:79:2 | { ... } | 4 | Test.kt:6:3:6:18 | var ...; | +| Test.kt:4:13:79:2 | { ... } | 5 | Test.kt:6:17:6:18 | 50 | +| Test.kt:4:13:79:2 | { ... } | 6 | Test.kt:6:3:6:18 | y | +| Test.kt:4:13:79:2 | { ... } | 7 | Test.kt:7:3:7:16 | var ...; | +| Test.kt:4:13:79:2 | { ... } | 8 | Test.kt:7:16:7:16 | 0 | +| Test.kt:4:13:79:2 | { ... } | 9 | Test.kt:7:3:7:16 | z | +| Test.kt:4:13:79:2 | { ... } | 10 | Test.kt:8:3:8:16 | var ...; | +| Test.kt:4:13:79:2 | { ... } | 11 | Test.kt:8:16:8:16 | 0 | +| Test.kt:4:13:79:2 | { ... } | 12 | Test.kt:8:3:8:16 | w | +| Test.kt:4:13:79:2 | { ... } | 13 | Test.kt:11:3:16:3 | ; | +| Test.kt:4:13:79:2 | { ... } | 14 | Test.kt:11:3:16:3 | when ... | +| Test.kt:4:13:79:2 | { ... } | 15 | Test.kt:11:3:16:3 | ... -> ... | +| Test.kt:4:13:79:2 | { ... } | 16 | Test.kt:11:7:11:7 | x | +| Test.kt:4:13:79:2 | { ... } | 17 | Test.kt:11:11:11:11 | 0 | +| Test.kt:4:13:79:2 | { ... } | 18 | Test.kt:11:7:11:11 | ... > ... | +| Test.kt:11:3:16:3 | ... -> ... | 0 | Test.kt:11:3:16:3 | ... -> ... | +| Test.kt:11:3:16:3 | ... -> ... | 1 | Test.kt:11:3:16:3 | true | +| Test.kt:11:14:14:3 | { ... } | 0 | Test.kt:11:14:14:3 | { ... } | +| Test.kt:11:14:14:3 | { ... } | 1 | Test.kt:12:4:12:4 | ; | +| Test.kt:11:14:14:3 | { ... } | 2 | Test.kt:12:8:12:9 | 20 | +| Test.kt:11:14:14:3 | { ... } | 3 | Test.kt:12:4:12:4 | ...=... | +| Test.kt:11:14:14:3 | { ... } | 4 | Test.kt:13:4:13:4 | ; | +| Test.kt:11:14:14:3 | { ... } | 5 | Test.kt:13:8:13:9 | 10 | +| Test.kt:11:14:14:3 | { ... } | 6 | Test.kt:13:4:13:4 | ...=... | +| Test.kt:14:10:16:3 | { ... } | 0 | Test.kt:14:10:16:3 | { ... } | +| Test.kt:14:10:16:3 | { ... } | 1 | Test.kt:15:4:15:4 | ; | +| Test.kt:14:10:16:3 | { ... } | 2 | Test.kt:15:8:15:9 | 30 | +| Test.kt:14:10:16:3 | { ... } | 3 | Test.kt:15:4:15:4 | ...=... | +| Test.kt:18:3:18:3 | ; | 0 | Test.kt:18:3:18:3 | ; | +| Test.kt:18:3:18:3 | ; | 1 | Test.kt:18:7:18:7 | 0 | +| Test.kt:18:3:18:3 | ; | 2 | Test.kt:18:3:18:3 | ...=... | +| Test.kt:18:3:18:3 | ; | 3 | Test.kt:21:3:24:9 | ; | +| Test.kt:18:3:18:3 | ; | 4 | Test.kt:21:3:24:9 | when ... | +| Test.kt:18:3:18:3 | ; | 5 | Test.kt:21:3:24:9 | ... -> ... | +| Test.kt:18:3:18:3 | ; | 6 | Test.kt:21:6:21:6 | x | +| Test.kt:18:3:18:3 | ; | 7 | Test.kt:21:10:21:10 | 0 | +| Test.kt:18:3:18:3 | ; | 8 | Test.kt:21:6:21:10 | ... < ... | +| Test.kt:21:3:24:9 | ... -> ... | 0 | Test.kt:21:3:24:9 | ... -> ... | +| Test.kt:21:3:24:9 | ... -> ... | 1 | Test.kt:21:3:24:9 | true | +| Test.kt:22:4:22:4 | ; | 0 | Test.kt:22:4:22:4 | ; | +| Test.kt:22:4:22:4 | ; | 1 | Test.kt:22:8:22:9 | 40 | +| Test.kt:22:4:22:4 | ; | 2 | Test.kt:22:4:22:4 | ...=... | +| Test.kt:22:4:22:4 | ; | 3 | Test.kt:27:3:27:3 | ; | +| Test.kt:22:4:22:4 | ; | 4 | Test.kt:27:7:27:8 | 10 | +| Test.kt:22:4:22:4 | ; | 5 | Test.kt:27:3:27:3 | ...=... | +| Test.kt:22:4:22:4 | ; | 6 | Test.kt:30:3:33:3 | ; | +| Test.kt:22:4:22:4 | ; | 7 | Test.kt:30:3:33:3 | when ... | +| Test.kt:24:4:24:9 | return ... | 0 | Test.kt:24:4:24:9 | return ... | +| Test.kt:30:3:33:3 | ... -> ... | 0 | Test.kt:30:3:33:3 | ... -> ... | +| Test.kt:30:3:33:3 | ... -> ... | 1 | Test.kt:30:7:30:7 | x | +| Test.kt:30:3:33:3 | ... -> ... | 2 | Test.kt:30:12:30:12 | 0 | +| Test.kt:30:3:33:3 | ... -> ... | 3 | Test.kt:30:7:30:12 | ... == ... | +| Test.kt:30:15:33:3 | { ... } | 0 | Test.kt:30:15:33:3 | { ... } | +| Test.kt:30:15:33:3 | { ... } | 1 | Test.kt:31:4:31:4 | ; | +| Test.kt:30:15:33:3 | { ... } | 2 | Test.kt:31:8:31:9 | 60 | +| Test.kt:30:15:33:3 | { ... } | 3 | Test.kt:31:4:31:4 | ...=... | +| Test.kt:30:15:33:3 | { ... } | 4 | Test.kt:32:4:32:4 | ; | +| Test.kt:30:15:33:3 | { ... } | 5 | Test.kt:32:8:32:9 | 10 | +| Test.kt:30:15:33:3 | { ... } | 6 | Test.kt:32:4:32:4 | ...=... | +| Test.kt:35:3:35:3 | ; | 0 | Test.kt:35:3:35:3 | ; | +| Test.kt:35:3:35:3 | ; | 1 | Test.kt:35:7:35:8 | 20 | +| Test.kt:35:3:35:3 | ; | 2 | Test.kt:35:3:35:3 | ...=... | +| Test.kt:35:3:35:3 | ; | 3 | Test.kt:38:3:41:3 | while (...) | +| Test.kt:35:3:35:3 | ; | 4 | Test.kt:38:9:38:9 | x | +| Test.kt:35:3:35:3 | ; | 5 | Test.kt:38:13:38:13 | 0 | +| Test.kt:35:3:35:3 | ; | 6 | Test.kt:38:9:38:13 | ... > ... | +| Test.kt:38:16:41:3 | { ... } | 0 | Test.kt:38:16:41:3 | { ... } | +| Test.kt:38:16:41:3 | { ... } | 1 | Test.kt:39:4:39:4 | ; | +| Test.kt:38:16:41:3 | { ... } | 2 | Test.kt:39:8:39:9 | 10 | +| Test.kt:38:16:41:3 | { ... } | 3 | Test.kt:39:4:39:4 | ...=... | +| Test.kt:38:16:41:3 | { ... } | 4 | Test.kt:40:4:40:6 | ; | +| Test.kt:43:3:43:3 | ; | 0 | Test.kt:43:3:43:3 | ; | +| Test.kt:43:3:43:3 | ; | 1 | Test.kt:43:7:43:8 | 30 | +| Test.kt:43:3:43:3 | ; | 2 | Test.kt:43:3:43:3 | ...=... | +| Test.kt:43:3:43:3 | ; | 3 | Test.kt:73:3:73:3 | ; | +| Test.kt:43:3:43:3 | ; | 4 | Test.kt:73:7:73:8 | 50 | +| Test.kt:43:3:43:3 | ; | 5 | Test.kt:73:3:73:3 | ...=... | +| Test.kt:43:3:43:3 | ; | 6 | Test.kt:77:3:77:3 | ; | +| Test.kt:43:3:43:3 | ; | 7 | Test.kt:77:7:77:8 | 40 | +| Test.kt:43:3:43:3 | ; | 8 | Test.kt:77:3:77:3 | ...=... | +| Test.kt:43:3:43:3 | ; | 9 | Test.kt:78:3:78:8 | return ... | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.ql b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.ql new file mode 100644 index 00000000000..4e8367040f5 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.ql @@ -0,0 +1,7 @@ +import default + +from BasicBlock b, int i, ControlFlowNode n +where + b.getNode(i) = n and + b.getFile().(CompilationUnit).fromSource() +select b, i, n diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.ql b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.ql new file mode 100644 index 00000000000..9765b8e6cc5 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.ql @@ -0,0 +1,6 @@ +import default +import semmle.code.java.controlflow.Dominance + +from BasicBlock b, BasicBlock b2 +where bbStrictlyDominates(b, b2) +select b, b2 diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected new file mode 100644 index 00000000000..80d02391a79 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected @@ -0,0 +1,9 @@ +| Test.kt:11:14:14:3 | { ... } | Test.kt:18:3:18:3 | ; | +| Test.kt:14:10:16:3 | { ... } | Test.kt:18:3:18:3 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:30:3:33:3 | ... -> ... | +| Test.kt:22:4:22:4 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:24:4:24:9 | return ... | Test.kt:4:2:79:2 | test | +| Test.kt:30:15:33:3 | { ... } | Test.kt:35:3:35:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:35:3:35:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:4:2:79:2 | test | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.ql b/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.ql new file mode 100644 index 00000000000..1d464c2a31a --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.ql @@ -0,0 +1,5 @@ +import default + +from BasicBlock b, BasicBlock b2 +where b.getABBSuccessor() = b2 +select b, b2 diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected new file mode 100644 index 00000000000..c14cc4ce74d --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected @@ -0,0 +1,133 @@ +| Test.kt:3:1:80:1 | ; | ExprStmt | Test.kt:3:1:80:1 | (...) | MethodAccess | +| Test.kt:3:1:80:1 | | Method | file://:0:0:0:0 | | | +| Test.kt:3:1:80:1 | (...) | MethodAccess | Test.kt:3:8:80:1 | Test | Constructor | +| Test.kt:3:1:80:1 | Test | Class | file://:0:0:0:0 | | | +| Test.kt:3:1:80:1 | super(...) | SuperConstructorInvocationStmt | Test.kt:3:1:80:1 | ; | ExprStmt | +| Test.kt:3:1:80:1 | { ... } | BlockStmt | Test.kt:3:1:80:1 | | Method | +| Test.kt:3:1:80:1 | { ... } | BlockStmt | Test.kt:3:1:80:1 | super(...) | SuperConstructorInvocationStmt | +| Test.kt:3:8:80:1 | Test | Constructor | file://:0:0:0:0 | | | +| Test.kt:3:8:80:1 | equals | Method | file://:0:0:0:0 | | | +| Test.kt:3:8:80:1 | hashCode | Method | file://:0:0:0:0 | | | +| Test.kt:3:8:80:1 | other | Parameter | file://:0:0:0:0 | | | +| Test.kt:3:8:80:1 | toString | Method | file://:0:0:0:0 | | | +| Test.kt:4:2:79:2 | test | Method | file://:0:0:0:0 | | | +| Test.kt:4:13:79:2 | { ... } | BlockStmt | Test.kt:5:3:5:16 | var ...; | LocalVariableDeclStmt | +| Test.kt:5:3:5:16 | int x | LocalVariableDecl | file://:0:0:0:0 | | | +| Test.kt:5:3:5:16 | var ...; | LocalVariableDeclStmt | Test.kt:5:16:5:16 | 0 | IntegerLiteral | +| Test.kt:5:3:5:16 | x | LocalVariableDeclExpr | Test.kt:6:3:6:18 | var ...; | LocalVariableDeclStmt | +| Test.kt:5:16:5:16 | 0 | IntegerLiteral | Test.kt:5:3:5:16 | x | LocalVariableDeclExpr | +| Test.kt:6:3:6:18 | long y | LocalVariableDecl | file://:0:0:0:0 | | | +| Test.kt:6:3:6:18 | var ...; | LocalVariableDeclStmt | Test.kt:6:17:6:18 | 50 | LongLiteral | +| Test.kt:6:3:6:18 | y | LocalVariableDeclExpr | Test.kt:7:3:7:16 | var ...; | LocalVariableDeclStmt | +| Test.kt:6:17:6:18 | 50 | LongLiteral | Test.kt:6:3:6:18 | y | LocalVariableDeclExpr | +| Test.kt:7:3:7:16 | int z | LocalVariableDecl | file://:0:0:0:0 | | | +| Test.kt:7:3:7:16 | var ...; | LocalVariableDeclStmt | Test.kt:7:16:7:16 | 0 | IntegerLiteral | +| Test.kt:7:3:7:16 | z | LocalVariableDeclExpr | Test.kt:8:3:8:16 | var ...; | LocalVariableDeclStmt | +| Test.kt:7:16:7:16 | 0 | IntegerLiteral | Test.kt:7:3:7:16 | z | LocalVariableDeclExpr | +| Test.kt:8:3:8:16 | int w | LocalVariableDecl | file://:0:0:0:0 | | | +| Test.kt:8:3:8:16 | var ...; | LocalVariableDeclStmt | Test.kt:8:16:8:16 | 0 | IntegerLiteral | +| Test.kt:8:3:8:16 | w | LocalVariableDeclExpr | Test.kt:11:3:16:3 | ; | ExprStmt | +| Test.kt:8:16:8:16 | 0 | IntegerLiteral | Test.kt:8:3:8:16 | w | LocalVariableDeclExpr | +| Test.kt:11:3:16:3 | ... -> ... | WhenBranch | Test.kt:11:3:16:3 | true | BooleanLiteral | +| Test.kt:11:3:16:3 | ... -> ... | WhenBranch | Test.kt:11:7:11:7 | x | VarAccess | +| Test.kt:11:3:16:3 | ; | ExprStmt | Test.kt:11:3:16:3 | when ... | WhenExpr | +| Test.kt:11:3:16:3 | true | BooleanLiteral | file://:0:0:0:0 | | | +| Test.kt:11:3:16:3 | when ... | WhenExpr | Test.kt:11:3:16:3 | ... -> ... | WhenBranch | +| Test.kt:11:7:11:7 | x | VarAccess | Test.kt:11:11:11:11 | 0 | IntegerLiteral | +| Test.kt:11:7:11:11 | ... > ... | GTExpr | file://:0:0:0:0 | | | +| Test.kt:11:11:11:11 | 0 | IntegerLiteral | Test.kt:11:7:11:11 | ... > ... | GTExpr | +| Test.kt:11:14:14:3 | { ... } | BlockStmt | Test.kt:12:4:12:4 | ; | ExprStmt | +| Test.kt:12:4:12:4 | ...=... | AssignExpr | Test.kt:13:4:13:4 | ; | ExprStmt | +| Test.kt:12:4:12:4 | ; | ExprStmt | Test.kt:12:8:12:9 | 20 | LongLiteral | +| Test.kt:12:8:12:9 | 20 | LongLiteral | Test.kt:12:4:12:4 | ...=... | AssignExpr | +| Test.kt:13:4:13:4 | ...=... | AssignExpr | Test.kt:18:3:18:3 | ; | ExprStmt | +| Test.kt:13:4:13:4 | ; | ExprStmt | Test.kt:13:8:13:9 | 10 | IntegerLiteral | +| Test.kt:13:8:13:9 | 10 | IntegerLiteral | Test.kt:13:4:13:4 | ...=... | AssignExpr | +| Test.kt:14:10:16:3 | { ... } | BlockStmt | Test.kt:15:4:15:4 | ; | ExprStmt | +| Test.kt:15:4:15:4 | ...=... | AssignExpr | Test.kt:18:3:18:3 | ; | ExprStmt | +| Test.kt:15:4:15:4 | ; | ExprStmt | Test.kt:15:8:15:9 | 30 | LongLiteral | +| Test.kt:15:8:15:9 | 30 | LongLiteral | Test.kt:15:4:15:4 | ...=... | AssignExpr | +| Test.kt:18:3:18:3 | ...=... | AssignExpr | Test.kt:21:3:24:9 | ; | ExprStmt | +| Test.kt:18:3:18:3 | ; | ExprStmt | Test.kt:18:7:18:7 | 0 | IntegerLiteral | +| Test.kt:18:7:18:7 | 0 | IntegerLiteral | Test.kt:18:3:18:3 | ...=... | AssignExpr | +| Test.kt:21:3:24:9 | ... -> ... | WhenBranch | Test.kt:21:3:24:9 | true | BooleanLiteral | +| Test.kt:21:3:24:9 | ... -> ... | WhenBranch | Test.kt:21:6:21:6 | x | VarAccess | +| Test.kt:21:3:24:9 | ; | ExprStmt | Test.kt:21:3:24:9 | when ... | WhenExpr | +| Test.kt:21:3:24:9 | true | BooleanLiteral | file://:0:0:0:0 | | | +| Test.kt:21:3:24:9 | when ... | WhenExpr | Test.kt:21:3:24:9 | ... -> ... | WhenBranch | +| Test.kt:21:6:21:6 | x | VarAccess | Test.kt:21:10:21:10 | 0 | IntegerLiteral | +| Test.kt:21:6:21:10 | ... < ... | LTExpr | file://:0:0:0:0 | | | +| Test.kt:21:10:21:10 | 0 | IntegerLiteral | Test.kt:21:6:21:10 | ... < ... | LTExpr | +| Test.kt:22:4:22:4 | ...=... | AssignExpr | Test.kt:27:3:27:3 | ; | ExprStmt | +| Test.kt:22:4:22:4 | ; | ExprStmt | Test.kt:22:8:22:9 | 40 | LongLiteral | +| Test.kt:22:8:22:9 | 40 | LongLiteral | Test.kt:22:4:22:4 | ...=... | AssignExpr | +| Test.kt:24:4:24:9 | return ... | ReturnStmt | Test.kt:4:2:79:2 | test | Method | +| Test.kt:27:3:27:3 | ...=... | AssignExpr | Test.kt:30:3:33:3 | ; | ExprStmt | +| Test.kt:27:3:27:3 | ; | ExprStmt | Test.kt:27:7:27:8 | 10 | IntegerLiteral | +| Test.kt:27:7:27:8 | 10 | IntegerLiteral | Test.kt:27:3:27:3 | ...=... | AssignExpr | +| Test.kt:30:3:33:3 | ... -> ... | WhenBranch | Test.kt:30:7:30:7 | x | VarAccess | +| Test.kt:30:3:33:3 | ; | ExprStmt | Test.kt:30:3:33:3 | when ... | WhenExpr | +| Test.kt:30:3:33:3 | when ... | WhenExpr | Test.kt:30:3:33:3 | ... -> ... | WhenBranch | +| Test.kt:30:3:33:3 | when ... | WhenExpr | Test.kt:35:3:35:3 | ; | ExprStmt | +| Test.kt:30:7:30:7 | x | VarAccess | Test.kt:30:12:30:12 | 0 | IntegerLiteral | +| Test.kt:30:7:30:12 | ... == ... | EQExpr | file://:0:0:0:0 | | | +| Test.kt:30:12:30:12 | 0 | IntegerLiteral | Test.kt:30:7:30:12 | ... == ... | EQExpr | +| Test.kt:30:15:33:3 | { ... } | BlockStmt | Test.kt:31:4:31:4 | ; | ExprStmt | +| Test.kt:31:4:31:4 | ...=... | AssignExpr | Test.kt:32:4:32:4 | ; | ExprStmt | +| Test.kt:31:4:31:4 | ; | ExprStmt | Test.kt:31:8:31:9 | 60 | LongLiteral | +| Test.kt:31:8:31:9 | 60 | LongLiteral | Test.kt:31:4:31:4 | ...=... | AssignExpr | +| Test.kt:32:4:32:4 | ...=... | AssignExpr | Test.kt:35:3:35:3 | ; | ExprStmt | +| Test.kt:32:4:32:4 | ; | ExprStmt | Test.kt:32:8:32:9 | 10 | IntegerLiteral | +| Test.kt:32:8:32:9 | 10 | IntegerLiteral | Test.kt:32:4:32:4 | ...=... | AssignExpr | +| Test.kt:35:3:35:3 | ...=... | AssignExpr | Test.kt:38:3:41:3 | while (...) | WhileStmt | +| Test.kt:35:3:35:3 | ; | ExprStmt | Test.kt:35:7:35:8 | 20 | IntegerLiteral | +| Test.kt:35:7:35:8 | 20 | IntegerLiteral | Test.kt:35:3:35:3 | ...=... | AssignExpr | +| Test.kt:38:3:41:3 | while (...) | WhileStmt | Test.kt:38:9:38:9 | x | VarAccess | +| Test.kt:38:9:38:9 | x | VarAccess | Test.kt:38:13:38:13 | 0 | IntegerLiteral | +| Test.kt:38:9:38:13 | ... > ... | GTExpr | Test.kt:38:16:41:3 | { ... } | BlockStmt | +| Test.kt:38:9:38:13 | ... > ... | GTExpr | Test.kt:43:3:43:3 | ; | ExprStmt | +| Test.kt:38:13:38:13 | 0 | IntegerLiteral | Test.kt:38:9:38:13 | ... > ... | GTExpr | +| Test.kt:38:16:41:3 | { ... } | BlockStmt | Test.kt:39:4:39:4 | ; | ExprStmt | +| Test.kt:39:4:39:4 | ...=... | AssignExpr | Test.kt:40:4:40:6 | ; | ExprStmt | +| Test.kt:39:4:39:4 | ; | ExprStmt | Test.kt:39:8:39:9 | 10 | LongLiteral | +| Test.kt:39:8:39:9 | 10 | LongLiteral | Test.kt:39:4:39:4 | ...=... | AssignExpr | +| Test.kt:40:4:40:6 | ; | ExprStmt | file://:0:0:0:0 | | | +| Test.kt:43:3:43:3 | ...=... | AssignExpr | Test.kt:73:3:73:3 | ; | ExprStmt | +| Test.kt:43:3:43:3 | ; | ExprStmt | Test.kt:43:7:43:8 | 30 | IntegerLiteral | +| Test.kt:43:7:43:8 | 30 | IntegerLiteral | Test.kt:43:3:43:3 | ...=... | AssignExpr | +| Test.kt:73:3:73:3 | ...=... | AssignExpr | Test.kt:77:3:77:3 | ; | ExprStmt | +| Test.kt:73:3:73:3 | ; | ExprStmt | Test.kt:73:7:73:8 | 50 | IntegerLiteral | +| Test.kt:73:7:73:8 | 50 | IntegerLiteral | Test.kt:73:3:73:3 | ...=... | AssignExpr | +| Test.kt:77:3:77:3 | ...=... | AssignExpr | Test.kt:78:3:78:8 | return ... | ReturnStmt | +| Test.kt:77:3:77:3 | ; | ExprStmt | Test.kt:77:7:77:8 | 40 | IntegerLiteral | +| Test.kt:77:7:77:8 | 40 | IntegerLiteral | Test.kt:77:3:77:3 | ...=... | AssignExpr | +| Test.kt:78:3:78:8 | return ... | ReturnStmt | Test.kt:4:2:79:2 | test | Method | +| file://:0:0:0:0 | Any | Class | file://:0:0:0:0 | | | +| file://:0:0:0:0 | Any | Constructor | file://:0:0:0:0 | | | +| file://:0:0:0:0 | Boolean | Class | file://:0:0:0:0 | | | +| file://:0:0:0:0 | Int | Class | file://:0:0:0:0 | | | +| file://:0:0:0:0 | Long | Class | file://:0:0:0:0 | | | +| file://:0:0:0:0 | String | Class | file://:0:0:0:0 | | | +| file://:0:0:0:0 | String | Class | file://:0:0:0:0 | | | +| file://:0:0:0:0 | Unit | Class | file://:0:0:0:0 | | | +| file://:0:0:0:0 | equals | Method | file://:0:0:0:0 | | | +| file://:0:0:0:0 | equals | Method | file://:0:0:0:0 | | | +| file://:0:0:0:0 | hashCode | Method | file://:0:0:0:0 | | | +| file://:0:0:0:0 | hashCode | Method | file://:0:0:0:0 | | | +| file://:0:0:0:0 | other | Parameter | file://:0:0:0:0 | | | +| file://:0:0:0:0 | other | Parameter | file://:0:0:0:0 | | | +| file://:0:0:0:0 | toString | Method | file://:0:0:0:0 | | | +| file://:0:0:0:0 | toString | Method | file://:0:0:0:0 | | | +| file://:0:0:0:0 | w | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | y | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | y | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | y | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | y | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | y | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | +| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.ql b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.ql new file mode 100644 index 00000000000..bf5ba476c05 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.ql @@ -0,0 +1,37 @@ +import java + +newtype TMaybeControlFlowNode = + TControlFlowNode(ControlFlowNode c) or + TNoControlFlowNode() + +class MaybeControlFlowNode extends TMaybeControlFlowNode { + abstract string toString(); + abstract Location getLocation(); + abstract string getPrimaryQlClasses(); +} + +class YesMaybeControlFlowNode extends MaybeControlFlowNode { + ControlFlowNode c; + YesMaybeControlFlowNode() { this = TControlFlowNode(c) } + override string toString() { result = c.toString() } + override Location getLocation() { result = c.getLocation() } + override string getPrimaryQlClasses() { result = c.getPrimaryQlClasses() } +} + +class NoMaybeControlFlowNode extends MaybeControlFlowNode { + NoMaybeControlFlowNode() { this = TNoControlFlowNode() } + override string toString() { result = "" } + override Location getLocation() { result.toString() = "file://:0:0:0:0" } + override string getPrimaryQlClasses() { result = "" } +} + +MaybeControlFlowNode maybeSuccessor(ControlFlowNode n) { + if exists(n.getASuccessor()) + then result = TControlFlowNode(n.getASuccessor()) + else result = TNoControlFlowNode() +} + +from ControlFlowNode n, MaybeControlFlowNode m +where m = maybeSuccessor(n) +select n, n.getPrimaryQlClasses(), m, m.getPrimaryQlClasses() + diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected new file mode 100644 index 00000000000..1946f255d9a --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected @@ -0,0 +1,39 @@ +| Test.kt:3:1:80:1 | super(...) | Test.kt:3:1:80:1 | ; | +| Test.kt:3:1:80:1 | { ... } | Test.kt:3:1:80:1 | ; | +| Test.kt:3:1:80:1 | { ... } | Test.kt:3:1:80:1 | super(...) | +| Test.kt:4:13:79:2 | { ... } | Test.kt:5:3:5:16 | var ...; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:6:3:6:18 | var ...; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:7:3:7:16 | var ...; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:8:3:8:16 | var ...; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:11:3:16:3 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:11:3:16:3 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:11:3:16:3 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:11:3:16:3 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:11:3:16:3 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:12:4:12:4 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:13:4:13:4 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:14:10:16:3 | { ... } | Test.kt:15:4:15:4 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:21:3:24:9 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:27:3:27:3 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:30:15:33:3 | { ... } | Test.kt:31:4:31:4 | ; | +| Test.kt:30:15:33:3 | { ... } | Test.kt:32:4:32:4 | ; | +| Test.kt:31:4:31:4 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:38:16:41:3 | { ... } | Test.kt:39:4:39:4 | ; | +| Test.kt:38:16:41:3 | { ... } | Test.kt:40:4:40:6 | ; | +| Test.kt:39:4:39:4 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:77:3:77:3 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:78:3:78:8 | return ... | +| Test.kt:73:3:73:3 | ; | Test.kt:77:3:77:3 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:78:3:78:8 | return ... | +| Test.kt:77:3:77:3 | ; | Test.kt:78:3:78:8 | return ... | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.ql b/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.ql new file mode 100644 index 00000000000..2d366a4f372 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.ql @@ -0,0 +1,6 @@ +import default +import semmle.code.java.controlflow.Dominance + +from Stmt pre, Stmt post +where strictlyDominates(pre, post) +select pre, post diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected new file mode 100644 index 00000000000..b2aa2faf215 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected @@ -0,0 +1,83 @@ +| Test.kt:3:1:80:1 | ; | Test.kt:3:1:80:1 | super(...) | +| Test.kt:3:1:80:1 | ; | Test.kt:3:1:80:1 | { ... } | +| Test.kt:3:1:80:1 | super(...) | Test.kt:3:1:80:1 | { ... } | +| Test.kt:5:3:5:16 | var ...; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:6:3:6:18 | var ...; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:6:3:6:18 | var ...; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:7:3:7:16 | var ...; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:8:3:8:16 | var ...; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:11:3:16:3 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:11:3:16:3 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:11:3:16:3 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:11:3:16:3 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:11:3:16:3 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:12:4:12:4 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:13:4:13:4 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:13:4:13:4 | ; | Test.kt:12:4:12:4 | ; | +| Test.kt:15:4:15:4 | ; | Test.kt:14:10:16:3 | { ... } | +| Test.kt:21:3:24:9 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:27:3:27:3 | ; | +| Test.kt:31:4:31:4 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:32:4:32:4 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:32:4:32:4 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:27:3:27:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:35:3:35:3 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:22:4:22:4 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:27:3:27:3 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:30:3:33:3 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:30:15:33:3 | { ... } | +| Test.kt:38:3:41:3 | while (...) | Test.kt:31:4:31:4 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:32:4:32:4 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:35:3:35:3 | ; | +| Test.kt:39:4:39:4 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:40:4:40:6 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:40:4:40:6 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:27:3:27:3 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:43:3:43:3 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:73:3:73:3 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:27:3:27:3 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:73:3:73:3 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:73:3:73:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:27:3:27:3 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:77:3:77:3 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:77:3:77:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:22:4:22:4 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:27:3:27:3 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:30:3:33:3 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:30:15:33:3 | { ... } | +| Test.kt:78:3:78:8 | return ... | Test.kt:31:4:31:4 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:32:4:32:4 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:35:3:35:3 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:38:3:41:3 | while (...) | +| Test.kt:78:3:78:8 | return ... | Test.kt:43:3:43:3 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:73:3:73:3 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:77:3:77:3 | ; | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.ql b/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.ql new file mode 100644 index 00000000000..9948718fc83 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.ql @@ -0,0 +1,6 @@ +import default +import semmle.code.java.controlflow.Dominance + +from Stmt pre, Stmt post +where strictlyPostDominates(post, pre) +select post, pre From aebd8edf8538a5723feb8a2b5a462f91b7c1b5cd Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 27 Oct 2021 12:55:52 +0100 Subject: [PATCH 0609/1618] Kotlin: Make library-tests/controlflow/basic quieter --- .../controlflow/basic/getASuccessor.expected | 30 +------------------ .../controlflow/basic/getASuccessor.ql | 1 + 2 files changed, 2 insertions(+), 29 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected index c14cc4ce74d..b99c6b16a7e 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected @@ -1,3 +1,4 @@ +| Test.kt:0:0:0:0 | TestKt | Class | file://:0:0:0:0 | | | | Test.kt:3:1:80:1 | ; | ExprStmt | Test.kt:3:1:80:1 | (...) | MethodAccess | | Test.kt:3:1:80:1 | | Method | file://:0:0:0:0 | | | | Test.kt:3:1:80:1 | (...) | MethodAccess | Test.kt:3:8:80:1 | Test | Constructor | @@ -102,32 +103,3 @@ | Test.kt:77:3:77:3 | ; | ExprStmt | Test.kt:77:7:77:8 | 40 | IntegerLiteral | | Test.kt:77:7:77:8 | 40 | IntegerLiteral | Test.kt:77:3:77:3 | ...=... | AssignExpr | | Test.kt:78:3:78:8 | return ... | ReturnStmt | Test.kt:4:2:79:2 | test | Method | -| file://:0:0:0:0 | Any | Class | file://:0:0:0:0 | | | -| file://:0:0:0:0 | Any | Constructor | file://:0:0:0:0 | | | -| file://:0:0:0:0 | Boolean | Class | file://:0:0:0:0 | | | -| file://:0:0:0:0 | Int | Class | file://:0:0:0:0 | | | -| file://:0:0:0:0 | Long | Class | file://:0:0:0:0 | | | -| file://:0:0:0:0 | String | Class | file://:0:0:0:0 | | | -| file://:0:0:0:0 | String | Class | file://:0:0:0:0 | | | -| file://:0:0:0:0 | Unit | Class | file://:0:0:0:0 | | | -| file://:0:0:0:0 | equals | Method | file://:0:0:0:0 | | | -| file://:0:0:0:0 | equals | Method | file://:0:0:0:0 | | | -| file://:0:0:0:0 | hashCode | Method | file://:0:0:0:0 | | | -| file://:0:0:0:0 | hashCode | Method | file://:0:0:0:0 | | | -| file://:0:0:0:0 | other | Parameter | file://:0:0:0:0 | | | -| file://:0:0:0:0 | other | Parameter | file://:0:0:0:0 | | | -| file://:0:0:0:0 | toString | Method | file://:0:0:0:0 | | | -| file://:0:0:0:0 | toString | Method | file://:0:0:0:0 | | | -| file://:0:0:0:0 | w | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | y | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | y | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | y | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | y | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | y | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | -| file://:0:0:0:0 | z | VarAccess | file://:0:0:0:0 | | | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.ql b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.ql index bf5ba476c05..21d3c6b94a5 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.ql +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.ql @@ -33,5 +33,6 @@ MaybeControlFlowNode maybeSuccessor(ControlFlowNode n) { from ControlFlowNode n, MaybeControlFlowNode m where m = maybeSuccessor(n) + and n.getFile().(CompilationUnit).fromSource() select n, n.getPrimaryQlClasses(), m, m.getPrimaryQlClasses() From e755cc92b62e06c7766865cd99f62eeb290536ca Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 27 Oct 2021 13:14:43 +0100 Subject: [PATCH 0610/1618] Kotlin: Add controlflow/dominance test (copied from Java) --- .../controlflow/dominance/Test.kt | 100 ++++++++++++++++++ .../controlflow/dominance/Test2.kt | 37 +++++++ .../dominance/dominanceBad.expected | 0 .../controlflow/dominance/dominanceBad.ql | 9 ++ .../dominance/dominanceWrong.expected | 0 .../controlflow/dominance/dominanceWrong.ql | 21 ++++ .../dominance/dominatedByStart.expected | 0 .../controlflow/dominance/dominatedByStart.ql | 16 +++ .../controlflow/dominance/dominator.expected | 42 ++++++++ .../controlflow/dominance/dominator.ql | 9 ++ .../dominance/dominatorExists.expected | 0 .../controlflow/dominance/dominatorExists.ql | 16 +++ .../dominance/dominatorUnique.expected | 0 .../controlflow/dominance/dominatorUnique.ql | 11 ++ 14 files changed, 261 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/Test.kt create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceBad.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceBad.ql create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceWrong.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceWrong.ql create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominatedByStart.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominatedByStart.ql create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.ql create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorExists.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorExists.ql create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorUnique.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorUnique.ql diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/Test.kt b/java/ql/test/kotlin/library-tests/controlflow/dominance/Test.kt new file mode 100644 index 00000000000..eb81a6462cb --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/Test.kt @@ -0,0 +1,100 @@ +class Test { + fun test(px: Int, pw: Int, pz: Int): Int { + var x = px + var w = pw + var z = pz + + var j: Int + var y: Long = 50 + + // if-else, multiple statements in block + if (x > 0) { + y = 20 + z = 10 + } else { + y = 30 + } + + z = (x + y) as Int + + // if-else with return in one branch + if (x < 0) + y = 40 + else + return z + + // this is not the start of a BB due to the return + z = 10 + + // single-branch if-else + if (x == 0) { + y = 60 + z = 10 + } + + z += x + + // while loop + while (x > 0) { + y = 10 + x-- + } + + z += y as Int + +/* +TODO + // for loop + for (j = 0; j < 10; j++) { + y = 0; + w = 10; + } + + z += w; + + // nested control flow + for (j = 0; j < 10; j++) { + y = 30; + if (z > 0) + if (y > 0) { + w = 0; + break; + } else { + w = 20; + } + else { + w = 10; + continue; + } + x = 0; + } +*/ + + z += x + y + w + + // nested control-flow + + w = 40 + return w + } + + fun test2(a: Int): Int { + /* Some more complex flow control */ + var b: Int + var c: Int + c = 0 + while(true) { + b = 10 + if (a > 100) { + c = 10 + b = c + } + if (a == 10) + break + if (a == 20) + return c + } + return b + } + +} diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt b/java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt new file mode 100644 index 00000000000..de0ade9e785 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt @@ -0,0 +1,37 @@ +import java.math.* + +class MyExn: Throwable() {} + +public class Test2 { + @Throws(Throwable::class) + fun f() {} + + @Throws(Throwable::class) + fun g(b: Boolean) { + while (b) { + if (b) { + } else { + try { + f() + } catch (e: MyExn) {} + ; + } + } + } + + fun t(x: Int) { + if (x < 0) { + return + } + var y = x + while(y >= 0) { + if (y > 10) { + try { + val n: BigInteger = BigInteger( "wrong" ); + } catch (e: NumberFormatException) { // unchecked exception + } + } + y-- + } + } +} diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceBad.expected b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceBad.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceBad.ql b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceBad.ql new file mode 100644 index 00000000000..26d33d9d07b --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceBad.ql @@ -0,0 +1,9 @@ +import java +import semmle.code.java.controlflow.Dominance + +from IfStmt i, BlockStmt b +where + b = i.getThen() and + dominates(i.getThen(), b) and + dominates(i.getElse(), b) +select i, b diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceWrong.expected b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceWrong.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceWrong.ql b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceWrong.ql new file mode 100644 index 00000000000..298e0752ee4 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominanceWrong.ql @@ -0,0 +1,21 @@ +import java +import semmle.code.java.controlflow.Dominance + +/** + * Represents a path from `entry` to `node` that doesn't go through `dom`. If + * `entry` is the entry node for the CFG then this shows that `dom` does not + * dominate `node`. + */ +predicate dominanceCounterExample(ControlFlowNode entry, ControlFlowNode dom, ControlFlowNode node) { + node = entry + or + exists(ControlFlowNode mid | + dominanceCounterExample(entry, dom, mid) and mid != dom and mid.getASuccessor() = node + ) +} + +from Callable c, ControlFlowNode dom, ControlFlowNode node +where + (strictlyDominates(dom, node) or bbStrictlyDominates(dom, node)) and + dominanceCounterExample(c.getBody(), dom, node) +select c, dom, node diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatedByStart.expected b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatedByStart.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatedByStart.ql b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatedByStart.ql new file mode 100644 index 00000000000..b5bdf688996 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatedByStart.ql @@ -0,0 +1,16 @@ +// All nodes should be dominated by their associated start node +import default +import semmle.code.java.controlflow.Dominance + +ControlFlowNode reachableIn(Method func) { + result = func.getBody() or + result = reachableIn(func).getASuccessor() +} + +from Method func, ControlFlowNode entry, ControlFlowNode node +where + func.getBody() = entry and + reachableIn(func) = node and + entry != node and + not strictlyDominates(func.getBody(), node) +select func, node diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected new file mode 100644 index 00000000000..401e529813f --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected @@ -0,0 +1,42 @@ +| Test.kt:1:1:100:1 | { ... } | Test.kt:1:1:100:1 | | +| Test.kt:2:43:79:2 | { ... } | Test.kt:3:9:3:18 | var ...; | +| Test.kt:3:9:3:18 | var ...; | Test.kt:3:17:3:18 | px | +| Test.kt:4:9:4:18 | var ...; | Test.kt:4:17:4:18 | pw | +| Test.kt:5:9:5:18 | var ...; | Test.kt:5:17:5:18 | pz | +| Test.kt:7:3:7:12 | var ...; | Test.kt:7:3:7:12 | j | +| Test.kt:8:3:8:18 | var ...; | Test.kt:8:17:8:18 | 50 | +| Test.kt:11:3:16:3 | ; | Test.kt:11:3:16:3 | when ... | +| Test.kt:11:14:14:3 | { ... } | Test.kt:12:4:12:4 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:12:8:12:9 | 20 | +| Test.kt:13:4:13:4 | ; | Test.kt:13:8:13:9 | 10 | +| Test.kt:14:10:16:3 | { ... } | Test.kt:15:4:15:4 | ; | +| Test.kt:15:4:15:4 | ; | Test.kt:15:8:15:9 | 30 | +| Test.kt:18:3:18:3 | ; | Test.kt:18:3:18:3 | ...=... | +| Test.kt:21:3:24:11 | ; | Test.kt:21:3:24:11 | when ... | +| Test.kt:22:4:22:4 | ; | Test.kt:22:8:22:9 | 40 | +| Test.kt:27:3:27:3 | ; | Test.kt:27:7:27:8 | 10 | +| Test.kt:30:3:33:3 | ; | Test.kt:30:3:33:3 | when ... | +| Test.kt:30:15:33:3 | { ... } | Test.kt:31:4:31:4 | ; | +| Test.kt:31:4:31:4 | ; | Test.kt:31:8:31:9 | 60 | +| Test.kt:32:4:32:4 | ; | Test.kt:32:8:32:9 | 10 | +| Test.kt:35:3:35:3 | ; | Test.kt:35:3:35:3 | z | +| Test.kt:38:3:41:3 | while (...) | Test.kt:38:10:38:10 | x | +| Test.kt:38:17:41:3 | { ... } | Test.kt:39:4:39:4 | ; | +| Test.kt:39:4:39:4 | ; | Test.kt:39:8:39:9 | 10 | +| Test.kt:43:3:43:3 | ; | Test.kt:43:3:43:3 | z | +| Test.kt:73:3:73:3 | ; | Test.kt:73:3:73:3 | z | +| Test.kt:77:3:77:3 | ; | Test.kt:77:7:77:8 | 40 | +| Test.kt:81:25:98:2 | { ... } | Test.kt:83:3:83:12 | var ...; | +| Test.kt:83:3:83:12 | var ...; | Test.kt:83:3:83:12 | b | +| Test.kt:84:3:84:12 | var ...; | Test.kt:84:3:84:12 | c | +| Test.kt:85:3:85:3 | ; | Test.kt:85:7:85:7 | 0 | +| Test.kt:86:3:96:3 | while (...) | Test.kt:86:9:86:12 | true | +| Test.kt:86:15:96:3 | { ... } | Test.kt:87:4:87:4 | ; | +| Test.kt:87:4:87:4 | ; | Test.kt:87:8:87:9 | 10 | +| Test.kt:88:4:91:4 | ; | Test.kt:88:4:91:4 | when ... | +| Test.kt:88:17:91:4 | { ... } | Test.kt:89:5:89:5 | ; | +| Test.kt:89:5:89:5 | ; | Test.kt:89:9:89:10 | 10 | +| Test.kt:90:5:90:5 | ; | Test.kt:90:9:90:9 | c | +| Test.kt:92:4:93:9 | ; | Test.kt:92:4:93:9 | when ... | +| Test.kt:93:5:93:9 | break | Test.kt:97:10:97:10 | b | +| Test.kt:94:4:95:12 | ; | Test.kt:94:4:95:12 | when ... | diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.ql b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.ql new file mode 100644 index 00000000000..701640bf720 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.ql @@ -0,0 +1,9 @@ +import default +import semmle.code.java.controlflow.Dominance + +from Method func, ControlFlowNode dominator, ControlFlowNode node +where + iDominates(dominator, node) and + dominator.getEnclosingStmt().getEnclosingCallable() = func and + func.getDeclaringType().hasName("Test") +select dominator, node diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorExists.expected b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorExists.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorExists.ql b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorExists.ql new file mode 100644 index 00000000000..34469a686b1 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorExists.ql @@ -0,0 +1,16 @@ +// Every reachable node has a dominator +import default +import semmle.code.java.controlflow.Dominance + +/** transitive dominance */ +ControlFlowNode reachableIn(Method func) { + result = func.getBody() or + result = reachableIn(func).getASuccessor() +} + +from Method func, ControlFlowNode node +where + node = reachableIn(func) and + node != func.getBody() and + not iDominates(_, node) +select func, node diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorUnique.expected b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorUnique.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorUnique.ql b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorUnique.ql new file mode 100644 index 00000000000..eaf75ab7bfa --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominatorUnique.ql @@ -0,0 +1,11 @@ +// Every reachable node has a dominator +import default +import semmle.code.java.controlflow.Dominance + +from Method func, ControlFlowNode dom1, ControlFlowNode dom2, ControlFlowNode node +where + iDominates(dom1, node) and + iDominates(dom2, node) and + dom1 != dom2 and + func = node.getEnclosingStmt().getEnclosingCallable() +select func, node, dom1, dom2 From d05643fa887ee369b98fce721479022924d059da Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 27 Oct 2021 13:22:23 +0100 Subject: [PATCH 0611/1618] Kotlin: Add library-tests/controlflow/paths test (copied from Java) --- .../library-tests/controlflow/paths/A.kt | 49 +++++++++++++++++++ .../controlflow/paths/paths.expected | 4 ++ .../library-tests/controlflow/paths/paths.ql | 14 ++++++ 3 files changed, 67 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/controlflow/paths/A.kt create mode 100644 java/ql/test/kotlin/library-tests/controlflow/paths/paths.expected create mode 100644 java/ql/test/kotlin/library-tests/controlflow/paths/paths.ql diff --git a/java/ql/test/kotlin/library-tests/controlflow/paths/A.kt b/java/ql/test/kotlin/library-tests/controlflow/paths/A.kt new file mode 100644 index 00000000000..ce9dfae8407 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/paths/A.kt @@ -0,0 +1,49 @@ +public class A { + fun action() { } + + fun always_dom1() { + action() + } + + fun always_dom2(b: Boolean) { + if (b) { } else { } + action() + } + + fun always_path(b: Boolean) { + if (b) { + action() + } else { + action() + } + } + + fun always_w_call(b1: Boolean, b2: Boolean) { + if (b1) { + action() + } else if (b2) { + always_dom2(b1) + } else { + always_path(b2) + } + } + + fun not_always_none() { + } + + fun not_always_one(b: Boolean) { + if (b) { + action() + } + } + + fun not_always_two(b1: Boolean, b2: Boolean) { + if (b1) { + if (b2) { + action() + } else { + action() + } + } + } +} diff --git a/java/ql/test/kotlin/library-tests/controlflow/paths/paths.expected b/java/ql/test/kotlin/library-tests/controlflow/paths/paths.expected new file mode 100644 index 00000000000..c3a7d69fa85 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/paths/paths.expected @@ -0,0 +1,4 @@ +| A.kt:4:3:6:3 | always_dom1 | +| A.kt:8:3:11:3 | always_dom2 | +| A.kt:13:3:19:3 | always_path | +| A.kt:21:3:29:3 | always_w_call | diff --git a/java/ql/test/kotlin/library-tests/controlflow/paths/paths.ql b/java/ql/test/kotlin/library-tests/controlflow/paths/paths.ql new file mode 100644 index 00000000000..7216b8e829a --- /dev/null +++ b/java/ql/test/kotlin/library-tests/controlflow/paths/paths.ql @@ -0,0 +1,14 @@ +import java +import semmle.code.java.controlflow.Paths + +class PathTestConf extends ActionConfiguration { + PathTestConf() { this = "PathTestConf" } + + override predicate isAction(ControlFlowNode node) { + node.(MethodAccess).getMethod().hasName("action") + } +} + +from Callable c, PathTestConf conf +where conf.callableAlwaysPerformsAction(c) +select c From d6692e434a879581bb7c7c32f6ce79e74c43fdc4 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 27 Oct 2021 19:55:41 +0100 Subject: [PATCH 0612/1618] Kotlin: Add support for "is" ("instanceof") --- .../main/kotlin/KotlinExtractorExtension.kt | 25 ++++++++++++++++++- .../kotlin/library-tests/exprs/exprs.expected | 3 +++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index a620c897e51..55dd3dbd915 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1466,12 +1466,35 @@ class X { tw.writeHasLocation(id, locId) extractExpressionExpr(e.argument, callable, id, 0) } + is IrTypeOperatorCall -> { + extractTypeOperatorCall(e, callable, parent, idx) + } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) } } } + fun extractTypeOperatorCall(e: IrTypeOperatorCall, callable: Label, parent: Label, idx: Int) { + when(e.operator) { + IrTypeOperator.INSTANCEOF -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + val type = useType(e.type) + tw.writeExprs_instanceofexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeHasLocation(id, locId) + extractExpressionExpr(e.argument, callable, id, 0) + val typeArg = useType(e.typeOperand) + val typeAccessId = tw.getFreshIdLabel() + tw.writeExprs_unannotatedtypeaccess(typeAccessId, typeArg.javaResult.id, typeArg.kotlinResult.id, id, 1) + // TODO: Type access location + } + else -> { + logger.warnElement(Severity.ErrorSevere, "Unrecognised IrTypeOperatorCall: " + e.render(), e) + } + } + } + private fun extractBreakContinue( e: IrBreakContinue, id: Label @@ -1491,4 +1514,4 @@ class X { tw.writeKtBreakContinueTargets(id, loopId) } -} \ No newline at end of file +} diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index ec6b5a5b5a0..3b1bd182a1a 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -52,6 +52,8 @@ | exprs.kt:39:5:39:38 | strWithQuote | LocalVariableDeclExpr | | exprs.kt:39:25:39:37 | string " lit | StringLiteral | | exprs.kt:40:5:40:22 | b6 | LocalVariableDeclExpr | +| exprs.kt:40:14:40:15 | i1 | VarAccess | +| exprs.kt:40:14:40:22 | ...instanceof... | InstanceOfExpr | | exprs.kt:41:5:41:23 | b7 | LocalVariableDeclExpr | | exprs.kt:42:5:42:26 | b8 | LocalVariableDeclExpr | | exprs.kt:43:5:43:35 | str1 | LocalVariableDeclExpr | @@ -72,3 +74,4 @@ | exprs.kt:53:9:53:18 | n | VarAccess | | exprs.kt:54:27:54:31 | new C(...) | ClassInstanceExpr | | exprs.kt:54:29:54:30 | 42 | IntegerLiteral | +| file://:0:0:0:0 | int | TypeAccess | From f95934a0c53a6ea69e2d5e95f357ebb41b90b99c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 27 Oct 2021 18:05:50 +0100 Subject: [PATCH 0613/1618] Kotlin: Use trace (silently for now) rather than info for writing TRAP files The on-demand "Writing trap file for: " messages are drowning out everything else while running the tests. --- .../main/java/com/semmle/extractor/java/OdasaOutput.java | 4 ++-- java/kotlin-extractor/src/main/kotlin/utils/Logger.kt | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java index 7ca86ee6ac4..dcc431bc55c 100644 --- a/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java +++ b/java/kotlin-extractor/src/main/java/com/semmle/extractor/java/OdasaOutput.java @@ -278,13 +278,13 @@ public class OdasaOutput { if (!currVersion.isValid()) { log.warn("Not rewriting trap file for: " + sym + " " + trapVersion + " " + currVersion + " " + trap); } else if (currVersion.newerThan(trapVersion)) { - log.info("Rewriting trap file for: " + sym + " " + trapVersion + " " + currVersion + " " + trap); + log.trace("Rewriting trap file for: " + sym + " " + trapVersion + " " + currVersion + " " + trap); deleteTrapFileAndDependencies(sym); } else { return null; } } else { - log.info("Writing trap file for: " + sym.getName() + " " + currVersion + " " + trap); + log.trace("Writing trap file for: " + sym.getName() + " " + currVersion + " " + trap); } return trapWriter(trap, sym); } diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt index b4d5f11654c..92dd25cb967 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt @@ -43,13 +43,15 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { println(fullMsg) } fun trace(msg: String) { - info(msg) + if(false) { + info(msg) + } } fun debug(msg: String) { info(msg) } fun trace(msg: String, exn: Exception) { - info(msg + " // " + exn) + trace(msg + " // " + exn) } fun warn(severity: Severity, msg: String, locationString: String? = null, locationId: Label = tw.unknownLocation, stackIndex: Int = 2) { val st = Exception().stackTrace From 7f3ae94d73f8bc15cfc748cb2967a951fc89caaf Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 27 Oct 2021 17:13:32 +0100 Subject: [PATCH 0614/1618] Tweak the WhenExpr CFG and QL class --- .../lib/semmle/code/java/ControlFlowGraph.qll | 47 ++++++++++++++----- java/ql/lib/semmle/code/java/Expr.qll | 17 +++++-- 2 files changed, 48 insertions(+), 16 deletions(-) diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index ef20d4edcee..a0116094d76 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -309,7 +309,7 @@ private module ControlFlowGraphImpl { or exists(WhenExpr whenexpr | inBooleanContext(whenexpr) and - whenexpr.getBranch(_).getResult() = b) + whenexpr.getBranch(_).getAResult() = b) } /** @@ -417,9 +417,7 @@ private module ControlFlowGraphImpl { exists(WhenExpr whenexpr | whenexpr = result | whenexpr.getBranch(_).isElseBranch() and forex(WhenBranch whenbranch | whenbranch = whenexpr.getBranch(_) | - whenbranch.getResult() = nonReturningExpr() - or - whenbranch.getResult() = nonReturningStmt())) + whenbranch.getRhs() = nonReturningStmt())) } /** @@ -907,20 +905,42 @@ private module ControlFlowGraphImpl { ) or // The last node in a `when` expression is the last node in any of its branches or - // the last node of the condition in the absence of an else-branch. + // the last node of the condition of the last branch in the absence of an else-branch. exists(WhenExpr whenexpr | whenexpr = n | + // If we have no branches then we are the last node last = n and completion = NormalCompletion() and - not whenexpr.getBranch(_).isElseBranch() + not exists(whenexpr.getBranch(_)) or - last(whenexpr.getBranch(_).getResult(), last, completion) + // If our last branch condition is false then we are done + exists(int i | + last(whenexpr.getBranch(i), last, BooleanCompletion(false, _)) and + completion = NormalCompletion() and + not exists(whenexpr.getBranch(i + 1))) + or + // Any branch getting an abnormal completion is propogated + last(whenexpr.getBranch(_), last, completion) and + not completion instanceof YieldCompletion and + not completion instanceof NormalOrBooleanCompletion + or + // The last node in any branch. This will be wrapped up as a + // YieldCompletion, so we need to unwrap it here. + last(whenexpr.getBranch(_), last, YieldCompletion(completion)) ) or exists(WhenBranch whenbranch | whenbranch = n | - last(whenbranch.getCondition(), last, BooleanCompletion(false, _)) and - completion = NormalCompletion() + // If the condition completes with anything other than true + // (e.g. false or an exception), then the branch is done + last(whenbranch.getCondition(), last, completion) and + completion != BooleanCompletion(true, _) or - last(whenbranch.getResult(), last, completion) + // Otherwise we wrap the completion up in a YieldCompletion + // so that the `when` expression can tell that we have finished, + // and it shouldn't go on to the next branch. + exists(Completion branchCompletion | + last(whenbranch.getRhs(), last, branchCompletion) and + completion = YieldCompletion(branchCompletion) + ) ) } @@ -1191,19 +1211,20 @@ private module ControlFlowGraphImpl { completion = NormalCompletion() or exists(int i | - last(whenexpr.getBranch(i).getCondition(), n, completion) and + last(whenexpr.getBranch(i), n, completion) and completion = BooleanCompletion(false, _) and result = first(whenexpr.getBranch(i + 1))) ) or // When branches: - exists(WhenBranch whenbranch | n = whenbranch | + exists(WhenBranch whenbranch | + n = whenbranch and completion = NormalCompletion() and result = first(whenbranch.getCondition()) or last(whenbranch.getCondition(), n, completion) and completion = BooleanCompletion(true, _) and - result = first(whenbranch.getResult()) + result = first(whenbranch.getRhs()) ) } diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 9c55b5b0384..381c713f9e0 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2158,9 +2158,13 @@ class WhenBranch extends Top, @whenbranch { Expr getCondition() { result.isNthChildOf(this, 0) } /** Gets the result of this branch. */ - Top getResult() { - result.(Expr).isNthChildOf(this, 1) or - result.(Stmt).isNthChildOf(this, 1) + Stmt getRhs() { + result.isNthChildOf(this, 1) + } + + /** Gets a result expression of this `when` branch. */ + Expr getAResult() { + result = getAResult(this.getRhs()) } /** Holds if this is an `else` branch. */ @@ -2173,6 +2177,13 @@ class WhenBranch extends Top, @whenbranch { override string getAPrimaryQlClass() { result = "WhenBranch" } } +// TODO: This might need more cases. It might be better as a predicate +// on Stmt, overridden in each subclass. +private Expr getAResult(Stmt s) { + result = s.(ExprStmt).getExpr() or + result = getAResult(s.(BlockStmt).getLastStmt()) +} + /** A Kotlin `::class` expression. */ class ClassExpr extends Expr, @getclassexpr { /** Gets the expression whose class is being returned. */ From b9d6712371e99a268fda4a9e249149da41f9dc6d Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 27 Oct 2021 17:35:22 +0100 Subject: [PATCH 0615/1618] Kotlin: Update test output --- .../controlflow/basic/bbStmts.expected | 50 ++-- .../basic/bbStrictDominance.expected | 11 + .../controlflow/basic/bbSuccessor.expected | 10 +- .../controlflow/basic/getASuccessor.expected | 14 +- .../basic/strictDominance.expected | 251 ++++++++++++++++++ .../basic/strictPostDominance.expected | 157 +++++++++++ .../controlflow/dominance/dominator.expected | 3 +- 7 files changed, 457 insertions(+), 39 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected index c7bb1906e32..6ae593227b3 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected @@ -5,7 +5,6 @@ | Test.kt:3:1:80:1 | { ... } | 2 | Test.kt:3:1:80:1 | ; | | Test.kt:3:1:80:1 | { ... } | 3 | Test.kt:3:1:80:1 | (...) | | Test.kt:3:1:80:1 | { ... } | 4 | Test.kt:3:8:80:1 | Test | -| Test.kt:4:2:79:2 | test | 0 | Test.kt:4:2:79:2 | test | | Test.kt:4:13:79:2 | { ... } | 0 | Test.kt:4:13:79:2 | { ... } | | Test.kt:4:13:79:2 | { ... } | 1 | Test.kt:5:3:5:16 | var ...; | | Test.kt:4:13:79:2 | { ... } | 2 | Test.kt:5:16:5:16 | 0 | @@ -25,19 +24,19 @@ | Test.kt:4:13:79:2 | { ... } | 16 | Test.kt:11:7:11:7 | x | | Test.kt:4:13:79:2 | { ... } | 17 | Test.kt:11:11:11:11 | 0 | | Test.kt:4:13:79:2 | { ... } | 18 | Test.kt:11:7:11:11 | ... > ... | +| Test.kt:4:13:79:2 | { ... } | 19 | Test.kt:11:14:14:3 | { ... } | +| Test.kt:4:13:79:2 | { ... } | 20 | Test.kt:12:4:12:4 | ; | +| Test.kt:4:13:79:2 | { ... } | 21 | Test.kt:12:8:12:9 | 20 | +| Test.kt:4:13:79:2 | { ... } | 22 | Test.kt:12:4:12:4 | ...=... | +| Test.kt:4:13:79:2 | { ... } | 23 | Test.kt:13:4:13:4 | ; | +| Test.kt:4:13:79:2 | { ... } | 24 | Test.kt:13:8:13:9 | 10 | +| Test.kt:4:13:79:2 | { ... } | 25 | Test.kt:13:4:13:4 | ...=... | | Test.kt:11:3:16:3 | ... -> ... | 0 | Test.kt:11:3:16:3 | ... -> ... | | Test.kt:11:3:16:3 | ... -> ... | 1 | Test.kt:11:3:16:3 | true | -| Test.kt:11:14:14:3 | { ... } | 0 | Test.kt:11:14:14:3 | { ... } | -| Test.kt:11:14:14:3 | { ... } | 1 | Test.kt:12:4:12:4 | ; | -| Test.kt:11:14:14:3 | { ... } | 2 | Test.kt:12:8:12:9 | 20 | -| Test.kt:11:14:14:3 | { ... } | 3 | Test.kt:12:4:12:4 | ...=... | -| Test.kt:11:14:14:3 | { ... } | 4 | Test.kt:13:4:13:4 | ; | -| Test.kt:11:14:14:3 | { ... } | 5 | Test.kt:13:8:13:9 | 10 | -| Test.kt:11:14:14:3 | { ... } | 6 | Test.kt:13:4:13:4 | ...=... | -| Test.kt:14:10:16:3 | { ... } | 0 | Test.kt:14:10:16:3 | { ... } | -| Test.kt:14:10:16:3 | { ... } | 1 | Test.kt:15:4:15:4 | ; | -| Test.kt:14:10:16:3 | { ... } | 2 | Test.kt:15:8:15:9 | 30 | -| Test.kt:14:10:16:3 | { ... } | 3 | Test.kt:15:4:15:4 | ...=... | +| Test.kt:11:3:16:3 | ... -> ... | 2 | Test.kt:14:10:16:3 | { ... } | +| Test.kt:11:3:16:3 | ... -> ... | 3 | Test.kt:15:4:15:4 | ; | +| Test.kt:11:3:16:3 | ... -> ... | 4 | Test.kt:15:8:15:9 | 30 | +| Test.kt:11:3:16:3 | ... -> ... | 5 | Test.kt:15:4:15:4 | ...=... | | Test.kt:18:3:18:3 | ; | 0 | Test.kt:18:3:18:3 | ; | | Test.kt:18:3:18:3 | ; | 1 | Test.kt:18:7:18:7 | 0 | | Test.kt:18:3:18:3 | ; | 2 | Test.kt:18:3:18:3 | ...=... | @@ -47,21 +46,21 @@ | Test.kt:18:3:18:3 | ; | 6 | Test.kt:21:6:21:6 | x | | Test.kt:18:3:18:3 | ; | 7 | Test.kt:21:10:21:10 | 0 | | Test.kt:18:3:18:3 | ; | 8 | Test.kt:21:6:21:10 | ... < ... | +| Test.kt:18:3:18:3 | ; | 9 | Test.kt:22:4:22:4 | ; | +| Test.kt:18:3:18:3 | ; | 10 | Test.kt:22:8:22:9 | 40 | +| Test.kt:18:3:18:3 | ; | 11 | Test.kt:22:4:22:4 | ...=... | +| Test.kt:18:3:18:3 | ; | 12 | Test.kt:27:3:27:3 | ; | +| Test.kt:18:3:18:3 | ; | 13 | Test.kt:27:7:27:8 | 10 | +| Test.kt:18:3:18:3 | ; | 14 | Test.kt:27:3:27:3 | ...=... | +| Test.kt:18:3:18:3 | ; | 15 | Test.kt:30:3:33:3 | ; | +| Test.kt:18:3:18:3 | ; | 16 | Test.kt:30:3:33:3 | when ... | +| Test.kt:18:3:18:3 | ; | 17 | Test.kt:30:3:33:3 | ... -> ... | +| Test.kt:18:3:18:3 | ; | 18 | Test.kt:30:7:30:7 | x | +| Test.kt:18:3:18:3 | ; | 19 | Test.kt:30:12:30:12 | 0 | +| Test.kt:18:3:18:3 | ; | 20 | Test.kt:30:7:30:12 | ... == ... | | Test.kt:21:3:24:9 | ... -> ... | 0 | Test.kt:21:3:24:9 | ... -> ... | | Test.kt:21:3:24:9 | ... -> ... | 1 | Test.kt:21:3:24:9 | true | -| Test.kt:22:4:22:4 | ; | 0 | Test.kt:22:4:22:4 | ; | -| Test.kt:22:4:22:4 | ; | 1 | Test.kt:22:8:22:9 | 40 | -| Test.kt:22:4:22:4 | ; | 2 | Test.kt:22:4:22:4 | ...=... | -| Test.kt:22:4:22:4 | ; | 3 | Test.kt:27:3:27:3 | ; | -| Test.kt:22:4:22:4 | ; | 4 | Test.kt:27:7:27:8 | 10 | -| Test.kt:22:4:22:4 | ; | 5 | Test.kt:27:3:27:3 | ...=... | -| Test.kt:22:4:22:4 | ; | 6 | Test.kt:30:3:33:3 | ; | -| Test.kt:22:4:22:4 | ; | 7 | Test.kt:30:3:33:3 | when ... | -| Test.kt:24:4:24:9 | return ... | 0 | Test.kt:24:4:24:9 | return ... | -| Test.kt:30:3:33:3 | ... -> ... | 0 | Test.kt:30:3:33:3 | ... -> ... | -| Test.kt:30:3:33:3 | ... -> ... | 1 | Test.kt:30:7:30:7 | x | -| Test.kt:30:3:33:3 | ... -> ... | 2 | Test.kt:30:12:30:12 | 0 | -| Test.kt:30:3:33:3 | ... -> ... | 3 | Test.kt:30:7:30:12 | ... == ... | +| Test.kt:21:3:24:9 | ... -> ... | 2 | Test.kt:24:4:24:9 | return ... | | Test.kt:30:15:33:3 | { ... } | 0 | Test.kt:30:15:33:3 | { ... } | | Test.kt:30:15:33:3 | { ... } | 1 | Test.kt:31:4:31:4 | ; | | Test.kt:30:15:33:3 | { ... } | 2 | Test.kt:31:8:31:9 | 60 | @@ -91,3 +90,4 @@ | Test.kt:43:3:43:3 | ; | 7 | Test.kt:77:7:77:8 | 40 | | Test.kt:43:3:43:3 | ; | 8 | Test.kt:77:3:77:3 | ...=... | | Test.kt:43:3:43:3 | ; | 9 | Test.kt:78:3:78:8 | return ... | +| Test.kt:43:3:43:3 | ; | 10 | Test.kt:4:2:79:2 | test | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.expected index e69de29bb2d..2776e332ef0 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.expected @@ -0,0 +1,11 @@ +| Test.kt:4:13:79:2 | { ... } | Test.kt:18:3:18:3 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:30:15:33:3 | { ... } | +| Test.kt:4:13:79:2 | { ... } | Test.kt:35:3:35:3 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:38:16:41:3 | { ... } | +| Test.kt:4:13:79:2 | { ... } | Test.kt:43:3:43:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:18:3:18:3 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:18:3:18:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:35:3:35:3 | ; | Test.kt:43:3:43:3 | ; | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected index 80d02391a79..a4e33c52018 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected @@ -1,9 +1,7 @@ -| Test.kt:11:14:14:3 | { ... } | Test.kt:18:3:18:3 | ; | -| Test.kt:14:10:16:3 | { ... } | Test.kt:18:3:18:3 | ; | -| Test.kt:22:4:22:4 | ; | Test.kt:30:3:33:3 | ... -> ... | -| Test.kt:22:4:22:4 | ; | Test.kt:35:3:35:3 | ; | -| Test.kt:24:4:24:9 | return ... | Test.kt:4:2:79:2 | test | +| Test.kt:4:13:79:2 | { ... } | Test.kt:18:3:18:3 | ; | +| Test.kt:11:3:16:3 | ... -> ... | Test.kt:18:3:18:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:18:3:18:3 | ; | Test.kt:35:3:35:3 | ; | | Test.kt:30:15:33:3 | { ... } | Test.kt:35:3:35:3 | ; | | Test.kt:35:3:35:3 | ; | Test.kt:38:16:41:3 | { ... } | | Test.kt:35:3:35:3 | ; | Test.kt:43:3:43:3 | ; | -| Test.kt:43:3:43:3 | ; | Test.kt:4:2:79:2 | test | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected index b99c6b16a7e..2a2a7d43297 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected @@ -32,10 +32,10 @@ | Test.kt:11:3:16:3 | ... -> ... | WhenBranch | Test.kt:11:3:16:3 | true | BooleanLiteral | | Test.kt:11:3:16:3 | ... -> ... | WhenBranch | Test.kt:11:7:11:7 | x | VarAccess | | Test.kt:11:3:16:3 | ; | ExprStmt | Test.kt:11:3:16:3 | when ... | WhenExpr | -| Test.kt:11:3:16:3 | true | BooleanLiteral | file://:0:0:0:0 | | | +| Test.kt:11:3:16:3 | true | BooleanLiteral | Test.kt:14:10:16:3 | { ... } | BlockStmt | | Test.kt:11:3:16:3 | when ... | WhenExpr | Test.kt:11:3:16:3 | ... -> ... | WhenBranch | | Test.kt:11:7:11:7 | x | VarAccess | Test.kt:11:11:11:11 | 0 | IntegerLiteral | -| Test.kt:11:7:11:11 | ... > ... | GTExpr | file://:0:0:0:0 | | | +| Test.kt:11:7:11:11 | ... > ... | GTExpr | Test.kt:11:14:14:3 | { ... } | BlockStmt | | Test.kt:11:11:11:11 | 0 | IntegerLiteral | Test.kt:11:7:11:11 | ... > ... | GTExpr | | Test.kt:11:14:14:3 | { ... } | BlockStmt | Test.kt:12:4:12:4 | ; | ExprStmt | | Test.kt:12:4:12:4 | ...=... | AssignExpr | Test.kt:13:4:13:4 | ; | ExprStmt | @@ -54,24 +54,24 @@ | Test.kt:21:3:24:9 | ... -> ... | WhenBranch | Test.kt:21:3:24:9 | true | BooleanLiteral | | Test.kt:21:3:24:9 | ... -> ... | WhenBranch | Test.kt:21:6:21:6 | x | VarAccess | | Test.kt:21:3:24:9 | ; | ExprStmt | Test.kt:21:3:24:9 | when ... | WhenExpr | -| Test.kt:21:3:24:9 | true | BooleanLiteral | file://:0:0:0:0 | | | +| Test.kt:21:3:24:9 | true | BooleanLiteral | Test.kt:24:4:24:9 | return ... | ReturnStmt | | Test.kt:21:3:24:9 | when ... | WhenExpr | Test.kt:21:3:24:9 | ... -> ... | WhenBranch | | Test.kt:21:6:21:6 | x | VarAccess | Test.kt:21:10:21:10 | 0 | IntegerLiteral | -| Test.kt:21:6:21:10 | ... < ... | LTExpr | file://:0:0:0:0 | | | +| Test.kt:21:6:21:10 | ... < ... | LTExpr | Test.kt:22:4:22:4 | ; | ExprStmt | | Test.kt:21:10:21:10 | 0 | IntegerLiteral | Test.kt:21:6:21:10 | ... < ... | LTExpr | | Test.kt:22:4:22:4 | ...=... | AssignExpr | Test.kt:27:3:27:3 | ; | ExprStmt | | Test.kt:22:4:22:4 | ; | ExprStmt | Test.kt:22:8:22:9 | 40 | LongLiteral | | Test.kt:22:8:22:9 | 40 | LongLiteral | Test.kt:22:4:22:4 | ...=... | AssignExpr | -| Test.kt:24:4:24:9 | return ... | ReturnStmt | Test.kt:4:2:79:2 | test | Method | +| Test.kt:24:4:24:9 | return ... | ReturnStmt | file://:0:0:0:0 | | | | Test.kt:27:3:27:3 | ...=... | AssignExpr | Test.kt:30:3:33:3 | ; | ExprStmt | | Test.kt:27:3:27:3 | ; | ExprStmt | Test.kt:27:7:27:8 | 10 | IntegerLiteral | | Test.kt:27:7:27:8 | 10 | IntegerLiteral | Test.kt:27:3:27:3 | ...=... | AssignExpr | | Test.kt:30:3:33:3 | ... -> ... | WhenBranch | Test.kt:30:7:30:7 | x | VarAccess | | Test.kt:30:3:33:3 | ; | ExprStmt | Test.kt:30:3:33:3 | when ... | WhenExpr | | Test.kt:30:3:33:3 | when ... | WhenExpr | Test.kt:30:3:33:3 | ... -> ... | WhenBranch | -| Test.kt:30:3:33:3 | when ... | WhenExpr | Test.kt:35:3:35:3 | ; | ExprStmt | | Test.kt:30:7:30:7 | x | VarAccess | Test.kt:30:12:30:12 | 0 | IntegerLiteral | -| Test.kt:30:7:30:12 | ... == ... | EQExpr | file://:0:0:0:0 | | | +| Test.kt:30:7:30:12 | ... == ... | EQExpr | Test.kt:30:15:33:3 | { ... } | BlockStmt | +| Test.kt:30:7:30:12 | ... == ... | EQExpr | Test.kt:35:3:35:3 | ; | ExprStmt | | Test.kt:30:12:30:12 | 0 | IntegerLiteral | Test.kt:30:7:30:12 | ... == ... | EQExpr | | Test.kt:30:15:33:3 | { ... } | BlockStmt | Test.kt:31:4:31:4 | ; | ExprStmt | | Test.kt:31:4:31:4 | ...=... | AssignExpr | Test.kt:32:4:32:4 | ; | ExprStmt | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected index 1946f255d9a..860feff4b97 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected @@ -6,28 +6,279 @@ | Test.kt:4:13:79:2 | { ... } | Test.kt:7:3:7:16 | var ...; | | Test.kt:4:13:79:2 | { ... } | Test.kt:8:3:8:16 | var ...; | | Test.kt:4:13:79:2 | { ... } | Test.kt:11:3:16:3 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:11:14:14:3 | { ... } | +| Test.kt:4:13:79:2 | { ... } | Test.kt:12:4:12:4 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:13:4:13:4 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:18:3:18:3 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:21:3:24:9 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:22:4:22:4 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:27:3:27:3 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:30:3:33:3 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:30:15:33:3 | { ... } | +| Test.kt:4:13:79:2 | { ... } | Test.kt:31:4:31:4 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:32:4:32:4 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:35:3:35:3 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:38:3:41:3 | while (...) | +| Test.kt:4:13:79:2 | { ... } | Test.kt:38:16:41:3 | { ... } | +| Test.kt:4:13:79:2 | { ... } | Test.kt:39:4:39:4 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:40:4:40:6 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:43:3:43:3 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:73:3:73:3 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:77:3:77:3 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:78:3:78:8 | return ... | | Test.kt:5:3:5:16 | var ...; | Test.kt:6:3:6:18 | var ...; | | Test.kt:5:3:5:16 | var ...; | Test.kt:7:3:7:16 | var ...; | | Test.kt:5:3:5:16 | var ...; | Test.kt:8:3:8:16 | var ...; | | Test.kt:5:3:5:16 | var ...; | Test.kt:11:3:16:3 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:5:3:5:16 | var ...; | Test.kt:12:4:12:4 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:13:4:13:4 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:18:3:18:3 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:21:3:24:9 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:22:4:22:4 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:27:3:27:3 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:30:3:33:3 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:5:3:5:16 | var ...; | Test.kt:31:4:31:4 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:32:4:32:4 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:35:3:35:3 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:5:3:5:16 | var ...; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:5:3:5:16 | var ...; | Test.kt:39:4:39:4 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:40:4:40:6 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:43:3:43:3 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:73:3:73:3 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:77:3:77:3 | ; | +| Test.kt:5:3:5:16 | var ...; | Test.kt:78:3:78:8 | return ... | | Test.kt:6:3:6:18 | var ...; | Test.kt:7:3:7:16 | var ...; | | Test.kt:6:3:6:18 | var ...; | Test.kt:8:3:8:16 | var ...; | | Test.kt:6:3:6:18 | var ...; | Test.kt:11:3:16:3 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:6:3:6:18 | var ...; | Test.kt:12:4:12:4 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:13:4:13:4 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:18:3:18:3 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:21:3:24:9 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:22:4:22:4 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:27:3:27:3 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:30:3:33:3 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:6:3:6:18 | var ...; | Test.kt:31:4:31:4 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:32:4:32:4 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:35:3:35:3 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:6:3:6:18 | var ...; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:6:3:6:18 | var ...; | Test.kt:39:4:39:4 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:40:4:40:6 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:43:3:43:3 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:73:3:73:3 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:77:3:77:3 | ; | +| Test.kt:6:3:6:18 | var ...; | Test.kt:78:3:78:8 | return ... | | Test.kt:7:3:7:16 | var ...; | Test.kt:8:3:8:16 | var ...; | | Test.kt:7:3:7:16 | var ...; | Test.kt:11:3:16:3 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:7:3:7:16 | var ...; | Test.kt:12:4:12:4 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:13:4:13:4 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:18:3:18:3 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:21:3:24:9 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:22:4:22:4 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:27:3:27:3 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:30:3:33:3 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:7:3:7:16 | var ...; | Test.kt:31:4:31:4 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:32:4:32:4 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:35:3:35:3 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:7:3:7:16 | var ...; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:7:3:7:16 | var ...; | Test.kt:39:4:39:4 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:40:4:40:6 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:43:3:43:3 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:73:3:73:3 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:77:3:77:3 | ; | +| Test.kt:7:3:7:16 | var ...; | Test.kt:78:3:78:8 | return ... | | Test.kt:8:3:8:16 | var ...; | Test.kt:11:3:16:3 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:8:3:8:16 | var ...; | Test.kt:12:4:12:4 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:13:4:13:4 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:18:3:18:3 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:21:3:24:9 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:22:4:22:4 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:27:3:27:3 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:30:3:33:3 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:8:3:8:16 | var ...; | Test.kt:31:4:31:4 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:32:4:32:4 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:35:3:35:3 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:8:3:8:16 | var ...; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:8:3:8:16 | var ...; | Test.kt:39:4:39:4 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:40:4:40:6 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:43:3:43:3 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:73:3:73:3 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:77:3:77:3 | ; | +| Test.kt:8:3:8:16 | var ...; | Test.kt:78:3:78:8 | return ... | +| Test.kt:11:3:16:3 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:11:3:16:3 | ; | Test.kt:12:4:12:4 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:21:3:24:9 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:27:3:27:3 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:11:3:16:3 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:11:3:16:3 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:11:3:16:3 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:77:3:77:3 | ; | +| Test.kt:11:3:16:3 | ; | Test.kt:78:3:78:8 | return ... | | Test.kt:11:14:14:3 | { ... } | Test.kt:12:4:12:4 | ; | | Test.kt:11:14:14:3 | { ... } | Test.kt:13:4:13:4 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:18:3:18:3 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:21:3:24:9 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:22:4:22:4 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:27:3:27:3 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:30:3:33:3 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:30:15:33:3 | { ... } | +| Test.kt:11:14:14:3 | { ... } | Test.kt:31:4:31:4 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:32:4:32:4 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:35:3:35:3 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:38:3:41:3 | while (...) | +| Test.kt:11:14:14:3 | { ... } | Test.kt:38:16:41:3 | { ... } | +| Test.kt:11:14:14:3 | { ... } | Test.kt:39:4:39:4 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:40:4:40:6 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:43:3:43:3 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:73:3:73:3 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:77:3:77:3 | ; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:78:3:78:8 | return ... | | Test.kt:12:4:12:4 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:21:3:24:9 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:27:3:27:3 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:12:4:12:4 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:12:4:12:4 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:12:4:12:4 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:77:3:77:3 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:78:3:78:8 | return ... | +| Test.kt:13:4:13:4 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:21:3:24:9 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:27:3:27:3 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:13:4:13:4 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:13:4:13:4 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:13:4:13:4 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:77:3:77:3 | ; | +| Test.kt:13:4:13:4 | ; | Test.kt:78:3:78:8 | return ... | | Test.kt:14:10:16:3 | { ... } | Test.kt:15:4:15:4 | ; | | Test.kt:18:3:18:3 | ; | Test.kt:21:3:24:9 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:27:3:27:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:18:3:18:3 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:18:3:18:3 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:18:3:18:3 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:77:3:77:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:78:3:78:8 | return ... | +| Test.kt:21:3:24:9 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:27:3:27:3 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:21:3:24:9 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:21:3:24:9 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:21:3:24:9 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:77:3:77:3 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:78:3:78:8 | return ... | | Test.kt:22:4:22:4 | ; | Test.kt:27:3:27:3 | ; | | Test.kt:22:4:22:4 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:22:4:22:4 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:22:4:22:4 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:22:4:22:4 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:77:3:77:3 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:78:3:78:8 | return ... | | Test.kt:27:3:27:3 | ; | Test.kt:30:3:33:3 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:27:3:27:3 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:27:3:27:3 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:27:3:27:3 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:77:3:77:3 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:78:3:78:8 | return ... | +| Test.kt:30:3:33:3 | ; | Test.kt:30:15:33:3 | { ... } | +| Test.kt:30:3:33:3 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:30:3:33:3 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:30:3:33:3 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:77:3:77:3 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:78:3:78:8 | return ... | | Test.kt:30:15:33:3 | { ... } | Test.kt:31:4:31:4 | ; | | Test.kt:30:15:33:3 | { ... } | Test.kt:32:4:32:4 | ; | | Test.kt:31:4:31:4 | ; | Test.kt:32:4:32:4 | ; | | Test.kt:35:3:35:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:35:3:35:3 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:35:3:35:3 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:77:3:77:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:78:3:78:8 | return ... | +| Test.kt:38:3:41:3 | while (...) | Test.kt:38:16:41:3 | { ... } | +| Test.kt:38:3:41:3 | while (...) | Test.kt:39:4:39:4 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:40:4:40:6 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:43:3:43:3 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:73:3:73:3 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:77:3:77:3 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:78:3:78:8 | return ... | | Test.kt:38:16:41:3 | { ... } | Test.kt:39:4:39:4 | ; | | Test.kt:38:16:41:3 | { ... } | Test.kt:40:4:40:6 | ; | | Test.kt:39:4:39:4 | ; | Test.kt:40:4:40:6 | ; | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected index b2aa2faf215..a884146ce68 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected @@ -16,23 +16,128 @@ | Test.kt:11:3:16:3 | ; | Test.kt:6:3:6:18 | var ...; | | Test.kt:11:3:16:3 | ; | Test.kt:7:3:7:16 | var ...; | | Test.kt:11:3:16:3 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:4:13:79:2 | { ... } | +| Test.kt:11:14:14:3 | { ... } | Test.kt:5:3:5:16 | var ...; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:6:3:6:18 | var ...; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:7:3:7:16 | var ...; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:8:3:8:16 | var ...; | +| Test.kt:11:14:14:3 | { ... } | Test.kt:11:3:16:3 | ; | +| Test.kt:12:4:12:4 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:12:4:12:4 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:12:4:12:4 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:12:4:12:4 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:12:4:12:4 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:12:4:12:4 | ; | Test.kt:11:3:16:3 | ; | | Test.kt:12:4:12:4 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:13:4:13:4 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:13:4:13:4 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:13:4:13:4 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:13:4:13:4 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:13:4:13:4 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:13:4:13:4 | ; | Test.kt:11:3:16:3 | ; | | Test.kt:13:4:13:4 | ; | Test.kt:11:14:14:3 | { ... } | | Test.kt:13:4:13:4 | ; | Test.kt:12:4:12:4 | ; | | Test.kt:15:4:15:4 | ; | Test.kt:14:10:16:3 | { ... } | +| Test.kt:18:3:18:3 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:18:3:18:3 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:18:3:18:3 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:18:3:18:3 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:18:3:18:3 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:18:3:18:3 | ; | Test.kt:11:3:16:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:18:3:18:3 | ; | Test.kt:12:4:12:4 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:14:10:16:3 | { ... } | +| Test.kt:18:3:18:3 | ; | Test.kt:15:4:15:4 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:21:3:24:9 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:21:3:24:9 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:21:3:24:9 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:21:3:24:9 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:21:3:24:9 | ; | Test.kt:11:3:16:3 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:21:3:24:9 | ; | Test.kt:12:4:12:4 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:21:3:24:9 | ; | Test.kt:14:10:16:3 | { ... } | +| Test.kt:21:3:24:9 | ; | Test.kt:15:4:15:4 | ; | | Test.kt:21:3:24:9 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:22:4:22:4 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:22:4:22:4 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:22:4:22:4 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:22:4:22:4 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:22:4:22:4 | ; | Test.kt:11:3:16:3 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:22:4:22:4 | ; | Test.kt:12:4:12:4 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:14:10:16:3 | { ... } | +| Test.kt:22:4:22:4 | ; | Test.kt:15:4:15:4 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:22:4:22:4 | ; | Test.kt:21:3:24:9 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:27:3:27:3 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:27:3:27:3 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:27:3:27:3 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:27:3:27:3 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:27:3:27:3 | ; | Test.kt:11:3:16:3 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:27:3:27:3 | ; | Test.kt:12:4:12:4 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:14:10:16:3 | { ... } | +| Test.kt:27:3:27:3 | ; | Test.kt:15:4:15:4 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:27:3:27:3 | ; | Test.kt:21:3:24:9 | ; | | Test.kt:27:3:27:3 | ; | Test.kt:22:4:22:4 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:30:3:33:3 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:30:3:33:3 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:30:3:33:3 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:30:3:33:3 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:30:3:33:3 | ; | Test.kt:11:3:16:3 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:30:3:33:3 | ; | Test.kt:12:4:12:4 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:14:10:16:3 | { ... } | +| Test.kt:30:3:33:3 | ; | Test.kt:15:4:15:4 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:30:3:33:3 | ; | Test.kt:21:3:24:9 | ; | | Test.kt:30:3:33:3 | ; | Test.kt:22:4:22:4 | ; | | Test.kt:30:3:33:3 | ; | Test.kt:27:3:27:3 | ; | | Test.kt:31:4:31:4 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:32:4:32:4 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:32:4:32:4 | ; | Test.kt:31:4:31:4 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:35:3:35:3 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:35:3:35:3 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:35:3:35:3 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:35:3:35:3 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:35:3:35:3 | ; | Test.kt:11:3:16:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:35:3:35:3 | ; | Test.kt:12:4:12:4 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:14:10:16:3 | { ... } | +| Test.kt:35:3:35:3 | ; | Test.kt:15:4:15:4 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:21:3:24:9 | ; | | Test.kt:35:3:35:3 | ; | Test.kt:22:4:22:4 | ; | | Test.kt:35:3:35:3 | ; | Test.kt:27:3:27:3 | ; | | Test.kt:35:3:35:3 | ; | Test.kt:30:3:33:3 | ; | | Test.kt:35:3:35:3 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:35:3:35:3 | ; | Test.kt:31:4:31:4 | ; | | Test.kt:35:3:35:3 | ; | Test.kt:32:4:32:4 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:4:13:79:2 | { ... } | +| Test.kt:38:3:41:3 | while (...) | Test.kt:5:3:5:16 | var ...; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:6:3:6:18 | var ...; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:7:3:7:16 | var ...; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:8:3:8:16 | var ...; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:11:3:16:3 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:11:14:14:3 | { ... } | +| Test.kt:38:3:41:3 | while (...) | Test.kt:12:4:12:4 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:13:4:13:4 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:14:10:16:3 | { ... } | +| Test.kt:38:3:41:3 | while (...) | Test.kt:15:4:15:4 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:18:3:18:3 | ; | +| Test.kt:38:3:41:3 | while (...) | Test.kt:21:3:24:9 | ; | | Test.kt:38:3:41:3 | while (...) | Test.kt:22:4:22:4 | ; | | Test.kt:38:3:41:3 | while (...) | Test.kt:27:3:27:3 | ; | | Test.kt:38:3:41:3 | while (...) | Test.kt:30:3:33:3 | ; | @@ -43,6 +148,19 @@ | Test.kt:39:4:39:4 | ; | Test.kt:38:16:41:3 | { ... } | | Test.kt:40:4:40:6 | ; | Test.kt:38:16:41:3 | { ... } | | Test.kt:40:4:40:6 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:43:3:43:3 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:43:3:43:3 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:43:3:43:3 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:43:3:43:3 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:43:3:43:3 | ; | Test.kt:11:3:16:3 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:43:3:43:3 | ; | Test.kt:12:4:12:4 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:14:10:16:3 | { ... } | +| Test.kt:43:3:43:3 | ; | Test.kt:15:4:15:4 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:21:3:24:9 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:22:4:22:4 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:27:3:27:3 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:30:3:33:3 | ; | @@ -51,6 +169,19 @@ | Test.kt:43:3:43:3 | ; | Test.kt:32:4:32:4 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:35:3:35:3 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:73:3:73:3 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:73:3:73:3 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:73:3:73:3 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:73:3:73:3 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:73:3:73:3 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:73:3:73:3 | ; | Test.kt:11:3:16:3 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:73:3:73:3 | ; | Test.kt:12:4:12:4 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:14:10:16:3 | { ... } | +| Test.kt:73:3:73:3 | ; | Test.kt:15:4:15:4 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:21:3:24:9 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:22:4:22:4 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:27:3:27:3 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:30:3:33:3 | ; | @@ -60,6 +191,19 @@ | Test.kt:73:3:73:3 | ; | Test.kt:35:3:35:3 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:38:3:41:3 | while (...) | | Test.kt:73:3:73:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:4:13:79:2 | { ... } | +| Test.kt:77:3:77:3 | ; | Test.kt:5:3:5:16 | var ...; | +| Test.kt:77:3:77:3 | ; | Test.kt:6:3:6:18 | var ...; | +| Test.kt:77:3:77:3 | ; | Test.kt:7:3:7:16 | var ...; | +| Test.kt:77:3:77:3 | ; | Test.kt:8:3:8:16 | var ...; | +| Test.kt:77:3:77:3 | ; | Test.kt:11:3:16:3 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:11:14:14:3 | { ... } | +| Test.kt:77:3:77:3 | ; | Test.kt:12:4:12:4 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:13:4:13:4 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:14:10:16:3 | { ... } | +| Test.kt:77:3:77:3 | ; | Test.kt:15:4:15:4 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:18:3:18:3 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:21:3:24:9 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:22:4:22:4 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:27:3:27:3 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:30:3:33:3 | ; | @@ -70,6 +214,19 @@ | Test.kt:77:3:77:3 | ; | Test.kt:38:3:41:3 | while (...) | | Test.kt:77:3:77:3 | ; | Test.kt:43:3:43:3 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:4:13:79:2 | { ... } | +| Test.kt:78:3:78:8 | return ... | Test.kt:5:3:5:16 | var ...; | +| Test.kt:78:3:78:8 | return ... | Test.kt:6:3:6:18 | var ...; | +| Test.kt:78:3:78:8 | return ... | Test.kt:7:3:7:16 | var ...; | +| Test.kt:78:3:78:8 | return ... | Test.kt:8:3:8:16 | var ...; | +| Test.kt:78:3:78:8 | return ... | Test.kt:11:3:16:3 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:11:14:14:3 | { ... } | +| Test.kt:78:3:78:8 | return ... | Test.kt:12:4:12:4 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:13:4:13:4 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:14:10:16:3 | { ... } | +| Test.kt:78:3:78:8 | return ... | Test.kt:15:4:15:4 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:18:3:18:3 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:21:3:24:9 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:22:4:22:4 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:27:3:27:3 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:30:3:33:3 | ; | diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected index 401e529813f..0704dd4482b 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected @@ -26,6 +26,7 @@ | Test.kt:43:3:43:3 | ; | Test.kt:43:3:43:3 | z | | Test.kt:73:3:73:3 | ; | Test.kt:73:3:73:3 | z | | Test.kt:77:3:77:3 | ; | Test.kt:77:7:77:8 | 40 | +| Test.kt:78:3:78:10 | return ... | Test.kt:2:2:79:2 | test | | Test.kt:81:25:98:2 | { ... } | Test.kt:83:3:83:12 | var ...; | | Test.kt:83:3:83:12 | var ...; | Test.kt:83:3:83:12 | b | | Test.kt:84:3:84:12 | var ...; | Test.kt:84:3:84:12 | c | @@ -38,5 +39,5 @@ | Test.kt:89:5:89:5 | ; | Test.kt:89:9:89:10 | 10 | | Test.kt:90:5:90:5 | ; | Test.kt:90:9:90:9 | c | | Test.kt:92:4:93:9 | ; | Test.kt:92:4:93:9 | when ... | -| Test.kt:93:5:93:9 | break | Test.kt:97:10:97:10 | b | | Test.kt:94:4:95:12 | ; | Test.kt:94:4:95:12 | when ... | +| Test.kt:97:3:97:10 | return ... | Test.kt:81:2:98:2 | test2 | From c4880cc9353f4accf3104967aaf27eaefdd5cb59 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Oct 2021 11:53:13 +0100 Subject: [PATCH 0616/1618] Kotlin: Fix handling of non-true conditions --- java/ql/lib/semmle/code/java/ControlFlowGraph.qll | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index a0116094d76..55aff8c0ac8 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -930,9 +930,12 @@ private module ControlFlowGraphImpl { or exists(WhenBranch whenbranch | whenbranch = n | // If the condition completes with anything other than true - // (e.g. false or an exception), then the branch is done + // (or "normal", which we will also see if we don't know how + // to make specific true/false edges for the condition) + // (e.g. false or an exception), then the branch is done. last(whenbranch.getCondition(), last, completion) and - completion != BooleanCompletion(true, _) + not completion = BooleanCompletion(true, _) and + not completion = NormalCompletion() or // Otherwise we wrap the completion up in a YieldCompletion // so that the `when` expression can tell that we have finished, From d247e4fcffa4b12e0358a161264ad43dc40e3fc9 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Oct 2021 12:55:23 +0100 Subject: [PATCH 0617/1618] Kotlin: WhenBranch isn't postorder --- java/ql/lib/semmle/code/java/ControlFlowGraph.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 55aff8c0ac8..14d2815dd4a 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -478,8 +478,6 @@ private module ControlFlowGraphImpl { this instanceof LocalTypeDeclStmt or this instanceof AssertStmt - or - this instanceof WhenBranch } /** Gets child nodes in their order of execution. Indexing starts at either -1 or 0. */ @@ -593,6 +591,8 @@ private module ControlFlowGraphImpl { or result = n and n instanceof WhenExpr or + result = n and n instanceof WhenBranch + or result = n and n.(PostOrderNode).isLeafNode() or result = first(n.(PostOrderNode).firstChild()) From ba7a7535e993440b3867998696e881a40ebee90a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Oct 2021 13:49:42 +0100 Subject: [PATCH 0618/1618] Kotlin: Add support for more type operators --- .../main/kotlin/KotlinExtractorExtension.kt | 34 +++++++++++++++-- java/ql/lib/config/semmlecode.dbscheme | 2 + .../lib/semmle/code/java/ControlFlowGraph.qll | 10 +++++ java/ql/lib/semmle/code/java/Conversions.qll | 12 ++++++ java/ql/lib/semmle/code/java/Expr.qll | 37 +++++++++++++++++++ .../code/java/dataflow/RangeAnalysis.qll | 8 ++-- .../kotlin/library-tests/exprs/exprs.expected | 8 +++- 7 files changed, 102 insertions(+), 9 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 55dd3dbd915..b9c44b6a9cd 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1475,8 +1475,28 @@ class X { } } + fun extractTypeAccess(t: IrType, parent: Label, idx: Int, elementForLocation: IrElement) { + // TODO: elementForLocation allows us to give some sort of + // location, but a proper location for the type access will + // require upstream changes + val type = useType(t) + val id = tw.getFreshIdLabel() + tw.writeExprs_unannotatedtypeaccess(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + val locId = tw.getLocation(elementForLocation) + tw.writeHasLocation(id, locId) + } + fun extractTypeOperatorCall(e: IrTypeOperatorCall, callable: Label, parent: Label, idx: Int) { when(e.operator) { + IrTypeOperator.CAST -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + val type = useType(e.type) + tw.writeExprs_castexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeHasLocation(id, locId) + extractTypeAccess(e.typeOperand, id, 0, e) + extractExpressionExpr(e.argument, callable, id, 1) + } IrTypeOperator.INSTANCEOF -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) @@ -1484,10 +1504,16 @@ class X { tw.writeExprs_instanceofexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(id, locId) extractExpressionExpr(e.argument, callable, id, 0) - val typeArg = useType(e.typeOperand) - val typeAccessId = tw.getFreshIdLabel() - tw.writeExprs_unannotatedtypeaccess(typeAccessId, typeArg.javaResult.id, typeArg.kotlinResult.id, id, 1) - // TODO: Type access location + extractTypeAccess(e.typeOperand, id, 1, e) + } + IrTypeOperator.NOT_INSTANCEOF -> { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + val type = useType(e.type) + tw.writeExprs_notinstanceofexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeHasLocation(id, locId) + extractExpressionExpr(e.argument, callable, id, 0) + extractTypeAccess(e.typeOperand, id, 1, e) } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrTypeOperatorCall: " + e.render(), e) diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 0d9a9db99a8..e69de7ac44f 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -667,6 +667,8 @@ case @expr.kind of | 74 = @errorexpr | 75 = @whenexpr | 76 = @getclassexpr +| 77 = @safecastexpr +| 78 = @notinstanceofexpr ; /** Holds if this `when` expression was written as an `if` expression. */ diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 14d2815dd4a..ae996753c3d 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -448,8 +448,12 @@ private module ControlFlowGraphImpl { or this instanceof CastExpr or + this instanceof SafeCastExpr + or this instanceof InstanceOfExpr and not this.(InstanceOfExpr).isPattern() or + this instanceof NotInstanceOfExpr + or this instanceof LocalVariableDeclExpr and not this = any(InstanceOfExpr ioe).getLocalVariableDeclExpr() or @@ -526,8 +530,12 @@ private module ControlFlowGraphImpl { or index = 0 and result = this.(CastExpr).getExpr() or + index = 0 and result = this.(SafeCastExpr).getExpr() + or index = 0 and result = this.(InstanceOfExpr).getExpr() or + index = 0 and result = this.(NotInstanceOfExpr).getExpr() + or index = 0 and result = this.(LocalVariableDeclExpr).getInit() or index = 0 and result = this.(RValue).getQualifier() and not result instanceof TypeAccess @@ -599,6 +607,8 @@ private module ControlFlowGraphImpl { or result = first(n.(InstanceOfExpr).getExpr()) or + result = first(n.(NotInstanceOfExpr).getExpr()) + or result = first(n.(SynchronizedStmt).getExpr()) or result = n and diff --git a/java/ql/lib/semmle/code/java/Conversions.qll b/java/ql/lib/semmle/code/java/Conversions.qll index b7cd80c4906..85cb362552f 100644 --- a/java/ql/lib/semmle/code/java/Conversions.qll +++ b/java/ql/lib/semmle/code/java/Conversions.qll @@ -123,6 +123,18 @@ class CastConversionContext extends ConversionSite { override string kind() { result = "cast context" } } +class SafeCastConversionContext extends ConversionSite { + SafeCastExpr c; + + CastConversionContext() { this = c.getExpr() } + + override Type getConversionTarget() { result = c.getType() } + + override predicate isImplicit() { none() } + + override string kind() { result = "safe cast context" } +} + /** * A numeric conversion. For example, `a * b` converts `a` and * `b` to have an appropriate numeric type. diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 381c713f9e0..718c3032010 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -1152,6 +1152,21 @@ class CastExpr extends Expr, @castexpr { override string getAPrimaryQlClass() { result = "CastExpr" } } +// TODO: Would this be better as a predicate on CastExpr? +/** A safe cast expression. */ +class SafeCastExpr extends Expr, @safecastexpr { + /** Gets the target type of this cast expression. */ + Expr getTypeExpr() { result.isNthChildOf(this, 0) } + + /** Gets the expression to which the cast operator is applied. */ + Expr getExpr() { result.isNthChildOf(this, 1) } + + /** Gets a printable representation of this expression. */ + override string toString() { result = "... as? ..." } + + override string getAPrimaryQlClass() { result = "SafeCastExpr" } +} + /** A class instance creation expression. */ class ClassInstanceExpr extends Expr, ConstructorCall, @classinstancexpr { /** Gets the number of arguments provided to the constructor of the class instance creation expression. */ @@ -1442,6 +1457,28 @@ class InstanceOfExpr extends Expr, @instanceofexpr { override string getAPrimaryQlClass() { result = "InstanceOfExpr" } } +// TODO: Should this be desugared into instanceof.not()? +// Note expressions/IrTypeOperatorCall.kt says: +// NOT_INSTANCEOF, // TODO drop and replace with `INSTANCEOF(x).not()`? +/** An `instanceof` expression. */ +class NotInstanceOfExpr extends Expr, @notinstanceofexpr { + /** Gets the expression on the left-hand side of the `!is` operator. */ + Expr getExpr() { + result.isNthChildOf(this, 0) + } + + /** Gets the access to the type on the right-hand side of the `!is` operator. */ + Expr getTypeName() { result.isNthChildOf(this, 1) } + + /** Gets the type this `!is` expression checks for. */ + RefType getCheckedType() { result = getTypeName().getType() } + + /** Gets a printable representation of this expression. */ + override string toString() { result = "... !is ..." } + + override string getAPrimaryQlClass() { result = "NotInstanceOfExpr" } +} + /** * A local variable declaration expression. * diff --git a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll index 47c3cdd9db6..58c6d1f576c 100644 --- a/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll +++ b/java/ql/lib/semmle/code/java/dataflow/RangeAnalysis.qll @@ -360,8 +360,8 @@ private predicate safeCast(Type fromtyp, Type totyp) { /** * A cast that can be ignored for the purpose of range analysis. */ -private class SafeCastExpr extends CastExpr { - SafeCastExpr() { safeCast(getExpr().getType(), getType()) } +private class RangeAnalysisSafeCastExpr extends CastExpr { + RangeAnalysisSafeCastExpr() { safeCast(getExpr().getType(), getType()) } } /** @@ -382,7 +382,7 @@ private predicate typeBound(Type typ, int lowerbound, int upperbound) { */ private class NarrowingCastExpr extends CastExpr { NarrowingCastExpr() { - not this instanceof SafeCastExpr and + not this instanceof RangeAnalysisSafeCastExpr and typeBound(getType(), _, _) } @@ -412,7 +412,7 @@ private predicate boundFlowStep(Expr e2, Expr e1, int delta, boolean upper) { valueFlowStep(e2, e1, delta) and (upper = true or upper = false) or - e2.(SafeCastExpr).getExpr() = e1 and + e2.(RangeAnalysisSafeCastExpr).getExpr() = e1 and delta = 0 and (upper = true or upper = false) or diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 3b1bd182a1a..ea74fee137f 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -54,8 +54,15 @@ | exprs.kt:40:5:40:22 | b6 | LocalVariableDeclExpr | | exprs.kt:40:14:40:15 | i1 | VarAccess | | exprs.kt:40:14:40:22 | ...instanceof... | InstanceOfExpr | +| exprs.kt:40:14:40:22 | int | TypeAccess | | exprs.kt:41:5:41:23 | b7 | LocalVariableDeclExpr | +| exprs.kt:41:14:41:15 | i1 | VarAccess | +| exprs.kt:41:14:41:23 | ... !is ... | NotInstanceOfExpr | +| exprs.kt:41:14:41:23 | int | TypeAccess | | exprs.kt:42:5:42:26 | b8 | LocalVariableDeclExpr | +| exprs.kt:42:14:42:15 | b7 | VarAccess | +| exprs.kt:42:14:42:26 | (...)... | CastExpr | +| exprs.kt:42:14:42:26 | boolean | TypeAccess | | exprs.kt:43:5:43:35 | str1 | LocalVariableDeclExpr | | exprs.kt:43:25:43:34 | string lit | StringLiteral | | exprs.kt:44:5:44:36 | str2 | LocalVariableDeclExpr | @@ -74,4 +81,3 @@ | exprs.kt:53:9:53:18 | n | VarAccess | | exprs.kt:54:27:54:31 | new C(...) | ClassInstanceExpr | | exprs.kt:54:29:54:30 | 42 | IntegerLiteral | -| file://:0:0:0:0 | int | TypeAccess | From 62b3e07ae6c79e029a9df49a2f1ce28e79f03659 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Oct 2021 14:15:52 +0100 Subject: [PATCH 0619/1618] Kotlin: Accept test changes --- .../library-tests/controlflow/dominance/dominator.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected index 0704dd4482b..7b6938bd6a7 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected @@ -11,7 +11,7 @@ | Test.kt:13:4:13:4 | ; | Test.kt:13:8:13:9 | 10 | | Test.kt:14:10:16:3 | { ... } | Test.kt:15:4:15:4 | ; | | Test.kt:15:4:15:4 | ; | Test.kt:15:8:15:9 | 30 | -| Test.kt:18:3:18:3 | ; | Test.kt:18:3:18:3 | ...=... | +| Test.kt:18:3:18:3 | ; | Test.kt:18:12:18:12 | y | | Test.kt:21:3:24:11 | ; | Test.kt:21:3:24:11 | when ... | | Test.kt:22:4:22:4 | ; | Test.kt:22:8:22:9 | 40 | | Test.kt:27:3:27:3 | ; | Test.kt:27:7:27:8 | 10 | From a6c504abe3f46f6681bc188609f70f3c7b8a4562 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Oct 2021 15:27:42 +0100 Subject: [PATCH 0620/1618] Kotlin: Add support for implicit casts --- .../src/main/kotlin/KotlinExtractorExtension.kt | 10 ++++++++++ java/ql/test/kotlin/library-tests/exprs/exprs.expected | 8 ++++++++ java/ql/test/kotlin/library-tests/exprs/exprs.kt | 10 ++++++++++ 3 files changed, 28 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index b9c44b6a9cd..7e4dde63cf6 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1497,6 +1497,16 @@ class X { extractTypeAccess(e.typeOperand, id, 0, e) extractExpressionExpr(e.argument, callable, id, 1) } + IrTypeOperator.IMPLICIT_CAST -> { + // TODO: Make this distinguishable from an explicit cast? + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + val type = useType(e.type) + tw.writeExprs_castexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeHasLocation(id, locId) + extractTypeAccess(e.typeOperand, id, 0, e) + extractExpressionExpr(e.argument, callable, id, 1) + } IrTypeOperator.INSTANCEOF -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index ea74fee137f..944f334830a 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -81,3 +81,11 @@ | exprs.kt:53:9:53:18 | n | VarAccess | | exprs.kt:54:27:54:31 | new C(...) | ClassInstanceExpr | | exprs.kt:54:29:54:30 | 42 | IntegerLiteral | +| exprs.kt:57:1:57:18 | (...) | MethodAccess | +| exprs.kt:58:1:58:26 | (...) | MethodAccess | +| exprs.kt:59:1:59:26 | (...) | MethodAccess | +| exprs.kt:62:5:64:5 | when ... | WhenExpr | +| exprs.kt:62:8:62:8 | x | VarAccess | +| exprs.kt:62:8:62:21 | ...instanceof... | InstanceOfExpr | +| exprs.kt:62:8:62:21 | Subclass1 | TypeAccess | +| exprs.kt:63:9:63:28 | y | LocalVariableDeclExpr | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index 98fe83e6125..9fab2a5b0e3 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -53,3 +53,13 @@ fun getClass() { class C(val n: Int) { fun foo(): C { return C(42) } } + +open class Root {} +class Subclass1: Root() {} +class Subclass2: Root() {} + +fun typeTests(x: Root) { + if(x is Subclass1) { + val y: Subclass1 = x + } +} From dfa9bef5bd50afdba78ed9e94ea155257fd9e1de Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 28 Oct 2021 19:02:56 +0100 Subject: [PATCH 0621/1618] Fix gradle homedir search --- java/kotlin-extractor/build.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/build.py b/java/kotlin-extractor/build.py index 1e1311f7f5a..a8cbc7f3c78 100755 --- a/java/kotlin-extractor/build.py +++ b/java/kotlin-extractor/build.py @@ -6,6 +6,7 @@ import subprocess import shutil import os import os.path +import sys kotlinc = 'kotlinc' javac = 'javac' @@ -90,9 +91,9 @@ def compile_embeddable(): x = subprocess.run(['gradle', 'getHomeDir'], check=True, capture_output=True) output = x.stdout.decode(encoding='UTF-8', errors='strict') - m = re.match( - r'.*\n> Task :getHomeDir\n([^\n]+)\n.*', output) + m = re.search(r'(?m)^> Task :getHomeDir\n([^\n]+)$', output) if m is None: + print("gradle getHomeDir output:\n" + output, file = sys.stderr) raise Exception('Cannot determine gradle home directory') gradle_home = m.group(1) From d181b4b9cc9e5c7ba238d42b749587fd15784b09 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Oct 2021 17:00:02 +0100 Subject: [PATCH 0622/1618] Kotlin: Enhance the exprs test --- .../kotlin/library-tests/exprs/exprs.expected | 172 ++++++++++-------- .../test/kotlin/library-tests/exprs/exprs.kt | 9 + 2 files changed, 101 insertions(+), 80 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 944f334830a..2f7a0b10655 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -1,91 +1,103 @@ -| exprs.kt:3:5:3:14 | i1 | LocalVariableDeclExpr | -| exprs.kt:3:14:3:14 | 1 | IntegerLiteral | -| exprs.kt:4:5:4:18 | i2 | LocalVariableDeclExpr | -| exprs.kt:4:14:4:14 | x | VarAccess | -| exprs.kt:4:14:4:18 | ... + ... | AddExpr | -| exprs.kt:4:18:4:18 | y | VarAccess | -| exprs.kt:5:5:5:18 | i3 | LocalVariableDeclExpr | -| exprs.kt:5:14:5:14 | x | VarAccess | -| exprs.kt:5:14:5:18 | ... - ... | SubExpr | -| exprs.kt:5:18:5:18 | y | VarAccess | -| exprs.kt:6:5:6:18 | i4 | LocalVariableDeclExpr | +| exprs.kt:5:5:5:14 | i1 | LocalVariableDeclExpr | +| exprs.kt:5:14:5:14 | 1 | IntegerLiteral | +| exprs.kt:6:5:6:18 | i2 | LocalVariableDeclExpr | | exprs.kt:6:14:6:14 | x | VarAccess | -| exprs.kt:6:14:6:18 | ... / ... | DivExpr | +| exprs.kt:6:14:6:18 | ... + ... | AddExpr | | exprs.kt:6:18:6:18 | y | VarAccess | -| exprs.kt:7:5:7:18 | i5 | LocalVariableDeclExpr | +| exprs.kt:7:5:7:18 | i3 | LocalVariableDeclExpr | | exprs.kt:7:14:7:14 | x | VarAccess | -| exprs.kt:7:14:7:18 | ... % ... | RemExpr | +| exprs.kt:7:14:7:18 | ... - ... | SubExpr | | exprs.kt:7:18:7:18 | y | VarAccess | -| exprs.kt:18:5:18:20 | i13 | LocalVariableDeclExpr | -| exprs.kt:18:15:18:15 | x | VarAccess | -| exprs.kt:18:15:18:20 | ... == ... | EQExpr | -| exprs.kt:18:20:18:20 | y | VarAccess | -| exprs.kt:19:5:19:20 | i14 | LocalVariableDeclExpr | -| exprs.kt:19:15:19:15 | x | VarAccess | -| exprs.kt:19:15:19:20 | ... != ... | NEExpr | -| exprs.kt:19:15:19:20 | ... != ... | NEExpr | -| exprs.kt:19:20:19:20 | y | VarAccess | -| exprs.kt:20:5:20:19 | i15 | LocalVariableDeclExpr | +| exprs.kt:8:5:8:18 | i4 | LocalVariableDeclExpr | +| exprs.kt:8:14:8:14 | x | VarAccess | +| exprs.kt:8:14:8:18 | ... / ... | DivExpr | +| exprs.kt:8:18:8:18 | y | VarAccess | +| exprs.kt:9:5:9:18 | i5 | LocalVariableDeclExpr | +| exprs.kt:9:14:9:14 | x | VarAccess | +| exprs.kt:9:14:9:18 | ... % ... | RemExpr | +| exprs.kt:9:18:9:18 | y | VarAccess | +| exprs.kt:20:5:20:20 | i13 | LocalVariableDeclExpr | | exprs.kt:20:15:20:15 | x | VarAccess | -| exprs.kt:20:15:20:19 | ... < ... | LTExpr | -| exprs.kt:20:19:20:19 | y | VarAccess | -| exprs.kt:21:5:21:20 | i16 | LocalVariableDeclExpr | +| exprs.kt:20:15:20:20 | ... == ... | EQExpr | +| exprs.kt:20:20:20:20 | y | VarAccess | +| exprs.kt:21:5:21:20 | i14 | LocalVariableDeclExpr | | exprs.kt:21:15:21:15 | x | VarAccess | -| exprs.kt:21:15:21:20 | ... <= ... | LEExpr | +| exprs.kt:21:15:21:20 | ... != ... | NEExpr | +| exprs.kt:21:15:21:20 | ... != ... | NEExpr | | exprs.kt:21:20:21:20 | y | VarAccess | -| exprs.kt:22:5:22:19 | i17 | LocalVariableDeclExpr | +| exprs.kt:22:5:22:19 | i15 | LocalVariableDeclExpr | | exprs.kt:22:15:22:15 | x | VarAccess | -| exprs.kt:22:15:22:19 | ... > ... | GTExpr | +| exprs.kt:22:15:22:19 | ... < ... | LTExpr | | exprs.kt:22:19:22:19 | y | VarAccess | -| exprs.kt:23:5:23:20 | i18 | LocalVariableDeclExpr | +| exprs.kt:23:5:23:20 | i16 | LocalVariableDeclExpr | | exprs.kt:23:15:23:15 | x | VarAccess | -| exprs.kt:23:15:23:20 | ... >= ... | GEExpr | +| exprs.kt:23:15:23:20 | ... <= ... | LEExpr | | exprs.kt:23:20:23:20 | y | VarAccess | -| exprs.kt:29:5:29:17 | b1 | LocalVariableDeclExpr | -| exprs.kt:29:14:29:17 | true | BooleanLiteral | -| exprs.kt:30:5:30:18 | b2 | LocalVariableDeclExpr | -| exprs.kt:30:14:30:18 | false | BooleanLiteral | -| exprs.kt:37:5:37:15 | c | LocalVariableDeclExpr | -| exprs.kt:37:13:37:15 | x | CharacterLiteral | -| exprs.kt:38:5:38:26 | str | LocalVariableDeclExpr | -| exprs.kt:38:16:38:25 | string lit | StringLiteral | -| exprs.kt:39:5:39:38 | strWithQuote | LocalVariableDeclExpr | -| exprs.kt:39:25:39:37 | string " lit | StringLiteral | -| exprs.kt:40:5:40:22 | b6 | LocalVariableDeclExpr | -| exprs.kt:40:14:40:15 | i1 | VarAccess | -| exprs.kt:40:14:40:22 | ...instanceof... | InstanceOfExpr | -| exprs.kt:40:14:40:22 | int | TypeAccess | -| exprs.kt:41:5:41:23 | b7 | LocalVariableDeclExpr | -| exprs.kt:41:14:41:15 | i1 | VarAccess | -| exprs.kt:41:14:41:23 | ... !is ... | NotInstanceOfExpr | -| exprs.kt:41:14:41:23 | int | TypeAccess | -| exprs.kt:42:5:42:26 | b8 | LocalVariableDeclExpr | -| exprs.kt:42:14:42:15 | b7 | VarAccess | -| exprs.kt:42:14:42:26 | (...)... | CastExpr | -| exprs.kt:42:14:42:26 | boolean | TypeAccess | -| exprs.kt:43:5:43:35 | str1 | LocalVariableDeclExpr | -| exprs.kt:43:25:43:34 | string lit | StringLiteral | -| exprs.kt:44:5:44:36 | str2 | LocalVariableDeclExpr | -| exprs.kt:44:26:44:35 | string lit | StringLiteral | -| exprs.kt:45:5:45:28 | str3 | LocalVariableDeclExpr | -| exprs.kt:45:25:45:28 | null | NullLiteral | -| exprs.kt:46:12:46:14 | 123 | IntegerLiteral | -| exprs.kt:46:12:46:20 | ... + ... | AddExpr | -| exprs.kt:46:18:46:20 | 456 | IntegerLiteral | -| exprs.kt:50:5:50:23 | d | LocalVariableDeclExpr | -| exprs.kt:50:13:50:16 | true | BooleanLiteral | -| exprs.kt:50:13:50:23 | ::class | ClassExpr | -| exprs.kt:53:1:55:1 | (...) | MethodAccess | -| exprs.kt:53:9:53:18 | ...=... | AssignExpr | -| exprs.kt:53:9:53:18 | n | VarAccess | -| exprs.kt:53:9:53:18 | n | VarAccess | -| exprs.kt:54:27:54:31 | new C(...) | ClassInstanceExpr | -| exprs.kt:54:29:54:30 | 42 | IntegerLiteral | -| exprs.kt:57:1:57:18 | (...) | MethodAccess | -| exprs.kt:58:1:58:26 | (...) | MethodAccess | -| exprs.kt:59:1:59:26 | (...) | MethodAccess | -| exprs.kt:62:5:64:5 | when ... | WhenExpr | -| exprs.kt:62:8:62:8 | x | VarAccess | -| exprs.kt:62:8:62:21 | ...instanceof... | InstanceOfExpr | -| exprs.kt:62:8:62:21 | Subclass1 | TypeAccess | -| exprs.kt:63:9:63:28 | y | LocalVariableDeclExpr | +| exprs.kt:24:5:24:19 | i17 | LocalVariableDeclExpr | +| exprs.kt:24:15:24:15 | x | VarAccess | +| exprs.kt:24:15:24:19 | ... > ... | GTExpr | +| exprs.kt:24:19:24:19 | y | VarAccess | +| exprs.kt:25:5:25:20 | i18 | LocalVariableDeclExpr | +| exprs.kt:25:15:25:15 | x | VarAccess | +| exprs.kt:25:15:25:20 | ... >= ... | GEExpr | +| exprs.kt:25:20:25:20 | y | VarAccess | +| exprs.kt:31:5:31:17 | b1 | LocalVariableDeclExpr | +| exprs.kt:31:14:31:17 | true | BooleanLiteral | +| exprs.kt:32:5:32:18 | b2 | LocalVariableDeclExpr | +| exprs.kt:32:14:32:18 | false | BooleanLiteral | +| exprs.kt:39:5:39:15 | c | LocalVariableDeclExpr | +| exprs.kt:39:13:39:15 | x | CharacterLiteral | +| exprs.kt:40:5:40:26 | str | LocalVariableDeclExpr | +| exprs.kt:40:16:40:25 | string lit | StringLiteral | +| exprs.kt:41:5:41:38 | strWithQuote | LocalVariableDeclExpr | +| exprs.kt:41:25:41:37 | string " lit | StringLiteral | +| exprs.kt:42:5:42:22 | b6 | LocalVariableDeclExpr | +| exprs.kt:42:14:42:15 | i1 | VarAccess | +| exprs.kt:42:14:42:22 | ...instanceof... | InstanceOfExpr | +| exprs.kt:42:14:42:22 | int | TypeAccess | +| exprs.kt:43:5:43:23 | b7 | LocalVariableDeclExpr | +| exprs.kt:43:14:43:15 | i1 | VarAccess | +| exprs.kt:43:14:43:23 | ... !is ... | NotInstanceOfExpr | +| exprs.kt:43:14:43:23 | int | TypeAccess | +| exprs.kt:44:5:44:26 | b8 | LocalVariableDeclExpr | +| exprs.kt:44:14:44:15 | b7 | VarAccess | +| exprs.kt:44:14:44:26 | (...)... | CastExpr | +| exprs.kt:44:14:44:26 | boolean | TypeAccess | +| exprs.kt:45:5:45:35 | str1 | LocalVariableDeclExpr | +| exprs.kt:45:25:45:34 | string lit | StringLiteral | +| exprs.kt:46:5:46:36 | str2 | LocalVariableDeclExpr | +| exprs.kt:46:26:46:35 | string lit | StringLiteral | +| exprs.kt:47:5:47:28 | str3 | LocalVariableDeclExpr | +| exprs.kt:47:25:47:28 | null | NullLiteral | +| exprs.kt:48:12:48:14 | 123 | IntegerLiteral | +| exprs.kt:48:12:48:20 | ... + ... | AddExpr | +| exprs.kt:48:18:48:20 | 456 | IntegerLiteral | +| exprs.kt:52:5:52:23 | d | LocalVariableDeclExpr | +| exprs.kt:52:13:52:16 | true | BooleanLiteral | +| exprs.kt:52:13:52:23 | ::class | ClassExpr | +| exprs.kt:55:1:57:1 | (...) | MethodAccess | +| exprs.kt:55:9:55:18 | ...=... | AssignExpr | +| exprs.kt:55:9:55:18 | n | VarAccess | +| exprs.kt:55:9:55:18 | n | VarAccess | +| exprs.kt:56:27:56:31 | new C(...) | ClassInstanceExpr | +| exprs.kt:56:29:56:30 | 42 | IntegerLiteral | +| exprs.kt:59:1:59:18 | (...) | MethodAccess | +| exprs.kt:60:1:60:26 | (...) | MethodAccess | +| exprs.kt:61:1:61:26 | (...) | MethodAccess | +| exprs.kt:64:5:66:5 | when ... | WhenExpr | +| exprs.kt:64:8:64:8 | x | VarAccess | +| exprs.kt:64:8:64:21 | ...instanceof... | InstanceOfExpr | +| exprs.kt:64:8:64:21 | Subclass1 | TypeAccess | +| exprs.kt:65:9:65:28 | y | LocalVariableDeclExpr | +| exprs.kt:65:28:65:28 | (...)... | CastExpr | +| exprs.kt:65:28:65:28 | Subclass1 | TypeAccess | +| exprs.kt:65:28:65:28 | x | VarAccess | +| exprs.kt:70:5:70:25 | r | LocalVariableDeclExpr | +| exprs.kt:70:13:70:13 | p | VarAccess | +| exprs.kt:70:15:70:25 | getBounds(...) | MethodAccess | +| exprs.kt:71:5:73:5 | when ... | WhenExpr | +| exprs.kt:71:8:71:8 | r | VarAccess | +| exprs.kt:71:8:71:16 | ... != ... | NEExpr | +| exprs.kt:71:8:71:16 | ... != ... | NEExpr | +| exprs.kt:71:13:71:16 | null | NullLiteral | +| exprs.kt:72:9:72:29 | r2 | LocalVariableDeclExpr | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index 9fab2a5b0e3..0bf929d65b4 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -1,3 +1,5 @@ +import java.awt.Polygon +import java.awt.Rectangle fun topLevelMethod(x: Int, y: Int): Int { val i1 = 1 @@ -63,3 +65,10 @@ fun typeTests(x: Root) { val y: Subclass1 = x } } + +fun foo(p: Polygon) { + val r = p.getBounds() + if(r != null) { + val r2: Rectangle = r + } +} From 46e55f5990f126a6329e316928749a598dc96440 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Oct 2021 17:07:02 +0100 Subject: [PATCH 0623/1618] Kotlin: Add support for IMPLICIT_NOTNULL --- .../src/main/kotlin/KotlinExtractorExtension.kt | 10 ++++++++++ java/ql/test/kotlin/library-tests/exprs/exprs.expected | 3 +++ 2 files changed, 13 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 7e4dde63cf6..4e770b54625 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1507,6 +1507,16 @@ class X { extractTypeAccess(e.typeOperand, id, 0, e) extractExpressionExpr(e.argument, callable, id, 1) } + IrTypeOperator.IMPLICIT_NOTNULL -> { + // TODO: Make this distinguishable from an explicit cast? + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + val type = useType(e.type) + tw.writeExprs_castexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeHasLocation(id, locId) + extractTypeAccess(e.typeOperand, id, 0, e) + extractExpressionExpr(e.argument, callable, id, 1) + } IrTypeOperator.INSTANCEOF -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 2f7a0b10655..27ecb77c632 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -101,3 +101,6 @@ | exprs.kt:71:8:71:16 | ... != ... | NEExpr | | exprs.kt:71:13:71:16 | null | NullLiteral | | exprs.kt:72:9:72:29 | r2 | LocalVariableDeclExpr | +| exprs.kt:72:29:72:29 | (...)... | CastExpr | +| exprs.kt:72:29:72:29 | Rectangle | TypeAccess | +| exprs.kt:72:29:72:29 | r | VarAccess | From 924c6152163ce715d081662ab342b31030fed0fc Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Oct 2021 17:15:08 +0100 Subject: [PATCH 0624/1618] Kotlin: Enhance exprs test --- .../kotlin/library-tests/exprs/exprs.expected | 75 ++++++++++--------- .../test/kotlin/library-tests/exprs/exprs.kt | 6 ++ 2 files changed, 46 insertions(+), 35 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 27ecb77c632..5153f6bb6a0 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -69,38 +69,43 @@ | exprs.kt:46:26:46:35 | string lit | StringLiteral | | exprs.kt:47:5:47:28 | str3 | LocalVariableDeclExpr | | exprs.kt:47:25:47:28 | null | NullLiteral | -| exprs.kt:48:12:48:14 | 123 | IntegerLiteral | -| exprs.kt:48:12:48:20 | ... + ... | AddExpr | -| exprs.kt:48:18:48:20 | 456 | IntegerLiteral | -| exprs.kt:52:5:52:23 | d | LocalVariableDeclExpr | -| exprs.kt:52:13:52:16 | true | BooleanLiteral | -| exprs.kt:52:13:52:23 | ::class | ClassExpr | -| exprs.kt:55:1:57:1 | (...) | MethodAccess | -| exprs.kt:55:9:55:18 | ...=... | AssignExpr | -| exprs.kt:55:9:55:18 | n | VarAccess | -| exprs.kt:55:9:55:18 | n | VarAccess | -| exprs.kt:56:27:56:31 | new C(...) | ClassInstanceExpr | -| exprs.kt:56:29:56:30 | 42 | IntegerLiteral | -| exprs.kt:59:1:59:18 | (...) | MethodAccess | -| exprs.kt:60:1:60:26 | (...) | MethodAccess | -| exprs.kt:61:1:61:26 | (...) | MethodAccess | -| exprs.kt:64:5:66:5 | when ... | WhenExpr | -| exprs.kt:64:8:64:8 | x | VarAccess | -| exprs.kt:64:8:64:21 | ...instanceof... | InstanceOfExpr | -| exprs.kt:64:8:64:21 | Subclass1 | TypeAccess | -| exprs.kt:65:9:65:28 | y | LocalVariableDeclExpr | -| exprs.kt:65:28:65:28 | (...)... | CastExpr | -| exprs.kt:65:28:65:28 | Subclass1 | TypeAccess | -| exprs.kt:65:28:65:28 | x | VarAccess | -| exprs.kt:70:5:70:25 | r | LocalVariableDeclExpr | -| exprs.kt:70:13:70:13 | p | VarAccess | -| exprs.kt:70:15:70:25 | getBounds(...) | MethodAccess | -| exprs.kt:71:5:73:5 | when ... | WhenExpr | -| exprs.kt:71:8:71:8 | r | VarAccess | -| exprs.kt:71:8:71:16 | ... != ... | NEExpr | -| exprs.kt:71:8:71:16 | ... != ... | NEExpr | -| exprs.kt:71:13:71:16 | null | NullLiteral | -| exprs.kt:72:9:72:29 | r2 | LocalVariableDeclExpr | -| exprs.kt:72:29:72:29 | (...)... | CastExpr | -| exprs.kt:72:29:72:29 | Rectangle | TypeAccess | -| exprs.kt:72:29:72:29 | r | VarAccess | +| exprs.kt:49:5:49:21 | variable | LocalVariableDeclExpr | +| exprs.kt:49:20:49:21 | 10 | IntegerLiteral | +| exprs.kt:50:12:50:19 | variable | VarAccess | +| exprs.kt:50:12:50:23 | ... > ... | GTExpr | +| exprs.kt:50:23:50:23 | 0 | IntegerLiteral | +| exprs.kt:54:12:54:14 | 123 | IntegerLiteral | +| exprs.kt:54:12:54:20 | ... + ... | AddExpr | +| exprs.kt:54:18:54:20 | 456 | IntegerLiteral | +| exprs.kt:58:5:58:23 | d | LocalVariableDeclExpr | +| exprs.kt:58:13:58:16 | true | BooleanLiteral | +| exprs.kt:58:13:58:23 | ::class | ClassExpr | +| exprs.kt:61:1:63:1 | (...) | MethodAccess | +| exprs.kt:61:9:61:18 | ...=... | AssignExpr | +| exprs.kt:61:9:61:18 | n | VarAccess | +| exprs.kt:61:9:61:18 | n | VarAccess | +| exprs.kt:62:27:62:31 | new C(...) | ClassInstanceExpr | +| exprs.kt:62:29:62:30 | 42 | IntegerLiteral | +| exprs.kt:65:1:65:18 | (...) | MethodAccess | +| exprs.kt:66:1:66:26 | (...) | MethodAccess | +| exprs.kt:67:1:67:26 | (...) | MethodAccess | +| exprs.kt:70:5:72:5 | when ... | WhenExpr | +| exprs.kt:70:8:70:8 | x | VarAccess | +| exprs.kt:70:8:70:21 | ...instanceof... | InstanceOfExpr | +| exprs.kt:70:8:70:21 | Subclass1 | TypeAccess | +| exprs.kt:71:9:71:28 | y | LocalVariableDeclExpr | +| exprs.kt:71:28:71:28 | (...)... | CastExpr | +| exprs.kt:71:28:71:28 | Subclass1 | TypeAccess | +| exprs.kt:71:28:71:28 | x | VarAccess | +| exprs.kt:76:5:76:25 | r | LocalVariableDeclExpr | +| exprs.kt:76:13:76:13 | p | VarAccess | +| exprs.kt:76:15:76:25 | getBounds(...) | MethodAccess | +| exprs.kt:77:5:79:5 | when ... | WhenExpr | +| exprs.kt:77:8:77:8 | r | VarAccess | +| exprs.kt:77:8:77:16 | ... != ... | NEExpr | +| exprs.kt:77:8:77:16 | ... != ... | NEExpr | +| exprs.kt:77:13:77:16 | null | NullLiteral | +| exprs.kt:78:9:78:29 | r2 | LocalVariableDeclExpr | +| exprs.kt:78:29:78:29 | (...)... | CastExpr | +| exprs.kt:78:29:78:29 | Rectangle | TypeAccess | +| exprs.kt:78:29:78:29 | r | VarAccess | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index 0bf929d65b4..658c147d371 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -45,6 +45,12 @@ TODO val str1: String = "string lit" val str2: String? = "string lit" val str3: String? = null + + var variable = 10 + while (variable > 0) { + variable-- + } + return 123 + 456 } From 9a886260cdf304ebf3dcdf504c37c71b2cfe6562 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Oct 2021 17:16:42 +0100 Subject: [PATCH 0625/1618] Kotlin: Add support for IMPLICIT_COERCION_TO_UNIT --- .../src/main/kotlin/KotlinExtractorExtension.kt | 10 ++++++++++ java/ql/test/kotlin/library-tests/exprs/exprs.expected | 2 ++ 2 files changed, 12 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 4e770b54625..d9eedb4052c 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1517,6 +1517,16 @@ class X { extractTypeAccess(e.typeOperand, id, 0, e) extractExpressionExpr(e.argument, callable, id, 1) } + IrTypeOperator.IMPLICIT_COERCION_TO_UNIT -> { + // TODO: Make this distinguishable from an explicit cast? + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + val type = useType(e.type) + tw.writeExprs_castexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeHasLocation(id, locId) + extractTypeAccess(e.typeOperand, id, 0, e) + extractExpressionExpr(e.argument, callable, id, 1) + } IrTypeOperator.INSTANCEOF -> { val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 5153f6bb6a0..2fe8007e479 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -74,6 +74,8 @@ | exprs.kt:50:12:50:19 | variable | VarAccess | | exprs.kt:50:12:50:23 | ... > ... | GTExpr | | exprs.kt:50:23:50:23 | 0 | IntegerLiteral | +| exprs.kt:51:9:51:18 | (...)... | CastExpr | +| exprs.kt:51:9:51:18 | void | TypeAccess | | exprs.kt:54:12:54:14 | 123 | IntegerLiteral | | exprs.kt:54:12:54:20 | ... + ... | AddExpr | | exprs.kt:54:18:54:20 | 456 | IntegerLiteral | From 6fd8d638a34d26e8d0aede4a0c9ccae852ac5605 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 28 Oct 2021 18:01:59 +0100 Subject: [PATCH 0626/1618] Kotlin: Accept test output --- .../library-tests/controlflow/basic/bbStmts.expected | 7 ++++--- .../controlflow/basic/bbStrictDominance.expected | 5 +++++ .../controlflow/basic/bbSuccessor.expected | 6 ++++-- .../controlflow/basic/getASuccessor.expected | 4 +++- .../controlflow/basic/strictPostDominance.expected | 12 ++++++++++++ .../controlflow/dominance/dominator.expected | 1 + 6 files changed, 29 insertions(+), 6 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected index 6ae593227b3..781558f3c2a 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected @@ -72,14 +72,15 @@ | Test.kt:35:3:35:3 | ; | 1 | Test.kt:35:7:35:8 | 20 | | Test.kt:35:3:35:3 | ; | 2 | Test.kt:35:3:35:3 | ...=... | | Test.kt:35:3:35:3 | ; | 3 | Test.kt:38:3:41:3 | while (...) | -| Test.kt:35:3:35:3 | ; | 4 | Test.kt:38:9:38:9 | x | -| Test.kt:35:3:35:3 | ; | 5 | Test.kt:38:13:38:13 | 0 | -| Test.kt:35:3:35:3 | ; | 6 | Test.kt:38:9:38:13 | ... > ... | +| Test.kt:38:9:38:9 | x | 0 | Test.kt:38:9:38:9 | x | +| Test.kt:38:9:38:9 | x | 1 | Test.kt:38:13:38:13 | 0 | +| Test.kt:38:9:38:9 | x | 2 | Test.kt:38:9:38:13 | ... > ... | | Test.kt:38:16:41:3 | { ... } | 0 | Test.kt:38:16:41:3 | { ... } | | Test.kt:38:16:41:3 | { ... } | 1 | Test.kt:39:4:39:4 | ; | | Test.kt:38:16:41:3 | { ... } | 2 | Test.kt:39:8:39:9 | 10 | | Test.kt:38:16:41:3 | { ... } | 3 | Test.kt:39:4:39:4 | ...=... | | Test.kt:38:16:41:3 | { ... } | 4 | Test.kt:40:4:40:6 | ; | +| Test.kt:38:16:41:3 | { ... } | 5 | Test.kt:40:4:40:6 | (...)... | | Test.kt:43:3:43:3 | ; | 0 | Test.kt:43:3:43:3 | ; | | Test.kt:43:3:43:3 | ; | 1 | Test.kt:43:7:43:8 | 30 | | Test.kt:43:3:43:3 | ; | 2 | Test.kt:43:3:43:3 | ...=... | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.expected index 2776e332ef0..d647ba81aa9 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStrictDominance.expected @@ -1,11 +1,16 @@ | Test.kt:4:13:79:2 | { ... } | Test.kt:18:3:18:3 | ; | | Test.kt:4:13:79:2 | { ... } | Test.kt:30:15:33:3 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:35:3:35:3 | ; | +| Test.kt:4:13:79:2 | { ... } | Test.kt:38:9:38:9 | x | | Test.kt:4:13:79:2 | { ... } | Test.kt:38:16:41:3 | { ... } | | Test.kt:4:13:79:2 | { ... } | Test.kt:43:3:43:3 | ; | | Test.kt:18:3:18:3 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:18:3:18:3 | ; | Test.kt:35:3:35:3 | ; | +| Test.kt:18:3:18:3 | ; | Test.kt:38:9:38:9 | x | | Test.kt:18:3:18:3 | ; | Test.kt:38:16:41:3 | { ... } | | Test.kt:18:3:18:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:38:9:38:9 | x | | Test.kt:35:3:35:3 | ; | Test.kt:38:16:41:3 | { ... } | | Test.kt:35:3:35:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:38:9:38:9 | x | Test.kt:38:16:41:3 | { ... } | +| Test.kt:38:9:38:9 | x | Test.kt:43:3:43:3 | ; | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected index a4e33c52018..6134d8c42b6 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected @@ -3,5 +3,7 @@ | Test.kt:18:3:18:3 | ; | Test.kt:30:15:33:3 | { ... } | | Test.kt:18:3:18:3 | ; | Test.kt:35:3:35:3 | ; | | Test.kt:30:15:33:3 | { ... } | Test.kt:35:3:35:3 | ; | -| Test.kt:35:3:35:3 | ; | Test.kt:38:16:41:3 | { ... } | -| Test.kt:35:3:35:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:35:3:35:3 | ; | Test.kt:38:9:38:9 | x | +| Test.kt:38:9:38:9 | x | Test.kt:38:16:41:3 | { ... } | +| Test.kt:38:9:38:9 | x | Test.kt:43:3:43:3 | ; | +| Test.kt:38:16:41:3 | { ... } | Test.kt:38:9:38:9 | x | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected index 2a2a7d43297..2a0dc445f85 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected @@ -92,7 +92,9 @@ | Test.kt:39:4:39:4 | ...=... | AssignExpr | Test.kt:40:4:40:6 | ; | ExprStmt | | Test.kt:39:4:39:4 | ; | ExprStmt | Test.kt:39:8:39:9 | 10 | LongLiteral | | Test.kt:39:8:39:9 | 10 | LongLiteral | Test.kt:39:4:39:4 | ...=... | AssignExpr | -| Test.kt:40:4:40:6 | ; | ExprStmt | file://:0:0:0:0 | | | +| Test.kt:40:4:40:6 | (...)... | CastExpr | Test.kt:38:9:38:9 | x | VarAccess | +| Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | (...)... | CastExpr | +| Test.kt:40:4:40:6 | void | TypeAccess | file://:0:0:0:0 | | | | Test.kt:43:3:43:3 | ...=... | AssignExpr | Test.kt:73:3:73:3 | ; | ExprStmt | | Test.kt:43:3:43:3 | ; | ExprStmt | Test.kt:43:7:43:8 | 30 | IntegerLiteral | | Test.kt:43:7:43:8 | 30 | IntegerLiteral | Test.kt:43:3:43:3 | ...=... | AssignExpr | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected index a884146ce68..30df1104037 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected @@ -169,6 +169,9 @@ | Test.kt:43:3:43:3 | ; | Test.kt:32:4:32:4 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:35:3:35:3 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:43:3:43:3 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:43:3:43:3 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:40:4:40:6 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:4:13:79:2 | { ... } | | Test.kt:73:3:73:3 | ; | Test.kt:5:3:5:16 | var ...; | | Test.kt:73:3:73:3 | ; | Test.kt:6:3:6:18 | var ...; | @@ -190,6 +193,9 @@ | Test.kt:73:3:73:3 | ; | Test.kt:32:4:32:4 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:35:3:35:3 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:73:3:73:3 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:73:3:73:3 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:40:4:40:6 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:43:3:43:3 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:4:13:79:2 | { ... } | | Test.kt:77:3:77:3 | ; | Test.kt:5:3:5:16 | var ...; | @@ -212,6 +218,9 @@ | Test.kt:77:3:77:3 | ; | Test.kt:32:4:32:4 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:35:3:35:3 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:38:3:41:3 | while (...) | +| Test.kt:77:3:77:3 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:77:3:77:3 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:40:4:40:6 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:43:3:43:3 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:73:3:73:3 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:4:13:79:2 | { ... } | @@ -235,6 +244,9 @@ | Test.kt:78:3:78:8 | return ... | Test.kt:32:4:32:4 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:35:3:35:3 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:38:3:41:3 | while (...) | +| Test.kt:78:3:78:8 | return ... | Test.kt:38:16:41:3 | { ... } | +| Test.kt:78:3:78:8 | return ... | Test.kt:39:4:39:4 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:40:4:40:6 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:43:3:43:3 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:73:3:73:3 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:77:3:77:3 | ; | diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected index 7b6938bd6a7..d5001b06e60 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected @@ -23,6 +23,7 @@ | Test.kt:38:3:41:3 | while (...) | Test.kt:38:10:38:10 | x | | Test.kt:38:17:41:3 | { ... } | Test.kt:39:4:39:4 | ; | | Test.kt:39:4:39:4 | ; | Test.kt:39:8:39:9 | 10 | +| Test.kt:40:4:40:6 | ; | Test.kt:40:4:40:6 | (...)... | | Test.kt:43:3:43:3 | ; | Test.kt:43:3:43:3 | z | | Test.kt:73:3:73:3 | ; | Test.kt:73:3:73:3 | z | | Test.kt:77:3:77:3 | ; | Test.kt:77:7:77:8 | 40 | From 2ba8ccafa9408980262c1c73c785cd74a08d381f Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 29 Oct 2021 11:48:24 +0100 Subject: [PATCH 0627/1618] Kotlin: Make build compatible with older javac's --- java/kotlin-extractor/build.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/build.py b/java/kotlin-extractor/build.py index a8cbc7f3c78..50dfd8cfcc2 100755 --- a/java/kotlin-extractor/build.py +++ b/java/kotlin-extractor/build.py @@ -23,7 +23,7 @@ def compile_to_dir(srcs, classpath, java_classpath, output): # Use javac to compile .java files, referencing the Kotlin class files: subprocess.run([javac, '-d', output, - '--release', '8', + '-source', '8', '-target', '8', '-classpath', "%s:%s:%s" % (output, classpath, java_classpath)] + [s for s in srcs if s.endswith(".java")], check=True) From ba335b0c69630062bfd647487ebefd4520c23c69 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 29 Oct 2021 15:43:39 +0100 Subject: [PATCH 0628/1618] Kotlin: Add StmtExpr In some contexts, Kotlin has what we would call a Stmt inside what we would call an Expr. This allows us to handle this case. --- .../main/kotlin/KotlinExtractorExtension.kt | 126 ++++++++++++------ java/ql/lib/config/semmlecode.dbscheme | 3 +- .../lib/semmle/code/java/ControlFlowGraph.qll | 7 + java/ql/lib/semmle/code/java/Expr.qll | 16 +++ 4 files changed, 112 insertions(+), 40 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index d9eedb4052c..9904b777d3a 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1194,9 +1194,50 @@ class X { private var currentFunction: IrFunction? = null + abstract inner class StmtExprParent { + abstract fun stmt(e: IrExpression, callable: Label): StmtParent + abstract fun expr(e: IrExpression, callable: Label): ExprParent + } + + inner class StmtParent(val parent: Label, val idx: Int): StmtExprParent() { + override fun stmt(e: IrExpression, callable: Label): StmtParent { + return this + } + override fun expr(e: IrExpression, callable: Label): ExprParent { + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + tw.writeStmts_exprstmt(id, parent, idx, callable) + tw.writeHasLocation(id, locId) + return ExprParent(id, 0) + } + } + inner class ExprParent(val parent: Label, val idx: Int): StmtExprParent() { + override fun stmt(e: IrExpression, callable: Label): StmtParent { + val id = tw.getFreshIdLabel() + val type = useType(e.type) + val locId = tw.getLocation(e) + tw.writeExprs_stmtexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeHasLocation(id, locId) + return StmtParent(id, 0) + } + override fun expr(e: IrExpression, callable: Label): ExprParent { + return this + } + } + fun extractExpressionStmt(e: IrExpression, callable: Label, parent: Label, idx: Int) { + extractExpression(e, callable, StmtParent(parent, idx)) + } + + fun extractExpressionExpr(e: IrExpression, callable: Label, parent: Label, idx: Int) { + extractExpression(e, callable, ExprParent(parent, idx)) + } + + fun extractExpression(e: IrExpression, callable: Label, parent: StmtExprParent) { when(e) { is IrDelegatingConstructorCall -> { + val stmtParent = parent.stmt(e, callable) + val irCallable = currentFunction if (irCallable == null) { logger.warnElement(Severity.ErrorSevere, "Current function is not set", e) @@ -1209,10 +1250,10 @@ class X { val id: Label if (delegatingClass != currentClass) { id = tw.getFreshIdLabel() - tw.writeStmts_superconstructorinvocationstmt(id, parent, idx, callable) + tw.writeStmts_superconstructorinvocationstmt(id, stmtParent.parent, stmtParent.idx, callable) } else { id = tw.getFreshIdLabel() - tw.writeStmts_constructorinvocationstmt(id, parent, idx, callable) + tw.writeStmts_constructorinvocationstmt(id, stmtParent.parent, stmtParent.idx, callable) } val locId = tw.getLocation(e) @@ -1235,43 +1276,49 @@ class X { // todo: type arguments at index -2, -3, ... } is IrThrow -> { + val stmtParent = parent.stmt(e, callable) val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) - tw.writeStmts_throwstmt(id, parent, idx, callable) + tw.writeStmts_throwstmt(id, stmtParent.parent, stmtParent.idx, callable) tw.writeHasLocation(id, locId) extractExpressionExpr(e.value, callable, id, 0) } is IrBreak -> { + val stmtParent = parent.stmt(e, callable) val id = tw.getFreshIdLabel() - tw.writeStmts_breakstmt(id, parent, idx, callable) + tw.writeStmts_breakstmt(id, stmtParent.parent, stmtParent.idx, callable) extractBreakContinue(e, id) } is IrContinue -> { + val stmtParent = parent.stmt(e, callable) val id = tw.getFreshIdLabel() - tw.writeStmts_continuestmt(id, parent, idx, callable) + tw.writeStmts_continuestmt(id, stmtParent.parent, stmtParent.idx, callable) extractBreakContinue(e, id) } is IrReturn -> { + val stmtParent = parent.stmt(e, callable) val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) - tw.writeStmts_returnstmt(id, parent, idx, callable) + tw.writeStmts_returnstmt(id, stmtParent.parent, stmtParent.idx, callable) tw.writeHasLocation(id, locId) extractExpressionExpr(e.value, callable, id, 0) } is IrContainerExpression -> { + val stmtParent = parent.stmt(e, callable) val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) - tw.writeStmts_block(id, parent, idx, callable) + tw.writeStmts_block(id, stmtParent.parent, stmtParent.idx, callable) tw.writeHasLocation(id, locId) e.statements.forEachIndexed { i, s -> extractStatement(s, callable, id, i) } } is IrWhileLoop -> { + val stmtParent = parent.stmt(e, callable) val id = tw.getFreshIdLabel() loopIdMap[e] = id val locId = tw.getLocation(e) - tw.writeStmts_whilestmt(id, parent, idx, callable) + tw.writeStmts_whilestmt(id, stmtParent.parent, stmtParent.idx, callable) tw.writeHasLocation(id, locId) extractExpressionExpr(e.condition, callable, id, 0) val body = e.body @@ -1281,10 +1328,11 @@ class X { loopIdMap.remove(e) } is IrDoWhileLoop -> { + val stmtParent = parent.stmt(e, callable) val id = tw.getFreshIdLabel() loopIdMap[e] = id val locId = tw.getLocation(e) - tw.writeStmts_dostmt(id, parent, idx, callable) + tw.writeStmts_dostmt(id, stmtParent.parent, stmtParent.idx, callable) tw.writeHasLocation(id, locId) extractExpressionExpr(e.condition, callable, id, 0) val body = e.body @@ -1293,19 +1341,8 @@ class X { } loopIdMap.remove(e) } - else -> { - val id = tw.getFreshIdLabel() - val locId = tw.getLocation(e) - tw.writeStmts_exprstmt(id, parent, idx, callable) - tw.writeHasLocation(id, locId) - extractExpressionExpr(e, callable, id, 0) - } - } - } - - fun extractExpressionExpr(e: IrExpression, callable: Label, parent: Label, idx: Int) { - when(e) { is IrInstanceInitializerCall -> { + val exprParent = parent.expr(e, callable) val irCallable = currentFunction if (irCallable == null) { logger.warnElement(Severity.ErrorSevere, "Current function is not set", e) @@ -1322,67 +1359,73 @@ class X { val locId = tw.getLocation(e) var methodLabel = getFunctionLabel(irCallable.parent, "", listOf(), e.type) val methodId = tw.getLabelFor(methodLabel) - tw.writeExprs_methodaccess(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_methodaccess(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) tw.writeCallableBinding(id, methodId) } is IrConstructorCall -> { - extractConstructorCall(e, parent, idx, callable) + val exprParent = parent.expr(e, callable) + extractConstructorCall(e, exprParent.parent, exprParent.idx, callable) } is IrEnumConstructorCall -> { - extractConstructorCall(e, parent, idx, callable) + val exprParent = parent.expr(e, callable) + extractConstructorCall(e, exprParent.parent, exprParent.idx, callable) + } + is IrCall -> { + val exprParent = parent.expr(e, callable) + extractCall(e, callable, exprParent.parent, exprParent.idx) } - is IrCall -> extractCall(e, callable, parent, idx) is IrConst<*> -> { + val exprParent = parent.expr(e, callable) val v = e.value when(v) { is Int -> { val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_integerliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_integerliteral(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is Long -> { val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_longliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_longliteral(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is Float -> { val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_floatingpointliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_floatingpointliteral(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is Double -> { val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_doubleliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_doubleliteral(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is Boolean -> { val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_booleanliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_booleanliteral(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is Char -> { val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_characterliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_characterliteral(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } is String -> { val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_stringliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_stringliteral(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) tw.writeNamestrings(v.toString(), v.toString(), id) } @@ -1390,7 +1433,7 @@ class X { val id = tw.getFreshIdLabel() val type = useType(e.type) // class;kotlin.Nothing val locId = tw.getLocation(e) - tw.writeExprs_nullliteral(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_nullliteral(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) } else -> { @@ -1399,12 +1442,13 @@ class X { } } is IrGetValue -> { + val exprParent = parent.expr(e, callable) val owner = e.symbol.owner if (owner is IrValueParameter && owner.index == -1) { val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_thisaccess(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_thisaccess(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) if (isQualifiedThis(owner)) { // todo: add type access as child of 'id' at index 0 logger.warnElement(Severity.ErrorSevere, "TODO: Qualified this access found.", e) @@ -1414,7 +1458,7 @@ class X { val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_varaccess(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_varaccess(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) val vId = useValueDeclaration(owner) @@ -1422,10 +1466,11 @@ class X { } } is IrSetValue -> { + val exprParent = parent.expr(e, callable) val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_assignexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_assignexpr(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) val lhsId = tw.getFreshIdLabel() @@ -1438,10 +1483,11 @@ class X { extractExpressionExpr(e.value, callable, id, 1) } is IrWhen -> { + val exprParent = parent.expr(e, callable) val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) - tw.writeExprs_whenexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_whenexpr(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) if(e.origin == IF) { tw.writeWhen_if(id) @@ -1459,15 +1505,17 @@ class X { } } is IrGetClass -> { + val exprParent = parent.expr(e, callable) val id = tw.getFreshIdLabel() val locId = tw.getLocation(e) val type = useType(e.type) - tw.writeExprs_getclassexpr(id, type.javaResult.id, type.kotlinResult.id, parent, idx) + tw.writeExprs_getclassexpr(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) tw.writeHasLocation(id, locId) extractExpressionExpr(e.argument, callable, id, 0) } is IrTypeOperatorCall -> { - extractTypeOperatorCall(e, callable, parent, idx) + val exprParent = parent.expr(e, callable) + extractTypeOperatorCall(e, callable, exprParent.parent, exprParent.idx) } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index e69de7ac44f..ab7ab8f3cc0 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -535,7 +535,7 @@ stmts( int bodydecl: @callable ref ); -@stmtparent = @callable | @stmt | @switchexpr | @whenbranch; +@stmtparent = @callable | @stmt | @switchexpr | @whenbranch | @stmtexpr; case @stmt.kind of 0 = @block @@ -669,6 +669,7 @@ case @expr.kind of | 76 = @getclassexpr | 77 = @safecastexpr | 78 = @notinstanceofexpr +| 79 = @stmtexpr ; /** Holds if this `when` expression was written as an `if` expression. */ diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index ae996753c3d..c871fee90e9 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -414,6 +414,8 @@ private module ControlFlowGraphImpl { private Expr nonReturningExpr() { result = nonReturningMethodAccess() or + result.(StmtExpr).getStmt() = nonReturningStmt() + or exists(WhenExpr whenexpr | whenexpr = result | whenexpr.getBranch(_).isElseBranch() and forex(WhenBranch whenbranch | whenbranch = whenexpr.getBranch(_) | @@ -895,6 +897,9 @@ private module ControlFlowGraphImpl { // the last node in an `ExprStmt` is the last node in the expression last(n.(ExprStmt).getExpr(), last, completion) and completion = NormalCompletion() or + // the last node in a `StmtExpr` is the last node in the statement + last(n.(StmtExpr).getStmt(), last, completion) and completion = NormalCompletion() + or // the last statement of a labeled statement is the last statement of its body... exists(LabeledStmt lbl, Completion bodyCompletion | lbl = n and last(lbl.getStmt(), last, bodyCompletion) @@ -1209,6 +1214,8 @@ private module ControlFlowGraphImpl { or result = first(n.(ExprStmt).getExpr()) and completion = NormalCompletion() or + result = first(n.(StmtExpr).getStmt()) and completion = NormalCompletion() + or result = first(n.(LabeledStmt).getStmt()) and completion = NormalCompletion() or // Variable declarations in a variable declaration statement are executed sequentially. diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 718c3032010..26878395bf2 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2230,3 +2230,19 @@ class ClassExpr extends Expr, @getclassexpr { override string getAPrimaryQlClass() { result = "ClassExpr" } } + +/** + * An statement expression. + * + * In some contexts, a Kotlin expression can contain a statement. + */ +class StmtExpr extends Expr, @stmtexpr { + /** Gets the statement of this statement expression. */ + Stmt getStmt() { result.getParent() = this } + + override string toString() { result = "" } + + override string getHalsteadID() { result = "StmtExpr" } + + override string getAPrimaryQlClass() { result = "StmtExpr" } +} From 49d2e86b5e484c79da960b7b25c7b2d88f9aa922 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 29 Oct 2021 16:00:52 +0100 Subject: [PATCH 0629/1618] Kotlin: Accept test changes --- .../controlflow/basic/bbStmts.expected | 13 +++++++++- .../controlflow/basic/bbSuccessor.expected | 2 +- .../controlflow/basic/getASuccessor.expected | 11 +++++++- .../basic/strictDominance.expected | 6 +++++ .../basic/strictPostDominance.expected | 26 +++++++++++++------ .../controlflow/dominance/dominator.expected | 5 +++- .../kotlin/library-tests/exprs/exprs.expected | 8 ++++++ 7 files changed, 59 insertions(+), 12 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected index 781558f3c2a..e63b2e4bbc2 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected @@ -80,7 +80,18 @@ | Test.kt:38:16:41:3 | { ... } | 2 | Test.kt:39:8:39:9 | 10 | | Test.kt:38:16:41:3 | { ... } | 3 | Test.kt:39:4:39:4 | ...=... | | Test.kt:38:16:41:3 | { ... } | 4 | Test.kt:40:4:40:6 | ; | -| Test.kt:38:16:41:3 | { ... } | 5 | Test.kt:40:4:40:6 | (...)... | +| Test.kt:40:4:40:6 | | 0 | Test.kt:40:4:40:6 | | +| Test.kt:40:4:40:6 | | 1 | Test.kt:40:4:40:6 | { ... } | +| Test.kt:40:4:40:6 | | 2 | file://:0:0:0:0 | var ...; | +| Test.kt:40:4:40:6 | | 3 | Test.kt:40:4:40:4 | x | +| Test.kt:40:4:40:6 | | 4 | file://:0:0:0:0 | tmp0 | +| Test.kt:40:4:40:6 | | 5 | Test.kt:40:4:40:4 | ; | +| Test.kt:40:4:40:6 | | 6 | Test.kt:40:4:40:6 | tmp0 | +| Test.kt:40:4:40:6 | | 7 | Test.kt:40:4:40:6 | dec(...) | +| Test.kt:40:4:40:6 | | 8 | Test.kt:40:4:40:4 | ...=... | +| Test.kt:40:4:40:6 | | 9 | Test.kt:40:4:40:6 | ; | +| Test.kt:40:4:40:6 | | 10 | Test.kt:40:4:40:6 | tmp0 | +| Test.kt:40:4:40:6 | | 11 | Test.kt:40:4:40:6 | (...)... | | Test.kt:43:3:43:3 | ; | 0 | Test.kt:43:3:43:3 | ; | | Test.kt:43:3:43:3 | ; | 1 | Test.kt:43:7:43:8 | 30 | | Test.kt:43:3:43:3 | ; | 2 | Test.kt:43:3:43:3 | ...=... | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected index 6134d8c42b6..fdf38700509 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbSuccessor.expected @@ -6,4 +6,4 @@ | Test.kt:35:3:35:3 | ; | Test.kt:38:9:38:9 | x | | Test.kt:38:9:38:9 | x | Test.kt:38:16:41:3 | { ... } | | Test.kt:38:9:38:9 | x | Test.kt:43:3:43:3 | ; | -| Test.kt:38:16:41:3 | { ... } | Test.kt:38:9:38:9 | x | +| Test.kt:40:4:40:6 | | Test.kt:38:9:38:9 | x | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected index 2a0dc445f85..1700ea21bb1 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected @@ -92,9 +92,18 @@ | Test.kt:39:4:39:4 | ...=... | AssignExpr | Test.kt:40:4:40:6 | ; | ExprStmt | | Test.kt:39:4:39:4 | ; | ExprStmt | Test.kt:39:8:39:9 | 10 | LongLiteral | | Test.kt:39:8:39:9 | 10 | LongLiteral | Test.kt:39:4:39:4 | ...=... | AssignExpr | +| Test.kt:40:4:40:4 | ...=... | AssignExpr | Test.kt:40:4:40:6 | ; | ExprStmt | +| Test.kt:40:4:40:4 | ; | ExprStmt | Test.kt:40:4:40:6 | tmp0 | VarAccess | +| Test.kt:40:4:40:4 | x | VarAccess | file://:0:0:0:0 | tmp0 | LocalVariableDeclExpr | | Test.kt:40:4:40:6 | (...)... | CastExpr | Test.kt:38:9:38:9 | x | VarAccess | -| Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | (...)... | CastExpr | +| Test.kt:40:4:40:6 | ; | ExprStmt | Test.kt:40:4:40:6 | tmp0 | VarAccess | +| Test.kt:40:4:40:6 | ; | ExprStmt | file://:0:0:0:0 | | | +| Test.kt:40:4:40:6 | | StmtExpr | Test.kt:40:4:40:6 | { ... } | BlockStmt | +| Test.kt:40:4:40:6 | dec(...) | MethodAccess | Test.kt:40:4:40:4 | ...=... | AssignExpr | +| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | (...)... | CastExpr | +| Test.kt:40:4:40:6 | tmp0 | VarAccess | Test.kt:40:4:40:6 | dec(...) | MethodAccess | | Test.kt:40:4:40:6 | void | TypeAccess | file://:0:0:0:0 | | | +| Test.kt:40:4:40:6 | { ... } | BlockStmt | file://:0:0:0:0 | var ...; | LocalVariableDeclStmt | | Test.kt:43:3:43:3 | ...=... | AssignExpr | Test.kt:73:3:73:3 | ; | ExprStmt | | Test.kt:43:3:43:3 | ; | ExprStmt | Test.kt:43:7:43:8 | 30 | IntegerLiteral | | Test.kt:43:7:43:8 | 30 | IntegerLiteral | Test.kt:43:3:43:3 | ...=... | AssignExpr | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected index 860feff4b97..270243cc599 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/strictDominance.expected @@ -282,9 +282,15 @@ | Test.kt:38:16:41:3 | { ... } | Test.kt:39:4:39:4 | ; | | Test.kt:38:16:41:3 | { ... } | Test.kt:40:4:40:6 | ; | | Test.kt:39:4:39:4 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:40:4:40:4 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:40:4:40:6 | { ... } | Test.kt:40:4:40:4 | ; | +| Test.kt:40:4:40:6 | { ... } | Test.kt:40:4:40:6 | ; | +| Test.kt:40:4:40:6 | { ... } | file://:0:0:0:0 | var ...; | | Test.kt:43:3:43:3 | ; | Test.kt:73:3:73:3 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:77:3:77:3 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:78:3:78:8 | return ... | | Test.kt:73:3:73:3 | ; | Test.kt:77:3:77:3 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:78:3:78:8 | return ... | | Test.kt:77:3:77:3 | ; | Test.kt:78:3:78:8 | return ... | +| file://:0:0:0:0 | var ...; | Test.kt:40:4:40:4 | ; | +| file://:0:0:0:0 | var ...; | Test.kt:40:4:40:6 | ; | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected index 30df1104037..3131e80a34c 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/strictPostDominance.expected @@ -146,8 +146,13 @@ | Test.kt:38:3:41:3 | while (...) | Test.kt:32:4:32:4 | ; | | Test.kt:38:3:41:3 | while (...) | Test.kt:35:3:35:3 | ; | | Test.kt:39:4:39:4 | ; | Test.kt:38:16:41:3 | { ... } | +| Test.kt:40:4:40:4 | ; | Test.kt:40:4:40:6 | { ... } | +| Test.kt:40:4:40:4 | ; | file://:0:0:0:0 | var ...; | | Test.kt:40:4:40:6 | ; | Test.kt:38:16:41:3 | { ... } | | Test.kt:40:4:40:6 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:40:4:40:6 | ; | Test.kt:40:4:40:4 | ; | +| Test.kt:40:4:40:6 | ; | Test.kt:40:4:40:6 | { ... } | +| Test.kt:40:4:40:6 | ; | file://:0:0:0:0 | var ...; | | Test.kt:43:3:43:3 | ; | Test.kt:4:13:79:2 | { ... } | | Test.kt:43:3:43:3 | ; | Test.kt:5:3:5:16 | var ...; | | Test.kt:43:3:43:3 | ; | Test.kt:6:3:6:18 | var ...; | @@ -169,9 +174,10 @@ | Test.kt:43:3:43:3 | ; | Test.kt:32:4:32:4 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:35:3:35:3 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:38:3:41:3 | while (...) | -| Test.kt:43:3:43:3 | ; | Test.kt:38:16:41:3 | { ... } | -| Test.kt:43:3:43:3 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:40:4:40:4 | ; | | Test.kt:43:3:43:3 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:43:3:43:3 | ; | Test.kt:40:4:40:6 | { ... } | +| Test.kt:43:3:43:3 | ; | file://:0:0:0:0 | var ...; | | Test.kt:73:3:73:3 | ; | Test.kt:4:13:79:2 | { ... } | | Test.kt:73:3:73:3 | ; | Test.kt:5:3:5:16 | var ...; | | Test.kt:73:3:73:3 | ; | Test.kt:6:3:6:18 | var ...; | @@ -193,10 +199,11 @@ | Test.kt:73:3:73:3 | ; | Test.kt:32:4:32:4 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:35:3:35:3 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:38:3:41:3 | while (...) | -| Test.kt:73:3:73:3 | ; | Test.kt:38:16:41:3 | { ... } | -| Test.kt:73:3:73:3 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:40:4:40:4 | ; | | Test.kt:73:3:73:3 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:73:3:73:3 | ; | Test.kt:40:4:40:6 | { ... } | | Test.kt:73:3:73:3 | ; | Test.kt:43:3:43:3 | ; | +| Test.kt:73:3:73:3 | ; | file://:0:0:0:0 | var ...; | | Test.kt:77:3:77:3 | ; | Test.kt:4:13:79:2 | { ... } | | Test.kt:77:3:77:3 | ; | Test.kt:5:3:5:16 | var ...; | | Test.kt:77:3:77:3 | ; | Test.kt:6:3:6:18 | var ...; | @@ -218,11 +225,12 @@ | Test.kt:77:3:77:3 | ; | Test.kt:32:4:32:4 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:35:3:35:3 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:38:3:41:3 | while (...) | -| Test.kt:77:3:77:3 | ; | Test.kt:38:16:41:3 | { ... } | -| Test.kt:77:3:77:3 | ; | Test.kt:39:4:39:4 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:40:4:40:4 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:40:4:40:6 | ; | +| Test.kt:77:3:77:3 | ; | Test.kt:40:4:40:6 | { ... } | | Test.kt:77:3:77:3 | ; | Test.kt:43:3:43:3 | ; | | Test.kt:77:3:77:3 | ; | Test.kt:73:3:73:3 | ; | +| Test.kt:77:3:77:3 | ; | file://:0:0:0:0 | var ...; | | Test.kt:78:3:78:8 | return ... | Test.kt:4:13:79:2 | { ... } | | Test.kt:78:3:78:8 | return ... | Test.kt:5:3:5:16 | var ...; | | Test.kt:78:3:78:8 | return ... | Test.kt:6:3:6:18 | var ...; | @@ -244,9 +252,11 @@ | Test.kt:78:3:78:8 | return ... | Test.kt:32:4:32:4 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:35:3:35:3 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:38:3:41:3 | while (...) | -| Test.kt:78:3:78:8 | return ... | Test.kt:38:16:41:3 | { ... } | -| Test.kt:78:3:78:8 | return ... | Test.kt:39:4:39:4 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:40:4:40:4 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:40:4:40:6 | ; | +| Test.kt:78:3:78:8 | return ... | Test.kt:40:4:40:6 | { ... } | | Test.kt:78:3:78:8 | return ... | Test.kt:43:3:43:3 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:73:3:73:3 | ; | | Test.kt:78:3:78:8 | return ... | Test.kt:77:3:77:3 | ; | +| Test.kt:78:3:78:8 | return ... | file://:0:0:0:0 | var ...; | +| file://:0:0:0:0 | var ...; | Test.kt:40:4:40:6 | { ... } | diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected index d5001b06e60..f9ef4f60b92 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/dominator.expected @@ -23,7 +23,9 @@ | Test.kt:38:3:41:3 | while (...) | Test.kt:38:10:38:10 | x | | Test.kt:38:17:41:3 | { ... } | Test.kt:39:4:39:4 | ; | | Test.kt:39:4:39:4 | ; | Test.kt:39:8:39:9 | 10 | -| Test.kt:40:4:40:6 | ; | Test.kt:40:4:40:6 | (...)... | +| Test.kt:40:4:40:4 | ; | Test.kt:40:4:40:6 | tmp0 | +| Test.kt:40:4:40:6 | ; | Test.kt:40:4:40:6 | tmp0 | +| Test.kt:40:4:40:6 | { ... } | file://:0:0:0:0 | var ...; | | Test.kt:43:3:43:3 | ; | Test.kt:43:3:43:3 | z | | Test.kt:73:3:73:3 | ; | Test.kt:73:3:73:3 | z | | Test.kt:77:3:77:3 | ; | Test.kt:77:7:77:8 | 40 | @@ -42,3 +44,4 @@ | Test.kt:92:4:93:9 | ; | Test.kt:92:4:93:9 | when ... | | Test.kt:94:4:95:12 | ; | Test.kt:94:4:95:12 | when ... | | Test.kt:97:3:97:10 | return ... | Test.kt:81:2:98:2 | test2 | +| file://:0:0:0:0 | var ...; | Test.kt:40:4:40:4 | x | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 2fe8007e479..9c4f1928e40 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -74,7 +74,13 @@ | exprs.kt:50:12:50:19 | variable | VarAccess | | exprs.kt:50:12:50:23 | ... > ... | GTExpr | | exprs.kt:50:23:50:23 | 0 | IntegerLiteral | +| exprs.kt:51:9:51:16 | ...=... | AssignExpr | +| exprs.kt:51:9:51:16 | variable | VarAccess | | exprs.kt:51:9:51:18 | (...)... | CastExpr | +| exprs.kt:51:9:51:18 | | StmtExpr | +| exprs.kt:51:9:51:18 | dec(...) | MethodAccess | +| exprs.kt:51:9:51:18 | tmp0 | VarAccess | +| exprs.kt:51:9:51:18 | tmp0 | VarAccess | | exprs.kt:51:9:51:18 | void | TypeAccess | | exprs.kt:54:12:54:14 | 123 | IntegerLiteral | | exprs.kt:54:12:54:20 | ... + ... | AddExpr | @@ -111,3 +117,5 @@ | exprs.kt:78:29:78:29 | (...)... | CastExpr | | exprs.kt:78:29:78:29 | Rectangle | TypeAccess | | exprs.kt:78:29:78:29 | r | VarAccess | +| file://:0:0:0:0 | tmp0 | LocalVariableDeclExpr | +| file://:0:0:0:0 | variable | VarAccess | From f0ac63c46694373a465c076bc83565f8c428b924 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 29 Oct 2021 16:40:15 +0100 Subject: [PATCH 0630/1618] Kotlin: Extend expressions test --- .../kotlin/library-tests/exprs/exprs.expected | 56 +++++++++++++------ .../test/kotlin/library-tests/exprs/exprs.kt | 7 ++- 2 files changed, 45 insertions(+), 18 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 9c4f1928e40..119cb6a22a8 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -101,21 +101,45 @@ | exprs.kt:70:8:70:8 | x | VarAccess | | exprs.kt:70:8:70:21 | ...instanceof... | InstanceOfExpr | | exprs.kt:70:8:70:21 | Subclass1 | TypeAccess | -| exprs.kt:71:9:71:28 | y | LocalVariableDeclExpr | -| exprs.kt:71:28:71:28 | (...)... | CastExpr | -| exprs.kt:71:28:71:28 | Subclass1 | TypeAccess | -| exprs.kt:71:28:71:28 | x | VarAccess | -| exprs.kt:76:5:76:25 | r | LocalVariableDeclExpr | -| exprs.kt:76:13:76:13 | p | VarAccess | -| exprs.kt:76:15:76:25 | getBounds(...) | MethodAccess | -| exprs.kt:77:5:79:5 | when ... | WhenExpr | -| exprs.kt:77:8:77:8 | r | VarAccess | -| exprs.kt:77:8:77:16 | ... != ... | NEExpr | -| exprs.kt:77:8:77:16 | ... != ... | NEExpr | -| exprs.kt:77:13:77:16 | null | NullLiteral | -| exprs.kt:78:9:78:29 | r2 | LocalVariableDeclExpr | -| exprs.kt:78:29:78:29 | (...)... | CastExpr | -| exprs.kt:78:29:78:29 | Rectangle | TypeAccess | -| exprs.kt:78:29:78:29 | r | VarAccess | +| exprs.kt:71:9:71:29 | x1 | LocalVariableDeclExpr | +| exprs.kt:71:29:71:29 | (...)... | CastExpr | +| exprs.kt:71:29:71:29 | Subclass1 | TypeAccess | +| exprs.kt:71:29:71:29 | x | VarAccess | +| exprs.kt:73:5:73:60 | y1 | LocalVariableDeclExpr | +| exprs.kt:73:25:73:60 | true | BooleanLiteral | +| exprs.kt:73:25:73:60 | when ... | WhenExpr | +| exprs.kt:73:29:73:29 | x | VarAccess | +| exprs.kt:73:29:73:42 | ...instanceof... | InstanceOfExpr | +| exprs.kt:73:29:73:42 | Subclass1 | TypeAccess | +| exprs.kt:73:45:73:49 | (...)... | CastExpr | +| exprs.kt:73:45:73:49 | | StmtExpr | +| exprs.kt:73:45:73:49 | Subclass1 | TypeAccess | +| exprs.kt:73:47:73:47 | x | VarAccess | +| exprs.kt:73:58:73:58 | y | VarAccess | +| exprs.kt:74:5:74:13 | q | LocalVariableDeclExpr | +| exprs.kt:74:13:74:13 | 1 | IntegerLiteral | +| exprs.kt:75:5:75:48 | true | BooleanLiteral | +| exprs.kt:75:5:75:48 | when ... | WhenExpr | +| exprs.kt:75:9:75:9 | x | VarAccess | +| exprs.kt:75:9:75:22 | ...instanceof... | InstanceOfExpr | +| exprs.kt:75:9:75:22 | Subclass1 | TypeAccess | +| exprs.kt:75:27:75:27 | ...=... | AssignExpr | +| exprs.kt:75:31:75:31 | 2 | IntegerLiteral | +| exprs.kt:75:42:75:42 | ...=... | AssignExpr | +| exprs.kt:75:46:75:46 | 3 | IntegerLiteral | +| exprs.kt:79:5:79:25 | r | LocalVariableDeclExpr | +| exprs.kt:79:13:79:13 | p | VarAccess | +| exprs.kt:79:15:79:25 | getBounds(...) | MethodAccess | +| exprs.kt:80:5:82:5 | when ... | WhenExpr | +| exprs.kt:80:8:80:8 | r | VarAccess | +| exprs.kt:80:8:80:16 | ... != ... | NEExpr | +| exprs.kt:80:8:80:16 | ... != ... | NEExpr | +| exprs.kt:80:13:80:16 | null | NullLiteral | +| exprs.kt:81:9:81:29 | r2 | LocalVariableDeclExpr | +| exprs.kt:81:29:81:29 | (...)... | CastExpr | +| exprs.kt:81:29:81:29 | Rectangle | TypeAccess | +| exprs.kt:81:29:81:29 | r | VarAccess | +| file://:0:0:0:0 | q | VarAccess | +| file://:0:0:0:0 | q | VarAccess | | file://:0:0:0:0 | tmp0 | LocalVariableDeclExpr | | file://:0:0:0:0 | variable | VarAccess | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index 658c147d371..f104b8746ad 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -66,10 +66,13 @@ open class Root {} class Subclass1: Root() {} class Subclass2: Root() {} -fun typeTests(x: Root) { +fun typeTests(x: Root, y: Subclass1) { if(x is Subclass1) { - val y: Subclass1 = x + val x1: Subclass1 = x } + val y1: Subclass1 = if (x is Subclass1) { x } else { y } + var q = 1 + if (x is Subclass1) { q = 2 } else { q = 3 } } fun foo(p: Polygon) { From 6b5663df46d25178a4c252895414ec3c35c070fe Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 29 Oct 2021 17:25:18 +0100 Subject: [PATCH 0631/1618] Kotlin: Handle Short and Byte literals I don't think we need separate DB types for them --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 9904b777d3a..c367b10b402 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1379,7 +1379,7 @@ class X { val exprParent = parent.expr(e, callable) val v = e.value when(v) { - is Int -> { + is Int, is Short, is Byte -> { val id = tw.getFreshIdLabel() val type = useType(e.type) val locId = tw.getLocation(e) From cbd265ab7a7167ac5e54cbd2ce5095eb66a6ccb1 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 29 Oct 2021 19:57:45 +0100 Subject: [PATCH 0632/1618] Kotlin: Add support for try statements --- .../main/kotlin/KotlinExtractorExtension.kt | 32 ++++++++++++++++--- .../kotlin/library-tests/stmts/exprs.expected | 8 +++++ .../kotlin/library-tests/stmts/stmts.expected | 9 ++++++ .../test/kotlin/library-tests/stmts/stmts.kt | 12 +++++++ 4 files changed, 57 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index c367b10b402..0473fede756 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1000,17 +1000,22 @@ class X { } fun extractVariable(v: IrVariable, callable: Label, parent: Label, idx: Int) { + val stmtId = tw.getFreshIdLabel() + val locId = tw.getLocation(v) + tw.writeStmts_localvariabledeclstmt(stmtId, parent, idx, callable) + tw.writeHasLocation(stmtId, locId) + extractVariableExpr(v, callable, stmtId, 1) + } + + fun extractVariableExpr(v: IrVariable, callable: Label, parent: Label, idx: Int) { val varId = useVariable(v) val exprId = tw.getFreshIdLabel() - val stmtId = tw.getFreshIdLabel() val locId = tw.getLocation(v) val type = useType(v.type) tw.writeLocalvars(varId, v.name.asString(), type.javaResult.id, exprId) // TODO: KT type tw.writeHasLocation(varId, locId) - tw.writeExprs_localvariabledeclexpr(exprId, type.javaResult.id, type.kotlinResult.id, stmtId, 1) + tw.writeExprs_localvariabledeclexpr(exprId, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(exprId, locId) - tw.writeStmts_localvariabledeclstmt(stmtId, parent, idx, callable) - tw.writeHasLocation(stmtId, locId) val i = v.initializer if(i != null) { extractExpressionExpr(i, callable, exprId, 0) @@ -1303,6 +1308,25 @@ class X { tw.writeHasLocation(id, locId) extractExpressionExpr(e.value, callable, id, 0) } + is IrTry -> { + val stmtParent = parent.stmt(e, callable) + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + tw.writeStmts_trystmt(id, stmtParent.parent, stmtParent.idx, callable) + tw.writeHasLocation(id, locId) + extractExpressionExpr(e.tryResult, callable, id, -1) + val finallyStmt = e.finallyExpression + if(finallyStmt != null) { + extractExpressionExpr(finallyStmt, callable, id, -2) + } + for((catchIdx, catchClause) in e.catches.withIndex()) { + val catchId = tw.getFreshIdLabel() + tw.writeStmts_catchclause(catchId, id, catchIdx, callable) + // TODO: Index -1: unannotatedtypeaccess + extractVariableExpr(catchClause.catchParameter, callable, catchId, 0) + extractExpressionExpr(catchClause.result, callable, catchId, 1) + } + } is IrContainerExpression -> { val stmtParent = parent.stmt(e, callable) val id = tw.getFreshIdLabel() diff --git a/java/ql/test/kotlin/library-tests/stmts/exprs.expected b/java/ql/test/kotlin/library-tests/stmts/exprs.expected index 0c37351aab4..8633c2285ae 100644 --- a/java/ql/test/kotlin/library-tests/stmts/exprs.expected +++ b/java/ql/test/kotlin/library-tests/stmts/exprs.expected @@ -56,3 +56,11 @@ | stmts.kt:28:11:28:11 | x | VarAccess | | stmts.kt:28:11:28:15 | ... > ... | GTExpr | | stmts.kt:28:15:28:15 | y | VarAccess | +| stmts.kt:33:9:35:5 | | StmtExpr | +| stmts.kt:34:15:34:30 | new Exception(...) | ClassInstanceExpr | +| stmts.kt:34:26:34:28 | Foo | StringLiteral | +| stmts.kt:36:12:36:23 | e | LocalVariableDeclExpr | +| stmts.kt:36:26:38:5 | | StmtExpr | +| stmts.kt:37:16:37:16 | 1 | IntegerLiteral | +| stmts.kt:39:13:41:5 | | StmtExpr | +| stmts.kt:40:16:40:16 | 2 | IntegerLiteral | diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.expected b/java/ql/test/kotlin/library-tests/stmts/stmts.expected index d0846929460..2459301d851 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.expected +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.expected @@ -1,3 +1,4 @@ +| file://:0:0:0:0 | catch (...) | CatchClause | | stmts.kt:2:41:20:1 | { ... } | BlockStmt | | stmts.kt:3:5:6:5 | ; | ExprStmt | | stmts.kt:3:15:4:5 | { ... } | BlockStmt | @@ -32,3 +33,11 @@ | stmts.kt:25:24:25:33 | break | BreakStmt | | stmts.kt:28:5:29:16 | while (...) | WhileStmt | | stmts.kt:29:9:29:16 | continue | ContinueStmt | +| stmts.kt:32:23:42:1 | { ... } | BlockStmt | +| stmts.kt:33:5:41:5 | try ... | TryStmt | +| stmts.kt:33:9:35:5 | { ... } | BlockStmt | +| stmts.kt:34:9:34:30 | throw ... | ThrowStmt | +| stmts.kt:36:26:38:5 | { ... } | BlockStmt | +| stmts.kt:37:9:37:16 | return ... | ReturnStmt | +| stmts.kt:39:13:41:5 | { ... } | BlockStmt | +| stmts.kt:40:9:40:16 | return ... | ReturnStmt | diff --git a/java/ql/test/kotlin/library-tests/stmts/stmts.kt b/java/ql/test/kotlin/library-tests/stmts/stmts.kt index 5ce050f4871..e2e9c1f8a23 100644 --- a/java/ql/test/kotlin/library-tests/stmts/stmts.kt +++ b/java/ql/test/kotlin/library-tests/stmts/stmts.kt @@ -28,3 +28,15 @@ fun loops(x: Int, y: Int) { while(x > y) continue } + +fun exceptions(): Int { + try { + throw Exception("Foo") + } + catch (e: Exception) { + return 1 + } + finally { + return 2 + } +} From e8fd9ed9489a40ef7ee26651474e76f384fda803 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 1 Nov 2021 00:12:32 +0000 Subject: [PATCH 0633/1618] Kotlin: Add a warning suppression --- java/kotlin-extractor/src/main/kotlin/TrapWriter.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt index 94b8e3e1210..7d92af84c56 100644 --- a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt +++ b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt @@ -101,6 +101,7 @@ open class FileTrapWriter ( ): TrapWriter (lm, bw) { val populateFile = PopulateFile(this) val splitFilePath = filePath.split("!/") + @Suppress("UNCHECKED_CAST") val fileId = (if(splitFilePath.size == 1) populateFile.populateFile(File(filePath)) From 5bb9357dbedc87433ac6ce794dcf88578b216667 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 1 Nov 2021 00:14:04 +0000 Subject: [PATCH 0634/1618] Kotlin: Disable part of a test that gives us DB check inconsistencies --- .../test/kotlin/library-tests/controlflow/dominance/Test2.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt b/java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt index de0ade9e785..d2fdc50581c 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt @@ -26,10 +26,13 @@ public class Test2 { var y = x while(y >= 0) { if (y > 10) { +/* +TODO try { val n: BigInteger = BigInteger( "wrong" ); } catch (e: NumberFormatException) { // unchecked exception } +*/ } y-- } From 97f380eddca67e577dcab3a965c71d18cc1e77f4 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Mon, 1 Nov 2021 12:15:11 +0000 Subject: [PATCH 0635/1618] Don't abort external class extraction after first duplicate --- .../src/main/kotlin/KotlinExtractorExtension.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 0473fede756..3134cf16825 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -193,12 +193,12 @@ class ExternalClassExtractor(val logger: FileLogger, val sourceFilePath: String, locker.getTrapFileManager().useAC { manager -> if(manager == null) { logger.info("Skipping extracting class ${irClass.name}") - return - } - GZIPOutputStream(manager.getFile().outputStream()).bufferedWriter().use { trapFileBW -> - val tw = ClassFileTrapWriter(TrapLabelManager(), trapFileBW, getIrClassBinaryPath(irClass)) - val fileExtractor = KotlinFileExtractor(logger, tw, manager, this, pluginContext) - fileExtractor.extractClassSource(irClass) + } else { + GZIPOutputStream(manager.getFile().outputStream()).bufferedWriter().use { trapFileBW -> + val tw = ClassFileTrapWriter(TrapLabelManager(), trapFileBW, getIrClassBinaryPath(irClass)) + val fileExtractor = KotlinFileExtractor(logger, tw, manager, this, pluginContext) + fileExtractor.extractClassSource(irClass) + } } } } From 9996d777019b7c44b9664c07909f7fa690b97f97 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 1 Nov 2021 12:39:31 +0000 Subject: [PATCH 0636/1618] Kotlin: Reinstate disabled test now bug is fixed --- .../test/kotlin/library-tests/controlflow/dominance/Test2.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt b/java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt index d2fdc50581c..de0ade9e785 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt +++ b/java/ql/test/kotlin/library-tests/controlflow/dominance/Test2.kt @@ -26,13 +26,10 @@ public class Test2 { var y = x while(y >= 0) { if (y > 10) { -/* -TODO try { val n: BigInteger = BigInteger( "wrong" ); } catch (e: NumberFormatException) { // unchecked exception } -*/ } y-- } From 2b01c5d8259dd5507446e655168937c12d0242e4 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 1 Nov 2021 13:28:10 +0000 Subject: [PATCH 0637/1618] Kotlin: Follow changes in main --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 3134cf16825..0571a626291 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -525,7 +525,7 @@ class X { private fun extractTypeParameter(tp: IrTypeParameter): Label { val id = tw.getLabelFor(getTypeParameterLabel(tp)) - val parentId: Label = when (val parent = tp.parent) { + val parentId: Label = when (val parent = tp.parent) { is IrFunction -> useFunction(parent) is IrClass -> useClassSource(parent) else -> { From 81fd7c735a8538e407ec2da7f8f1cc26ed354d6a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 1 Nov 2021 16:01:51 +0000 Subject: [PATCH 0638/1618] Kotlin: Add suport for enum classes --- .../main/kotlin/KotlinExtractorExtension.kt | 20 +++++++++++++++++++ .../library-tests/classes/classes.expected | 2 ++ .../kotlin/library-tests/classes/classes.kt | 9 +++++++++ .../library-tests/classes/initBlocks.expected | 5 +++++ .../library-tests/classes/superTypes.expected | 2 ++ 5 files changed, 38 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 0571a626291..249784dd37f 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -292,6 +292,7 @@ open class KotlinFileExtractor( // Leaving this intentionally empty. init blocks are extracted during class extraction. } is IrProperty -> extractProperty(declaration, parentId) + is IrEnumEntry -> extractEnumEntry(declaration, parentId) else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclaration: " + declaration.javaClass, declaration) } } @@ -978,6 +979,25 @@ class X { } } + private fun getEnumEntryLabel(ee: IrEnumEntry) : String { + val parentId = useDeclarationParent(ee.parent) + val label = "@\"field;{$parentId};${ee.name.asString()}\"" + return label + } + + fun useEnumEntry(ee: IrEnumEntry): Label { + var label = getEnumEntryLabel(ee) + val id: Label = tw.getLabelFor(label) + return id + } + + fun extractEnumEntry(ee: IrEnumEntry, parentId: Label) { + val id = useEnumEntry(ee) + val locId = tw.getLocation(ee) + tw.writeFields(id, ee.name.asString(), parentId, parentId, id) + tw.writeHasLocation(id, locId) + } + fun extractBody(b: IrBody, callable: Label) { when(b) { is IrBlockBody -> extractBlockBody(b, callable, callable, 0) diff --git a/java/ql/test/kotlin/library-tests/classes/classes.expected b/java/ql/test/kotlin/library-tests/classes/classes.expected index c4d5e3bfa05..a8b82e2f3ac 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.expected +++ b/java/ql/test/kotlin/library-tests/classes/classes.expected @@ -6,3 +6,5 @@ | classes.kt:17:1:18:1 | ClassFive | ClassFive | | classes.kt:28:1:30:1 | ClassSix | ClassSix | | classes.kt:34:1:47:1 | ClassSeven | ClassSeven | +| classes.kt:49:1:51:1 | Direction | Direction | +| classes.kt:53:1:57:1 | Color | Color | diff --git a/java/ql/test/kotlin/library-tests/classes/classes.kt b/java/ql/test/kotlin/library-tests/classes/classes.kt index e7804278409..6a211e56d34 100644 --- a/java/ql/test/kotlin/library-tests/classes/classes.kt +++ b/java/ql/test/kotlin/library-tests/classes/classes.kt @@ -46,3 +46,12 @@ class ClassSeven { } } +enum class Direction { + NORTH, SOUTH, WEST, EAST +} + +enum class Color(val rgb: Int) { + RED(0xFF0000), + GREEN(0x00FF00), + BLUE(0x0000FF) +} diff --git a/java/ql/test/kotlin/library-tests/classes/initBlocks.expected b/java/ql/test/kotlin/library-tests/classes/initBlocks.expected index 5919df9a283..85bed2ed7f5 100644 --- a/java/ql/test/kotlin/library-tests/classes/initBlocks.expected +++ b/java/ql/test/kotlin/library-tests/classes/initBlocks.expected @@ -8,6 +8,8 @@ initBlocks | classes.kt:24:1:26:1 | | | classes.kt:28:1:30:1 | | | classes.kt:34:1:47:1 | | +| classes.kt:49:1:51:1 | | +| classes.kt:53:1:57:1 | | initCall | classes.kt:2:1:2:18 | (...) | | classes.kt:4:1:6:1 | (...) | @@ -16,9 +18,12 @@ initCall | classes.kt:17:1:18:1 | (...) | | classes.kt:28:1:30:1 | (...) | | classes.kt:35:5:37:5 | (...) | +| classes.kt:49:1:51:1 | (...) | +| classes.kt:53:1:57:1 | (...) | initExpressions | classes.kt:4:17:4:28 | ...=... | 0 | | classes.kt:5:5:5:18 | ...=... | 1 | | classes.kt:39:9:39:18 | f(...) | 0 | | classes.kt:42:5:42:18 | ...=... | 1 | | classes.kt:45:9:45:18 | f(...) | 2 | +| classes.kt:53:18:53:29 | ...=... | 0 | diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.expected b/java/ql/test/kotlin/library-tests/classes/superTypes.expected index 107992da9c2..0883da3aafe 100644 --- a/java/ql/test/kotlin/library-tests/classes/superTypes.expected +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.expected @@ -7,3 +7,5 @@ | classes.kt:28:1:30:1 | ClassSix | classes.kt:20:1:22:1 | IF1 | | classes.kt:28:1:30:1 | ClassSix | classes.kt:24:1:26:1 | IF2 | | classes.kt:34:1:47:1 | ClassSeven | file://:0:0:0:0 | Object | +| classes.kt:49:1:51:1 | Direction | file://:0:0:0:0 | Enum | +| classes.kt:53:1:57:1 | Color | file://:0:0:0:0 | Enum | From 168786ae711bdfc9cb505eaa2d748ed4eba402d7 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 1 Nov 2021 16:15:22 +0000 Subject: [PATCH 0639/1618] Kotlin: Add string concatenations to exprs test --- .../kotlin/library-tests/exprs/exprs.expected | 146 +++++++++--------- .../test/kotlin/library-tests/exprs/exprs.kt | 3 + 2 files changed, 79 insertions(+), 70 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 119cb6a22a8..fd548afe76f 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -69,76 +69,82 @@ | exprs.kt:46:26:46:35 | string lit | StringLiteral | | exprs.kt:47:5:47:28 | str3 | LocalVariableDeclExpr | | exprs.kt:47:25:47:28 | null | NullLiteral | -| exprs.kt:49:5:49:21 | variable | LocalVariableDeclExpr | -| exprs.kt:49:20:49:21 | 10 | IntegerLiteral | -| exprs.kt:50:12:50:19 | variable | VarAccess | -| exprs.kt:50:12:50:23 | ... > ... | GTExpr | -| exprs.kt:50:23:50:23 | 0 | IntegerLiteral | -| exprs.kt:51:9:51:16 | ...=... | AssignExpr | -| exprs.kt:51:9:51:16 | variable | VarAccess | -| exprs.kt:51:9:51:18 | (...)... | CastExpr | -| exprs.kt:51:9:51:18 | | StmtExpr | -| exprs.kt:51:9:51:18 | dec(...) | MethodAccess | -| exprs.kt:51:9:51:18 | tmp0 | VarAccess | -| exprs.kt:51:9:51:18 | tmp0 | VarAccess | -| exprs.kt:51:9:51:18 | void | TypeAccess | -| exprs.kt:54:12:54:14 | 123 | IntegerLiteral | -| exprs.kt:54:12:54:20 | ... + ... | AddExpr | -| exprs.kt:54:18:54:20 | 456 | IntegerLiteral | -| exprs.kt:58:5:58:23 | d | LocalVariableDeclExpr | -| exprs.kt:58:13:58:16 | true | BooleanLiteral | -| exprs.kt:58:13:58:23 | ::class | ClassExpr | -| exprs.kt:61:1:63:1 | (...) | MethodAccess | -| exprs.kt:61:9:61:18 | ...=... | AssignExpr | -| exprs.kt:61:9:61:18 | n | VarAccess | -| exprs.kt:61:9:61:18 | n | VarAccess | -| exprs.kt:62:27:62:31 | new C(...) | ClassInstanceExpr | -| exprs.kt:62:29:62:30 | 42 | IntegerLiteral | -| exprs.kt:65:1:65:18 | (...) | MethodAccess | -| exprs.kt:66:1:66:26 | (...) | MethodAccess | -| exprs.kt:67:1:67:26 | (...) | MethodAccess | -| exprs.kt:70:5:72:5 | when ... | WhenExpr | -| exprs.kt:70:8:70:8 | x | VarAccess | -| exprs.kt:70:8:70:21 | ...instanceof... | InstanceOfExpr | -| exprs.kt:70:8:70:21 | Subclass1 | TypeAccess | -| exprs.kt:71:9:71:29 | x1 | LocalVariableDeclExpr | -| exprs.kt:71:29:71:29 | (...)... | CastExpr | -| exprs.kt:71:29:71:29 | Subclass1 | TypeAccess | -| exprs.kt:71:29:71:29 | x | VarAccess | -| exprs.kt:73:5:73:60 | y1 | LocalVariableDeclExpr | -| exprs.kt:73:25:73:60 | true | BooleanLiteral | -| exprs.kt:73:25:73:60 | when ... | WhenExpr | -| exprs.kt:73:29:73:29 | x | VarAccess | -| exprs.kt:73:29:73:42 | ...instanceof... | InstanceOfExpr | -| exprs.kt:73:29:73:42 | Subclass1 | TypeAccess | -| exprs.kt:73:45:73:49 | (...)... | CastExpr | -| exprs.kt:73:45:73:49 | | StmtExpr | -| exprs.kt:73:45:73:49 | Subclass1 | TypeAccess | -| exprs.kt:73:47:73:47 | x | VarAccess | -| exprs.kt:73:58:73:58 | y | VarAccess | -| exprs.kt:74:5:74:13 | q | LocalVariableDeclExpr | -| exprs.kt:74:13:74:13 | 1 | IntegerLiteral | -| exprs.kt:75:5:75:48 | true | BooleanLiteral | -| exprs.kt:75:5:75:48 | when ... | WhenExpr | -| exprs.kt:75:9:75:9 | x | VarAccess | -| exprs.kt:75:9:75:22 | ...instanceof... | InstanceOfExpr | -| exprs.kt:75:9:75:22 | Subclass1 | TypeAccess | -| exprs.kt:75:27:75:27 | ...=... | AssignExpr | -| exprs.kt:75:31:75:31 | 2 | IntegerLiteral | -| exprs.kt:75:42:75:42 | ...=... | AssignExpr | -| exprs.kt:75:46:75:46 | 3 | IntegerLiteral | -| exprs.kt:79:5:79:25 | r | LocalVariableDeclExpr | -| exprs.kt:79:13:79:13 | p | VarAccess | -| exprs.kt:79:15:79:25 | getBounds(...) | MethodAccess | -| exprs.kt:80:5:82:5 | when ... | WhenExpr | -| exprs.kt:80:8:80:8 | r | VarAccess | -| exprs.kt:80:8:80:16 | ... != ... | NEExpr | -| exprs.kt:80:8:80:16 | ... != ... | NEExpr | -| exprs.kt:80:13:80:16 | null | NullLiteral | -| exprs.kt:81:9:81:29 | r2 | LocalVariableDeclExpr | -| exprs.kt:81:29:81:29 | (...)... | CastExpr | -| exprs.kt:81:29:81:29 | Rectangle | TypeAccess | -| exprs.kt:81:29:81:29 | r | VarAccess | +| exprs.kt:48:5:48:48 | str4 | LocalVariableDeclExpr | +| exprs.kt:49:5:49:66 | str5 | LocalVariableDeclExpr | +| exprs.kt:50:5:50:26 | str6 | LocalVariableDeclExpr | +| exprs.kt:50:16:50:19 | str1 | VarAccess | +| exprs.kt:50:16:50:26 | ... + ... | AddExpr | +| exprs.kt:50:23:50:26 | str2 | VarAccess | +| exprs.kt:52:5:52:21 | variable | LocalVariableDeclExpr | +| exprs.kt:52:20:52:21 | 10 | IntegerLiteral | +| exprs.kt:53:12:53:19 | variable | VarAccess | +| exprs.kt:53:12:53:23 | ... > ... | GTExpr | +| exprs.kt:53:23:53:23 | 0 | IntegerLiteral | +| exprs.kt:54:9:54:16 | ...=... | AssignExpr | +| exprs.kt:54:9:54:16 | variable | VarAccess | +| exprs.kt:54:9:54:18 | (...)... | CastExpr | +| exprs.kt:54:9:54:18 | | StmtExpr | +| exprs.kt:54:9:54:18 | dec(...) | MethodAccess | +| exprs.kt:54:9:54:18 | tmp0 | VarAccess | +| exprs.kt:54:9:54:18 | tmp0 | VarAccess | +| exprs.kt:54:9:54:18 | void | TypeAccess | +| exprs.kt:57:12:57:14 | 123 | IntegerLiteral | +| exprs.kt:57:12:57:20 | ... + ... | AddExpr | +| exprs.kt:57:18:57:20 | 456 | IntegerLiteral | +| exprs.kt:61:5:61:23 | d | LocalVariableDeclExpr | +| exprs.kt:61:13:61:16 | true | BooleanLiteral | +| exprs.kt:61:13:61:23 | ::class | ClassExpr | +| exprs.kt:64:1:66:1 | (...) | MethodAccess | +| exprs.kt:64:9:64:18 | ...=... | AssignExpr | +| exprs.kt:64:9:64:18 | n | VarAccess | +| exprs.kt:64:9:64:18 | n | VarAccess | +| exprs.kt:65:27:65:31 | new C(...) | ClassInstanceExpr | +| exprs.kt:65:29:65:30 | 42 | IntegerLiteral | +| exprs.kt:68:1:68:18 | (...) | MethodAccess | +| exprs.kt:69:1:69:26 | (...) | MethodAccess | +| exprs.kt:70:1:70:26 | (...) | MethodAccess | +| exprs.kt:73:5:75:5 | when ... | WhenExpr | +| exprs.kt:73:8:73:8 | x | VarAccess | +| exprs.kt:73:8:73:21 | ...instanceof... | InstanceOfExpr | +| exprs.kt:73:8:73:21 | Subclass1 | TypeAccess | +| exprs.kt:74:9:74:29 | x1 | LocalVariableDeclExpr | +| exprs.kt:74:29:74:29 | (...)... | CastExpr | +| exprs.kt:74:29:74:29 | Subclass1 | TypeAccess | +| exprs.kt:74:29:74:29 | x | VarAccess | +| exprs.kt:76:5:76:60 | y1 | LocalVariableDeclExpr | +| exprs.kt:76:25:76:60 | true | BooleanLiteral | +| exprs.kt:76:25:76:60 | when ... | WhenExpr | +| exprs.kt:76:29:76:29 | x | VarAccess | +| exprs.kt:76:29:76:42 | ...instanceof... | InstanceOfExpr | +| exprs.kt:76:29:76:42 | Subclass1 | TypeAccess | +| exprs.kt:76:45:76:49 | (...)... | CastExpr | +| exprs.kt:76:45:76:49 | | StmtExpr | +| exprs.kt:76:45:76:49 | Subclass1 | TypeAccess | +| exprs.kt:76:47:76:47 | x | VarAccess | +| exprs.kt:76:58:76:58 | y | VarAccess | +| exprs.kt:77:5:77:13 | q | LocalVariableDeclExpr | +| exprs.kt:77:13:77:13 | 1 | IntegerLiteral | +| exprs.kt:78:5:78:48 | true | BooleanLiteral | +| exprs.kt:78:5:78:48 | when ... | WhenExpr | +| exprs.kt:78:9:78:9 | x | VarAccess | +| exprs.kt:78:9:78:22 | ...instanceof... | InstanceOfExpr | +| exprs.kt:78:9:78:22 | Subclass1 | TypeAccess | +| exprs.kt:78:27:78:27 | ...=... | AssignExpr | +| exprs.kt:78:31:78:31 | 2 | IntegerLiteral | +| exprs.kt:78:42:78:42 | ...=... | AssignExpr | +| exprs.kt:78:46:78:46 | 3 | IntegerLiteral | +| exprs.kt:82:5:82:25 | r | LocalVariableDeclExpr | +| exprs.kt:82:13:82:13 | p | VarAccess | +| exprs.kt:82:15:82:25 | getBounds(...) | MethodAccess | +| exprs.kt:83:5:85:5 | when ... | WhenExpr | +| exprs.kt:83:8:83:8 | r | VarAccess | +| exprs.kt:83:8:83:16 | ... != ... | NEExpr | +| exprs.kt:83:8:83:16 | ... != ... | NEExpr | +| exprs.kt:83:13:83:16 | null | NullLiteral | +| exprs.kt:84:9:84:29 | r2 | LocalVariableDeclExpr | +| exprs.kt:84:29:84:29 | (...)... | CastExpr | +| exprs.kt:84:29:84:29 | Rectangle | TypeAccess | +| exprs.kt:84:29:84:29 | r | VarAccess | | file://:0:0:0:0 | q | VarAccess | | file://:0:0:0:0 | q | VarAccess | | file://:0:0:0:0 | tmp0 | LocalVariableDeclExpr | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index f104b8746ad..7d72f645d40 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -45,6 +45,9 @@ TODO val str1: String = "string lit" val str2: String? = "string lit" val str3: String? = null + val str4: String = "foo $str1 bar $str2 baz" + val str5: String = "foo ${str1 + str2} bar ${str2 + str1} baz" + val str6 = str1 + str2 var variable = 10 while (variable > 0) { From 976cc31c7a68635dd69d4b7824a41b538519884c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 1 Nov 2021 16:34:26 +0000 Subject: [PATCH 0640/1618] Kotlin: Add support for string templates --- .../main/kotlin/KotlinExtractorExtension.kt | 11 ++++++++++ java/ql/lib/config/semmlecode.dbscheme | 1 + java/ql/lib/semmle/code/java/Expr.qll | 21 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 249784dd37f..21b56559566 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1419,6 +1419,17 @@ class X { val exprParent = parent.expr(e, callable) extractCall(e, callable, exprParent.parent, exprParent.idx) } + is IrStringConcatenation -> { + val exprParent = parent.expr(e, callable) + val id = tw.getFreshIdLabel() + val type = useType(e.type) + val locId = tw.getLocation(e) + tw.writeExprs_stringtemplateexpr(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) + tw.writeHasLocation(id, locId) + e.arguments.forEachIndexed { i, a -> + extractExpressionExpr(a, callable, id, i) + } + } is IrConst<*> -> { val exprParent = parent.expr(e, callable) val v = e.value diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index ab7ab8f3cc0..17f4bc7afc0 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -670,6 +670,7 @@ case @expr.kind of | 77 = @safecastexpr | 78 = @notinstanceofexpr | 79 = @stmtexpr +| 80 = @stringtemplateexpr ; /** Holds if this `when` expression was written as an `if` expression. */ diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 26878395bf2..1d245d096d1 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2246,3 +2246,24 @@ class StmtExpr extends Expr, @stmtexpr { override string getAPrimaryQlClass() { result = "StmtExpr" } } + +/** + * A Kotlin string template expression. For example, `"foo${bar}baz"`. + */ +class StringTemplateExpr extends Expr, @stringtemplateexpr { + /** + * Gets the `i`th component of this string template. + * + * For example, in the string template `"foo${bar}baz"`, the 0th + * component is the string literal `"foo"`, the 1st component is + * the variable access `bar`, and the 2nd component is the string + * literal `"bar"`. + */ + Expr getComponent(int i) { result.isNthChildOf(this, i) } + + override string toString() { result = "\"...\"" } + + override string getHalsteadID() { result = "StringTemplateExpr" } + + override string getAPrimaryQlClass() { result = "StringTemplateExpr" } +} From 84b53ba9cf5978a8dad9cebc95c768075d683b31 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 1 Nov 2021 16:41:44 +0000 Subject: [PATCH 0641/1618] Kotlin: Accept test changes --- .../kotlin/library-tests/exprs/exprs.expected | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index fd548afe76f..0f3f44ead84 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -70,7 +70,22 @@ | exprs.kt:47:5:47:28 | str3 | LocalVariableDeclExpr | | exprs.kt:47:25:47:28 | null | NullLiteral | | exprs.kt:48:5:48:48 | str4 | LocalVariableDeclExpr | +| exprs.kt:48:24:48:48 | "..." | StringTemplateExpr | +| exprs.kt:48:25:48:28 | foo | StringLiteral | +| exprs.kt:48:30:48:33 | str1 | VarAccess | +| exprs.kt:48:34:48:38 | bar | StringLiteral | +| exprs.kt:48:40:48:43 | str2 | VarAccess | +| exprs.kt:48:44:48:47 | baz | StringLiteral | | exprs.kt:49:5:49:66 | str5 | LocalVariableDeclExpr | +| exprs.kt:49:24:49:66 | "..." | StringTemplateExpr | +| exprs.kt:49:25:49:28 | foo | StringLiteral | +| exprs.kt:49:31:49:34 | str1 | VarAccess | +| exprs.kt:49:31:49:41 | ... + ... | AddExpr | +| exprs.kt:49:38:49:41 | str2 | VarAccess | +| exprs.kt:49:43:49:47 | bar | StringLiteral | +| exprs.kt:49:50:49:60 | ... + ... | AddExpr | +| exprs.kt:49:57:49:60 | str1 | VarAccess | +| exprs.kt:49:62:49:65 | baz | StringLiteral | | exprs.kt:50:5:50:26 | str6 | LocalVariableDeclExpr | | exprs.kt:50:16:50:19 | str1 | VarAccess | | exprs.kt:50:16:50:26 | ... + ... | AddExpr | From d565a16fe61a01d25a404ee2bea2d014e3db4e20 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 1 Nov 2021 17:31:22 +0000 Subject: [PATCH 0642/1618] Kotlin: Add enums to expr test --- .../kotlin/library-tests/exprs/exprs.expected | 13 +++++++++++++ java/ql/test/kotlin/library-tests/exprs/exprs.kt | 15 +++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 0f3f44ead84..9cfb2b4e2aa 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -160,7 +160,20 @@ | exprs.kt:84:29:84:29 | (...)... | CastExpr | | exprs.kt:84:29:84:29 | Rectangle | TypeAccess | | exprs.kt:84:29:84:29 | r | VarAccess | +| exprs.kt:88:1:90:1 | (...) | MethodAccess | +| exprs.kt:88:1:90:1 | new Enum(...) | ClassInstanceExpr | +| exprs.kt:92:1:96:1 | (...) | MethodAccess | +| exprs.kt:92:1:96:1 | new Enum(...) | ClassInstanceExpr | +| exprs.kt:92:18:92:29 | ...=... | AssignExpr | +| exprs.kt:92:18:92:29 | rgb | VarAccess | +| exprs.kt:92:18:92:29 | rgb | VarAccess | +| exprs.kt:99:5:99:31 | south | LocalVariableDeclExpr | +| exprs.kt:100:5:100:27 | green | LocalVariableDeclExpr | +| file://:0:0:0:0 | Color | TypeAccess | +| file://:0:0:0:0 | Direction | TypeAccess | | file://:0:0:0:0 | q | VarAccess | | file://:0:0:0:0 | q | VarAccess | | file://:0:0:0:0 | tmp0 | LocalVariableDeclExpr | | file://:0:0:0:0 | variable | VarAccess | +| file://:0:0:0:0 | void | TypeAccess | +| file://:0:0:0:0 | void | TypeAccess | diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.kt b/java/ql/test/kotlin/library-tests/exprs/exprs.kt index 7d72f645d40..c29a5008b7a 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.kt +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.kt @@ -84,3 +84,18 @@ fun foo(p: Polygon) { val r2: Rectangle = r } } + +enum class Direction { + NORTH, SOUTH, WEST, EAST +} + +enum class Color(val rgb: Int) { + RED(0xFF0000), + GREEN(0x00FF00), + BLUE(0x0000FF) +} + +fun enums() { + val south = Direction.SOUTH + val green = Color.GREEN +} From 6c957284de19fb30d046197e5e66a9b686598a9f Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 1 Nov 2021 17:43:38 +0000 Subject: [PATCH 0643/1618] Kotlin: Add support for enum value accesses --- .../src/main/kotlin/KotlinExtractorExtension.kt | 11 +++++++++++ .../ql/test/kotlin/library-tests/exprs/exprs.expected | 2 ++ 2 files changed, 13 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 21b56559566..e3a6680fa5e 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1520,6 +1520,17 @@ class X { tw.writeVariableBinding(id, vId) } } + is IrGetEnumValue -> { + val exprParent = parent.expr(e, callable) + val id = tw.getFreshIdLabel() + val type = useType(e.type) + val locId = tw.getLocation(e) + tw.writeExprs_varaccess(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) + tw.writeHasLocation(id, locId) + val owner = e.symbol.owner + val vId = useEnumEntry(owner) + tw.writeVariableBinding(id, vId) + } is IrSetValue -> { val exprParent = parent.expr(e, callable) val id = tw.getFreshIdLabel() diff --git a/java/ql/test/kotlin/library-tests/exprs/exprs.expected b/java/ql/test/kotlin/library-tests/exprs/exprs.expected index 9cfb2b4e2aa..106bf50060f 100644 --- a/java/ql/test/kotlin/library-tests/exprs/exprs.expected +++ b/java/ql/test/kotlin/library-tests/exprs/exprs.expected @@ -168,7 +168,9 @@ | exprs.kt:92:18:92:29 | rgb | VarAccess | | exprs.kt:92:18:92:29 | rgb | VarAccess | | exprs.kt:99:5:99:31 | south | LocalVariableDeclExpr | +| exprs.kt:99:27:99:31 | SOUTH | VarAccess | | exprs.kt:100:5:100:27 | green | LocalVariableDeclExpr | +| exprs.kt:100:23:100:27 | GREEN | VarAccess | | file://:0:0:0:0 | Color | TypeAccess | | file://:0:0:0:0 | Direction | TypeAccess | | file://:0:0:0:0 | q | VarAccess | From 960c436824d2c757178168d0379a564520f306f8 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 1 Nov 2021 18:10:25 +0000 Subject: [PATCH 0644/1618] Kotlin: Call extractClassCommon later This fixes a "Missing type parameter label" warning from the extractor with interface Foo class Bar: Foo { } caused by the `: Foo` being extracted before extracting the `T` in `Bar`. --- .../src/main/kotlin/KotlinExtractorExtension.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index e3a6680fa5e..950b9b80618 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -690,10 +690,10 @@ class X { } } - extractClassCommon(c, id) c.typeParameters.map { extractTypeParameter(it) } c.declarations.map { extractDeclaration(it, id) } extractObjectInitializerFunction(c, id) + extractClassCommon(c, id) return id } @@ -724,7 +724,6 @@ class X { tw.writeIsEnumType(classId) } } - extractClassCommon(c, id) for ((idx, arg) in typeArgs.withIndex()) { val argId = getTypeArgumentLabel(arg, c) @@ -733,6 +732,7 @@ class X { tw.writeIsParameterized(id) val unbound = useClassSource(c) tw.writeErasure(id, unbound) + extractClassCommon(c, id) return id } From a5a42b4416c12b6a7273476a2e48e03ce3537a3e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 2 Nov 2021 16:46:14 +0000 Subject: [PATCH 0645/1618] Kotlin: Refactor so that we can't give locations to "used" things Things we use may not be in the same file as us, so we aren't able to generate valid locations for them. --- .../main/kotlin/KotlinExtractorExtension.kt | 496 +++++++++--------- 1 file changed, 253 insertions(+), 243 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 950b9b80618..25a9c1ab917 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -265,13 +265,12 @@ class KotlinSourceFileExtractor( } -open class KotlinFileExtractor( - val logger: FileLogger, - val tw: FileTrapWriter, +open class KotlinUsesExtractor( + open val logger: Logger, + open val tw: TrapWriter, val dependencyCollector: TrapFileManager?, val externalClassExtractor: ExternalClassExtractor, val pluginContext: IrPluginContext) { - fun usePackage(pkg: String): Label { return extractPackage(pkg) } @@ -284,23 +283,112 @@ open class KotlinFileExtractor( return id } - fun extractDeclaration(declaration: IrDeclaration, parentId: Label) { - when (declaration) { - is IrClass -> extractClassSource(declaration) - is IrFunction -> extractFunction(declaration, parentId) - is IrAnonymousInitializer -> { - // Leaving this intentionally empty. init blocks are extracted during class extraction. - } - is IrProperty -> extractProperty(declaration, parentId) - is IrEnumEntry -> extractEnumEntry(declaration, parentId) - else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclaration: " + declaration.javaClass, declaration) - } - } - data class UseClassInstanceResult(val classLabel: Label, val javaClass: IrClass) data class TypeResult(val id: Label, val signature: String) data class TypeResults(val javaResult: TypeResult, val kotlinResult: TypeResult) + fun useTypeOld(t: IrType, canReturnPrimitiveTypes: Boolean = true): Label { + return useType(t, canReturnPrimitiveTypes).javaResult.id + } + + fun useType(t: IrType, canReturnPrimitiveTypes: Boolean = true): TypeResults { + when(t) { + is IrSimpleType -> return useSimpleType(t, canReturnPrimitiveTypes) + else -> { + logger.warn(Severity.ErrorSevere, "Unrecognised IrType: " + t.javaClass) + return TypeResults(TypeResult(fakeLabel(), "unknown"), TypeResult(fakeLabel(), "unknown")) + } + } + } + + fun useClassInstance(c: IrClass, typeArgs: List): UseClassInstanceResult { + // TODO: only substitute in class and function signatures + // because within function bodies we can get things like Unit.INSTANCE + // and List.asIterable (an extension, i.e. static, method) + // Map Kotlin class to its equivalent Java class: + val substituteClass = c.fqNameWhenAvailable?.toUnsafe() + ?.let { JavaToKotlinClassMap.mapKotlinToJava(it) } + ?.let { pluginContext.referenceClass(it.asSingleFqName()) } + ?.owner + + val extractClass = substituteClass ?: c + + val classId = getClassLabel(extractClass, typeArgs) + val classLabel : Label = tw.getLabelFor(classId, { + // If this is a generic type instantiation then it has no + // source entity, so we need to extract it here + if (typeArgs.isNotEmpty()) { + extractClassInstance(extractClass, typeArgs) + } + + // Extract both the Kotlin and equivalent Java classes, so that we have database entries + // for both even if all internal references to the Kotlin type are substituted. + extractClassLaterIfExternal(c) + substituteClass?.let { extractClassLaterIfExternal(it) } + }) + + return UseClassInstanceResult(classLabel, extractClass) + } + + fun extractClassLaterIfExternal(c: IrClass) { + // we don't have an "external dependencies" extractor yet, + // so for now we extract the source class for those too + if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || + c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { + extractExternalClassLater(c) + } + } + + fun extractExternalClassLater(c: IrClass) { + dependencyCollector?.addDependency(c) + externalClassExtractor.extractLater(c) + } + + fun addClassLabel(c: IrClass, typeArgs: List): Label { + var label = getClassLabel(c, typeArgs) + val id: Label = tw.getLabelFor(label) + return id + } + + fun extractClassInstance(c: IrClass, typeArgs: List): Label { + if (typeArgs.isEmpty()) { + // TODO logger.warnElement(Severity.ErrorSevere, "Instance without type arguments: " + c.name.asString(), c) + } + + val id = addClassLabel(c, typeArgs) + val pkg = c.packageFqName?.asString() ?: "" + val cls = c.name.asString() + val pkgId = extractPackage(pkg) + if(c.kind == ClassKind.INTERFACE) { + @Suppress("UNCHECKED_CAST") + val interfaceId = id as Label + @Suppress("UNCHECKED_CAST") + val sourceInterfaceId = useClassSource(c) as Label + tw.writeInterfaces(interfaceId, cls, pkgId, sourceInterfaceId) + } else { + @Suppress("UNCHECKED_CAST") + val classId = id as Label + @Suppress("UNCHECKED_CAST") + val sourceClassId = useClassSource(c) as Label + tw.writeClasses(classId, cls, pkgId, sourceClassId) + + if (c.kind == ClassKind.ENUM_CLASS) { + tw.writeIsEnumType(classId) + } + } + + for ((idx, arg) in typeArgs.withIndex()) { + val argId = getTypeArgumentLabel(arg, c) + tw.writeTypeArgs(argId, idx, id) + } + tw.writeIsParameterized(id) + val unbound = useClassSource(c) + tw.writeErasure(id, unbound) + extractClassCommon(c, id) + + return id + } + fun useSimpleType(s: IrSimpleType, canReturnPrimitiveTypes: Boolean): TypeResults { // We use this when we don't actually have an IrClass for a class // we want to refer to @@ -478,75 +566,57 @@ class X { } } - - - fun getLabel(element: IrElement) : String? { - when (element) { - is IrFile -> return "@\"${element.path};sourcefile\"" // todo: remove copy-pasted code - is IrClass -> return getClassLabel(element, listOf()) - is IrTypeParameter -> return getTypeParameterLabel(element) - is IrFunction -> return getFunctionLabel(element) - is IrValueParameter -> return getValueParameterLabel(element) - is IrProperty -> return getPropertyLabel(element) - - // Fresh entities: - is IrBody -> return null - is IrExpression -> return null - - // todo add others: + fun useDeclarationParent(dp: IrDeclarationParent): Label { + when(dp) { + is IrFile -> return usePackage(dp.fqName.asString()) + is IrClass -> return useClassSource(dp) + is IrFunction -> return useFunction(dp) else -> { - logger.warnElement(Severity.ErrorSevere, "Unhandled element type: ${element::class}", element) - return null + // TODO logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclarationParent: " + dp.javaClass, dp) + return fakeLabel() } } } - private fun getTypeParameterLabel(param: IrTypeParameter): String { - val parentLabel = useDeclarationParent(param.parent) - return "@\"typevar;{$parentLabel};${param.name}\"" + fun getFunctionLabel(f: IrFunction) : String { + return getFunctionLabel(f.parent, f.name.asString(), f.valueParameters, f.returnType) } - fun useTypeParameter(param: IrTypeParameter): Label { - val l = getTypeParameterLabel(param) - val label = tw.getExistingLabelFor(l) - if (label != null) { - return label - } - - // todo: fix this - if (param.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || - param.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB){ - return extractTypeParameter(param) - } - - logger.warnElement(Severity.ErrorSevere, "Missing type parameter label", param) - return tw.getLabelFor(l) + fun getFunctionLabel(parent: IrDeclarationParent, name: String, parameters: List, returnType: IrType) : String { + val paramTypeIds = parameters.joinToString() { "{${useTypeOld(erase(it.type)).toString()}}" } + val returnTypeId = useTypeOld(erase(returnType)) + val parentId = useDeclarationParent(parent) + val label = "@\"callable;{$parentId}.$name($paramTypeIds){$returnTypeId}\"" + return label } - private fun extractTypeParameter(tp: IrTypeParameter): Label { - val id = tw.getLabelFor(getTypeParameterLabel(tp)) - - val parentId: Label = when (val parent = tp.parent) { - is IrFunction -> useFunction(parent) - is IrClass -> useClassSource(parent) - else -> { - logger.warnElement(Severity.ErrorSevere, "Unexpected type parameter parent", tp) - fakeLabel() - } - } - - tw.writeTypeVars(id, tp.name.asString(), tp.index, 0, parentId) - val locId = tw.getLocation(tp) - tw.writeHasLocation(id, locId) - - // todo: add type bounds - + fun useFunction(f: IrFunction): Label { + val label = getFunctionLabel(f) + val id: Label = tw.getLabelFor(label) return id } - fun extractExternalClassLater(c: IrClass) { - dependencyCollector?.addDependency(c) - externalClassExtractor.extractLater(c) + fun getTypeArgumentLabel( + arg: IrTypeArgument, + reportOn: IrElement + ): Label { + when (arg) { + is IrStarProjection -> { + val wildcardLabel = "@\"wildcard;\"" + val wildcardId: Label = tw.getLabelFor(wildcardLabel) + tw.writeWildcards(wildcardId, "*", 1) + tw.writeHasLocation(wildcardId, tw.unknownLocation) + return wildcardId + } + is IrTypeProjection -> { + @Suppress("UNCHECKED_CAST") + return useTypeOld(arg.type, false) as Label + } + else -> { + // TODO logger.warnElement(Severity.ErrorSevere, "Unexpected type argument.", reportOn) + return fakeLabel() + } + } } private fun getUnquotedClassLabel(c: IrClass, typeArgs: List): String { @@ -570,38 +640,9 @@ class X { return label } - private fun getClassLabel(c: IrClass, typeArgs: List) = + fun getClassLabel(c: IrClass, typeArgs: List) = "@\"class;${getUnquotedClassLabel(c, typeArgs)}\"" - private fun getTypeArgumentLabel( - arg: IrTypeArgument, - reportOn: IrElement - ): Label { - when (arg) { - is IrStarProjection -> { - val wildcardLabel = "@\"wildcard;\"" - val wildcardId: Label = tw.getLabelFor(wildcardLabel) - tw.writeWildcards(wildcardId, "*", 1) - tw.writeHasLocation(wildcardId, tw.getLocation(-1, -1)) - return wildcardId - } - is IrTypeProjection -> { - @Suppress("UNCHECKED_CAST") - return useTypeOld(arg.type, false) as Label - } - else -> { - logger.warnElement(Severity.ErrorSevere, "Unexpected type argument.", reportOn) - return fakeLabel() - } - } - } - - fun addClassLabel(c: IrClass, typeArgs: List): Label { - var label = getClassLabel(c, typeArgs) - val id: Label = tw.getLabelFor(label) - return id - } - fun useClassSource(c: IrClass): Label { // For source classes, the label doesn't include and type arguments val args = listOf() @@ -609,48 +650,51 @@ class X { return tw.getLabelFor(classId) } - fun extractClassLaterIfExternal(c: IrClass) { - // we don't have an "external dependencies" extractor yet, - // so for now we extract the source class for those too - if (c.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || - c.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB) { - extractExternalClassLater(c) - } + fun getTypeParameterLabel(param: IrTypeParameter): String { + val parentLabel = useDeclarationParent(param.parent) + return "@\"typevar;{$parentLabel};${param.name}\"" } - fun useClassInstance(c: IrClass, typeArgs: List): UseClassInstanceResult { - // TODO: only substitute in class and function signatures - // because within function bodies we can get things like Unit.INSTANCE - // and List.asIterable (an extension, i.e. static, method) - // Map Kotlin class to its equivalent Java class: - val substituteClass = c.fqNameWhenAvailable?.toUnsafe() - ?.let { JavaToKotlinClassMap.mapKotlinToJava(it) } - ?.let { pluginContext.referenceClass(it.asSingleFqName()) } - ?.owner + fun useTypeParameter(param: IrTypeParameter): Label { + val l = getTypeParameterLabel(param) + val label = tw.getExistingLabelFor(l) + if (label != null) { + return label + } - val extractClass = substituteClass ?: c + // todo: fix this + if (param.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || + param.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB){ + return extractTypeParameter(param) + } - val classId = getClassLabel(extractClass, typeArgs) - val classLabel : Label = tw.getLabelFor(classId, { - // If this is a generic type instantiation then it has no - // source entity, so we need to extract it here - if (typeArgs.isNotEmpty()) { - extractClassInstance(extractClass, typeArgs) + // TODO logger.warnElement(Severity.ErrorSevere, "Missing type parameter label", param) + return tw.getLabelFor(l) + } + + // TODO: This should be in KotlinFileExtractor + fun extractTypeParameter(tp: IrTypeParameter): Label { + val id = tw.getLabelFor(getTypeParameterLabel(tp)) + + val parentId: Label = when (val parent = tp.parent) { + is IrFunction -> useFunction(parent) + is IrClass -> useClassSource(parent) + else -> { + // TODO logger.warnElement(Severity.ErrorSevere, "Unexpected type parameter parent", tp) + fakeLabel() } + } - // Extract both the Kotlin and equivalent Java classes, so that we have database entries - // for both even if all internal references to the Kotlin type are substituted. - extractClassLaterIfExternal(c) - substituteClass?.let { extractClassLaterIfExternal(it) } - }) + tw.writeTypeVars(id, tp.name.asString(), tp.index, 0, parentId) + // TODO val locId = tw.getLocation(tp) + // TODO tw.writeHasLocation(id, locId) - return UseClassInstanceResult(classLabel, extractClass) + // todo: add type bounds + + return id } fun extractClassCommon(c: IrClass, id: Label) { - val locId = tw.getLocation(c) - tw.writeHasLocation(id, locId) - for(t in c.superTypes) { when(t) { is IrSimpleType -> { @@ -671,6 +715,75 @@ class X { } } + fun erase (t: IrType): IrType { + if (t is IrSimpleType) { + val classifier = t.classifier + val owner = classifier.owner + if(owner is IrTypeParameter) { + return erase(owner.superTypes.get(0)) + } + + // todo: fix this: + if (t.makeNotNull().isArray()) { + val elementType = t.getArrayElementType(pluginContext.irBuiltIns) + val erasedElementType = erase(elementType) + return withQuestionMark((classifier as IrClassSymbol).typeWith(erasedElementType), t.hasQuestionMark) + } + + if (owner is IrClass) { + return withQuestionMark((classifier as IrClassSymbol).typeWith(), t.hasQuestionMark) + } + } + return t + } + + fun withQuestionMark(t: IrType, hasQuestionMark: Boolean) = if(hasQuestionMark) t.makeNullable() else t.makeNotNull() + +} + +open class KotlinFileExtractor( + override val logger: FileLogger, + override val tw: FileTrapWriter, + dependencyCollector: TrapFileManager?, + externalClassExtractor: ExternalClassExtractor, + pluginContext: IrPluginContext): KotlinUsesExtractor(logger, tw, dependencyCollector, externalClassExtractor, pluginContext) { + + fun extractDeclaration(declaration: IrDeclaration, parentId: Label) { + when (declaration) { + is IrClass -> extractClassSource(declaration) + is IrFunction -> extractFunction(declaration, parentId) + is IrAnonymousInitializer -> { + // Leaving this intentionally empty. init blocks are extracted during class extraction. + } + is IrProperty -> extractProperty(declaration, parentId) + is IrEnumEntry -> extractEnumEntry(declaration, parentId) + else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclaration: " + declaration.javaClass, declaration) + } + } + + + + fun getLabel(element: IrElement) : String? { + when (element) { + is IrFile -> return "@\"${element.path};sourcefile\"" // todo: remove copy-pasted code + is IrClass -> return getClassLabel(element, listOf()) + is IrTypeParameter -> return getTypeParameterLabel(element) + is IrFunction -> return getFunctionLabel(element) + is IrValueParameter -> return getValueParameterLabel(element) + is IrProperty -> return getPropertyLabel(element) + + // Fresh entities: + is IrBody -> return null + is IrExpression -> return null + + // todo add others: + else -> { + logger.warnElement(Severity.ErrorSevere, "Unhandled element type: ${element::class}", element) + return null + } + } + } + fun extractClassSource(c: IrClass): Label { val id = useClassSource(c) val pkg = c.packageFqName?.asString() ?: "" @@ -693,118 +806,15 @@ class X { c.typeParameters.map { extractTypeParameter(it) } c.declarations.map { extractDeclaration(it, id) } extractObjectInitializerFunction(c, id) + + val locId = tw.getLocation(c) + tw.writeHasLocation(id, locId) + extractClassCommon(c, id) return id } - fun extractClassInstance(c: IrClass, typeArgs: List): Label { - if (typeArgs.isEmpty()) { - logger.warnElement(Severity.ErrorSevere, "Instance without type arguments: " + c.name.asString(), c) - } - - val id = addClassLabel(c, typeArgs) - val pkg = c.packageFqName?.asString() ?: "" - val cls = c.name.asString() - val pkgId = extractPackage(pkg) - if(c.kind == ClassKind.INTERFACE) { - @Suppress("UNCHECKED_CAST") - val interfaceId = id as Label - @Suppress("UNCHECKED_CAST") - val sourceInterfaceId = useClassSource(c) as Label - tw.writeInterfaces(interfaceId, cls, pkgId, sourceInterfaceId) - } else { - @Suppress("UNCHECKED_CAST") - val classId = id as Label - @Suppress("UNCHECKED_CAST") - val sourceClassId = useClassSource(c) as Label - tw.writeClasses(classId, cls, pkgId, sourceClassId) - - if (c.kind == ClassKind.ENUM_CLASS) { - tw.writeIsEnumType(classId) - } - } - - for ((idx, arg) in typeArgs.withIndex()) { - val argId = getTypeArgumentLabel(arg, c) - tw.writeTypeArgs(argId, idx, id) - } - tw.writeIsParameterized(id) - val unbound = useClassSource(c) - tw.writeErasure(id, unbound) - extractClassCommon(c, id) - - return id - } - - fun useTypeOld(t: IrType, canReturnPrimitiveTypes: Boolean = true): Label { - return useType(t, canReturnPrimitiveTypes).javaResult.id - } - - fun useType(t: IrType, canReturnPrimitiveTypes: Boolean = true): TypeResults { - when(t) { - is IrSimpleType -> return useSimpleType(t, canReturnPrimitiveTypes) - else -> { - logger.warn(Severity.ErrorSevere, "Unrecognised IrType: " + t.javaClass) - return TypeResults(TypeResult(fakeLabel(), "unknown"), TypeResult(fakeLabel(), "unknown")) - } - } - } - - fun useDeclarationParent(dp: IrDeclarationParent): Label { - when(dp) { - is IrFile -> return usePackage(dp.fqName.asString()) - is IrClass -> return useClassSource(dp) - is IrFunction -> return useFunction(dp) - else -> { - logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclarationParent: " + dp.javaClass, dp) - return fakeLabel() - } - } - } - - fun withQuestionMark(t: IrType, hasQuestionMark: Boolean) = if(hasQuestionMark) t.makeNullable() else t.makeNotNull() - - fun erase (t: IrType): IrType { - if (t is IrSimpleType) { - val classifier = t.classifier - val owner = classifier.owner - if(owner is IrTypeParameter) { - return erase(owner.superTypes.get(0)) - } - - // todo: fix this: - if (t.makeNotNull().isArray()) { - val elementType = t.getArrayElementType(pluginContext.irBuiltIns) - val erasedElementType = erase(elementType) - return withQuestionMark((classifier as IrClassSymbol).typeWith(erasedElementType), t.hasQuestionMark) - } - - if (owner is IrClass) { - return withQuestionMark((classifier as IrClassSymbol).typeWith(), t.hasQuestionMark) - } - } - return t - } - - private fun getFunctionLabel(f: IrFunction) : String { - return getFunctionLabel(f.parent, f.name.asString(), f.valueParameters, f.returnType) - } - - private fun getFunctionLabel(parent: IrDeclarationParent, name: String, parameters: List, returnType: IrType) : String { - val paramTypeIds = parameters.joinToString() { "{${useTypeOld(erase(it.type)).toString()}}" } - val returnTypeId = useTypeOld(erase(returnType)) - val parentId = useDeclarationParent(parent) - val label = "@\"callable;{$parentId}.$name($paramTypeIds){$returnTypeId}\"" - return label - } - - fun useFunction(f: IrFunction): Label { - val label = getFunctionLabel(f) - val id: Label = tw.getLabelFor(label) - return id - } - private fun getValueParameterLabel(vp: IrValueParameter) : String { @Suppress("UNCHECKED_CAST") val parentId: Label = useDeclarationParent(vp.parent) as Label From b381556a06eaaab3b872fcf2fbc6c661438e4e29 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 2 Nov 2021 17:46:48 +0000 Subject: [PATCH 0646/1618] Kotlin: Fix up things that got pulled out into KotlinUsesExtractor --- .../src/main/kotlin/KotlinExtractorExtension.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 25a9c1ab917..9c73843324a 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -352,7 +352,7 @@ open class KotlinUsesExtractor( fun extractClassInstance(c: IrClass, typeArgs: List): Label { if (typeArgs.isEmpty()) { - // TODO logger.warnElement(Severity.ErrorSevere, "Instance without type arguments: " + c.name.asString(), c) + logger.warn(Severity.ErrorSevere, "Instance without type arguments: " + c.name.asString()) } val id = addClassLabel(c, typeArgs) @@ -378,7 +378,7 @@ open class KotlinUsesExtractor( } for ((idx, arg) in typeArgs.withIndex()) { - val argId = getTypeArgumentLabel(arg, c) + val argId = getTypeArgumentLabel(arg) tw.writeTypeArgs(argId, idx, id) } tw.writeIsParameterized(id) @@ -572,7 +572,7 @@ class X { is IrClass -> return useClassSource(dp) is IrFunction -> return useFunction(dp) else -> { - // TODO logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclarationParent: " + dp.javaClass, dp) + logger.warn(Severity.ErrorSevere, "Unrecognised IrDeclarationParent: " + dp.javaClass) return fakeLabel() } } @@ -597,8 +597,7 @@ class X { } fun getTypeArgumentLabel( - arg: IrTypeArgument, - reportOn: IrElement + arg: IrTypeArgument ): Label { when (arg) { is IrStarProjection -> { @@ -613,7 +612,7 @@ class X { return useTypeOld(arg.type, false) as Label } else -> { - // TODO logger.warnElement(Severity.ErrorSevere, "Unexpected type argument.", reportOn) + logger.warn(Severity.ErrorSevere, "Unexpected type argument.") return fakeLabel() } } @@ -633,7 +632,7 @@ class X { } for (arg in typeArgs) { - val argId = getTypeArgumentLabel(arg, c) + val argId = getTypeArgumentLabel(arg) label += ";{$argId}" } @@ -668,7 +667,7 @@ class X { return extractTypeParameter(param) } - // TODO logger.warnElement(Severity.ErrorSevere, "Missing type parameter label", param) + logger.warn(Severity.ErrorSevere, "Missing type parameter label") return tw.getLabelFor(l) } @@ -681,6 +680,7 @@ class X { is IrClass -> useClassSource(parent) else -> { // TODO logger.warnElement(Severity.ErrorSevere, "Unexpected type parameter parent", tp) + logger.warn(Severity.ErrorSevere, "Unexpected type parameter parent") fakeLabel() } } From db0360d211de1691336fa69d607fcff33634642d Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 2 Nov 2021 17:53:38 +0000 Subject: [PATCH 0647/1618] Kotlin: Accept test changes --- .../library-tests/generics/generics.expected | 42 +++++++------------ .../kotlin/library-tests/types/types.expected | 12 ------ 2 files changed, 15 insertions(+), 39 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/generics/generics.expected b/java/ql/test/kotlin/library-tests/generics/generics.expected index 82a7fa4b899..0557a7457cb 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.expected +++ b/java/ql/test/kotlin/library-tests/generics/generics.expected @@ -1,35 +1,23 @@ genericType -| generics.kt:11:1:11:19 | C0 | generics.kt:11:15:11:15 | V | 0 | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:10:13:10 | T | 0 | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:13:13:13 | W | 1 | +| generics.kt:11:1:11:19 | C0 | file://:0:0:0:0 | V | 0 | +| generics.kt:13:1:18:1 | C1 | file://:0:0:0:0 | T | 0 | +| generics.kt:13:1:18:1 | C1 | file://:0:0:0:0 | W | 1 | parameterizedType -| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | * | -| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | Integer | -| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:7:6:7:6 | S | -| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:11:15:11:15 | V | -| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:13:13:13:13 | W | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | Integer | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | String | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | String | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | generics.kt:13:10:13:10 | T | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | generics.kt:15:10:15:10 | U | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | Integer | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | Integer | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | String | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | generics.kt:13:13:13:13 | W | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | generics.kt:15:10:15:10 | U | +| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | V | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | T | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | W | genericFunction -| generics.kt:3:1:5:1 | f0 | generics.kt:3:6:3:6 | S | 0 | -| generics.kt:7:1:9:1 | f1 | generics.kt:7:6:7:6 | S | 0 | -| generics.kt:15:5:17:5 | f2 | generics.kt:15:10:15:10 | U | 0 | -| generics.kt:21:5:21:23 | f4 | generics.kt:21:10:21:10 | P | 0 | +| generics.kt:3:1:5:1 | f0 | file://:0:0:0:0 | S | 0 | +| generics.kt:7:1:9:1 | f1 | file://:0:0:0:0 | S | 0 | +| generics.kt:15:5:17:5 | f2 | file://:0:0:0:0 | U | 0 | +| generics.kt:21:5:21:23 | f4 | file://:0:0:0:0 | P | 0 | genericCall -| generics.kt:27:17:27:22 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | String | -| generics.kt:30:17:30:21 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | Integer | -| generics.kt:32:8:32:12 | f4(...) | generics.kt:21:10:21:10 | P | file://:0:0:0:0 | Integer | +| generics.kt:27:17:27:22 | f2(...) | file://:0:0:0:0 | U | file://:0:0:0:0 | String | +| generics.kt:30:17:30:21 | f2(...) | file://:0:0:0:0 | U | file://:0:0:0:0 | Integer | +| generics.kt:32:8:32:12 | f4(...) | file://:0:0:0:0 | P | file://:0:0:0:0 | Integer | genericCtor -| generics.kt:16:16:16:26 | new C1(...) | 0 | generics.kt:15:10:15:10 | U | -| generics.kt:16:16:16:26 | new C1(...) | 1 | generics.kt:15:10:15:10 | U | +| generics.kt:16:16:16:26 | new C1(...) | 0 | file://:0:0:0:0 | U | +| generics.kt:16:16:16:26 | new C1(...) | 1 | file://:0:0:0:0 | U | | generics.kt:25:14:25:28 | new C1(...) | 0 | file://:0:0:0:0 | Integer | | generics.kt:25:14:25:28 | new C1(...) | 1 | file://:0:0:0:0 | Integer | | generics.kt:28:14:28:32 | new C1(...) | 0 | file://:0:0:0:0 | String | diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index f6c2168d678..891f6c744e3 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -292,7 +292,6 @@ | file://:0:0:0:0 | Array | Class, ParameterizedType | | file://:0:0:0:0 | Array | Class, ParameterizedType | | file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | | file://:0:0:0:0 | ArrayIndexOutOfBoundsException | Class | | file://:0:0:0:0 | ArrayList | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | ArrayList | Class, ParameterizedType | @@ -847,7 +846,6 @@ | file://:0:0:0:0 | Collection | Interface, ParameterizedType | | file://:0:0:0:0 | Collection | Interface, ParameterizedType | | file://:0:0:0:0 | Collection | Interface, ParameterizedType | -| file://:0:0:0:0 | Collection | Interface, ParameterizedType | | file://:0:0:0:0 | CollectionView | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | CollectionView | Class, ParameterizedType | | file://:0:0:0:0 | CollectionView | Class, ParameterizedType | @@ -1073,7 +1071,6 @@ | file://:0:0:0:0 | Consumer | Interface, ParameterizedType | | file://:0:0:0:0 | Consumer | Interface, ParameterizedType | | file://:0:0:0:0 | Consumer | Interface, ParameterizedType | -| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | | file://:0:0:0:0 | ContentHandler | Class | | file://:0:0:0:0 | ContentHandlerFactory | Interface | | file://:0:0:0:0 | Controller | Class | @@ -1182,7 +1179,6 @@ | file://:0:0:0:0 | E | TypeVariable | | file://:0:0:0:0 | E | TypeVariable | | file://:0:0:0:0 | E | TypeVariable | -| file://:0:0:0:0 | E | TypeVariable | | file://:0:0:0:0 | Edge | Class | | file://:0:0:0:0 | Entry | Class | | file://:0:0:0:0 | Entry | Class, GenericType, ParameterizedType | @@ -1626,7 +1622,6 @@ | file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | | file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | | file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | | file://:0:0:0:0 | IntIterator | Class | | file://:0:0:0:0 | IntPredicate | Interface | | file://:0:0:0:0 | IntProgression | Class | @@ -1710,7 +1705,6 @@ | file://:0:0:0:0 | Iterator | Interface, ParameterizedType | | file://:0:0:0:0 | Iterator | Interface, ParameterizedType | | file://:0:0:0:0 | Iterator | Interface, ParameterizedType | -| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | | file://:0:0:0:0 | K | TypeVariable | | file://:0:0:0:0 | K | TypeVariable | | file://:0:0:0:0 | K | TypeVariable | @@ -1838,8 +1832,6 @@ | file://:0:0:0:0 | LineReader | Class | | file://:0:0:0:0 | LinkOption | Class | | file://:0:0:0:0 | List | GenericType, Interface, ParameterizedType | -| file://:0:0:0:0 | List | GenericType, Interface, ParameterizedType | -| file://:0:0:0:0 | List | Interface, ParameterizedType | | file://:0:0:0:0 | List | Interface, ParameterizedType | | file://:0:0:0:0 | List | Interface, ParameterizedType | | file://:0:0:0:0 | List | Interface, ParameterizedType | @@ -1899,7 +1891,6 @@ | file://:0:0:0:0 | ListIterator | Interface, ParameterizedType | | file://:0:0:0:0 | ListIterator | Interface, ParameterizedType | | file://:0:0:0:0 | ListIterator | Interface, ParameterizedType | -| file://:0:0:0:0 | ListIterator | Interface, ParameterizedType | | file://:0:0:0:0 | LocalDate | Class | | file://:0:0:0:0 | LocalDateTime | Class | | file://:0:0:0:0 | LocalTime | Class | @@ -2477,7 +2468,6 @@ | file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | | file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | | file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | -| file://:0:0:0:0 | Spliterator | Interface, ParameterizedType | | file://:0:0:0:0 | StackFrame | Interface | | file://:0:0:0:0 | StackFrameInfo | Class | | file://:0:0:0:0 | StackTraceElement | Class | @@ -2533,7 +2523,6 @@ | file://:0:0:0:0 | Stream | Interface, ParameterizedType | | file://:0:0:0:0 | Stream | Interface, ParameterizedType | | file://:0:0:0:0 | Stream | Interface, ParameterizedType | -| file://:0:0:0:0 | Stream | Interface, ParameterizedType | | file://:0:0:0:0 | String | Class | | file://:0:0:0:0 | String | Class | | file://:0:0:0:0 | StringBuffer | Class | @@ -2949,7 +2938,6 @@ | file://:0:0:0:0 | T | TypeVariable | | file://:0:0:0:0 | T | TypeVariable | | file://:0:0:0:0 | T | TypeVariable | -| file://:0:0:0:0 | T | TypeVariable | | file://:0:0:0:0 | T_CONS | TypeVariable | | file://:0:0:0:0 | T_CONS | TypeVariable | | file://:0:0:0:0 | T_SPLITR | TypeVariable | From 7421e95816f7adc95b47f7c432717948856a242c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 2 Nov 2021 18:04:44 +0000 Subject: [PATCH 0648/1618] Kotlin: Pull more out into KotlinUsesExtractor --- .../main/kotlin/KotlinExtractorExtension.kt | 122 +++++++++--------- .../src/main/kotlin/TrapWriter.kt | 24 ++-- 2 files changed, 73 insertions(+), 73 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 9c73843324a..c73743051ba 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -715,6 +715,21 @@ class X { } } + fun useValueDeclaration(d: IrValueDeclaration): Label { + when(d) { + is IrValueParameter -> { + return useValueParameter(d) + } + is IrVariable -> { + return useVariable(d) + } + else -> { + logger.warn(Severity.ErrorSevere, "Unrecognised IrValueDeclaration: " + d.javaClass) + return fakeLabel() + } + } + } + fun erase (t: IrType): IrType { if (t is IrSimpleType) { val classifier = t.classifier @@ -737,6 +752,52 @@ class X { return t } + fun getValueParameterLabel(vp: IrValueParameter) : String { + @Suppress("UNCHECKED_CAST") + val parentId: Label = useDeclarationParent(vp.parent) as Label + var idx = vp.index + if (idx < 0) { + // We're not extracting this and this@TYPE parameters of functions: + logger.warn(Severity.ErrorSevere, "Unexpected negative index for parameter") + } + val label = "@\"params;{$parentId};$idx\"" + return label + } + + fun useValueParameter(vp: IrValueParameter): Label { + val label = getValueParameterLabel(vp) + val id = tw.getLabelFor(label) + return id + } + + fun getPropertyLabel(p: IrProperty) : String { + val parentId = useDeclarationParent(p.parent) + val label = "@\"field;{$parentId};${p.name.asString()}\"" + return label + } + + fun useProperty(p: IrProperty): Label { + var label = getPropertyLabel(p) + val id: Label = tw.getLabelFor(label) + return id + } + + private fun getEnumEntryLabel(ee: IrEnumEntry) : String { + val parentId = useDeclarationParent(ee.parent) + val label = "@\"field;{$parentId};${ee.name.asString()}\"" + return label + } + + fun useEnumEntry(ee: IrEnumEntry): Label { + var label = getEnumEntryLabel(ee) + val id: Label = tw.getLabelFor(label) + return id + } + + fun useVariable(v: IrVariable): Label { + return tw.getVariableLabelFor(v) + } + fun withQuestionMark(t: IrType, hasQuestionMark: Boolean) = if(hasQuestionMark) t.makeNullable() else t.makeNotNull() } @@ -815,18 +876,6 @@ open class KotlinFileExtractor( return id } - private fun getValueParameterLabel(vp: IrValueParameter) : String { - @Suppress("UNCHECKED_CAST") - val parentId: Label = useDeclarationParent(vp.parent) as Label - var idx = vp.index - if (idx < 0) { - // We're not extracting this and this@TYPE parameters of functions: - logger.warnElement(Severity.ErrorSevere, "Unexpected negative index for parameter", vp) - } - val label = "@\"params;{$parentId};$idx\"" - return label - } - private fun isQualifiedThis(vp: IrValueParameter): Boolean { return isQualifiedThisFunction(vp) || isQualifiedThisClass(vp) @@ -847,12 +896,6 @@ open class KotlinFileExtractor( parent.thisReceiver == vp } - fun useValueParameter(vp: IrValueParameter): Label { - val label = getValueParameterLabel(vp) - val id = tw.getLabelFor(label) - return id - } - fun extractValueParameter(vp: IrValueParameter, parent: Label, idx: Int) { val id = useValueParameter(vp) val typeId = useTypeOld(vp.type) @@ -964,18 +1007,6 @@ open class KotlinFileExtractor( currentFunction = null } - private fun getPropertyLabel(p: IrProperty) : String { - val parentId = useDeclarationParent(p.parent) - val label = "@\"field;{$parentId};${p.name.asString()}\"" - return label - } - - fun useProperty(p: IrProperty): Label { - var label = getPropertyLabel(p) - val id: Label = tw.getLabelFor(label) - return id - } - fun extractProperty(p: IrProperty, parentId: Label) { val bf = p.backingField if(bf == null) { @@ -989,18 +1020,6 @@ open class KotlinFileExtractor( } } - private fun getEnumEntryLabel(ee: IrEnumEntry) : String { - val parentId = useDeclarationParent(ee.parent) - val label = "@\"field;{$parentId};${ee.name.asString()}\"" - return label - } - - fun useEnumEntry(ee: IrEnumEntry): Label { - var label = getEnumEntryLabel(ee) - val id: Label = tw.getLabelFor(label) - return id - } - fun extractEnumEntry(ee: IrEnumEntry, parentId: Label) { val id = useEnumEntry(ee) val locId = tw.getLocation(ee) @@ -1025,10 +1044,6 @@ open class KotlinFileExtractor( } } - fun useVariable(v: IrVariable): Label { - return tw.getVariableLabelFor(v) - } - fun extractVariable(v: IrVariable, callable: Label, parent: Label, idx: Int) { val stmtId = tw.getFreshIdLabel() val locId = tw.getLocation(v) @@ -1066,21 +1081,6 @@ open class KotlinFileExtractor( } } - fun useValueDeclaration(d: IrValueDeclaration): Label { - when(d) { - is IrValueParameter -> { - return useValueParameter(d) - } - is IrVariable -> { - return useVariable(d) - } - else -> { - logger.warnElement(Severity.ErrorSevere, "Unrecognised IrValueDeclaration: " + d.javaClass, d) - return fakeLabel() - } - } - } - fun extractCall(c: IrCall, callable: Label, parent: Label, idx: Int) { val exprId: Label = when { c.origin == PLUS -> { diff --git a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt index 7d92af84c56..cb94816b3df 100644 --- a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt +++ b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt @@ -38,6 +38,18 @@ open class TrapWriter (val lm: TrapLabelManager, val bw: BufferedWriter) { return maybeId } } + val variableLabelMapping: MutableMap> = mutableMapOf>() + fun getVariableLabelFor(v: IrVariable): Label { + val maybeId = variableLabelMapping.get(v) + if(maybeId == null) { + val id = lm.getFreshLabel() + variableLabelMapping.put(v, id) + writeTrap("$id = *\n") + return id + } else { + return maybeId + } + } fun getLocation(fileId: Label, startLine: Int, startColumn: Int, endLine: Int, endColumn: Int): Label { return getLabelFor("@\"loc,{$fileId},$startLine,$startColumn,$endLine,$endColumn\"") { @@ -141,18 +153,6 @@ open class FileTrapWriter ( return "file://$filePath:$startLine:$startColumn:$endLine:$endColumn" } } - val variableLabelMapping: MutableMap> = mutableMapOf>() - fun getVariableLabelFor(v: IrVariable): Label { - val maybeId = variableLabelMapping.get(v) - if(maybeId == null) { - val id = lm.getFreshLabel() - variableLabelMapping.put(v, id) - writeTrap("$id = *\n") - return id - } else { - return maybeId - } - } fun getFreshIdLabel(): Label { val label = IntLabel(lm.nextId++) writeTrap("$label = *\n") From 118d630125cf45d0935db1e9f9e6e001adc1cb8a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 2 Nov 2021 18:17:36 +0000 Subject: [PATCH 0649/1618] Kotlin: Add a test for instances --- .../kotlin/library-tests/instances/TestClassA.kt | 4 ++++ .../library-tests/instances/TestClassAUser.kt | 16 ++++++++++++++++ .../library-tests/instances/classes.expected | 5 +++++ .../kotlin/library-tests/instances/classes.ql | 5 +++++ 4 files changed, 30 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/instances/TestClassA.kt create mode 100644 java/ql/test/kotlin/library-tests/instances/TestClassAUser.kt create mode 100644 java/ql/test/kotlin/library-tests/instances/classes.expected create mode 100644 java/ql/test/kotlin/library-tests/instances/classes.ql diff --git a/java/ql/test/kotlin/library-tests/instances/TestClassA.kt b/java/ql/test/kotlin/library-tests/instances/TestClassA.kt new file mode 100644 index 00000000000..591f9c3658e --- /dev/null +++ b/java/ql/test/kotlin/library-tests/instances/TestClassA.kt @@ -0,0 +1,4 @@ + +class TestClassA { +} + diff --git a/java/ql/test/kotlin/library-tests/instances/TestClassAUser.kt b/java/ql/test/kotlin/library-tests/instances/TestClassAUser.kt new file mode 100644 index 00000000000..6a9d8fecc2e --- /dev/null +++ b/java/ql/test/kotlin/library-tests/instances/TestClassAUser.kt @@ -0,0 +1,16 @@ + +/* +A fairly long comment. +A fairly long comment. +A fairly long comment. +A fairly long comment. +A fairly long comment. +A fairly long comment. +A fairly long comment. +*/ + +fun foo(x: TestClassA) { +} + +class TestClassAUser { } + diff --git a/java/ql/test/kotlin/library-tests/instances/classes.expected b/java/ql/test/kotlin/library-tests/instances/classes.expected new file mode 100644 index 00000000000..bf0f7bd08d0 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/instances/classes.expected @@ -0,0 +1,5 @@ +| TestClassA.kt:0:0:0:0 | TestClassAKt | +| TestClassA.kt:2:1:3:1 | TestClassA | +| TestClassAUser.kt:0:0:0:0 | TestClassAUserKt | +| TestClassAUser.kt:15:1:15:24 | TestClassAUser | +| file://:0:0:0:0 | TestClassA | diff --git a/java/ql/test/kotlin/library-tests/instances/classes.ql b/java/ql/test/kotlin/library-tests/instances/classes.ql new file mode 100644 index 00000000000..2c0dd99626a --- /dev/null +++ b/java/ql/test/kotlin/library-tests/instances/classes.ql @@ -0,0 +1,5 @@ +import java + +from Class c +where c.getName().matches("TestClass%") +select c From b3a28af3193c98bb2203e978a4f6c312d326e1c1 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 2 Nov 2021 18:24:46 +0000 Subject: [PATCH 0650/1618] Kotlin: Move extractTypeParameter back to KotlinFileExtractor --- .../main/kotlin/KotlinExtractorExtension.kt | 50 ++++++++----------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index c73743051ba..afab9b32b45 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -661,39 +661,10 @@ class X { return label } - // todo: fix this - if (param.origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB || - param.origin == IrDeclarationOrigin.IR_EXTERNAL_JAVA_DECLARATION_STUB){ - return extractTypeParameter(param) - } - logger.warn(Severity.ErrorSevere, "Missing type parameter label") return tw.getLabelFor(l) } - // TODO: This should be in KotlinFileExtractor - fun extractTypeParameter(tp: IrTypeParameter): Label { - val id = tw.getLabelFor(getTypeParameterLabel(tp)) - - val parentId: Label = when (val parent = tp.parent) { - is IrFunction -> useFunction(parent) - is IrClass -> useClassSource(parent) - else -> { - // TODO logger.warnElement(Severity.ErrorSevere, "Unexpected type parameter parent", tp) - logger.warn(Severity.ErrorSevere, "Unexpected type parameter parent") - fakeLabel() - } - } - - tw.writeTypeVars(id, tp.name.asString(), tp.index, 0, parentId) - // TODO val locId = tw.getLocation(tp) - // TODO tw.writeHasLocation(id, locId) - - // todo: add type bounds - - return id - } - fun extractClassCommon(c: IrClass, id: Label) { for(t in c.superTypes) { when(t) { @@ -845,6 +816,27 @@ open class KotlinFileExtractor( } } + fun extractTypeParameter(tp: IrTypeParameter): Label { + val id = tw.getLabelFor(getTypeParameterLabel(tp)) + + val parentId: Label = when (val parent = tp.parent) { + is IrFunction -> useFunction(parent) + is IrClass -> useClassSource(parent) + else -> { + logger.warnElement(Severity.ErrorSevere, "Unexpected type parameter parent", tp) + fakeLabel() + } + } + + tw.writeTypeVars(id, tp.name.asString(), tp.index, 0, parentId) + val locId = tw.getLocation(tp) + tw.writeHasLocation(id, locId) + + // todo: add type bounds + + return id + } + fun extractClassSource(c: IrClass): Label { val id = useClassSource(c) val pkg = c.packageFqName?.asString() ?: "" From e120059a184ed436dc327fe8ca003468d94779b1 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 2 Nov 2021 18:41:14 +0000 Subject: [PATCH 0651/1618] Kotlin: Accept test changes --- .../library-tests/generics/generics.expected | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/generics/generics.expected b/java/ql/test/kotlin/library-tests/generics/generics.expected index 0557a7457cb..59b77581e0e 100644 --- a/java/ql/test/kotlin/library-tests/generics/generics.expected +++ b/java/ql/test/kotlin/library-tests/generics/generics.expected @@ -1,23 +1,23 @@ genericType -| generics.kt:11:1:11:19 | C0 | file://:0:0:0:0 | V | 0 | -| generics.kt:13:1:18:1 | C1 | file://:0:0:0:0 | T | 0 | -| generics.kt:13:1:18:1 | C1 | file://:0:0:0:0 | W | 1 | +| generics.kt:11:1:11:19 | C0 | generics.kt:11:15:11:15 | V | 0 | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:10:13:10 | T | 0 | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:13:13:13 | W | 1 | parameterizedType -| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | file://:0:0:0:0 | V | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | file://:0:0:0:0 | T | -| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | file://:0:0:0:0 | W | +| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | generics.kt:11:15:11:15 | V | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 0 | generics.kt:13:10:13:10 | T | +| generics.kt:13:1:18:1 | C1 | generics.kt:13:1:18:1 | C1 | 1 | generics.kt:13:13:13:13 | W | genericFunction -| generics.kt:3:1:5:1 | f0 | file://:0:0:0:0 | S | 0 | -| generics.kt:7:1:9:1 | f1 | file://:0:0:0:0 | S | 0 | -| generics.kt:15:5:17:5 | f2 | file://:0:0:0:0 | U | 0 | -| generics.kt:21:5:21:23 | f4 | file://:0:0:0:0 | P | 0 | +| generics.kt:3:1:5:1 | f0 | generics.kt:3:6:3:6 | S | 0 | +| generics.kt:7:1:9:1 | f1 | generics.kt:7:6:7:6 | S | 0 | +| generics.kt:15:5:17:5 | f2 | generics.kt:15:10:15:10 | U | 0 | +| generics.kt:21:5:21:23 | f4 | generics.kt:21:10:21:10 | P | 0 | genericCall -| generics.kt:27:17:27:22 | f2(...) | file://:0:0:0:0 | U | file://:0:0:0:0 | String | -| generics.kt:30:17:30:21 | f2(...) | file://:0:0:0:0 | U | file://:0:0:0:0 | Integer | -| generics.kt:32:8:32:12 | f4(...) | file://:0:0:0:0 | P | file://:0:0:0:0 | Integer | +| generics.kt:27:17:27:22 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | String | +| generics.kt:30:17:30:21 | f2(...) | generics.kt:15:10:15:10 | U | file://:0:0:0:0 | Integer | +| generics.kt:32:8:32:12 | f4(...) | generics.kt:21:10:21:10 | P | file://:0:0:0:0 | Integer | genericCtor -| generics.kt:16:16:16:26 | new C1(...) | 0 | file://:0:0:0:0 | U | -| generics.kt:16:16:16:26 | new C1(...) | 1 | file://:0:0:0:0 | U | +| generics.kt:16:16:16:26 | new C1(...) | 0 | generics.kt:15:10:15:10 | U | +| generics.kt:16:16:16:26 | new C1(...) | 1 | generics.kt:15:10:15:10 | U | | generics.kt:25:14:25:28 | new C1(...) | 0 | file://:0:0:0:0 | Integer | | generics.kt:25:14:25:28 | new C1(...) | 1 | file://:0:0:0:0 | Integer | | generics.kt:28:14:28:32 | new C1(...) | 0 | file://:0:0:0:0 | String | From c20ee76826e10318f8f39c6fae901b743c2e8254 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 3 Nov 2021 11:21:18 +0000 Subject: [PATCH 0652/1618] Kotlin: Give fields a Kotlin type This meant refactoring the EnumEntry extraction a bit. The IR doesn't give us a type for fields, so we have to make it up based on the parent. --- .../main/kotlin/KotlinExtractorExtension.kt | 64 +++++++++++-------- java/ql/lib/config/semmlecode.dbscheme | 1 + java/ql/lib/semmle/code/Location.qll | 2 +- java/ql/lib/semmle/code/java/Element.qll | 2 +- java/ql/lib/semmle/code/java/Member.qll | 9 ++- java/ql/lib/semmle/code/java/Type.qll | 6 +- 6 files changed, 50 insertions(+), 34 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index afab9b32b45..c51451d54b6 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -389,6 +389,31 @@ open class KotlinUsesExtractor( return id } + fun useSimpleTypeClass(c: IrClass, args: List, hasQuestionMark: Boolean): TypeResults { + val classInstanceResult = useClassInstance(c, args) + val javaClassId = classInstanceResult.classLabel + val kotlinQualClassName = getUnquotedClassLabel(c, args) + val javaQualClassName = classInstanceResult.javaClass.fqNameForIrSerialization.asString() + val javaSignature = javaQualClassName // TODO: Is this right? + val javaResult = TypeResult(javaClassId, javaSignature) + val kotlinResult = if (hasQuestionMark) { + val kotlinSignature = "$kotlinQualClassName?" // TODO: Is this right? + val kotlinLabel = "@\"kt_type;nullable;$kotlinQualClassName\"" + val kotlinId: Label = tw.getLabelFor(kotlinLabel, { + tw.writeKt_nullable_types(it, javaClassId) + }) + TypeResult(kotlinId, kotlinSignature) + } else { + val kotlinSignature = kotlinQualClassName // TODO: Is this right? + val kotlinLabel = "@\"kt_type;notnull;$kotlinQualClassName\"" + val kotlinId: Label = tw.getLabelFor(kotlinLabel, { + tw.writeKt_notnull_types(it, javaClassId) + }) + TypeResult(kotlinId, kotlinSignature) + } + return TypeResults(javaResult, kotlinResult) + } + fun useSimpleType(s: IrSimpleType, canReturnPrimitiveTypes: Boolean): TypeResults { // We use this when we don't actually have an IrClass for a class // we want to refer to @@ -514,28 +539,7 @@ class X { val classifier: IrClassifierSymbol = s.classifier val cls: IrClass = classifier.owner as IrClass - val classInstanceResult = useClassInstance(cls, s.arguments) - val javaClassId = classInstanceResult.classLabel - val kotlinQualClassName = getUnquotedClassLabel(cls, s.arguments) - val javaQualClassName = classInstanceResult.javaClass.fqNameForIrSerialization.asString() - val javaSignature = javaQualClassName // TODO: Is this right? - val javaResult = TypeResult(javaClassId, javaSignature) - val kotlinResult = if (s.hasQuestionMark) { - val kotlinSignature = "$kotlinQualClassName?" // TODO: Is this right? - val kotlinLabel = "@\"kt_type;nullable;$kotlinQualClassName\"" - val kotlinId: Label = tw.getLabelFor(kotlinLabel, { - tw.writeKt_nullable_types(it, javaClassId) - }) - TypeResult(kotlinId, kotlinSignature) - } else { - val kotlinSignature = kotlinQualClassName // TODO: Is this right? - val kotlinLabel = "@\"kt_type;notnull;$kotlinQualClassName\"" - val kotlinId: Label = tw.getLabelFor(kotlinLabel, { - tw.writeKt_notnull_types(it, javaClassId) - }) - TypeResult(kotlinId, kotlinSignature) - } - return TypeResults(javaResult, kotlinResult) + return useSimpleTypeClass(cls, s.arguments, s.hasQuestionMark) } s.classifier.owner is IrTypeParameter -> { val javaId = useTypeParameter(s.classifier.owner as IrTypeParameter) @@ -1006,8 +1010,8 @@ open class KotlinFileExtractor( } else { val id = useProperty(p) val locId = tw.getLocation(p) - val typeId = useTypeOld(bf.type) - tw.writeFields(id, p.name.asString(), typeId, parentId, id) + val type = useType(bf.type) + tw.writeFields(id, p.name.asString(), type.javaResult.id, type.kotlinResult.id, parentId, id) tw.writeHasLocation(id, locId) } } @@ -1015,8 +1019,16 @@ open class KotlinFileExtractor( fun extractEnumEntry(ee: IrEnumEntry, parentId: Label) { val id = useEnumEntry(ee) val locId = tw.getLocation(ee) - tw.writeFields(id, ee.name.asString(), parentId, parentId, id) - tw.writeHasLocation(id, locId) + val parent = ee.parent + if(parent !is IrClass) { + logger.warnElement(Severity.ErrorSevere, "Enum entry with unexpected parent: " + parent.javaClass, ee) + } else if (!parent.typeParameters.isEmpty()) { + logger.warnElement(Severity.ErrorSevere, "Enum entry parent class has type parameters: " + parent.name, ee) + } else { + val type = useSimpleTypeClass(parent, emptyList(), false) + tw.writeFields(id, ee.name.asString(), type.javaResult.id, type.kotlinResult.id, parentId, id) + tw.writeHasLocation(id, locId) + } } fun extractBody(b: IrBody, callable: Label) { diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 17f4bc7afc0..8c5ce712137 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -353,6 +353,7 @@ fields( unique int id: @field, string nodeName: string ref, int typeid: @type ref, + int kttypeid: @kt_type ref, int parentid: @reftype ref, int sourceid: @field ref ); diff --git a/java/ql/lib/semmle/code/Location.qll b/java/ql/lib/semmle/code/Location.qll index 8e51cf610af..4ecebc226fc 100755 --- a/java/ql/lib/semmle/code/Location.qll +++ b/java/ql/lib/semmle/code/Location.qll @@ -20,7 +20,7 @@ predicate hasName(Element e, string name) { or methods(e, name, _, _, _, _) or - fields(e, name, _, _, _) + fields(e, name, _, _, _, _) or packages(e, name) or diff --git a/java/ql/lib/semmle/code/java/Element.qll b/java/ql/lib/semmle/code/java/Element.qll index 6bb6a23adae..a4e68d56516 100755 --- a/java/ql/lib/semmle/code/java/Element.qll +++ b/java/ql/lib/semmle/code/java/Element.qll @@ -63,7 +63,7 @@ private predicate hasChildElement(Element parent, Element e) { or params(e, _, _, parent, _) or - fields(e, _, _, parent, _) + fields(e, _, _, _, parent, _) or typeVars(e, _, _, _, parent) } diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index a8896e934c1..ea53c76da4b 100755 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -598,10 +598,13 @@ class FieldDeclaration extends ExprParent, @fielddecl, Annotatable { /** A class or instance field. */ class Field extends Member, ExprParent, @field, Variable { /** Gets the declared type of this field. */ - override Type getType() { fields(this, _, result, _, _) } + override Type getType() { fields(this, _, result, _, _, _) } + + /** Gets the Kotlin type of this field. */ + KotlinType getKotlinType() { fields(this, _, _, result, _, _) } /** Gets the type in which this field is declared. */ - override RefType getDeclaringType() { fields(this, _, _, result, _) } + override RefType getDeclaringType() { fields(this, _, _, _, result, _) } /** * Gets the field declaration in which this field is declared. @@ -631,7 +634,7 @@ class Field extends Member, ExprParent, @field, Variable { * * For all other fields, the source declaration is the field itself. */ - Field getSourceDeclaration() { fields(this, _, _, _, result) } + Field getSourceDeclaration() { fields(this, _, _, _, _, result) } /** Holds if this field is the same as its source declaration. */ predicate isSourceDeclaration() { this.getSourceDeclaration() = this } diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index a6977e954e1..11515f9cc7a 100755 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -319,7 +319,7 @@ predicate declaresMember(Type t, @member m) { or constrs(m, _, _, _, t, _) or - fields(m, _, _, t, _) + fields(m, _, _, _, t, _) or enclInReftype(m, t) and // Since the type `@member` in the dbscheme includes all `@reftype`s, @@ -1109,11 +1109,11 @@ class EnumType extends Class { /** Gets the enum constant with the specified name. */ EnumConstant getEnumConstant(string name) { - fields(result, _, _, this, _) and result.hasName(name) + fields(result, _, _, _, this, _) and result.hasName(name) } /** Gets an enum constant declared in this enum type. */ - EnumConstant getAnEnumConstant() { fields(result, _, _, this, _) } + EnumConstant getAnEnumConstant() { fields(result, _, _, _, this, _) } override predicate isFinal() { // JLS 8.9: An enum declaration is implicitly `final` unless it contains From d9822266f55cc3062e78a85e451c1fc811c3c6a8 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 3 Nov 2021 12:33:56 +0000 Subject: [PATCH 0653/1618] Kotlin: Fix SafeCastConversionContext QLL --- java/ql/lib/semmle/code/java/Conversions.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/Conversions.qll b/java/ql/lib/semmle/code/java/Conversions.qll index 85cb362552f..ceb9606f3e6 100644 --- a/java/ql/lib/semmle/code/java/Conversions.qll +++ b/java/ql/lib/semmle/code/java/Conversions.qll @@ -126,7 +126,7 @@ class CastConversionContext extends ConversionSite { class SafeCastConversionContext extends ConversionSite { SafeCastExpr c; - CastConversionContext() { this = c.getExpr() } + SafeCastConversionContext() { this = c.getExpr() } override Type getConversionTarget() { result = c.getType() } From 0d5e471b966dfdb8a95c67b28e4cb7915500d513 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 3 Nov 2021 15:30:41 +0000 Subject: [PATCH 0654/1618] Kotlin: Give methods and constructors a KotlinType --- .../main/kotlin/KotlinExtractorExtension.kt | 12 ++++---- java/ql/lib/config/semmlecode.dbscheme | 2 ++ java/ql/lib/semmle/code/Location.qll | 4 +-- java/ql/lib/semmle/code/java/Annotation.qll | 9 ++++-- java/ql/lib/semmle/code/java/Element.qll | 4 +-- java/ql/lib/semmle/code/java/Generics.qll | 2 +- java/ql/lib/semmle/code/java/Member.qll | 29 ++++++++++++------- java/ql/lib/semmle/code/java/Type.qll | 12 ++++---- 8 files changed, 44 insertions(+), 30 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index c51451d54b6..5603cca37f3 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -911,8 +911,8 @@ open class KotlinFileExtractor( var obinitLabel = getFunctionLabel(c, "", listOf(), pluginContext.irBuiltIns.unitType) val obinitId = tw.getLabelFor(obinitLabel) val signature = "TODO" - val returnTypeId = useTypeOld(pluginContext.irBuiltIns.unitType) - tw.writeMethods(obinitId, "", signature, returnTypeId, parentId, obinitId) + val returnType = useType(pluginContext.irBuiltIns.unitType) + tw.writeMethods(obinitId, "", signature, returnType.javaResult.id, returnType.kotlinResult.id, parentId, obinitId) val locId = tw.getLocation(c) tw.writeHasLocation(obinitId, locId) @@ -976,13 +976,13 @@ open class KotlinFileExtractor( val id: Label if (f.symbol is IrConstructorSymbol) { - val returnTypeId = useTypeOld(erase(f.returnType)) + val returnType = useType(erase(f.returnType)) id = useFunction(f) - tw.writeConstrs(id, f.returnType.classFqName?.shortName()?.asString() ?: f.name.asString(), signature, returnTypeId, parentId, id) + tw.writeConstrs(id, f.returnType.classFqName?.shortName()?.asString() ?: f.name.asString(), signature, returnType.javaResult.id, returnType.kotlinResult.id, parentId, id) } else { - val returnTypeId = useTypeOld(f.returnType) + val returnType = useType(f.returnType) id = useFunction(f) - tw.writeMethods(id, f.name.asString(), signature, returnTypeId, parentId, id) + tw.writeMethods(id, f.name.asString(), signature, returnType.javaResult.id, returnType.kotlinResult.id, parentId, id) val extReceiver = f.extensionReceiverParameter if (extReceiver != null) { diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 8c5ce712137..3d063734223 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -363,6 +363,7 @@ constrs( string nodeName: string ref, string signature: string ref, int typeid: @type ref, + int kttypeid: @kt_type ref, int parentid: @reftype ref, int sourceid: @constructor ref ); @@ -372,6 +373,7 @@ methods( string nodeName: string ref, string signature: string ref, int typeid: @type ref, + int kttypeid: @kt_type ref, int parentid: @reftype ref, int sourceid: @method ref ); diff --git a/java/ql/lib/semmle/code/Location.qll b/java/ql/lib/semmle/code/Location.qll index 4ecebc226fc..23b4ab8ccba 100755 --- a/java/ql/lib/semmle/code/Location.qll +++ b/java/ql/lib/semmle/code/Location.qll @@ -16,9 +16,9 @@ predicate hasName(Element e, string name) { or primitives(e, name) or - constrs(e, name, _, _, _, _) + constrs(e, name, _, _, _, _, _) or - methods(e, name, _, _, _, _) + methods(e, name, _, _, _, _, _) or fields(e, name, _, _, _, _) or diff --git a/java/ql/lib/semmle/code/java/Annotation.qll b/java/ql/lib/semmle/code/java/Annotation.qll index 342a2bd6e0d..28dd0cdb89b 100755 --- a/java/ql/lib/semmle/code/java/Annotation.qll +++ b/java/ql/lib/semmle/code/java/Annotation.qll @@ -138,11 +138,11 @@ class AnnotationType extends Interface { /** Gets the annotation element with the specified `name`. */ AnnotationElement getAnnotationElement(string name) { - methods(result, _, _, _, this, _) and result.hasName(name) + methods(result, _, _, _, _, this, _) and result.hasName(name) } /** Gets an annotation element that is a member of this annotation type. */ - AnnotationElement getAnAnnotationElement() { methods(result, _, _, _, this, _) } + AnnotationElement getAnAnnotationElement() { methods(result, _, _, _, _, this, _) } /** Holds if this annotation type is annotated with the meta-annotation `@Inherited`. */ predicate isInherited() { @@ -158,5 +158,8 @@ class AnnotationElement extends Member { AnnotationElement() { isAnnotElem(this) } /** Gets the type of this annotation element. */ - Type getType() { methods(this, _, _, result, _, _) } + Type getType() { methods(this, _, _, result, _, _, _) } + + /** Gets the Kotlin type of this annotation element. */ + KotlinType getKotlinType() { methods(this, _, _, _, result, _, _) } } diff --git a/java/ql/lib/semmle/code/java/Element.qll b/java/ql/lib/semmle/code/java/Element.qll index a4e68d56516..55aa183fe55 100755 --- a/java/ql/lib/semmle/code/java/Element.qll +++ b/java/ql/lib/semmle/code/java/Element.qll @@ -57,9 +57,9 @@ private predicate hasChildElement(Element parent, Element e) { not enclInReftype(e, _) and e.(Interface).getCompilationUnit() = parent or - methods(e, _, _, _, parent, _) + methods(e, _, _, _, _, parent, _) or - constrs(e, _, _, _, parent, _) + constrs(e, _, _, _, _, parent, _) or params(e, _, _, parent, _) or diff --git a/java/ql/lib/semmle/code/java/Generics.qll b/java/ql/lib/semmle/code/java/Generics.qll index ca2980751c0..510401be366 100755 --- a/java/ql/lib/semmle/code/java/Generics.qll +++ b/java/ql/lib/semmle/code/java/Generics.qll @@ -439,7 +439,7 @@ class RawInterface extends Interface, RawType { class GenericCallable extends Callable { GenericCallable() { exists(Callable srcDecl | - methods(this, _, _, _, _, srcDecl) or constrs(this, _, _, _, _, srcDecl) + methods(this, _, _, _, _, _, srcDecl) or constrs(this, _, _, _, _, _, srcDecl) | typeVars(_, _, _, _, srcDecl) ) diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index ea53c76da4b..3dad64ef44c 100755 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -57,8 +57,17 @@ class Callable extends StmtParent, Member, @callable { * constructors). */ Type getReturnType() { - constrs(this, _, _, result, _, _) or - methods(this, _, _, result, _, _) + constrs(this, _, _, result, _, _, _) or + methods(this, _, _, result, _, _, _) + } + + /** + * Gets the declared return Kotlin type of this callable (`Nothing` for + * constructors). + */ + KotlinType getReturnKotlinType() { + constrs(this, _, _, _, result, _, _) or + methods(this, _, _, _, result, _, _) } /** @@ -273,8 +282,8 @@ class Callable extends StmtParent, Member, @callable { * For example, method `void m(String s, int i)` has the signature `m(java.lang.String,int)`. */ string getSignature() { - constrs(this, _, result, _, _, _) or - methods(this, _, result, _, _, _) + constrs(this, _, result, _, _, _, _) or + methods(this, _, result, _, _, _, _) } } @@ -316,7 +325,7 @@ predicate overridesIgnoringAccess(Method m1, RefType t1, Method m2, RefType t2) } private predicate virtualMethodWithSignature(string sig, RefType t, Method m) { - methods(m, _, _, _, t, _) and + methods(m, _, _, _, _, t, _) and sig = m.getSignature() and m.isVirtual() } @@ -365,7 +374,7 @@ class Method extends Callable, @method { exists(Method m | this.overrides(m) and result = m.getSourceDeclaration()) } - override string getSignature() { methods(this, _, result, _, _, _) } + override string getSignature() { methods(this, _, result, _, _, _, _) } /** * Holds if this method and method `m` are declared in the same type @@ -382,7 +391,7 @@ class Method extends Callable, @method { not exists(int n | this.getParameterType(n) != m.getParameterType(n)) } - override SrcMethod getSourceDeclaration() { methods(this, _, _, _, _, result) } + override SrcMethod getSourceDeclaration() { methods(this, _, _, _, _, _, result) } /** * All the methods that could possibly be called when this method @@ -456,7 +465,7 @@ class Method extends Callable, @method { /** A method that is the same as its source declaration. */ class SrcMethod extends Method { - SrcMethod() { methods(_, _, _, _, _, this) } + SrcMethod() { methods(_, _, _, _, _, _, this) } /** * All the methods that could possibly be called when this method @@ -542,9 +551,9 @@ class Constructor extends Callable, @constructor { /** Holds if this is a default constructor, not explicitly declared in source code. */ predicate isDefaultConstructor() { isDefConstr(this) } - override Constructor getSourceDeclaration() { constrs(this, _, _, _, _, result) } + override Constructor getSourceDeclaration() { constrs(this, _, _, _, _, _, result) } - override string getSignature() { constrs(this, _, result, _, _, _) } + override string getSignature() { constrs(this, _, result, _, _, _, _) } override string getAPrimaryQlClass() { result = "Constructor" } } diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index 11515f9cc7a..2df3a6d3ac6 100755 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -315,9 +315,9 @@ private predicate hasSubtypeStar2(RefType t, RefType sub) { /** Holds if type `t` declares member `m`. */ predicate declaresMember(Type t, @member m) { - methods(m, _, _, _, t, _) + methods(m, _, _, _, _, t, _) or - constrs(m, _, _, _, t, _) + constrs(m, _, _, _, _, t, _) or fields(m, _, _, _, t, _) or @@ -511,16 +511,16 @@ class RefType extends Type, Annotatable, Modifiable, @reftype { sup.hasNonInterfaceMethod(m, declaringType, h2) and hidden = h1.booleanOr(h2) and exists(string signature | - methods(m, _, signature, _, _, _) and not methods(_, _, signature, _, this, _) + methods(m, _, signature, _, _, _, _) and not methods(_, _, signature, _, _, this, _) ) and m.isInheritable() ) } private predicate cannotInheritInterfaceMethod(string signature) { - methods(_, _, signature, _, this, _) + methods(_, _, signature, _, _, this, _) or - exists(Method m | this.hasNonInterfaceMethod(m, _, false) and methods(m, _, signature, _, _, _)) + exists(Method m | this.hasNonInterfaceMethod(m, _, false) and methods(m, _, signature, _, _, _, _)) } private predicate interfaceMethodCandidateWithSignature( @@ -529,7 +529,7 @@ class RefType extends Type, Annotatable, Modifiable, @reftype { m = this.getAMethod() and this = declaringType and declaringType instanceof Interface and - methods(m, _, signature, _, _, _) + methods(m, _, signature, _, _, _, _) or exists(RefType sup | sup.interfaceMethodCandidateWithSignature(m, signature, declaringType) and From ef22194eed275e175f2f78881f688b17a10a055a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 3 Nov 2021 16:16:23 +0000 Subject: [PATCH 0655/1618] Kotlin: Add KotlinType to params --- .../src/main/kotlin/KotlinExtractorExtension.kt | 4 ++-- java/ql/lib/config/semmlecode.dbscheme | 1 + java/ql/lib/semmle/code/Location.qll | 2 +- java/ql/lib/semmle/code/java/Element.qll | 2 +- java/ql/lib/semmle/code/java/Member.qll | 7 +++++-- java/ql/lib/semmle/code/java/Variable.qll | 11 +++++++---- 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 5603cca37f3..e2cc7f9e88d 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -894,9 +894,9 @@ open class KotlinFileExtractor( fun extractValueParameter(vp: IrValueParameter, parent: Label, idx: Int) { val id = useValueParameter(vp) - val typeId = useTypeOld(vp.type) + val type = useType(vp.type) val locId = tw.getLocation(vp.startOffset, vp.endOffset) - tw.writeParams(id, typeId, idx, parent, id) + tw.writeParams(id, type.javaResult.id, type.kotlinResult.id, idx, parent, id) tw.writeHasLocation(id, locId) tw.writeParamName(id, vp.name.asString()) } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 3d063734223..a8e3c7a9532 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -382,6 +382,7 @@ methods( params( unique int id: @param, int typeid: @type ref, + int kttypeid: @kt_type ref, int pos: int ref, int parentid: @callable ref, int sourceid: @param ref diff --git a/java/ql/lib/semmle/code/Location.qll b/java/ql/lib/semmle/code/Location.qll index 23b4ab8ccba..62147093b01 100755 --- a/java/ql/lib/semmle/code/Location.qll +++ b/java/ql/lib/semmle/code/Location.qll @@ -29,7 +29,7 @@ predicate hasName(Element e, string name) { paramName(e, name) or exists(int pos | - params(e, _, pos, _, _) and + params(e, _, pos, _, _, _) and not paramName(e, _) and name = "p" + pos ) diff --git a/java/ql/lib/semmle/code/java/Element.qll b/java/ql/lib/semmle/code/java/Element.qll index 55aa183fe55..4308fa379d0 100755 --- a/java/ql/lib/semmle/code/java/Element.qll +++ b/java/ql/lib/semmle/code/java/Element.qll @@ -61,7 +61,7 @@ private predicate hasChildElement(Element parent, Element e) { or constrs(e, _, _, _, _, parent, _) or - params(e, _, _, parent, _) + params(e, _, _, _, parent, _) or fields(e, _, _, _, parent, _) or diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index 3dad64ef44c..8cb697778ef 100755 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -186,10 +186,13 @@ class Callable extends StmtParent, Member, @callable { Parameter getAParameter() { result.getCallable() = this } /** Gets the formal parameter at the specified (zero-based) position. */ - Parameter getParameter(int n) { params(result, _, n, this, _) } + Parameter getParameter(int n) { params(result, _, _, n, this, _) } /** Gets the type of the formal parameter at the specified (zero-based) position. */ - Type getParameterType(int n) { params(_, result, n, this, _) } + Type getParameterType(int n) { params(_, result, _, n, this, _) } + + /** Gets the type of the formal parameter at the specified (zero-based) position. */ + KotlinType getParameterKotlinType(int n) { params(_, _, result, n, this, _) } /** * Gets the signature of this callable, including its name and the types of all diff --git a/java/ql/lib/semmle/code/java/Variable.qll b/java/ql/lib/semmle/code/java/Variable.qll index 530ddd4eae7..549ee734024 100755 --- a/java/ql/lib/semmle/code/java/Variable.qll +++ b/java/ql/lib/semmle/code/java/Variable.qll @@ -60,19 +60,22 @@ class LocalVariableDecl extends @localvar, LocalScopeVariable { /** A formal parameter of a callable. */ class Parameter extends Element, @param, LocalScopeVariable { /** Gets the type of this formal parameter. */ - override Type getType() { params(this, result, _, _, _) } + override Type getType() { params(this, result, _, _, _, _) } + + /** Gets the Kotlin type of this formal parameter. */ + override KotlinType getKotlinType() { params(this, _, result, _, _, _) } /** Holds if the parameter is never assigned a value in the body of the callable. */ predicate isEffectivelyFinal() { not exists(this.getAnAssignedValue()) } /** Gets the (zero-based) index of this formal parameter. */ - int getPosition() { params(this, _, result, _, _) } + int getPosition() { params(this, _, _, result, _, _) } /** Gets the callable that declares this formal parameter. */ - override Callable getCallable() { params(this, _, _, result, _) } + override Callable getCallable() { params(this, _, _, _, result, _) } /** Gets the source declaration of this formal parameter. */ - Parameter getSourceDeclaration() { params(this, _, _, _, result) } + Parameter getSourceDeclaration() { params(this, _, _, _, _, result) } /** Holds if this formal parameter is the same as its source declaration. */ predicate isSourceDeclaration() { this.getSourceDeclaration() = this } From ba565179009c19feb3485aed705c0121a320398a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 3 Nov 2021 16:32:25 +0000 Subject: [PATCH 0656/1618] Kotlin: Add Variable.getKotlinType() --- java/ql/lib/semmle/code/java/Variable.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/ql/lib/semmle/code/java/Variable.qll b/java/ql/lib/semmle/code/java/Variable.qll index 549ee734024..fa41b0982c1 100755 --- a/java/ql/lib/semmle/code/java/Variable.qll +++ b/java/ql/lib/semmle/code/java/Variable.qll @@ -9,6 +9,9 @@ class Variable extends @variable, Annotatable, Element, Modifiable { /** Gets the type of this variable. */ /*abstract*/ Type getType() { none() } + /** Gets the Kotlin type of this variable. */ + /*abstract*/ KotlinType getKotlinType() { none() } + /** Gets an access to this variable. */ VarAccess getAnAccess() { variableBinding(result, this) } From 06a41b392395c8e8ea82703f4757f7f4b545ec70 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 3 Nov 2021 16:42:42 +0000 Subject: [PATCH 0657/1618] Kotlin: Add KotlinTypes to arrays --- .../main/kotlin/KotlinExtractorExtension.kt | 4 ++-- java/ql/lib/config/semmlecode.dbscheme | 4 +++- java/ql/lib/semmle/code/Location.qll | 4 ++-- java/ql/lib/semmle/code/java/Member.qll | 2 +- java/ql/lib/semmle/code/java/Type.qll | 22 +++++++++++++++---- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index e2cc7f9e88d..663c8b5198d 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -511,9 +511,9 @@ class X { s.isArray() && s.arguments.isNotEmpty() -> { // TODO: fix this, this is only a dummy implementation to let the tests pass - val elementType = useTypeOld(s.getArrayElementType(pluginContext.irBuiltIns)) + val elementType = useType(s.getArrayElementType(pluginContext.irBuiltIns)) val id = tw.getLabelFor("@\"array;1;{$elementType}\"") - tw.writeArrays(id, "ARRAY", elementType, 1, elementType) + tw.writeArrays(id, "ARRAY", elementType.javaResult.id, elementType.kotlinResult.id, 1, elementType.javaResult.id, elementType.kotlinResult.id) val javaSignature = "an array" // TODO: Wrong val javaResult = TypeResult(id, javaSignature) val aClassId = makeClass("kotlin", "Array") // TODO: Wrong diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index a8e3c7a9532..336c63f7bff 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -494,8 +494,10 @@ arrays( unique int id: @array, string nodeName: string ref, int elementtypeid: @type ref, + int elementkttypeid: @kt_type ref, int dimension: int ref, - int componenttypeid: @type ref + int componenttypeid: @type ref, + int componentkttypeid: @kt_type ref ); enclInReftype( diff --git a/java/ql/lib/semmle/code/Location.qll b/java/ql/lib/semmle/code/Location.qll index 62147093b01..ceaf7b6b019 100755 --- a/java/ql/lib/semmle/code/Location.qll +++ b/java/ql/lib/semmle/code/Location.qll @@ -29,7 +29,7 @@ predicate hasName(Element e, string name) { paramName(e, name) or exists(int pos | - params(e, _, pos, _, _, _) and + params(e, _, _, pos, _, _) and not paramName(e, _) and name = "p" + pos ) @@ -40,7 +40,7 @@ predicate hasName(Element e, string name) { or wildcards(e, name, _) or - arrays(e, name, _, _, _) + arrays(e, name, _, _, _, _, _) or modifiers(e, name) } diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index 8cb697778ef..20db7fcdaf0 100755 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -613,7 +613,7 @@ class Field extends Member, ExprParent, @field, Variable { override Type getType() { fields(this, _, result, _, _, _) } /** Gets the Kotlin type of this field. */ - KotlinType getKotlinType() { fields(this, _, _, result, _, _) } + override KotlinType getKotlinType() { fields(this, _, _, result, _, _) } /** Gets the type in which this field is declared. */ override RefType getDeclaringType() { fields(this, _, _, _, result, _) } diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index 2df3a6d3ac6..3d406244830 100755 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -354,21 +354,35 @@ class Array extends RefType, @array { * * For example, the component type of `Object[][]` is `Object[]`. */ - Type getComponentType() { arrays(this, _, _, _, result) } + Type getComponentType() { arrays(this, _, _, _, _, result, _) } /** - * Gets the type of the elements used to construct this array type. + * Gets the type of the components of this array type. + * + * For example, the component type of `Object[][]` is `Object[]`. + */ + KotlinType getComponentKotlinType() { arrays(this, _, _, _, _, _, result) } + + /** + * Gets the Kotlin type of the elements used to construct this array type. * * For example, the element type of `Object[][]` is `Object`. */ - Type getElementType() { arrays(this, _, result, _, _) } + Type getElementType() { arrays(this, _, result, _, _, _, _) } + + /** + * Gets the Kotlin type of the elements used to construct this array type. + * + * For example, the element type of `Object[][]` is `Object`. + */ + KotlinType getElementKotlinType() { arrays(this, _, _, result, _, _, _) } /** * Gets the arity of this array type. * * For example, the dimension of `Object[][]` is 2. */ - int getDimension() { arrays(this, _, _, result, _) } + int getDimension() { arrays(this, _, _, _, result, _, _) } /** * Gets the JVM descriptor for this type, as used in bytecode. From 6cf0b755f080c95dbdf38bd76cd05791f442491a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 3 Nov 2021 16:51:05 +0000 Subject: [PATCH 0658/1618] Kotlin: Add KotlinType to localvars --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- java/ql/lib/config/semmlecode.dbscheme | 1 + java/ql/lib/semmle/code/Location.qll | 2 +- java/ql/lib/semmle/code/java/Expr.qll | 2 +- java/ql/lib/semmle/code/java/Variable.qll | 9 ++++++--- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 663c8b5198d..fded5abc51d 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1061,7 +1061,7 @@ open class KotlinFileExtractor( val exprId = tw.getFreshIdLabel() val locId = tw.getLocation(v) val type = useType(v.type) - tw.writeLocalvars(varId, v.name.asString(), type.javaResult.id, exprId) // TODO: KT type + tw.writeLocalvars(varId, v.name.asString(), type.javaResult.id, type.kotlinResult.id, exprId) tw.writeHasLocation(varId, locId) tw.writeExprs_localvariabledeclexpr(exprId, type.javaResult.id, type.kotlinResult.id, parent, idx) tw.writeHasLocation(exprId, locId) diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 336c63f7bff..2035ca993ee 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -785,6 +785,7 @@ localvars( unique int id: @localvar, string nodeName: string ref, int typeid: @type ref, + int kttypeid: @kt_type ref, int parentid: @localvariabledeclexpr ref ); diff --git a/java/ql/lib/semmle/code/Location.qll b/java/ql/lib/semmle/code/Location.qll index ceaf7b6b019..0096e861cdb 100755 --- a/java/ql/lib/semmle/code/Location.qll +++ b/java/ql/lib/semmle/code/Location.qll @@ -34,7 +34,7 @@ predicate hasName(Element e, string name) { name = "p" + pos ) or - localvars(e, name, _, _) + localvars(e, name, _, _, _) or typeVars(e, name, _, _, _) or diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 1d245d096d1..1f4cd940d89 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -1490,7 +1490,7 @@ class LocalVariableDeclExpr extends Expr, @localvariabledeclexpr { VarAccess getAnAccess() { variableBinding(result, this.getVariable()) } /** Gets the local variable declared by this local variable declaration expression. */ - LocalVariableDecl getVariable() { localvars(result, _, _, this) } + LocalVariableDecl getVariable() { localvars(result, _, _, _, this) } /** Gets the type access of this local variable declaration expression. */ Expr getTypeAccess() { diff --git a/java/ql/lib/semmle/code/java/Variable.qll b/java/ql/lib/semmle/code/java/Variable.qll index fa41b0982c1..67e29e6d582 100755 --- a/java/ql/lib/semmle/code/java/Variable.qll +++ b/java/ql/lib/semmle/code/java/Variable.qll @@ -38,13 +38,16 @@ class LocalScopeVariable extends Variable, @localscopevariable { /** A local variable declaration */ class LocalVariableDecl extends @localvar, LocalScopeVariable { /** Gets the type of this local variable. */ - override Type getType() { localvars(this, _, result, _) } + override Type getType() { localvars(this, _, result, _, _) } + + /** Gets the Kotlin type of this local variable. */ + override KotlinType getKotlinType() { localvars(this, _, _, result, _) } /** Gets the expression declaring this variable. */ - LocalVariableDeclExpr getDeclExpr() { localvars(this, _, _, result) } + LocalVariableDeclExpr getDeclExpr() { localvars(this, _, _, _, result) } /** Gets the parent of this declaration. */ - Expr getParent() { localvars(this, _, _, result) } + Expr getParent() { localvars(this, _, _, _, result) } /** Gets the callable in which this declaration occurs. */ override Callable getCallable() { result = this.getParent().getEnclosingCallable() } From e61ff60bf88b138f27f160a7994eb6df08e49a93 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 3 Nov 2021 17:00:50 +0000 Subject: [PATCH 0659/1618] Kotlin: Add KotlinType to ExtensionMethod --- .../src/main/kotlin/KotlinExtractorExtension.kt | 4 ++-- java/ql/lib/config/semmlecode.dbscheme | 3 ++- java/ql/lib/semmle/code/java/Member.qll | 6 +++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index fded5abc51d..30bf30a2628 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -986,8 +986,8 @@ open class KotlinFileExtractor( val extReceiver = f.extensionReceiverParameter if (extReceiver != null) { - val extendedType = useTypeOld(extReceiver.type) - tw.writeKtExtensionFunctions(id, extendedType) + val extendedType = useType(extReceiver.type) + tw.writeKtExtensionFunctions(id, extendedType.javaResult.id, extendedType.kotlinResult.id) } } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 2035ca993ee..e974031a7e7 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -1085,5 +1085,6 @@ ktBreakContinueTargets( ktExtensionFunctions( unique int id: @method ref, - int typeid: @type ref + int typeid: @type ref, + int kttypeid: @kt_type ref ) diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index 20db7fcdaf0..929dc4bed9e 100755 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -689,11 +689,15 @@ class InstanceField extends Field { /** A Kotlin extension function. */ class ExtensionMethod extends Method { Type extendedType; + KotlinType extendedKotlinType; - ExtensionMethod() { ktExtensionFunctions(this, extendedType) } + ExtensionMethod() { ktExtensionFunctions(this, extendedType, extendedKotlinType) } /** Gets the type being extended by this method. */ Type getExtendedType() { result = extendedType } + /** Gets the Kotlin type being extended by this method. */ + KotlinType getExtendedKotlinType() { result = extendedKotlinType } + override string getAPrimaryQlClass() { result = "ExtensionMethod" } } From 9b3f36d1aec472d0d78196e711535ba251314ee9 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 3 Nov 2021 17:52:00 +0000 Subject: [PATCH 0660/1618] Kotlin: Remove useTypeOld --- .../src/main/kotlin/KotlinExtractorExtension.kt | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 30bf30a2628..0d32cdfc243 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -287,10 +287,6 @@ open class KotlinUsesExtractor( data class TypeResult(val id: Label, val signature: String) data class TypeResults(val javaResult: TypeResult, val kotlinResult: TypeResult) - fun useTypeOld(t: IrType, canReturnPrimitiveTypes: Boolean = true): Label { - return useType(t, canReturnPrimitiveTypes).javaResult.id - } - fun useType(t: IrType, canReturnPrimitiveTypes: Boolean = true): TypeResults { when(t) { is IrSimpleType -> return useSimpleType(t, canReturnPrimitiveTypes) @@ -587,8 +583,8 @@ class X { } fun getFunctionLabel(parent: IrDeclarationParent, name: String, parameters: List, returnType: IrType) : String { - val paramTypeIds = parameters.joinToString() { "{${useTypeOld(erase(it.type)).toString()}}" } - val returnTypeId = useTypeOld(erase(returnType)) + val paramTypeIds = parameters.joinToString() { "{${useType(erase(it.type)).javaResult.id.toString()}}" } + val returnTypeId = useType(erase(returnType)).javaResult.id val parentId = useDeclarationParent(parent) val label = "@\"callable;{$parentId}.$name($paramTypeIds){$returnTypeId}\"" return label @@ -613,7 +609,7 @@ class X { } is IrTypeProjection -> { @Suppress("UNCHECKED_CAST") - return useTypeOld(arg.type, false) as Label + return useType(arg.type, false).javaResult.id as Label } else -> { logger.warn(Severity.ErrorSevere, "Unexpected type argument.") From 9a621479ccfed1d894371c9b1044a976e5e47aa5 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 3 Nov 2021 18:00:55 +0000 Subject: [PATCH 0661/1618] Kotlin: accept test changes --- .../test/kotlin/library-tests/types/types.expected | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index 891f6c744e3..c1071a23996 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -54,6 +54,20 @@ | file://:0:0:0:0 | ARRAY | Array | | file://:0:0:0:0 | ARRAY | Array | | file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | | file://:0:0:0:0 | AbstractChronology | Class | | file://:0:0:0:0 | AbstractCollection | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | AbstractCollection | Class, ParameterizedType | From 59307285e8d5cab35bc55e867383b5b0fe059e91 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 4 Nov 2021 17:35:56 +0000 Subject: [PATCH 0662/1618] Kotlin: Speed up the toString consistency query Using Top.getAQlClass() means we have to evaluate SummarizedCallableExternal's charpred, and hence summaryElement, which is slow. --- java/ql/consistency-queries/toString.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/consistency-queries/toString.ql b/java/ql/consistency-queries/toString.ql index 375d7e98f4e..f381217feb6 100644 --- a/java/ql/consistency-queries/toString.ql +++ b/java/ql/consistency-queries/toString.ql @@ -20,7 +20,7 @@ string topToString(Top t) { } string not1ToString() { - exists(Top t | count(topToString(t)) != 1 and result = "Top which doesn't have exactly 1 toString: " + concat(t.getAQlClass(), ", ")) + exists(Top t | count(topToString(t)) != 1 and result = "Top which doesn't have exactly 1 toString: " + t.getPrimaryQlClasses()) or exists(Location l | count(l.toString()) != 1 and result = "Location which doesn't have exactly 1 toString: " + concat(l.getAQlClass(), ", ")) or From 2d43e7b2d197905bcddc7eef886cc6c4b861a5e0 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 4 Nov 2021 17:46:43 +0000 Subject: [PATCH 0663/1618] Kotlin: Speed up getAPrimaryQlClass It now gives less useful info, but can be manually investigated if it fails. --- java/ql/consistency-queries/getAPrimaryQlClass.ql | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/java/ql/consistency-queries/getAPrimaryQlClass.ql b/java/ql/consistency-queries/getAPrimaryQlClass.ql index 7dd20b607cb..af953a81926 100644 --- a/java/ql/consistency-queries/getAPrimaryQlClass.ql +++ b/java/ql/consistency-queries/getAPrimaryQlClass.ql @@ -9,5 +9,4 @@ where t.getAPrimaryQlClass() = "???" // Kotlin bug: and not t.(Type).toString() = "string" select t, - concat(t.getAPrimaryQlClass(), ","), - concat(t.getAQlClass(), ",") + concat(t.getAPrimaryQlClass(), ",") From 41d4c219101962c4f1273599bb2383e332ce324e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 4 Nov 2021 11:45:48 +0000 Subject: [PATCH 0664/1618] Kotlin: Add a warning --- .../src/main/kotlin/KotlinExtractorExtension.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 0d32cdfc243..144aa6ad722 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -411,6 +411,10 @@ open class KotlinUsesExtractor( } fun useSimpleType(s: IrSimpleType, canReturnPrimitiveTypes: Boolean): TypeResults { + if (s.abbreviation != null) { + // TODO: Extract this information + logger.warn(Severity.ErrorSevere, "Type alias ignored for " + s.render()) + } // We use this when we don't actually have an IrClass for a class // we want to refer to fun makeClass(pkgName: String, className: String): Label { From 8330a404df3823650e4969305c4cc88250a4ce8c Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 4 Nov 2021 12:15:19 +0000 Subject: [PATCH 0665/1618] Kotlin: Add warning location to warnings This also tweaks how the "too many warnings" logic works --- .../src/main/kotlin/utils/Logger.kt | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt index 92dd25cb967..0327b4198cb 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt @@ -33,6 +33,20 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" } + private fun getWarningLocation(): String? { + val st = Exception().stackTrace + for(x in st) { + when(x.className) { + "com.github.codeql.Logger", + "com.github.codeql.FileLogger" -> {} + else -> { + return x.toString() + } + } + } + return null + } + fun flush() { tw.flush() System.out.flush() @@ -53,18 +67,18 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { fun trace(msg: String, exn: Exception) { trace(msg + " // " + exn) } - fun warn(severity: Severity, msg: String, locationString: String? = null, locationId: Label = tw.unknownLocation, stackIndex: Int = 2) { - val st = Exception().stackTrace + fun warn(severity: Severity, msg: String, locationString: String? = null, locationId: Label = tw.unknownLocation) { + val warningLoc = getWarningLocation() + val warningLocStr = if(warningLoc == null) "" else warningLoc val suffix = - if(st.size < stackIndex + 1) { + if(warningLoc == null) { " Missing caller information.\n" } else { - val caller = st[stackIndex].toString() - val count = logCounter.warningCounts.getOrDefault(caller, 0) + 1 - logCounter.warningCounts[caller] = count + val count = logCounter.warningCounts.getOrDefault(warningLoc, 0) + 1 + logCounter.warningCounts[warningLoc] = count when { logCounter.warningLimit <= 0 -> "" - count == logCounter.warningLimit -> " Limit reached for warnings from $caller.\n" + count == logCounter.warningLimit -> " Limit reached for warnings from $warningLoc.\n" count > logCounter.warningLimit -> return else -> "" } @@ -72,7 +86,7 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { val ts = timestamp() tw.writeDiagnostics(StarLabel(), severity.sev, "", msg, "$ts $msg\n$suffix", locationId) val locStr = if (locationString == null) "" else "At " + locationString + ": " - print("$ts Warning: $locStr$msg\n$suffix") + print("$ts Warning($warningLocStr): $locStr$msg\n$suffix") } fun warn(msg: String, exn: Exception) { warn(Severity.Warn, msg + " // " + exn) @@ -102,9 +116,9 @@ class FileLogger(logCounter: LogCounter, override val tw: FileTrapWriter): Logge return "[${SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date())} K]" } - fun warnElement(severity: Severity, msg: String, element: IrElement, stackIndex: Int = 3) { + fun warnElement(severity: Severity, msg: String, element: IrElement) { val locationString = tw.getLocationString(element) val locationId = tw.getLocation(element) - warn(severity, msg, locationString, locationId, stackIndex) + warn(severity, msg, locationString, locationId) } } From 87b433142c1e3e9f417dc182348328aab0278eae Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 4 Nov 2021 12:41:37 +0000 Subject: [PATCH 0666/1618] Kotlin: Add support for Kotlin type aliases --- .../main/kotlin/KotlinExtractorExtension.kt | 26 +++++++++++++++++++ java/ql/lib/config/semmlecode.dbscheme | 13 ++++++++-- java/ql/lib/semmle/code/Location.qll | 2 ++ java/ql/lib/semmle/code/java/KotlinType.qll | 7 +++++ 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 144aa6ad722..04001782e21 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -769,6 +769,18 @@ class X { return id } + private fun getTypeAliasLabel(ta: IrTypeAlias) : String { + val parentId = useDeclarationParent(ta.parent) + val label = "@\"type_alias;{$parentId};${ta.name.asString()}\"" + return label + } + + fun useTypeAlias(ta: IrTypeAlias): Label { + var label = getTypeAliasLabel(ta) + val id: Label = tw.getLabelFor(label) + return id + } + fun useVariable(v: IrVariable): Label { return tw.getVariableLabelFor(v) } @@ -793,6 +805,7 @@ open class KotlinFileExtractor( } is IrProperty -> extractProperty(declaration, parentId) is IrEnumEntry -> extractEnumEntry(declaration, parentId) + is IrTypeAlias -> extractTypeAlias(declaration) // TODO: Pass in and use parentId else -> logger.warnElement(Severity.ErrorSevere, "Unrecognised IrDeclaration: " + declaration.javaClass, declaration) } } @@ -1031,6 +1044,19 @@ open class KotlinFileExtractor( } } + fun extractTypeAlias(ta: IrTypeAlias) { + if (ta.typeParameters.isNotEmpty()) { + // TODO: Extract this information + logger.warn(Severity.ErrorSevere, "Type alias type parameters ignored for " + ta.render()) + } + val id = useTypeAlias(ta) + val locId = tw.getLocation(ta) + // TODO: We don't really want to generate any Java types here; we only want the KT type: + val type = useType(ta.expandedType) + tw.writeKt_type_alias(id, ta.name.asString(), type.kotlinResult.id) + tw.writeHasLocation(id, locId) + } + fun extractBody(b: IrBody, callable: Label) { when(b) { is IrBlockBody -> extractBlockBody(b, callable, callable, 0) diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index e974031a7e7..6077bd47743 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -324,6 +324,12 @@ kt_notnull_types( int classid: @classorinterface ref ) +kt_type_alias( + unique int id: @kt_type_alias, + string name: string ref, + int kttypeid: @kt_type ref +) + @kt_type = @kt_nullable_type | @kt_notnull_type isRecord( @@ -928,8 +934,10 @@ javadocText( @classorarray = @class | @array; @type = @primitive | @reftype; @callable = @method | @constructor; + +/** A program element that has a name. */ @element = @file | @package | @primitive | @class | @interface | @method | @constructor | @modifier | @param | @exception | @field | - @annotation | @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type; + @annotation | @boundedtype | @array | @localvar | @expr | @stmt | @import | @fielddecl | @kt_type | @kt_type_alias; @modifiable = @member_modifiable| @param | @localvar ; @@ -937,10 +945,11 @@ javadocText( @member = @method | @constructor | @field | @reftype ; +/** A program element that has a location. */ @locatable = @file | @class | @interface | @fielddecl | @field | @constructor | @method | @param | @exception | @boundedtype | @typebound | @array | @primitive | @import | @stmt | @expr | @whenbranch | @localvar | @javadoc | @javadocTag | @javadocText - | @xmllocatable | @ktcomment; + | @xmllocatable | @ktcomment | @kt_type_alias; @top = @element | @locatable | @folder; diff --git a/java/ql/lib/semmle/code/Location.qll b/java/ql/lib/semmle/code/Location.qll index 0096e861cdb..1a3c6a30fe8 100755 --- a/java/ql/lib/semmle/code/Location.qll +++ b/java/ql/lib/semmle/code/Location.qll @@ -43,6 +43,8 @@ predicate hasName(Element e, string name) { arrays(e, name, _, _, _, _, _) or modifiers(e, name) + or + kt_type_alias(e, name, _) } /** diff --git a/java/ql/lib/semmle/code/java/KotlinType.qll b/java/ql/lib/semmle/code/java/KotlinType.qll index 2d41ebfb4a9..3122e124d9c 100755 --- a/java/ql/lib/semmle/code/java/KotlinType.qll +++ b/java/ql/lib/semmle/code/java/KotlinType.qll @@ -25,3 +25,10 @@ class KotlinNotnullType extends KotlinType, @kt_notnull_type { override string getAPrimaryQlClass() { result = "KotlinNotnullType" } } +class KotlinTypeAlias extends Element, @kt_type_alias { + override string getAPrimaryQlClass() { result = "KotlinTypeAlias" } + + KotlinType getKotlinType() { + kt_type_alias(this, _, result) + } +} From cb1124b5ffbcdc0f6f0de66531794de4f2d00e4d Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 4 Nov 2021 12:50:05 +0000 Subject: [PATCH 0667/1618] Kotlin: Add a test for type aliases --- .../kotlin/library-tests/type_aliases/test.kt | 16 ++++++++++++++++ .../type_aliases/type_aliases.expected | 3 +++ .../library-tests/type_aliases/type_aliases.ql | 4 ++++ 3 files changed, 23 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/type_aliases/test.kt create mode 100644 java/ql/test/kotlin/library-tests/type_aliases/type_aliases.expected create mode 100644 java/ql/test/kotlin/library-tests/type_aliases/type_aliases.ql diff --git a/java/ql/test/kotlin/library-tests/type_aliases/test.kt b/java/ql/test/kotlin/library-tests/type_aliases/test.kt new file mode 100644 index 00000000000..8857914390a --- /dev/null +++ b/java/ql/test/kotlin/library-tests/type_aliases/test.kt @@ -0,0 +1,16 @@ + +class MyClass {} + +typealias AliasInt = Int +typealias AliasX = MyClass +typealias AliasY = MyClass + +fun someFun( + x1: Int, + x2: AliasInt, + x3: MyClass, + x4: AliasX, + x5: MyClass, + x6: AliasY) { +} + diff --git a/java/ql/test/kotlin/library-tests/type_aliases/type_aliases.expected b/java/ql/test/kotlin/library-tests/type_aliases/type_aliases.expected new file mode 100644 index 00000000000..e37597d22bc --- /dev/null +++ b/java/ql/test/kotlin/library-tests/type_aliases/type_aliases.expected @@ -0,0 +1,3 @@ +| test.kt:4:1:4:24 | AliasInt | file://:0:0:0:0 | Kotlin not-null Int | +| test.kt:5:1:5:31 | AliasX | file://:0:0:0:0 | Kotlin not-null MyClass | +| test.kt:6:1:6:36 | AliasY | file://:0:0:0:0 | Kotlin not-null MyClass | diff --git a/java/ql/test/kotlin/library-tests/type_aliases/type_aliases.ql b/java/ql/test/kotlin/library-tests/type_aliases/type_aliases.ql new file mode 100644 index 00000000000..79ec3869c0a --- /dev/null +++ b/java/ql/test/kotlin/library-tests/type_aliases/type_aliases.ql @@ -0,0 +1,4 @@ +import java + +from KotlinTypeAlias ta +select ta, ta.getKotlinType() From 35a15d7eb421cae9f1354f85dcb8143a8185914f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Vajk?= Date: Mon, 8 Nov 2021 16:47:07 +0100 Subject: [PATCH 0668/1618] Fix typo --- .../src/main/kotlin/KotlinExtractorCommandLineProcessor.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt index 88e7bb682e8..5bc837617df 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorCommandLineProcessor.kt @@ -35,7 +35,7 @@ class KotlinExtractorCommandLineProcessor : CommandLineProcessor { "checkTrapIdentical" -> when (value) { "true" -> configuration.put(KEY_CHECK_TRAP_IDENTICAL, true) - "fale" -> configuration.put(KEY_CHECK_TRAP_IDENTICAL, false) + "false" -> configuration.put(KEY_CHECK_TRAP_IDENTICAL, false) else -> error("kotlin extractor: Bad argument $value for checkTrapIdentical") } else -> error("kotlin extractor: Bad option: ${option.optionName}") From ceb1e57ddd665b383c4cb88096714c357acf16dd Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Sun, 7 Nov 2021 22:55:29 +0000 Subject: [PATCH 0669/1618] Kotlin: Add support for `object`s --- .../main/kotlin/KotlinExtractorExtension.kt | 47 +++++++++++++++++-- java/ql/lib/config/semmlecode.dbscheme | 5 ++ java/ql/lib/semmle/code/java/Type.qll | 12 +++++ .../library-tests/object/accesses.expected | 1 + .../kotlin/library-tests/object/accesses.ql | 8 ++++ .../library-tests/object/objects.expected | 1 + .../kotlin/library-tests/object/objects.kt | 9 ++++ .../kotlin/library-tests/object/objects.ql | 5 ++ 8 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/object/accesses.expected create mode 100644 java/ql/test/kotlin/library-tests/object/accesses.ql create mode 100644 java/ql/test/kotlin/library-tests/object/objects.expected create mode 100644 java/ql/test/kotlin/library-tests/object/objects.kt create mode 100644 java/ql/test/kotlin/library-tests/object/objects.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 04001782e21..8cb62acb08c 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -873,18 +873,43 @@ open class KotlinFileExtractor( } } + val locId = tw.getLocation(c) + tw.writeHasLocation(id, locId) + c.typeParameters.map { extractTypeParameter(it) } c.declarations.map { extractDeclaration(it, id) } extractObjectInitializerFunction(c, id) - - val locId = tw.getLocation(c) - tw.writeHasLocation(id, locId) + if(c.isObject) { + // For `object MyObject { ... }`, the .class has an + // automatically-generated `public static final MyObject INSTANCE` + // field that may be referenced from Java code, and is used in our + // IrGetObjectValue support. We therefore need to fabricate it + // here. + val instance = useObjectClassInstance(c) + val type = useSimpleTypeClass(c, emptyList(), false) + tw.writeFields(instance.id, instance.name, type.javaResult.id, type.kotlinResult.id, id, instance.id) + tw.writeHasLocation(instance.id, locId) + @Suppress("UNCHECKED_CAST") + tw.writeClass_object(id as Label, instance.id) + } extractClassCommon(c, id) return id } + data class ObjectClassInstance(val id: Label, val name: String) + fun useObjectClassInstance(c: IrClass): ObjectClassInstance { + if(!c.isObject) { + logger.warn(Severity.ErrorSevere, "Using instance for non-object class") + } + val classId = useClassSource(c) + val instanceName = "INSTANCE" + val instanceLabel = "@\"field;{$classId};$instanceName\"" + val instanceId: Label = tw.getLabelFor(instanceLabel) + return ObjectClassInstance(instanceId, instanceName) + } + private fun isQualifiedThis(vp: IrValueParameter): Boolean { return isQualifiedThisFunction(vp) || isQualifiedThisClass(vp) @@ -1623,6 +1648,22 @@ open class KotlinFileExtractor( val exprParent = parent.expr(e, callable) extractTypeOperatorCall(e, callable, exprParent.parent, exprParent.idx) } + is IrGetObjectValue -> { + // For `object MyObject { ... }`, the .class has an + // automatically-generated `public static final MyObject INSTANCE` + // field that we are accessing here. + val exprParent = parent.expr(e, callable) + val c: IrClass = e.symbol.owner + val instance = useObjectClassInstance(c) + + val id = tw.getFreshIdLabel() + val type = useType(e.type) + val locId = tw.getLocation(e) + tw.writeExprs_varaccess(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) + tw.writeHasLocation(id, locId) + + tw.writeVariableBinding(id, instance.id) + } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 6077bd47743..5d80cd0ab85 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -314,6 +314,11 @@ classes( int sourceid: @class ref ); +class_object( + unique int id: @class ref, + unique int instance: @field ref +); + kt_nullable_types( unique int id: @kt_nullable_type, int classid: @classorinterface ref diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index 3d406244830..f03a6620b8f 100755 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -712,6 +712,18 @@ class Class extends ClassOrInterface, @class { override string getAPrimaryQlClass() { result = "Class" } } +/** A Kotlin `object`. */ +class ClassObject extends Class { + ClassObject() { + class_object(this, _) + } + + /** Gets the instance variable that implements this `object`. */ + Field getInstance() { + class_object(this, result) + } +} + /** * A record declaration. */ diff --git a/java/ql/test/kotlin/library-tests/object/accesses.expected b/java/ql/test/kotlin/library-tests/object/accesses.expected new file mode 100644 index 00000000000..146576a7969 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/object/accesses.expected @@ -0,0 +1 @@ +| objects.kt:2:1:4:1 | MyObject | objects.kt:7:17:7:24 | INSTANCE | diff --git a/java/ql/test/kotlin/library-tests/object/accesses.ql b/java/ql/test/kotlin/library-tests/object/accesses.ql new file mode 100644 index 00000000000..bc40c27b666 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/object/accesses.ql @@ -0,0 +1,8 @@ +import java + +from VarAccess va, ClassObject co +where va.getVariable() = co.getInstance() +select co, va + +// select count(VarAccess va) + diff --git a/java/ql/test/kotlin/library-tests/object/objects.expected b/java/ql/test/kotlin/library-tests/object/objects.expected new file mode 100644 index 00000000000..aaf899dbd44 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/object/objects.expected @@ -0,0 +1 @@ +| objects.kt:2:1:4:1 | MyObject | objects.kt:2:1:4:1 | INSTANCE | diff --git a/java/ql/test/kotlin/library-tests/object/objects.kt b/java/ql/test/kotlin/library-tests/object/objects.kt new file mode 100644 index 00000000000..d666838b123 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/object/objects.kt @@ -0,0 +1,9 @@ + +object MyObject { + fun MyObjectFunction() {} +} + +fun useMyObject() { + val myObj = MyObject +} + diff --git a/java/ql/test/kotlin/library-tests/object/objects.ql b/java/ql/test/kotlin/library-tests/object/objects.ql new file mode 100644 index 00000000000..0643fea2305 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/object/objects.ql @@ -0,0 +1,5 @@ +import java + +from ClassObject co +where co.fromSource() +select co, co.getInstance() From e5cd32bdfebeb91b815ea18dcb91e4b76a988a9e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 8 Nov 2021 00:00:37 +0000 Subject: [PATCH 0670/1618] Kotlin: Get the tests passing again --- .../main/kotlin/KotlinExtractorExtension.kt | 19 ++++++++++++------- .../kotlin/library-tests/types/types.expected | 7 +++++++ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 8cb62acb08c..9634a817f0f 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1654,15 +1654,20 @@ open class KotlinFileExtractor( // field that we are accessing here. val exprParent = parent.expr(e, callable) val c: IrClass = e.symbol.owner - val instance = useObjectClassInstance(c) + // TODO: If this is enabled for Unit then it currently makes tests fail + if(c.name.asString() == "Unit") { + logger.warnElement(Severity.ErrorSevere, "Unit object not handled yet", e) + } else { + val instance = useObjectClassInstance(c) - val id = tw.getFreshIdLabel() - val type = useType(e.type) - val locId = tw.getLocation(e) - tw.writeExprs_varaccess(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) - tw.writeHasLocation(id, locId) + val id = tw.getFreshIdLabel() + val type = useType(e.type) + val locId = tw.getLocation(e) + tw.writeExprs_varaccess(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) + tw.writeHasLocation(id, locId) - tw.writeVariableBinding(id, instance.id) + tw.writeVariableBinding(id, instance.id) + } } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index c1071a23996..e492639813b 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -421,6 +421,7 @@ | file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | | file://:0:0:0:0 | Boolean | Class | | file://:0:0:0:0 | Boolean | Class | +| file://:0:0:0:0 | BooleanCompanionObject | Class | | file://:0:0:0:0 | BooleanSignature | Class | | file://:0:0:0:0 | BottomSignature | Class | | file://:0:0:0:0 | BoundMethodHandle | Class | @@ -577,6 +578,7 @@ | file://:0:0:0:0 | Char | Class | | file://:0:0:0:0 | CharArray | Class | | file://:0:0:0:0 | CharBuffer | Class | +| file://:0:0:0:0 | CharCompanionObject | Class | | file://:0:0:0:0 | CharIterator | Class | | file://:0:0:0:0 | CharProgression | Class | | file://:0:0:0:0 | CharRange | Class | @@ -1118,6 +1120,7 @@ | file://:0:0:0:0 | DoubleArray | Class | | file://:0:0:0:0 | DoubleBinaryOperator | Interface | | file://:0:0:0:0 | DoubleBuffer | Class | +| file://:0:0:0:0 | DoubleCompanionObject | Class | | file://:0:0:0:0 | DoubleConsumer | Interface | | file://:0:0:0:0 | DoubleFunction | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | DoubleFunction | Interface, ParameterizedType | @@ -1291,6 +1294,7 @@ | file://:0:0:0:0 | Enum | Class, ParameterizedType | | file://:0:0:0:0 | Enum | Class, ParameterizedType | | file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | EnumCompanionObject | Class | | file://:0:0:0:0 | EnumSet | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | EnumSet | Class, ParameterizedType | | file://:0:0:0:0 | EnumSet | Class, ParameterizedType | @@ -1612,6 +1616,7 @@ | file://:0:0:0:0 | IntArray | Class | | file://:0:0:0:0 | IntBinaryOperator | Interface | | file://:0:0:0:0 | IntBuffer | Class | +| file://:0:0:0:0 | IntCompanionObject | Class | | file://:0:0:0:0 | IntConsumer | Interface | | file://:0:0:0:0 | IntFunction | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | @@ -1916,6 +1921,7 @@ | file://:0:0:0:0 | LongArray | Class | | file://:0:0:0:0 | LongBinaryOperator | Interface | | file://:0:0:0:0 | LongBuffer | Class | +| file://:0:0:0:0 | LongCompanionObject | Class | | file://:0:0:0:0 | LongConsumer | Interface | | file://:0:0:0:0 | LongFunction | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | LongFunction | Interface, ParameterizedType | @@ -2541,6 +2547,7 @@ | file://:0:0:0:0 | String | Class | | file://:0:0:0:0 | StringBuffer | Class | | file://:0:0:0:0 | StringBuilder | Class | +| file://:0:0:0:0 | StringCompanionObject | Class | | file://:0:0:0:0 | Subject | Class | | file://:0:0:0:0 | Subset | Class | | file://:0:0:0:0 | SuppliedThreadLocal | Class, GenericType, ParameterizedType | From 112fac628659fd24cbc405c29039d9fbe61da176 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 8 Nov 2021 12:09:17 +0000 Subject: [PATCH 0671/1618] Kotlin: We only support non-companion objects for now --- .../src/main/kotlin/KotlinExtractorExtension.kt | 4 ++-- java/ql/test/kotlin/library-tests/types/types.expected | 7 ------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 9634a817f0f..0355ae6831c 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -879,7 +879,7 @@ open class KotlinFileExtractor( c.typeParameters.map { extractTypeParameter(it) } c.declarations.map { extractDeclaration(it, id) } extractObjectInitializerFunction(c, id) - if(c.isObject) { + if(c.isNonCompanionObject) { // For `object MyObject { ... }`, the .class has an // automatically-generated `public static final MyObject INSTANCE` // field that may be referenced from Java code, and is used in our @@ -900,7 +900,7 @@ open class KotlinFileExtractor( data class ObjectClassInstance(val id: Label, val name: String) fun useObjectClassInstance(c: IrClass): ObjectClassInstance { - if(!c.isObject) { + if(!c.isNonCompanionObject) { logger.warn(Severity.ErrorSevere, "Using instance for non-object class") } val classId = useClassSource(c) diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index e492639813b..c1071a23996 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -421,7 +421,6 @@ | file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | | file://:0:0:0:0 | Boolean | Class | | file://:0:0:0:0 | Boolean | Class | -| file://:0:0:0:0 | BooleanCompanionObject | Class | | file://:0:0:0:0 | BooleanSignature | Class | | file://:0:0:0:0 | BottomSignature | Class | | file://:0:0:0:0 | BoundMethodHandle | Class | @@ -578,7 +577,6 @@ | file://:0:0:0:0 | Char | Class | | file://:0:0:0:0 | CharArray | Class | | file://:0:0:0:0 | CharBuffer | Class | -| file://:0:0:0:0 | CharCompanionObject | Class | | file://:0:0:0:0 | CharIterator | Class | | file://:0:0:0:0 | CharProgression | Class | | file://:0:0:0:0 | CharRange | Class | @@ -1120,7 +1118,6 @@ | file://:0:0:0:0 | DoubleArray | Class | | file://:0:0:0:0 | DoubleBinaryOperator | Interface | | file://:0:0:0:0 | DoubleBuffer | Class | -| file://:0:0:0:0 | DoubleCompanionObject | Class | | file://:0:0:0:0 | DoubleConsumer | Interface | | file://:0:0:0:0 | DoubleFunction | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | DoubleFunction | Interface, ParameterizedType | @@ -1294,7 +1291,6 @@ | file://:0:0:0:0 | Enum | Class, ParameterizedType | | file://:0:0:0:0 | Enum | Class, ParameterizedType | | file://:0:0:0:0 | Enum | Class, ParameterizedType | -| file://:0:0:0:0 | EnumCompanionObject | Class | | file://:0:0:0:0 | EnumSet | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | EnumSet | Class, ParameterizedType | | file://:0:0:0:0 | EnumSet | Class, ParameterizedType | @@ -1616,7 +1612,6 @@ | file://:0:0:0:0 | IntArray | Class | | file://:0:0:0:0 | IntBinaryOperator | Interface | | file://:0:0:0:0 | IntBuffer | Class | -| file://:0:0:0:0 | IntCompanionObject | Class | | file://:0:0:0:0 | IntConsumer | Interface | | file://:0:0:0:0 | IntFunction | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | @@ -1921,7 +1916,6 @@ | file://:0:0:0:0 | LongArray | Class | | file://:0:0:0:0 | LongBinaryOperator | Interface | | file://:0:0:0:0 | LongBuffer | Class | -| file://:0:0:0:0 | LongCompanionObject | Class | | file://:0:0:0:0 | LongConsumer | Interface | | file://:0:0:0:0 | LongFunction | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | LongFunction | Interface, ParameterizedType | @@ -2547,7 +2541,6 @@ | file://:0:0:0:0 | String | Class | | file://:0:0:0:0 | StringBuffer | Class | | file://:0:0:0:0 | StringBuilder | Class | -| file://:0:0:0:0 | StringCompanionObject | Class | | file://:0:0:0:0 | Subject | Class | | file://:0:0:0:0 | Subset | Class | | file://:0:0:0:0 | SuppliedThreadLocal | Class, GenericType, ParameterizedType | From b460c92c61bc42fb96c9e21102bdb5ff498d18f4 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 8 Nov 2021 12:23:21 +0000 Subject: [PATCH 0672/1618] Kotlin: Add modifiers to object INSTANCEs --- .../src/main/kotlin/KotlinExtractorExtension.kt | 11 +++++++++++ .../test/kotlin/library-tests/object/objects.expected | 2 +- java/ql/test/kotlin/library-tests/object/objects.ql | 5 +++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 0355ae6831c..41f8532233c 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -889,6 +889,9 @@ open class KotlinFileExtractor( val type = useSimpleTypeClass(c, emptyList(), false) tw.writeFields(instance.id, instance.name, type.javaResult.id, type.kotlinResult.id, id, instance.id) tw.writeHasLocation(instance.id, locId) + tw.writeHasModifier(instance.id, extractModifier("public")) + tw.writeHasModifier(instance.id, extractModifier("static")) + tw.writeHasModifier(instance.id, extractModifier("final")) @Suppress("UNCHECKED_CAST") tw.writeClass_object(id as Label, instance.id) } @@ -1675,6 +1678,14 @@ open class KotlinFileExtractor( } } + fun extractModifier(m: String): Label { + val modifierLabel = "@\"modifier;$m\"" + val id: Label = tw.getLabelFor(modifierLabel, { + tw.writeModifiers(it, m) + }) + return id + } + fun extractTypeAccess(t: IrType, parent: Label, idx: Int, elementForLocation: IrElement) { // TODO: elementForLocation allows us to give some sort of // location, but a proper location for the type access will diff --git a/java/ql/test/kotlin/library-tests/object/objects.expected b/java/ql/test/kotlin/library-tests/object/objects.expected index aaf899dbd44..1d3ddd817c0 100644 --- a/java/ql/test/kotlin/library-tests/object/objects.expected +++ b/java/ql/test/kotlin/library-tests/object/objects.expected @@ -1 +1 @@ -| objects.kt:2:1:4:1 | MyObject | objects.kt:2:1:4:1 | INSTANCE | +| objects.kt:2:1:4:1 | MyObject | objects.kt:2:1:4:1 | INSTANCE | final,public,static | diff --git a/java/ql/test/kotlin/library-tests/object/objects.ql b/java/ql/test/kotlin/library-tests/object/objects.ql index 0643fea2305..9b963787a3a 100644 --- a/java/ql/test/kotlin/library-tests/object/objects.ql +++ b/java/ql/test/kotlin/library-tests/object/objects.ql @@ -1,5 +1,6 @@ import java -from ClassObject co +from ClassObject co, Field f where co.fromSource() -select co, co.getInstance() + and f = co.getInstance() +select co, f, concat(f.getAModifier().toString(), ",") From f726e6acf8fd77030ba58a458c51152c836be71a Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 8 Nov 2021 17:47:42 +0000 Subject: [PATCH 0673/1618] Kotlin: Fix handling of objects in external dependencies --- .../main/kotlin/KotlinExtractorExtension.kt | 21 +++++++------------ .../controlflow/basic/bbStmts.expected | 8 ++++--- .../controlflow/basic/getASuccessor.expected | 6 ++++-- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 41f8532233c..8dae1431166 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -906,7 +906,7 @@ open class KotlinFileExtractor( if(!c.isNonCompanionObject) { logger.warn(Severity.ErrorSevere, "Using instance for non-object class") } - val classId = useClassSource(c) + val classId = useClassInstance(c, listOf()).classLabel val instanceName = "INSTANCE" val instanceLabel = "@\"field;{$classId};$instanceName\"" val instanceId: Label = tw.getLabelFor(instanceLabel) @@ -1657,20 +1657,15 @@ open class KotlinFileExtractor( // field that we are accessing here. val exprParent = parent.expr(e, callable) val c: IrClass = e.symbol.owner - // TODO: If this is enabled for Unit then it currently makes tests fail - if(c.name.asString() == "Unit") { - logger.warnElement(Severity.ErrorSevere, "Unit object not handled yet", e) - } else { - val instance = useObjectClassInstance(c) + val instance = useObjectClassInstance(c) - val id = tw.getFreshIdLabel() - val type = useType(e.type) - val locId = tw.getLocation(e) - tw.writeExprs_varaccess(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) - tw.writeHasLocation(id, locId) + val id = tw.getFreshIdLabel() + val type = useType(e.type) + val locId = tw.getLocation(e) + tw.writeExprs_varaccess(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) + tw.writeHasLocation(id, locId) - tw.writeVariableBinding(id, instance.id) - } + tw.writeVariableBinding(id, instance.id) } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected index e63b2e4bbc2..87e4ce48afe 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/bbStmts.expected @@ -60,7 +60,8 @@ | Test.kt:18:3:18:3 | ; | 20 | Test.kt:30:7:30:12 | ... == ... | | Test.kt:21:3:24:9 | ... -> ... | 0 | Test.kt:21:3:24:9 | ... -> ... | | Test.kt:21:3:24:9 | ... -> ... | 1 | Test.kt:21:3:24:9 | true | -| Test.kt:21:3:24:9 | ... -> ... | 2 | Test.kt:24:4:24:9 | return ... | +| Test.kt:21:3:24:9 | ... -> ... | 2 | Test.kt:24:4:24:9 | INSTANCE | +| Test.kt:21:3:24:9 | ... -> ... | 3 | Test.kt:24:4:24:9 | return ... | | Test.kt:30:15:33:3 | { ... } | 0 | Test.kt:30:15:33:3 | { ... } | | Test.kt:30:15:33:3 | { ... } | 1 | Test.kt:31:4:31:4 | ; | | Test.kt:30:15:33:3 | { ... } | 2 | Test.kt:31:8:31:9 | 60 | @@ -101,5 +102,6 @@ | Test.kt:43:3:43:3 | ; | 6 | Test.kt:77:3:77:3 | ; | | Test.kt:43:3:43:3 | ; | 7 | Test.kt:77:7:77:8 | 40 | | Test.kt:43:3:43:3 | ; | 8 | Test.kt:77:3:77:3 | ...=... | -| Test.kt:43:3:43:3 | ; | 9 | Test.kt:78:3:78:8 | return ... | -| Test.kt:43:3:43:3 | ; | 10 | Test.kt:4:2:79:2 | test | +| Test.kt:43:3:43:3 | ; | 9 | Test.kt:78:3:78:8 | INSTANCE | +| Test.kt:43:3:43:3 | ; | 10 | Test.kt:78:3:78:8 | return ... | +| Test.kt:43:3:43:3 | ; | 11 | Test.kt:4:2:79:2 | test | diff --git a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected index 1700ea21bb1..7df5692990d 100644 --- a/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected +++ b/java/ql/test/kotlin/library-tests/controlflow/basic/getASuccessor.expected @@ -54,7 +54,7 @@ | Test.kt:21:3:24:9 | ... -> ... | WhenBranch | Test.kt:21:3:24:9 | true | BooleanLiteral | | Test.kt:21:3:24:9 | ... -> ... | WhenBranch | Test.kt:21:6:21:6 | x | VarAccess | | Test.kt:21:3:24:9 | ; | ExprStmt | Test.kt:21:3:24:9 | when ... | WhenExpr | -| Test.kt:21:3:24:9 | true | BooleanLiteral | Test.kt:24:4:24:9 | return ... | ReturnStmt | +| Test.kt:21:3:24:9 | true | BooleanLiteral | Test.kt:24:4:24:9 | INSTANCE | VarAccess | | Test.kt:21:3:24:9 | when ... | WhenExpr | Test.kt:21:3:24:9 | ... -> ... | WhenBranch | | Test.kt:21:6:21:6 | x | VarAccess | Test.kt:21:10:21:10 | 0 | IntegerLiteral | | Test.kt:21:6:21:10 | ... < ... | LTExpr | Test.kt:22:4:22:4 | ; | ExprStmt | @@ -62,6 +62,7 @@ | Test.kt:22:4:22:4 | ...=... | AssignExpr | Test.kt:27:3:27:3 | ; | ExprStmt | | Test.kt:22:4:22:4 | ; | ExprStmt | Test.kt:22:8:22:9 | 40 | LongLiteral | | Test.kt:22:8:22:9 | 40 | LongLiteral | Test.kt:22:4:22:4 | ...=... | AssignExpr | +| Test.kt:24:4:24:9 | INSTANCE | VarAccess | Test.kt:24:4:24:9 | return ... | ReturnStmt | | Test.kt:24:4:24:9 | return ... | ReturnStmt | file://:0:0:0:0 | | | | Test.kt:27:3:27:3 | ...=... | AssignExpr | Test.kt:30:3:33:3 | ; | ExprStmt | | Test.kt:27:3:27:3 | ; | ExprStmt | Test.kt:27:7:27:8 | 10 | IntegerLiteral | @@ -110,7 +111,8 @@ | Test.kt:73:3:73:3 | ...=... | AssignExpr | Test.kt:77:3:77:3 | ; | ExprStmt | | Test.kt:73:3:73:3 | ; | ExprStmt | Test.kt:73:7:73:8 | 50 | IntegerLiteral | | Test.kt:73:7:73:8 | 50 | IntegerLiteral | Test.kt:73:3:73:3 | ...=... | AssignExpr | -| Test.kt:77:3:77:3 | ...=... | AssignExpr | Test.kt:78:3:78:8 | return ... | ReturnStmt | +| Test.kt:77:3:77:3 | ...=... | AssignExpr | Test.kt:78:3:78:8 | INSTANCE | VarAccess | | Test.kt:77:3:77:3 | ; | ExprStmt | Test.kt:77:7:77:8 | 40 | IntegerLiteral | | Test.kt:77:7:77:8 | 40 | IntegerLiteral | Test.kt:77:3:77:3 | ...=... | AssignExpr | +| Test.kt:78:3:78:8 | INSTANCE | VarAccess | Test.kt:78:3:78:8 | return ... | ReturnStmt | | Test.kt:78:3:78:8 | return ... | ReturnStmt | Test.kt:4:2:79:2 | test | Method | From bdaa3ce2b3612f2e0a545edd93978403c8610388 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 8 Nov 2021 20:02:07 +0000 Subject: [PATCH 0674/1618] Kotlin: Add support for companion objects --- .../main/kotlin/KotlinExtractorExtension.kt | 66 ++++++++++++++++--- java/ql/lib/config/semmlecode.dbscheme | 6 ++ java/ql/lib/semmle/code/java/Type.qll | 17 +++++ .../companion_objects/accesses.expected | 1 + .../companion_objects/accesses.ql | 5 ++ .../companion_objects.expected | 1 + .../companion_objects/companion_objects.kt | 12 ++++ .../companion_objects/companion_objects.ql | 7 ++ .../kotlin/library-tests/object/accesses.ql | 3 - 9 files changed, 105 insertions(+), 13 deletions(-) create mode 100644 java/ql/test/kotlin/library-tests/companion_objects/accesses.expected create mode 100644 java/ql/test/kotlin/library-tests/companion_objects/accesses.ql create mode 100644 java/ql/test/kotlin/library-tests/companion_objects/companion_objects.expected create mode 100644 java/ql/test/kotlin/library-tests/companion_objects/companion_objects.kt create mode 100644 java/ql/test/kotlin/library-tests/companion_objects/companion_objects.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 8dae1431166..f1559444c9d 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -622,6 +622,9 @@ class X { } } + /* + This returns the `X` in c's label `@"class;X"`. + */ private fun getUnquotedClassLabel(c: IrClass, typeArgs: List): String { val pkg = c.packageFqName?.asString() ?: "" val cls = c.name.asString() @@ -876,6 +879,28 @@ open class KotlinFileExtractor( val locId = tw.getLocation(c) tw.writeHasLocation(id, locId) + val parent = c.parent + if (parent is IrClass) { + val parentId = useClassInstance(parent, listOf()).classLabel + tw.writeEnclInReftype(id, parentId) + if(c.isCompanion) { + // If we are a companion then our parent has a + // public static final ParentClass$CompanionObjectClass CompanionObJectName; + // that we need to fabricate here + val instance = useCompanionObjectClassInstance(c) + if(instance != null) { + val type = useSimpleTypeClass(c, emptyList(), false) + tw.writeFields(instance.id, instance.name, type.javaResult.id, type.kotlinResult.id, id, instance.id) + tw.writeHasLocation(instance.id, locId) + tw.writeHasModifier(instance.id, extractModifier("public")) + tw.writeHasModifier(instance.id, extractModifier("static")) + tw.writeHasModifier(instance.id, extractModifier("final")) + @Suppress("UNCHECKED_CAST") + tw.writeClass_companion_object(parentId as Label, instance.id, id as Label) + } + } + } + c.typeParameters.map { extractTypeParameter(it) } c.declarations.map { extractDeclaration(it, id) } extractObjectInitializerFunction(c, id) @@ -901,8 +926,27 @@ open class KotlinFileExtractor( return id } - data class ObjectClassInstance(val id: Label, val name: String) - fun useObjectClassInstance(c: IrClass): ObjectClassInstance { + data class FieldResult(val id: Label, val name: String) + + fun useCompanionObjectClassInstance(c: IrClass): FieldResult? { + val parent = c.parent + if(!c.isCompanion) { + logger.warn(Severity.ErrorSevere, "Using companion instance for non-companion class") + return null + } + else if (parent !is IrClass) { + logger.warn(Severity.ErrorSevere, "Using companion instance for non-companion class") + return null + } else { + val parentId = useClassInstance(parent, listOf()).classLabel + val instanceName = c.name.asString() + val instanceLabel = "@\"field;{$parentId};$instanceName\"" + val instanceId: Label = tw.getLabelFor(instanceLabel) + return FieldResult(instanceId, instanceName) + } + } + + fun useObjectClassInstance(c: IrClass): FieldResult { if(!c.isNonCompanionObject) { logger.warn(Severity.ErrorSevere, "Using instance for non-object class") } @@ -910,7 +954,7 @@ open class KotlinFileExtractor( val instanceName = "INSTANCE" val instanceLabel = "@\"field;{$classId};$instanceName\"" val instanceId: Label = tw.getLabelFor(instanceLabel) - return ObjectClassInstance(instanceId, instanceName) + return FieldResult(instanceId, instanceName) } private fun isQualifiedThis(vp: IrValueParameter): Boolean { @@ -1657,15 +1701,17 @@ open class KotlinFileExtractor( // field that we are accessing here. val exprParent = parent.expr(e, callable) val c: IrClass = e.symbol.owner - val instance = useObjectClassInstance(c) + val instance = if (c.isCompanion) useCompanionObjectClassInstance(c) else useObjectClassInstance(c) - val id = tw.getFreshIdLabel() - val type = useType(e.type) - val locId = tw.getLocation(e) - tw.writeExprs_varaccess(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) - tw.writeHasLocation(id, locId) + if(instance != null) { + val id = tw.getFreshIdLabel() + val type = useType(e.type) + val locId = tw.getLocation(e) + tw.writeExprs_varaccess(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) + tw.writeHasLocation(id, locId) - tw.writeVariableBinding(id, instance.id) + tw.writeVariableBinding(id, instance.id) + } } else -> { logger.warnElement(Severity.ErrorSevere, "Unrecognised IrExpression: " + e.javaClass, e) diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 5d80cd0ab85..cd5ffc34a06 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -319,6 +319,12 @@ class_object( unique int instance: @field ref ); +class_companion_object( + unique int id: @class ref, + unique int instance: @field ref, + unique int companion_object: @class ref +); + kt_nullable_types( unique int id: @kt_nullable_type, int classid: @classorinterface ref diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index f03a6620b8f..d96716b3638 100755 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -709,6 +709,11 @@ class Class extends ClassOrInterface, @class { ) } + /** Get the companion object of this class, if any. */ + ClassCompanionObject getCompanionObject() { + class_companion_object(this, _, result) + } + override string getAPrimaryQlClass() { result = "Class" } } @@ -724,6 +729,18 @@ class ClassObject extends Class { } } +/** A Kotlin `companion object`. */ +class ClassCompanionObject extends Class { + ClassCompanionObject() { + class_companion_object(_, _, this) + } + + /** Gets the instance variable that implements this `companion object`. */ + Field getInstance() { + class_companion_object(_, result, this) + } +} + /** * A record declaration. */ diff --git a/java/ql/test/kotlin/library-tests/companion_objects/accesses.expected b/java/ql/test/kotlin/library-tests/companion_objects/accesses.expected new file mode 100644 index 00000000000..39fed87bf91 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/companion_objects/accesses.expected @@ -0,0 +1 @@ +| companion_objects.kt:3:5:5:5 | MyClassCompanion | companion_objects.kt:9:5:9:11 | MyClassCompanion | diff --git a/java/ql/test/kotlin/library-tests/companion_objects/accesses.ql b/java/ql/test/kotlin/library-tests/companion_objects/accesses.ql new file mode 100644 index 00000000000..5e8f31bc413 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/companion_objects/accesses.ql @@ -0,0 +1,5 @@ +import java + +from VarAccess va, ClassCompanionObject cco +where va.getVariable() = cco.getInstance() +select cco, va diff --git a/java/ql/test/kotlin/library-tests/companion_objects/companion_objects.expected b/java/ql/test/kotlin/library-tests/companion_objects/companion_objects.expected new file mode 100644 index 00000000000..03ec315ae80 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/companion_objects/companion_objects.expected @@ -0,0 +1 @@ +| companion_objects.kt:1:1:6:1 | MyClass | companion_objects.kt:3:5:5:5 | MyClassCompanion | companion_objects.kt:3:5:5:5 | MyClassCompanion | final,public,static | diff --git a/java/ql/test/kotlin/library-tests/companion_objects/companion_objects.kt b/java/ql/test/kotlin/library-tests/companion_objects/companion_objects.kt new file mode 100644 index 00000000000..ede55fa4333 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/companion_objects/companion_objects.kt @@ -0,0 +1,12 @@ +class MyClass { + fun funInClass() {} + companion object MyClassCompanion { + fun funInCompanion() {} + } +} + +fun user() { + MyClass.funInCompanion() + MyClass().funInClass() +} + diff --git a/java/ql/test/kotlin/library-tests/companion_objects/companion_objects.ql b/java/ql/test/kotlin/library-tests/companion_objects/companion_objects.ql new file mode 100644 index 00000000000..01860cc0a96 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/companion_objects/companion_objects.ql @@ -0,0 +1,7 @@ +import java + +from Class c, ClassCompanionObject cco, Field f +where c.fromSource() + and cco = c.getCompanionObject() + and f = cco.getInstance() +select c, f, cco, concat(f.getAModifier().toString(), ",") diff --git a/java/ql/test/kotlin/library-tests/object/accesses.ql b/java/ql/test/kotlin/library-tests/object/accesses.ql index bc40c27b666..38de5d06eb3 100644 --- a/java/ql/test/kotlin/library-tests/object/accesses.ql +++ b/java/ql/test/kotlin/library-tests/object/accesses.ql @@ -3,6 +3,3 @@ import java from VarAccess va, ClassObject co where va.getVariable() = co.getInstance() select co, va - -// select count(VarAccess va) - From 497263e92d8fc1d3aaaf06eccc5f31f085864f79 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Mon, 8 Nov 2021 20:09:42 +0000 Subject: [PATCH 0675/1618] Kotlin: Accept test changes --- .../kotlin/library-tests/types/types.expected | 85 +++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index c1071a23996..6f1b1a62fb6 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -68,6 +68,12 @@ | file://:0:0:0:0 | ARRAY | Array | | file://:0:0:0:0 | ARRAY | Array | | file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | ARRAY | Array | | file://:0:0:0:0 | AbstractChronology | Class | | file://:0:0:0:0 | AbstractCollection | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | AbstractCollection | Class, ParameterizedType | @@ -306,6 +312,10 @@ | file://:0:0:0:0 | Array | Class, ParameterizedType | | file://:0:0:0:0 | Array | Class, ParameterizedType | | file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | Array | Class, ParameterizedType | +| file://:0:0:0:0 | ArrayAccess | Class | +| file://:0:0:0:0 | ArrayAccessor | Class | | file://:0:0:0:0 | ArrayIndexOutOfBoundsException | Class | | file://:0:0:0:0 | ArrayList | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | ArrayList | Class, ParameterizedType | @@ -421,6 +431,9 @@ | file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | | file://:0:0:0:0 | Boolean | Class | | file://:0:0:0:0 | Boolean | Class | +| file://:0:0:0:0 | BooleanArray | Class | +| file://:0:0:0:0 | BooleanCompanionObject | Class | +| file://:0:0:0:0 | BooleanIterator | Class | | file://:0:0:0:0 | BooleanSignature | Class | | file://:0:0:0:0 | BottomSignature | Class | | file://:0:0:0:0 | BoundMethodHandle | Class | @@ -577,7 +590,9 @@ | file://:0:0:0:0 | Char | Class | | file://:0:0:0:0 | CharArray | Class | | file://:0:0:0:0 | CharBuffer | Class | +| file://:0:0:0:0 | CharCompanionObject | Class | | file://:0:0:0:0 | CharIterator | Class | +| file://:0:0:0:0 | CharLiteralPrinterParser | Class | | file://:0:0:0:0 | CharProgression | Class | | file://:0:0:0:0 | CharRange | Class | | file://:0:0:0:0 | CharSequence | Interface | @@ -598,6 +613,7 @@ | file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | | file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | | file://:0:0:0:0 | ChronoPeriod | Interface | +| file://:0:0:0:0 | ChronoPrinterParser | Class | | file://:0:0:0:0 | ChronoUnit | Class | | file://:0:0:0:0 | ChronoZonedDateTime | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | @@ -737,6 +753,10 @@ | file://:0:0:0:0 | Class | Class, ParameterizedType | | file://:0:0:0:0 | Class | Class, ParameterizedType | | file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | | file://:0:0:0:0 | ClassDataSlot | Class | | file://:0:0:0:0 | ClassLoader | Class | | file://:0:0:0:0 | ClassNotFoundException | Class | @@ -755,6 +775,7 @@ | file://:0:0:0:0 | ClassValue | Class, ParameterizedType | | file://:0:0:0:0 | ClassValue | Class, ParameterizedType | | file://:0:0:0:0 | ClassValue | Class, ParameterizedType | +| file://:0:0:0:0 | ClassValue | Class, ParameterizedType | | file://:0:0:0:0 | ClassValueMap | Class | | file://:0:0:0:0 | ClassVisitor | Class | | file://:0:0:0:0 | ClassWriter | Class | @@ -1000,6 +1021,7 @@ | file://:0:0:0:0 | ConditionObject | Class | | file://:0:0:0:0 | Config | Class | | file://:0:0:0:0 | Configuration | Class | +| file://:0:0:0:0 | Console | Class | | file://:0:0:0:0 | ConstantPool | Class | | file://:0:0:0:0 | Constructor | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | Constructor | Class, ParameterizedType | @@ -1085,14 +1107,17 @@ | file://:0:0:0:0 | Consumer | Interface, ParameterizedType | | file://:0:0:0:0 | Consumer | Interface, ParameterizedType | | file://:0:0:0:0 | Consumer | Interface, ParameterizedType | +| file://:0:0:0:0 | Consumer | Interface, ParameterizedType | | file://:0:0:0:0 | ContentHandler | Class | | file://:0:0:0:0 | ContentHandlerFactory | Interface | +| file://:0:0:0:0 | Control | Class | | file://:0:0:0:0 | Controller | Class | | file://:0:0:0:0 | CopyOption | Interface | | file://:0:0:0:0 | CountedCompleter | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | CountedCompleter | Class, ParameterizedType | | file://:0:0:0:0 | CountedCompleter | Class, ParameterizedType | | file://:0:0:0:0 | CounterCell | Class | +| file://:0:0:0:0 | CountingWrapper | Class | | file://:0:0:0:0 | D | TypeVariable | | file://:0:0:0:0 | D | TypeVariable | | file://:0:0:0:0 | D | TypeVariable | @@ -1100,12 +1125,16 @@ | file://:0:0:0:0 | DataOutput | Interface | | file://:0:0:0:0 | Date | Class | | file://:0:0:0:0 | DateTimeFormatter | Class | +| file://:0:0:0:0 | DateTimeFormatterBuilder | Class | | file://:0:0:0:0 | DateTimeParseContext | Class | | file://:0:0:0:0 | DateTimePrintContext | Class | | file://:0:0:0:0 | DateTimePrinterParser | Interface | +| file://:0:0:0:0 | DateTimeTextProvider | Class | | file://:0:0:0:0 | DayOfWeek | Class | | file://:0:0:0:0 | Debug | Class | | file://:0:0:0:0 | DecimalStyle | Class | +| file://:0:0:0:0 | DefaultValueParser | Class | +| file://:0:0:0:0 | DelegatingMethodHandle | Class | | file://:0:0:0:0 | Deque | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | Deque | Interface, ParameterizedType | | file://:0:0:0:0 | Dictionary | Class, GenericType, ParameterizedType | @@ -1118,6 +1147,7 @@ | file://:0:0:0:0 | DoubleArray | Class | | file://:0:0:0:0 | DoubleBinaryOperator | Interface | | file://:0:0:0:0 | DoubleBuffer | Class | +| file://:0:0:0:0 | DoubleCompanionObject | Class | | file://:0:0:0:0 | DoubleConsumer | Interface | | file://:0:0:0:0 | DoubleFunction | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | DoubleFunction | Interface, ParameterizedType | @@ -1194,6 +1224,7 @@ | file://:0:0:0:0 | E | TypeVariable | | file://:0:0:0:0 | E | TypeVariable | | file://:0:0:0:0 | Edge | Class | +| file://:0:0:0:0 | Empty | Class | | file://:0:0:0:0 | Entry | Class | | file://:0:0:0:0 | Entry | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | Entry | Class, GenericType, ParameterizedType | @@ -1247,6 +1278,8 @@ | file://:0:0:0:0 | Entry | Interface, ParameterizedType | | file://:0:0:0:0 | Entry | Interface, ParameterizedType | | file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | +| file://:0:0:0:0 | Entry | Interface, ParameterizedType | | file://:0:0:0:0 | EntryIterator | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | EntrySetView | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | EntrySpliterator | Class, GenericType, ParameterizedType | @@ -1291,6 +1324,10 @@ | file://:0:0:0:0 | Enum | Class, ParameterizedType | | file://:0:0:0:0 | Enum | Class, ParameterizedType | | file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | Enum | Class, ParameterizedType | +| file://:0:0:0:0 | EnumCompanionObject | Class | | file://:0:0:0:0 | EnumSet | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | EnumSet | Class, ParameterizedType | | file://:0:0:0:0 | EnumSet | Class, ParameterizedType | @@ -1323,7 +1360,9 @@ | file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | | file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | | file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | +| file://:0:0:0:0 | Enumeration | Interface, ParameterizedType | | file://:0:0:0:0 | Era | Interface | +| file://:0:0:0:0 | Error | Class | | file://:0:0:0:0 | Exception | Class | | file://:0:0:0:0 | ExceptionNode | Class | | file://:0:0:0:0 | Executable | Class | @@ -1492,6 +1531,7 @@ | file://:0:0:0:0 | Format | Class | | file://:0:0:0:0 | FormatStyle | Class | | file://:0:0:0:0 | ForwardingNode | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | FractionPrinterParser | Class | | file://:0:0:0:0 | Frame | Class | | file://:0:0:0:0 | Function | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | Function | GenericType, Interface, ParameterizedType | @@ -1562,6 +1602,7 @@ | file://:0:0:0:0 | Function1 | Interface, ParameterizedType | | file://:0:0:0:0 | Function1 | Interface, ParameterizedType | | file://:0:0:0:0 | Function1 | Interface, ParameterizedType | +| file://:0:0:0:0 | Function1 | Interface, ParameterizedType | | file://:0:0:0:0 | Future | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | Future | Interface, ParameterizedType | | file://:0:0:0:0 | Future | Interface, ParameterizedType | @@ -1608,10 +1649,12 @@ | file://:0:0:0:0 | InnocuousThreadFactory | Class | | file://:0:0:0:0 | InputStream | Class | | file://:0:0:0:0 | Instant | Class | +| file://:0:0:0:0 | InstantPrinterParser | Class | | file://:0:0:0:0 | Int | Class | | file://:0:0:0:0 | IntArray | Class | | file://:0:0:0:0 | IntBinaryOperator | Interface | | file://:0:0:0:0 | IntBuffer | Class | +| file://:0:0:0:0 | IntCompanionObject | Class | | file://:0:0:0:0 | IntConsumer | Interface | | file://:0:0:0:0 | IntFunction | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | IntFunction | Interface, ParameterizedType | @@ -1649,9 +1692,12 @@ | file://:0:0:0:0 | IntUnaryOperator | Interface | | file://:0:0:0:0 | Integer | Class | | file://:0:0:0:0 | InterfaceAddress | Class | +| file://:0:0:0:0 | InternalError | Class | +| file://:0:0:0:0 | InternalLocaleBuilder | Class | | file://:0:0:0:0 | Interruptible | Interface | | file://:0:0:0:0 | InterruptibleChannel | Interface | | file://:0:0:0:0 | Intrinsic | Class | +| file://:0:0:0:0 | IntrinsicMethodHandle | Class | | file://:0:0:0:0 | Invokers | Class | | file://:0:0:0:0 | IsoChronology | Class | | file://:0:0:0:0 | IsoCountryCode | Class | @@ -1670,6 +1716,7 @@ | file://:0:0:0:0 | Iterable | Interface, ParameterizedType | | file://:0:0:0:0 | Iterable | Interface, ParameterizedType | | file://:0:0:0:0 | Iterable | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterable | Interface, ParameterizedType | | file://:0:0:0:0 | Iterator | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | Iterator | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | Iterator | Interface, ParameterizedType | @@ -1719,6 +1766,8 @@ | file://:0:0:0:0 | Iterator | Interface, ParameterizedType | | file://:0:0:0:0 | Iterator | Interface, ParameterizedType | | file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | +| file://:0:0:0:0 | Iterator | Interface, ParameterizedType | | file://:0:0:0:0 | K | TypeVariable | | file://:0:0:0:0 | K | TypeVariable | | file://:0:0:0:0 | K | TypeVariable | @@ -1842,8 +1891,10 @@ | file://:0:0:0:0 | LambdaFormEditor | Class | | file://:0:0:0:0 | LangReflectAccess | Interface | | file://:0:0:0:0 | LanguageRange | Class | +| file://:0:0:0:0 | LanguageTag | Class | | file://:0:0:0:0 | Level | Class | | file://:0:0:0:0 | LineReader | Class | +| file://:0:0:0:0 | LineReader | Class | | file://:0:0:0:0 | LinkOption | Class | | file://:0:0:0:0 | List | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | List | Interface, ParameterizedType | @@ -1910,12 +1961,18 @@ | file://:0:0:0:0 | LocalTime | Class | | file://:0:0:0:0 | Locale | Class | | file://:0:0:0:0 | LocaleExtensions | Class | +| file://:0:0:0:0 | LocaleStore | Class | +| file://:0:0:0:0 | LocalizedOffsetIdPrinterParser | Class | +| file://:0:0:0:0 | LocalizedPrinterParser | Class | | file://:0:0:0:0 | Lock | Interface | +| file://:0:0:0:0 | Logger | Interface | +| file://:0:0:0:0 | LoggerFinder | Class | | file://:0:0:0:0 | Long | Class | | file://:0:0:0:0 | Long | Class | | file://:0:0:0:0 | LongArray | Class | | file://:0:0:0:0 | LongBinaryOperator | Interface | | file://:0:0:0:0 | LongBuffer | Class | +| file://:0:0:0:0 | LongCompanionObject | Class | | file://:0:0:0:0 | LongConsumer | Interface | | file://:0:0:0:0 | LongFunction | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | LongFunction | Interface, ParameterizedType | @@ -1931,6 +1988,7 @@ | file://:0:0:0:0 | LongToDoubleFunction | Interface | | file://:0:0:0:0 | LongToIntFunction | Interface | | file://:0:0:0:0 | LongUnaryOperator | Interface | +| file://:0:0:0:0 | LoopClauses | Class | | file://:0:0:0:0 | ManagedBlocker | Interface | | file://:0:0:0:0 | Map | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | Map | GenericType, Interface, ParameterizedType | @@ -1979,6 +2037,8 @@ | file://:0:0:0:0 | Map | Interface, ParameterizedType | | file://:0:0:0:0 | Map | Interface, ParameterizedType | | file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | +| file://:0:0:0:0 | Map | Interface, ParameterizedType | | file://:0:0:0:0 | MapEntry | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | MapMode | Class | | file://:0:0:0:0 | MapReduceEntriesTask | Class, GenericType, ParameterizedType | @@ -2019,6 +2079,7 @@ | file://:0:0:0:0 | Method | Class | | file://:0:0:0:0 | MethodAccessor | Interface | | file://:0:0:0:0 | MethodHandle | Class | +| file://:0:0:0:0 | MethodHandleImpl | Class | | file://:0:0:0:0 | MethodRepository | Class | | file://:0:0:0:0 | MethodType | Class | | file://:0:0:0:0 | MethodTypeForm | Class | @@ -2111,6 +2172,7 @@ | file://:0:0:0:0 | Nothing | Class | | file://:0:0:0:0 | Number | Class | | file://:0:0:0:0 | Number | Class | +| file://:0:0:0:0 | NumberPrinterParser | Class | | file://:0:0:0:0 | ObjDoubleConsumer | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | ObjDoubleConsumer | Interface, ParameterizedType | | file://:0:0:0:0 | ObjIntConsumer | GenericType, Interface, ParameterizedType | @@ -2140,6 +2202,7 @@ | file://:0:0:0:0 | OfPrimitive | Interface, ParameterizedType | | file://:0:0:0:0 | OffsetClock | Class | | file://:0:0:0:0 | OffsetDateTime | Class | +| file://:0:0:0:0 | OffsetIdPrinterParser | Class | | file://:0:0:0:0 | OffsetTime | Class | | file://:0:0:0:0 | OpenOption | Interface | | file://:0:0:0:0 | Opens | Class | @@ -2168,9 +2231,11 @@ | file://:0:0:0:0 | P1 | TypeVariable | | file://:0:0:0:0 | P1 | TypeVariable | | file://:0:0:0:0 | Package | Class | +| file://:0:0:0:0 | PadPrinterParserDecorator | Class | | file://:0:0:0:0 | Parameter | Class | | file://:0:0:0:0 | ParameterizedType | Interface | | file://:0:0:0:0 | ParsePosition | Class | +| file://:0:0:0:0 | ParseStatus | Class | | file://:0:0:0:0 | Parsed | Class | | file://:0:0:0:0 | Path | Interface | | file://:0:0:0:0 | PathMatcher | Interface | @@ -2213,6 +2278,7 @@ | file://:0:0:0:0 | Predicate | Interface, ParameterizedType | | file://:0:0:0:0 | Predicate | Interface, ParameterizedType | | file://:0:0:0:0 | Predicate | Interface, ParameterizedType | +| file://:0:0:0:0 | PrefixTree | Class | | file://:0:0:0:0 | PrimitiveIterator | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | PrimitiveIterator | Interface, ParameterizedType | | file://:0:0:0:0 | PrimitiveIterator | Interface, ParameterizedType | @@ -2294,6 +2360,7 @@ | file://:0:0:0:0 | ReduceKeysTask | Class, ParameterizedType | | file://:0:0:0:0 | ReduceValuesTask | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | ReduceValuesTask | Class, ParameterizedType | +| file://:0:0:0:0 | ReducedPrinterParser | Class | | file://:0:0:0:0 | ReentrantLock | Class | | file://:0:0:0:0 | Reference | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | Reference | Class, ParameterizedType | @@ -2330,6 +2397,7 @@ | file://:0:0:0:0 | ReservationNode | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | ResolvedModule | Class | | file://:0:0:0:0 | ResolverStyle | Class | +| file://:0:0:0:0 | ResourceBundle | Class | | file://:0:0:0:0 | RetentionPolicy | Class | | file://:0:0:0:0 | ReturnType | Interface | | file://:0:0:0:0 | Runnable | Interface | @@ -2354,6 +2422,7 @@ | file://:0:0:0:0 | SearchKeysTask | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | SearchMappingsTask | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | SearchValuesTask | Class, GenericType, ParameterizedType | +| file://:0:0:0:0 | SecurityManager | Class | | file://:0:0:0:0 | SeekableByteChannel | Interface | | file://:0:0:0:0 | Segment | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | Serializable | Interface | @@ -2416,12 +2485,15 @@ | file://:0:0:0:0 | Set | Interface, ParameterizedType | | file://:0:0:0:0 | Set | Interface, ParameterizedType | | file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | Set | Interface, ParameterizedType | +| file://:0:0:0:0 | SettingsParser | Class | | file://:0:0:0:0 | Short | Class | | file://:0:0:0:0 | Short | Class | | file://:0:0:0:0 | ShortArray | Class | | file://:0:0:0:0 | ShortBuffer | Class | | file://:0:0:0:0 | ShortIterator | Class | | file://:0:0:0:0 | ShortSignature | Class | +| file://:0:0:0:0 | SignStyle | Class | | file://:0:0:0:0 | Signature | Interface | | file://:0:0:0:0 | SimpleClassTypeSignature | Class | | file://:0:0:0:0 | SimpleEntry | Class, GenericType, ParameterizedType | @@ -2541,6 +2613,8 @@ | file://:0:0:0:0 | String | Class | | file://:0:0:0:0 | StringBuffer | Class | | file://:0:0:0:0 | StringBuilder | Class | +| file://:0:0:0:0 | StringCompanionObject | Class | +| file://:0:0:0:0 | StringLiteralPrinterParser | Class | | file://:0:0:0:0 | Subject | Class | | file://:0:0:0:0 | Subset | Class | | file://:0:0:0:0 | SuppliedThreadLocal | Class, GenericType, ParameterizedType | @@ -2563,7 +2637,9 @@ | file://:0:0:0:0 | Supplier | Interface, ParameterizedType | | file://:0:0:0:0 | Supplier | Interface, ParameterizedType | | file://:0:0:0:0 | Supplier | Interface, ParameterizedType | +| file://:0:0:0:0 | Supplier | Interface, ParameterizedType | | file://:0:0:0:0 | Sync | Class | +| file://:0:0:0:0 | System | Class | | file://:0:0:0:0 | SystemClock | Class | | file://:0:0:0:0 | T | TypeVariable | | file://:0:0:0:0 | T | TypeVariable | @@ -2952,6 +3028,9 @@ | file://:0:0:0:0 | T | TypeVariable | | file://:0:0:0:0 | T | TypeVariable | | file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | +| file://:0:0:0:0 | T | TypeVariable | | file://:0:0:0:0 | T_CONS | TypeVariable | | file://:0:0:0:0 | T_CONS | TypeVariable | | file://:0:0:0:0 | T_SPLITR | TypeVariable | @@ -3027,7 +3106,9 @@ | file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | | file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | | file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | +| file://:0:0:0:0 | TemporalQuery | Interface, ParameterizedType | | file://:0:0:0:0 | TemporalUnit | Interface | +| file://:0:0:0:0 | TextPrinterParser | Class | | file://:0:0:0:0 | TextStyle | Class | | file://:0:0:0:0 | Thread | Class | | file://:0:0:0:0 | ThreadFactory | Interface | @@ -3307,6 +3388,7 @@ | file://:0:0:0:0 | Version | Class, ParameterizedType | | file://:0:0:0:0 | Version | Class, ParameterizedType | | file://:0:0:0:0 | VersionInfo | Class | +| file://:0:0:0:0 | VirtualMachineError | Class | | file://:0:0:0:0 | Visitor | GenericType, Interface, ParameterizedType | | file://:0:0:0:0 | Visitor | Interface, ParameterizedType | | file://:0:0:0:0 | Void | Class | @@ -3339,6 +3421,7 @@ | file://:0:0:0:0 | WeakReference | Class, ParameterizedType | | file://:0:0:0:0 | WeakReference | Class, ParameterizedType | | file://:0:0:0:0 | WeakReference | Class, ParameterizedType | +| file://:0:0:0:0 | WeekBasedFieldPrinterParser | Class | | file://:0:0:0:0 | Wildcard | Class | | file://:0:0:0:0 | WildcardType | Interface | | file://:0:0:0:0 | WorkQueue | Class | @@ -3353,10 +3436,12 @@ | file://:0:0:0:0 | X | TypeVariable | | file://:0:0:0:0 | X | TypeVariable | | file://:0:0:0:0 | ZoneId | Class | +| file://:0:0:0:0 | ZoneIdPrinterParser | Class | | file://:0:0:0:0 | ZoneOffset | Class | | file://:0:0:0:0 | ZoneOffsetTransition | Class | | file://:0:0:0:0 | ZoneOffsetTransitionRule | Class | | file://:0:0:0:0 | ZoneRules | Class | +| file://:0:0:0:0 | ZoneTextPrinterParser | Class | | file://:0:0:0:0 | ZonedDateTime | Class | | file://:0:0:0:0 | boolean | PrimitiveType | | file://:0:0:0:0 | byte | PrimitiveType | From be75d30ee091ad0a6f1aeb125de38fcda007626f Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 9 Nov 2021 13:56:50 +0000 Subject: [PATCH 0676/1618] Kotlin: Add support for varargs --- .../main/kotlin/KotlinExtractorExtension.kt | 20 ++++++++++++++++ java/ql/lib/config/semmlecode.dbscheme | 1 + java/ql/lib/semmle/code/java/Expr.qll | 23 +++++++++++++++++++ .../kotlin/library-tests/vararg/args.expected | 7 ++++++ .../test/kotlin/library-tests/vararg/args.ql | 4 ++++ .../test/kotlin/library-tests/vararg/test.kt | 17 ++++++++++++++ .../library-tests/vararg/varargs.expected | 9 ++++++++ .../kotlin/library-tests/vararg/varargs.ql | 4 ++++ 8 files changed, 85 insertions(+) create mode 100644 java/ql/test/kotlin/library-tests/vararg/args.expected create mode 100644 java/ql/test/kotlin/library-tests/vararg/args.ql create mode 100644 java/ql/test/kotlin/library-tests/vararg/test.kt create mode 100644 java/ql/test/kotlin/library-tests/vararg/varargs.expected create mode 100644 java/ql/test/kotlin/library-tests/vararg/varargs.ql diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index f1559444c9d..0d3240c292e 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -1695,6 +1695,15 @@ open class KotlinFileExtractor( val exprParent = parent.expr(e, callable) extractTypeOperatorCall(e, callable, exprParent.parent, exprParent.idx) } + is IrVararg -> { + val exprParent = parent.expr(e, callable) + val id = tw.getFreshIdLabel() + val locId = tw.getLocation(e) + val type = useType(e.type) + tw.writeExprs_varargexpr(id, type.javaResult.id, type.kotlinResult.id, exprParent.parent, exprParent.idx) + tw.writeHasLocation(id, locId) + e.elements.forEachIndexed { i, arg -> extractVarargElement(arg, callable, id, i) } + } is IrGetObjectValue -> { // For `object MyObject { ... }`, the .class has an // automatically-generated `public static final MyObject INSTANCE` @@ -1719,6 +1728,17 @@ open class KotlinFileExtractor( } } + fun extractVarargElement(e: IrVarargElement, callable: Label, parent: Label, idx: Int) { + when(e) { + is IrExpression -> { + extractExpressionExpr(e, callable, parent, idx) + } + else -> { + logger.warnElement(Severity.ErrorSevere, "Unrecognised IrVarargElement: " + e.javaClass, e) + } + } + } + fun extractModifier(m: String): Label { val modifierLabel = "@\"modifier;$m\"" val id: Label = tw.getLabelFor(modifierLabel, { diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index cd5ffc34a06..8e4a3dcda23 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -694,6 +694,7 @@ case @expr.kind of | 78 = @notinstanceofexpr | 79 = @stmtexpr | 80 = @stringtemplateexpr +| 81 = @varargexpr ; /** Holds if this `when` expression was written as an `if` expression. */ diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 1f4cd940d89..54d84419e96 100755 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2267,3 +2267,26 @@ class StringTemplateExpr extends Expr, @stringtemplateexpr { override string getAPrimaryQlClass() { result = "StringTemplateExpr" } } + +/** + * A Kotlin(TODO: Should Java make these too?) vararg expression. + * This is the argument to a function that corresponds to a `vararg` + * parameter. + */ +class VarArgExpr extends Expr, @varargexpr { + /** + * Gets the `i`th component of this vararg. TODO: Is this always Expr? + * + * For example, in the string template `"foo${bar}baz"`, the 0th + * component is the string literal `"foo"`, the 1st component is + * the variable access `bar`, and the 2nd component is the string + * literal `"bar"`. + */ + Expr getComponent(int i) { result.isNthChildOf(this, i) } + + override string toString() { result = "..." } + + override string getHalsteadID() { result = "VarArgExpr" } + + override string getAPrimaryQlClass() { result = "VarArgExpr" } +} diff --git a/java/ql/test/kotlin/library-tests/vararg/args.expected b/java/ql/test/kotlin/library-tests/vararg/args.expected new file mode 100644 index 00000000000..3bd0980a809 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/vararg/args.expected @@ -0,0 +1,7 @@ +| test.kt:13:5:13:34 | funWithOnlyVarArgs(...) | 0 | test.kt:13:24:13:33 | ... | +| test.kt:14:5:14:50 | funWithArgsAndVarArgs(...) | 0 | test.kt:14:28:14:30 | foo | +| test.kt:14:5:14:50 | funWithArgsAndVarArgs(...) | 1 | test.kt:14:34:14:37 | true | +| test.kt:14:5:14:50 | funWithArgsAndVarArgs(...) | 2 | test.kt:14:40:14:49 | ... | +| test.kt:15:5:15:53 | funWithMiddleVarArgs(...) | 0 | test.kt:15:27:15:29 | foo | +| test.kt:15:5:15:53 | funWithMiddleVarArgs(...) | 1 | test.kt:15:33:15:42 | ... | +| test.kt:15:5:15:53 | funWithMiddleVarArgs(...) | 2 | test.kt:15:49:15:52 | true | diff --git a/java/ql/test/kotlin/library-tests/vararg/args.ql b/java/ql/test/kotlin/library-tests/vararg/args.ql new file mode 100644 index 00000000000..82e1b8d912a --- /dev/null +++ b/java/ql/test/kotlin/library-tests/vararg/args.ql @@ -0,0 +1,4 @@ +import java + +from Call c, int i +select c, i, c.getArgument(i) diff --git a/java/ql/test/kotlin/library-tests/vararg/test.kt b/java/ql/test/kotlin/library-tests/vararg/test.kt new file mode 100644 index 00000000000..af6482cc220 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/vararg/test.kt @@ -0,0 +1,17 @@ + +fun funWithOnlyVarArgs(vararg xs: Int) { +} + +fun funWithArgsAndVarArgs(x: String, y: Boolean, vararg xs: Int) { +} + +fun funWithMiddleVarArgs(x: String, vararg xs: Int, y: Boolean) { +} + +fun myFun() { + // TODO val xs = listOf(10, 11, 12) + funWithOnlyVarArgs(20, 21, 22) + funWithArgsAndVarArgs("foo", true, 30, 31, 32) + funWithMiddleVarArgs("foo", 41, 42, 43, y = true) +} + diff --git a/java/ql/test/kotlin/library-tests/vararg/varargs.expected b/java/ql/test/kotlin/library-tests/vararg/varargs.expected new file mode 100644 index 00000000000..eaaa9477a39 --- /dev/null +++ b/java/ql/test/kotlin/library-tests/vararg/varargs.expected @@ -0,0 +1,9 @@ +| test.kt:13:24:13:33 | ... | 0 | test.kt:13:24:13:25 | 20 | +| test.kt:13:24:13:33 | ... | 1 | test.kt:13:28:13:29 | 21 | +| test.kt:13:24:13:33 | ... | 2 | test.kt:13:32:13:33 | 22 | +| test.kt:14:40:14:49 | ... | 0 | test.kt:14:40:14:41 | 30 | +| test.kt:14:40:14:49 | ... | 1 | test.kt:14:44:14:45 | 31 | +| test.kt:14:40:14:49 | ... | 2 | test.kt:14:48:14:49 | 32 | +| test.kt:15:33:15:42 | ... | 0 | test.kt:15:33:15:34 | 41 | +| test.kt:15:33:15:42 | ... | 1 | test.kt:15:37:15:38 | 42 | +| test.kt:15:33:15:42 | ... | 2 | test.kt:15:41:15:42 | 43 | diff --git a/java/ql/test/kotlin/library-tests/vararg/varargs.ql b/java/ql/test/kotlin/library-tests/vararg/varargs.ql new file mode 100644 index 00000000000..8e5456bd6bd --- /dev/null +++ b/java/ql/test/kotlin/library-tests/vararg/varargs.ql @@ -0,0 +1,4 @@ +import java + +from VarArgExpr vae, int i +select vae, i, vae.getComponent(i) From 512e4ce41e1ef3b6ebf52c65e1b0ea05d5e6d0a1 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 9 Nov 2021 14:52:46 +0000 Subject: [PATCH 0677/1618] Kotlin: Fix bug in DB scheme generator --- java/kotlin-extractor/generate_dbscheme.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/generate_dbscheme.py b/java/kotlin-extractor/generate_dbscheme.py index a88d961e29e..cdbb010d940 100755 --- a/java/kotlin-extractor/generate_dbscheme.py +++ b/java/kotlin-extractor/generate_dbscheme.py @@ -15,7 +15,7 @@ def parse_dbscheme(filename): # Remove comments dbscheme = re.sub(r'/\*.*?\*/', '', dbscheme, flags=re.DOTALL) - dbscheme = re.sub(r'//[^\r\n]*/', '', dbscheme) + dbscheme = re.sub(r'//[^\r\n]*', '', dbscheme) # kind enums for name, kind, body in re.findall(r'case\s+@([^.\s]*)\.([^.\s]*)\s+of\b(.*?);', From 8853489f04a326ca834eedd32ff1525ad38c9b4e Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 9 Nov 2021 16:01:11 +0000 Subject: [PATCH 0678/1618] Kotlin: Add a "generted by" field to the diagnostics table --- .../kotlin-extractor/src/main/kotlin/utils/Logger.kt | 2 +- java/ql/consistency-queries/locations.ql | 2 +- java/ql/lib/config/semmlecode.dbscheme | 1 + java/ql/src/Diagnostics/DiagnosticsReporting.qll | 12 ++++++------ 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt index 0327b4198cb..3003532632a 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt @@ -84,7 +84,7 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { } } val ts = timestamp() - tw.writeDiagnostics(StarLabel(), severity.sev, "", msg, "$ts $msg\n$suffix", locationId) + tw.writeDiagnostics(StarLabel(), "CodeQL Kotlin extractor", severity.sev, "", msg, "$ts $msg\n$suffix", locationId) val locStr = if (locationString == null) "" else "At " + locationString + ": " print("$ts Warning($warningLocStr): $locStr$msg\n$suffix") } diff --git a/java/ql/consistency-queries/locations.ql b/java/ql/consistency-queries/locations.ql index 35151d55df5..55ffb808c14 100644 --- a/java/ql/consistency-queries/locations.ql +++ b/java/ql/consistency-queries/locations.ql @@ -20,7 +20,7 @@ Location unusedLocation() { not exists(Top t | t.getLocation() = result) and not exists(XMLLocatable x | x.getLocation() = result) and not exists(ConfigLocatable c | c.getLocation() = result) and - not exists(@diagnostic d | diagnostics(d, _, _, _, _, result)) and + not exists(@diagnostic d | diagnostics(d, _, _, _, _, _, result)) and not (result.getFile().getExtension() = "xml" and result.getStartLine() = 0 and result.getStartColumn() = 0 and diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 8e4a3dcda23..1b9d6804657 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -140,6 +140,7 @@ compilation_finished( diagnostics( unique int id: @diagnostic, + string generated_by: string ref, // TODO: Sync this with CPP? int severity: int ref, string error_tag: string ref, string error_message: string ref, diff --git a/java/ql/src/Diagnostics/DiagnosticsReporting.qll b/java/ql/src/Diagnostics/DiagnosticsReporting.qll index 72403ea120f..9bc5ebace01 100644 --- a/java/ql/src/Diagnostics/DiagnosticsReporting.qll +++ b/java/ql/src/Diagnostics/DiagnosticsReporting.qll @@ -12,7 +12,7 @@ private int getWarnSeverity() { result = 1 } private predicate knownWarnings(@diagnostic d, string msg, int sev) { exists(string filename | - diagnostics(d, 2, _, "Skipping Lombok-ed source file: " + filename, _, _) and + diagnostics(d, _, 2, _, "Skipping Lombok-ed source file: " + filename, _, _) and msg = "Use of Lombok detected. Skipping file: " + filename and sev = getWarnSeverity() ) @@ -20,19 +20,19 @@ private predicate knownWarnings(@diagnostic d, string msg, int sev) { private predicate knownErrors(@diagnostic d, string msg, int sev) { exists(string numErr, Location l | - diagnostics(d, 6, _, numErr, _, l) and + diagnostics(d, _, 6, _, numErr, _, l) and msg = "Frontend errors in file: " + l.getFile().getAbsolutePath() + " (" + numErr + ")" and sev = getErrorSeverity() ) or exists(string filename, Location l | - diagnostics(d, 7, _, "Exception compiling file " + filename, _, l) and + diagnostics(d, _, 7, _, "Exception compiling file " + filename, _, l) and msg = "Extraction incomplete in file: " + filename and sev = getErrorSeverity() ) or exists(string errMsg, Location l | - diagnostics(d, 8, _, errMsg, _, l) and + diagnostics(d, _, 8, _, errMsg, _, l) and msg = "Severe error: " + errMsg and sev = getErrorSeverity() ) @@ -41,7 +41,7 @@ private predicate knownErrors(@diagnostic d, string msg, int sev) { private predicate unknownErrors(@diagnostic d, string msg, int sev) { not knownErrors(d, _, _) and exists(Location l, File f, int diagSev | - diagnostics(d, diagSev, _, _, _, l) and l.getFile() = f and diagSev > 3 + diagnostics(d, _, diagSev, _, _, _, l) and l.getFile() = f and diagSev > 3 | exists(f.getRelativePath()) and msg = "Unknown errors in file: " + f.getAbsolutePath() + " (" + diagSev + ")" and @@ -77,7 +77,7 @@ predicate reportableWarnings(@diagnostic d, string msg, int sev) { knownWarnings */ predicate successfullyExtracted(CompilationUnit f) { not exists(@diagnostic d, Location l | - reportableDiagnostics(d, _, _) and diagnostics(d, _, _, _, _, l) and l.getFile() = f + reportableDiagnostics(d, _, _) and diagnostics(d, _, _, _, _, _, l) and l.getFile() = f ) and exists(f.getRelativePath()) and f.fromSource() From 5cf14e6f3946580d1b0e61788dab92516f42aaa6 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Tue, 9 Nov 2021 20:31:42 +0000 Subject: [PATCH 0679/1618] Kotlin: Tweak a comment --- java/ql/lib/config/semmlecode.dbscheme | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 1b9d6804657..3f044c1baa0 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -140,7 +140,7 @@ compilation_finished( diagnostics( unique int id: @diagnostic, - string generated_by: string ref, // TODO: Sync this with CPP? + string generated_by: string ref, // TODO: Sync this with the other languages? int severity: int ref, string error_tag: string ref, string error_message: string ref, From 80e2140ca779290dca85c24daf1c5d07d1586b42 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Wed, 10 Nov 2021 14:21:18 +0000 Subject: [PATCH 0680/1618] Kotlin: Add TrapWriter.writeComment --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- java/kotlin-extractor/src/main/kotlin/TrapWriter.kt | 3 +++ java/kotlin-extractor/src/main/kotlin/utils/Logger.kt | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 0d3240c292e..8d2a6529960 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -132,8 +132,8 @@ fun doFile(invocationTrapFile: String, if (checkTrapIdentical || !trapFile.exists()) { val trapTmpFile = File.createTempFile("$filePath.", ".trap.tmp", trapFileDir) trapTmpFile.bufferedWriter().use { trapFileBW -> - trapFileBW.write("// Generated by invocation ${invocationTrapFile.replace("\n", "\n// ")}\n") val tw = SourceFileTrapWriter(TrapLabelManager(), trapFileBW, file) + tw.writeComment("Generated by invocation $invocationTrapFile") val externalClassExtractor = ExternalClassExtractor(logger, file.path, pluginContext) val fileExtractor = KotlinSourceFileExtractor(logger, tw, file, externalClassExtractor, pluginContext) fileExtractor.extractFileContents(tw.fileId) diff --git a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt index cb94816b3df..d01cd82da11 100644 --- a/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt +++ b/java/kotlin-extractor/src/main/kotlin/TrapWriter.kt @@ -71,6 +71,9 @@ open class TrapWriter (val lm: TrapLabelManager, val bw: BufferedWriter) { fun writeTrap(trap: String) { bw.write(trap) } + fun writeComment(comment: String) { + writeTrap("// ${comment.replace("\n", "\n// ")}\n") + } fun flush() { bw.flush() } diff --git a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt index 3003532632a..28e9f9aabf3 100644 --- a/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt +++ b/java/kotlin-extractor/src/main/kotlin/utils/Logger.kt @@ -53,7 +53,7 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { } fun info(msg: String) { val fullMsg = "${timestamp()} $msg" - tw.writeTrap("// " + fullMsg.replace("\n", "\n//") + "\n") + tw.writeComment(fullMsg) println(fullMsg) } fun trace(msg: String) { @@ -104,7 +104,7 @@ open class Logger(val logCounter: LogCounter, open val tw: TrapWriter) { for((caller, count) in logCounter.warningCounts) { if(count >= logCounter.warningLimit) { val msg = "Total of $count warnings from $caller.\n" - tw.writeTrap("// $msg") + tw.writeComment(msg) print(msg) } } From a92e20e526e52c9db084fd918cd460c89a278ebf Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 27 Oct 2021 17:36:34 +0100 Subject: [PATCH 0681/1618] Extract nullable arrays as Java arrays Nullability doesn't matter to this conversion since Java's arrays are reftypes --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 8d2a6529960..b715c48b86d 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -509,7 +509,7 @@ class X { } */ - s.isArray() && s.arguments.isNotEmpty() -> { + (s.isArray() || s.isNullableArray()) && s.arguments.isNotEmpty() -> { // TODO: fix this, this is only a dummy implementation to let the tests pass val elementType = useType(s.getArrayElementType(pluginContext.irBuiltIns)) val id = tw.getLabelFor("@\"array;1;{$elementType}\"") From 055e9b7797442786ba19e7170efe59cb298e0a24 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 27 Oct 2021 17:57:24 +0100 Subject: [PATCH 0682/1618] Convert primitive arrays to Java arrays --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index b715c48b86d..a424a5007c7 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -509,7 +509,7 @@ class X { } */ - (s.isArray() || s.isNullableArray()) && s.arguments.isNotEmpty() -> { + ((s.isArray() || s.isNullableArray()) && s.arguments.isNotEmpty()) || s.isPrimitiveArray() -> { // TODO: fix this, this is only a dummy implementation to let the tests pass val elementType = useType(s.getArrayElementType(pluginContext.irBuiltIns)) val id = tw.getLabelFor("@\"array;1;{$elementType}\"") From b926521e7a67007946235755afe34a518a2a3def Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 27 Oct 2021 17:57:40 +0100 Subject: [PATCH 0683/1618] Only write arrays table on first usage --- .../src/main/kotlin/KotlinExtractorExtension.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index a424a5007c7..639d3f573a0 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -511,9 +511,10 @@ class X { ((s.isArray() || s.isNullableArray()) && s.arguments.isNotEmpty()) || s.isPrimitiveArray() -> { // TODO: fix this, this is only a dummy implementation to let the tests pass - val elementType = useType(s.getArrayElementType(pluginContext.irBuiltIns)) - val id = tw.getLabelFor("@\"array;1;{$elementType}\"") - tw.writeArrays(id, "ARRAY", elementType.javaResult.id, elementType.kotlinResult.id, 1, elementType.javaResult.id, elementType.kotlinResult.id) + val elementType = useTypeOld(s.getArrayElementType(pluginContext.irBuiltIns)) + val id = tw.getLabelFor("@\"array;1;{$elementType}\"") { + tw.writeArrays(id, "ARRAY", elementType.javaResult.id, elementType.kotlinResult.id, 1, elementType.javaResult.id, elementType.kotlinResult.id) + } val javaSignature = "an array" // TODO: Wrong val javaResult = TypeResult(id, javaSignature) val aClassId = makeClass("kotlin", "Array") // TODO: Wrong From 2cc5f3e5b7773cb51c8afe14ea78c774089b157b Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 27 Oct 2021 18:59:37 +0100 Subject: [PATCH 0684/1618] kt_*_types tables: cite correct Kotlin classid for arrays --- .../src/main/kotlin/KotlinExtractorExtension.kt | 10 +++++----- java/ql/lib/config/semmlecode.dbscheme | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 639d3f573a0..f846fe0ccc1 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -517,19 +517,19 @@ class X { } val javaSignature = "an array" // TODO: Wrong val javaResult = TypeResult(id, javaSignature) - val aClassId = makeClass("kotlin", "Array") // TODO: Wrong + val kotlinClassName = getUnquotedClassLabel(s.classifier.owner as IrClass, s.arguments) val kotlinResult = if (s.hasQuestionMark) { val kotlinSignature = "$javaSignature?" // TODO: Wrong - val kotlinLabel = "@\"kt_type;nullable;array\"" // TODO: Wrong + val kotlinLabel = "@\"kt_type;nullable;${kotlinClassName}\"" val kotlinId: Label = tw.getLabelFor(kotlinLabel, { - tw.writeKt_nullable_types(it, aClassId) + tw.writeKt_nullable_types(it, id) }) TypeResult(kotlinId, kotlinSignature) } else { val kotlinSignature = "$javaSignature" // TODO: Wrong - val kotlinLabel = "@\"kt_type;notnull;array\"" // TODO: Wrong + val kotlinLabel = "@\"kt_type;notnull;${kotlinClassName}\"" // TODO: Wrong val kotlinId: Label = tw.getLabelFor(kotlinLabel, { - tw.writeKt_notnull_types(it, aClassId) + tw.writeKt_notnull_types(it, id) }) TypeResult(kotlinId, kotlinSignature) } diff --git a/java/ql/lib/config/semmlecode.dbscheme b/java/ql/lib/config/semmlecode.dbscheme index 3f044c1baa0..16379b82074 100755 --- a/java/ql/lib/config/semmlecode.dbscheme +++ b/java/ql/lib/config/semmlecode.dbscheme @@ -328,12 +328,12 @@ class_companion_object( kt_nullable_types( unique int id: @kt_nullable_type, - int classid: @classorinterface ref + int classid: @reftype ref ) kt_notnull_types( unique int id: @kt_notnull_type, - int classid: @classorinterface ref + int classid: @reftype ref ) kt_type_alias( From f1a3c9ca20a99b5dddfc87ab67026eae3290a149 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 27 Oct 2021 19:02:07 +0100 Subject: [PATCH 0685/1618] Arrays: note TODOs --- .../src/main/kotlin/KotlinExtractorExtension.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index f846fe0ccc1..02328bef0f9 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -511,6 +511,10 @@ class X { ((s.isArray() || s.isNullableArray()) && s.arguments.isNotEmpty()) || s.isPrimitiveArray() -> { // TODO: fix this, this is only a dummy implementation to let the tests pass + // TODO: Figure out what signatures should be returned + // TODO: The Java extractor describes the dimensionality of array types; here we always report 1 dimension + // TODO: The Java extractor extracts a .length field, a .clone method and a type hierarchy for arrays + // TODO: Generate a short name for array types val elementType = useTypeOld(s.getArrayElementType(pluginContext.irBuiltIns)) val id = tw.getLabelFor("@\"array;1;{$elementType}\"") { tw.writeArrays(id, "ARRAY", elementType.javaResult.id, elementType.kotlinResult.id, 1, elementType.javaResult.id, elementType.kotlinResult.id) From c571657fb19f7b592f15803b1d19b58e7b502380 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 28 Oct 2021 10:56:15 +0100 Subject: [PATCH 0686/1618] Abbreviate array test --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 02328bef0f9..60d73d40617 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -509,7 +509,7 @@ class X { } */ - ((s.isArray() || s.isNullableArray()) && s.arguments.isNotEmpty()) || s.isPrimitiveArray() -> { + s.isBoxedArray || s.isPrimitiveArray() -> { // TODO: fix this, this is only a dummy implementation to let the tests pass // TODO: Figure out what signatures should be returned // TODO: The Java extractor describes the dimensionality of array types; here we always report 1 dimension From 23553f15eef938ebc1fa622c2b307c1817165be0 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 28 Oct 2021 11:34:05 +0100 Subject: [PATCH 0687/1618] Arrays: extract dimensionality --- .../src/main/kotlin/KotlinExtractorExtension.kt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 60d73d40617..8b5d0ad1c3a 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -512,12 +512,21 @@ class X { s.isBoxedArray || s.isPrimitiveArray() -> { // TODO: fix this, this is only a dummy implementation to let the tests pass // TODO: Figure out what signatures should be returned - // TODO: The Java extractor describes the dimensionality of array types; here we always report 1 dimension // TODO: The Java extractor extracts a .length field, a .clone method and a type hierarchy for arrays // TODO: Generate a short name for array types - val elementType = useTypeOld(s.getArrayElementType(pluginContext.irBuiltIns)) - val id = tw.getLabelFor("@\"array;1;{$elementType}\"") { - tw.writeArrays(id, "ARRAY", elementType.javaResult.id, elementType.kotlinResult.id, 1, elementType.javaResult.id, elementType.kotlinResult.id) + + var dimensions = 1 + val componentType = s.getArrayElementType(pluginContext.irBuiltIns) + var elementType = componentType + while (elementType.isBoxedArray || elementType.isPrimitiveArray()) { + dimensions++ + elementType = elementType.getArrayElementType(pluginContext.irBuiltIns) + } + + val componentTypeLabel = useType(componentType) + val elementTypeLabel = useType(elementType) + val id = tw.getLabelFor("@\"array;$dimensions;{$elementTypeLabel.javaResult.id}\"") { + tw.writeArrays(it, "ARRAY", elementTypeLabel.javaResult.id, elementTypeLabel.kotlinResult.id, 1, componentTypeLabel.javaResult.id, componentTypeLabel.kotlinResult.id) } val javaSignature = "an array" // TODO: Wrong val javaResult = TypeResult(id, javaSignature) From d62af44baa9a8b9c8af2e67213c4174f2293d5c4 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 28 Oct 2021 11:58:13 +0100 Subject: [PATCH 0688/1618] Extract array type inheritence graph --- .../src/main/kotlin/KotlinExtractorExtension.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 8b5d0ad1c3a..6afacea21a0 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -527,7 +527,9 @@ class X { val elementTypeLabel = useType(elementType) val id = tw.getLabelFor("@\"array;$dimensions;{$elementTypeLabel.javaResult.id}\"") { tw.writeArrays(it, "ARRAY", elementTypeLabel.javaResult.id, elementTypeLabel.kotlinResult.id, 1, componentTypeLabel.javaResult.id, componentTypeLabel.kotlinResult.id) + extractClassInheritence(s.classifier.owner as IrClass, it) } + val javaSignature = "an array" // TODO: Wrong val javaResult = TypeResult(id, javaSignature) val kotlinClassName = getUnquotedClassLabel(s.classifier.owner as IrClass, s.arguments) @@ -687,6 +689,19 @@ class X { } fun extractClassCommon(c: IrClass, id: Label) { +<<<<<<< HEAD +||||||| parent of 6b88884415 (Extract array type inheritence graph) + val locId = tw.getLocation(c) + tw.writeHasLocation(id, locId) + +======= + val locId = tw.getLocation(c) + tw.writeHasLocation(id, locId) + extractClassInheritence(c, id) + } + + fun extractClassInheritence(c: IrClass, id: Label) { +>>>>>>> 6b88884415 (Extract array type inheritence graph) for(t in c.superTypes) { when(t) { is IrSimpleType -> { From dd3bb053e578af8e12a494fa949d427609bccfc0 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 28 Oct 2021 13:53:29 +0100 Subject: [PATCH 0689/1618] Add extracted array length and clone members --- .../src/main/kotlin/KotlinExtractorExtension.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 6afacea21a0..d2109bb5fae 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -512,7 +512,6 @@ class X { s.isBoxedArray || s.isPrimitiveArray() -> { // TODO: fix this, this is only a dummy implementation to let the tests pass // TODO: Figure out what signatures should be returned - // TODO: The Java extractor extracts a .length field, a .clone method and a type hierarchy for arrays // TODO: Generate a short name for array types var dimensions = 1 @@ -527,7 +526,20 @@ class X { val elementTypeLabel = useType(elementType) val id = tw.getLabelFor("@\"array;$dimensions;{$elementTypeLabel.javaResult.id}\"") { tw.writeArrays(it, "ARRAY", elementTypeLabel.javaResult.id, elementTypeLabel.kotlinResult.id, 1, componentTypeLabel.javaResult.id, componentTypeLabel.kotlinResult.id) + extractClassInheritence(s.classifier.owner as IrClass, it) + + // array.length + val length = tw.getLabelFor("@\"field;{$it};length\"") + tw.writeFields(length, "length", useType(pluginContext.irBuiltIns.intType).javaResult.id, it, length) + // TODO: modifiers + // tw.writeHasModifier(length, getModifierKey("public")) + // tw.writeHasModifier(length, getModifierKey("final")) + + val clone = tw.getLabelFor("@\"callable;{$it}.clone(){$it}\"") + tw.writeMethods(clone, "clone", "clone()", it, it, clone) + // TODO: modifiers + // tw.writeHasModifier(clone, getModifierKey("public")) } val javaSignature = "an array" // TODO: Wrong From 8acf7d74c166ca914f61fba607b4b36ecfa8b361 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 28 Oct 2021 13:53:52 +0100 Subject: [PATCH 0690/1618] Restore check for Array type argument --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index d2109bb5fae..7ebf854bb0b 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -509,7 +509,7 @@ class X { } */ - s.isBoxedArray || s.isPrimitiveArray() -> { + (s.isBoxedArray && s.arguments.isNotEmpty()) || s.isPrimitiveArray() -> { // TODO: fix this, this is only a dummy implementation to let the tests pass // TODO: Figure out what signatures should be returned // TODO: Generate a short name for array types From 16335b126f2eb0e6c13a30fc9d873248c85468a5 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 28 Oct 2021 18:37:45 +0100 Subject: [PATCH 0691/1618] Include type parameters in class short names --- .../main/kotlin/KotlinExtractorExtension.kt | 73 +++++++++++++++---- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 7ebf854bb0b..063f3152f87 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -28,6 +28,7 @@ import com.semmle.extractor.java.OdasaOutput import com.semmle.extractor.java.OdasaOutput.TrapFileManager import com.semmle.util.files.FileUtil import org.jetbrains.kotlin.ir.util.* +import org.jetbrains.kotlin.types.Variance import kotlin.system.exitProcess class KotlinExtractorExtension(private val invocationTrapFile: String, private val checkTrapIdentical: Boolean) : IrGenerationExtension { @@ -353,7 +354,7 @@ open class KotlinUsesExtractor( val id = addClassLabel(c, typeArgs) val pkg = c.packageFqName?.asString() ?: "" - val cls = c.name.asString() + val cls = classShortName(c, typeArgs) val pkgId = extractPackage(pkg) if(c.kind == ClassKind.INTERFACE) { @Suppress("UNCHECKED_CAST") @@ -701,19 +702,6 @@ class X { } fun extractClassCommon(c: IrClass, id: Label) { -<<<<<<< HEAD -||||||| parent of 6b88884415 (Extract array type inheritence graph) - val locId = tw.getLocation(c) - tw.writeHasLocation(id, locId) - -======= - val locId = tw.getLocation(c) - tw.writeHasLocation(id, locId) - extractClassInheritence(c, id) - } - - fun extractClassInheritence(c: IrClass, id: Label) { ->>>>>>> 6b88884415 (Extract array type inheritence graph) for(t in c.superTypes) { when(t) { is IrSimpleType -> { @@ -898,6 +886,63 @@ open class KotlinFileExtractor( return id } + fun shortName(type: IrType): String = + when(type) { + is IrSimpleType -> + when { + type.isByte() -> "byte" + type.isShort() -> "short" + type.isInt() -> "int" + type.isLong() -> "long" + type.isUByte() -> "byte" + type.isUShort() -> "short" + type.isUInt() -> "int" + type.isULong() -> "long" + type.isDouble() -> "double" + type.isFloat() -> "float" + type.isBoolean() -> "boolean" + type.isChar() -> "char" + type.isUnit() -> "void" + + type.isBoxedArray || type.isPrimitiveArray() -> shortName(type.getArrayElementType(pluginContext.irBuiltIns)) + "[]" + + // TODO: Consider when Kotlin -> Java type substitution is needed + type.classifier.owner is IrClass -> classShortName(type.classifier.owner as IrClass, type.arguments) + + type.classifier.owner is IrTypeParameter -> (type.classifier.owner as IrTypeParameter).name.asString() + + else -> "???" + } + else -> "???" + } + + // Pretty-print typeArg the same way the Java extractor would: + fun typeArgShortName(typeArg: IrTypeArgument): String = + when(typeArg) { + is IrStarProjection -> "?" + is IrTypeProjection -> { + val prefix = when(typeArg.variance) { + Variance.INVARIANT -> "" + Variance.OUT_VARIANCE -> "? extends " + Variance.IN_VARIANCE -> "? super " + } + "$prefix${shortName(typeArg.type)}" + } + else -> { + logger.warn(Severity.ErrorSevere, "Unexpected type argument.") + "???" + } + } + + fun typeArgsShortName(typeArgs: List): String { + if(typeArgs.isEmpty()) + return "" + return typeArgs.joinToString(prefix = "<", postfix = ">", separator = ",") { typeArgShortName(it) } + } + + fun classShortName(c: IrClass, typeArgs: List) = + "${c.name}${typeArgsShortName(typeArgs)}" + fun extractClassSource(c: IrClass): Label { val id = useClassSource(c) val pkg = c.packageFqName?.asString() ?: "" From efe3a77efeb2f3fde8112f980a328aa63c10e087 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 29 Oct 2021 18:24:53 +0100 Subject: [PATCH 0692/1618] shortName: use boxed types for type arguments and use K->J class substitutions --- .../main/kotlin/KotlinExtractorExtension.kt | 123 +++++++++++------- 1 file changed, 74 insertions(+), 49 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 063f3152f87..7e3cf8ff305 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -266,6 +266,34 @@ class KotlinSourceFileExtractor( } +data class PrimitiveTypeInfo( + val primitiveName: String?, + val javaPackageName: String, val javaClassName: String, + val kotlinPackageName: String, val kotlinClassName: String +) + +val primitiveTypeMapping = mapOf( + IdSignatureValues._byte to PrimitiveTypeInfo("byte", "java.lang", "Byte", "kotlin", "Byte"), + IdSignatureValues._short to PrimitiveTypeInfo("short", "java.lang", "Short", "kotlin", "Short"), + IdSignatureValues._int to PrimitiveTypeInfo("int", "java.lang", "Integer", "kotlin", "Int"), + IdSignatureValues._long to PrimitiveTypeInfo("long", "java.lang", "Long", "kotlin", "Long"), + + IdSignatureValues.uByte to PrimitiveTypeInfo("byte", "kotlin", "UByte", "kotlin", "UByte"), + IdSignatureValues.uShort to PrimitiveTypeInfo("short", "kotlin", "UShort", "kotlin", "UShort"), + IdSignatureValues.uInt to PrimitiveTypeInfo("int", "kotlin", "UInt", "kotlin", "UInt"), + IdSignatureValues.uLong to PrimitiveTypeInfo("long", "kotlin", "ULong", "kotlin", "ULong"), + + IdSignatureValues._double to PrimitiveTypeInfo("double", "java.lang", "Double", "kotlin", "Double"), + IdSignatureValues._float to PrimitiveTypeInfo("float", "java.lang", "Float", "kotlin", "Float"), + + IdSignatureValues._boolean to PrimitiveTypeInfo("boolean", "java.lang", "Boolean", "kotlin", "Boolean"), + + IdSignatureValues._char to PrimitiveTypeInfo("char", "java.lang", "Character", "kotlin", "Char"), + + IdSignatureValues.unit to PrimitiveTypeInfo("void", "java.lang", "Void", "kotlin", "Nothing"), // TODO: Is this right? + IdSignatureValues.nothing to PrimitiveTypeInfo(null, "java.lang", "Void", "kotlin", "Nothing"), // TODO: Is this right? +) + open class KotlinUsesExtractor( open val logger: Logger, open val tw: TrapWriter, @@ -298,15 +326,18 @@ open class KotlinUsesExtractor( } } + fun getJavaEquivalentClass(c: IrClass) = + c.fqNameWhenAvailable?.toUnsafe() + ?.let { JavaToKotlinClassMap.mapKotlinToJava(it) } + ?.let { pluginContext.referenceClass(it.asSingleFqName()) } + ?.owner + fun useClassInstance(c: IrClass, typeArgs: List): UseClassInstanceResult { // TODO: only substitute in class and function signatures // because within function bodies we can get things like Unit.INSTANCE // and List.asIterable (an extension, i.e. static, method) // Map Kotlin class to its equivalent Java class: - val substituteClass = c.fqNameWhenAvailable?.toUnsafe() - ?.let { JavaToKotlinClassMap.mapKotlinToJava(it) } - ?.let { pluginContext.referenceClass(it.asSingleFqName()) } - ?.owner + val substituteClass = getJavaEquivalentClass(c) val extractClass = substituteClass ?: c @@ -458,6 +489,8 @@ open class KotlinUsesExtractor( return TypeResults(javaResult, kotlinResult) } + val primitiveInfo = primitiveTypeMapping[s.classifier.signature] + when { /* XXX delete? @@ -470,26 +503,11 @@ XXX delete? } */ - s.isByte() -> return primitiveType("byte", "java.lang", "Byte", "kotlin", "Byte") - s.isShort() -> return primitiveType("short", "java.lang", "Short", "kotlin", "Short") - s.isInt() -> return primitiveType("int", "java.lang", "Integer", "kotlin", "Int") - s.isLong() -> return primitiveType("long", "java.lang", "Long", "kotlin", "Long") - s.isUByte() -> return primitiveType("byte", "kotlin", "UByte", "kotlin", "UByte") - s.isUShort() -> return primitiveType("short", "kotlin", "UShort", "kotlin", "UShort") - s.isUInt() -> return primitiveType("int", "kotlin", "UInt", "kotlin", "UInt") - s.isULong() -> return primitiveType("long", "kotlin", "ULong", "kotlin", "ULong") - - s.isDouble() -> return primitiveType("double", "java.lang", "Double", "kotlin", "Double") - s.isFloat() -> return primitiveType("float", "java.lang", "Float", "kotlin", "Float") - - s.isBoolean() -> return primitiveType("boolean", "java.lang", "Boolean", "kotlin", "Boolean") - - s.isChar() -> return primitiveType("char", "java.lang", "Character", "kotlin", "Char") - s.isString() -> return primitiveType(null, "java.lang", "String", "kotlin", "String") - - s.isUnit() -> return primitiveType("void", "java.lang", "Void", "kotlin", "Nothing") // TODO: Is this right? - s.isNothing() -> return primitiveType(null, "java.lang", "Void", "kotlin", "Nothing") // TODO: Is this right? - + primitiveInfo != null -> return primitiveType( + s.classifier.owner as IrClass, + primitiveInfo.primitiveName, primitiveInfo.javaPackageName, + primitiveInfo.javaClassName, primitiveInfo.kotlinPackageName, primitiveInfo.kotlinClassName + ) /* TODO: Test case: nullable and has-question-mark type variables: class X { @@ -526,9 +544,9 @@ class X { val componentTypeLabel = useType(componentType) val elementTypeLabel = useType(elementType) val id = tw.getLabelFor("@\"array;$dimensions;{$elementTypeLabel.javaResult.id}\"") { - tw.writeArrays(it, "ARRAY", elementTypeLabel.javaResult.id, elementTypeLabel.kotlinResult.id, 1, componentTypeLabel.javaResult.id, componentTypeLabel.kotlinResult.id) + tw.writeArrays(it, shortName(s), elementTypeLabel.javaResult.id, elementTypeLabel.kotlinResult.id, 1, componentTypeLabel.javaResult.id, componentTypeLabel.kotlinResult.id) - extractClassInheritence(s.classifier.owner as IrClass, it) + extractClassCommon(s.classifier.owner as IrClass, it) // array.length val length = tw.getLabelFor("@\"field;{$it};length\"") @@ -635,14 +653,25 @@ class X { when (arg) { is IrStarProjection -> { val wildcardLabel = "@\"wildcard;\"" - val wildcardId: Label = tw.getLabelFor(wildcardLabel) - tw.writeWildcards(wildcardId, "*", 1) - tw.writeHasLocation(wildcardId, tw.unknownLocation) - return wildcardId + return tw.getLabelFor(wildcardLabel) { + tw.writeWildcards(wildcardId, "*", 1) + tw.writeHasLocation(wildcardId, tw.unknownLocation) + } } is IrTypeProjection -> { @Suppress("UNCHECKED_CAST") - return useType(arg.type, false).javaResult.id as Label + val boundLabel = useTypeOld(arg.type, false) as Label + + return if(arg.variance == Variance.INVARIANT) + boundLabel + else { + val keyPrefix = if (arg.variance == Variance.IN_VARIANCE) "super" else "extends" + val wildcardKind = if (arg.variance == Variance.IN_VARIANCE) 2 else 1 + tw.getLabelFor("@\"wildcard;$keyPrefix{$boundLabel}\"") { + tw.writeWildcards(it, typeArgShortName(arg), wildcardKind) + tw.writeHasLocation(it, tw.getLocation(-1, -1)) + } + } } else -> { logger.warn(Severity.ErrorSevere, "Unexpected type argument.") @@ -886,33 +915,29 @@ open class KotlinFileExtractor( return id } - fun shortName(type: IrType): String = + fun shortName(type: IrType, canReturnPrimitiveTypes: Boolean = true): String = when(type) { - is IrSimpleType -> + is IrSimpleType -> { + val primitiveInfo = primitiveTypeMapping[type.classifier.signature] when { - type.isByte() -> "byte" - type.isShort() -> "short" - type.isInt() -> "int" - type.isLong() -> "long" - type.isUByte() -> "byte" - type.isUShort() -> "short" - type.isUInt() -> "int" - type.isULong() -> "long" - type.isDouble() -> "double" - type.isFloat() -> "float" - type.isBoolean() -> "boolean" - type.isChar() -> "char" - type.isUnit() -> "void" + primitiveInfo?.primitiveName != null -> + if (type.hasQuestionMark || !canReturnPrimitiveTypes) + primitiveInfo.javaClassName + else + primitiveInfo.primitiveName type.isBoxedArray || type.isPrimitiveArray() -> shortName(type.getArrayElementType(pluginContext.irBuiltIns)) + "[]" - // TODO: Consider when Kotlin -> Java type substitution is needed - type.classifier.owner is IrClass -> classShortName(type.classifier.owner as IrClass, type.arguments) + type.classifier.owner is IrClass -> { + val c = type.classifier.owner as IrClass + classShortName(getJavaEquivalentClass(c) ?: c, type.arguments) + } type.classifier.owner is IrTypeParameter -> (type.classifier.owner as IrTypeParameter).name.asString() else -> "???" } + } else -> "???" } @@ -926,7 +951,7 @@ open class KotlinFileExtractor( Variance.OUT_VARIANCE -> "? extends " Variance.IN_VARIANCE -> "? super " } - "$prefix${shortName(typeArg.type)}" + "$prefix${shortName(typeArg.type, false)}" } else -> { logger.warn(Severity.ErrorSevere, "Unexpected type argument.") From 660988d8ac115ec1811c2698a480170a008e363a Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 29 Oct 2021 18:25:49 +0100 Subject: [PATCH 0693/1618] Ensure Unit type is extracted when needed --- .../src/main/kotlin/KotlinExtractorExtension.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 7e3cf8ff305..fe0679c40e2 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -457,7 +457,7 @@ open class KotlinUsesExtractor( }) return classId } - fun primitiveType(primitiveName: String?, + fun primitiveType(kotlinClass: IrClass, primitiveName: String?, javaPackageName: String, javaClassName: String, kotlinPackageName: String, kotlinClassName: String): TypeResults { val javaResult = if (canReturnPrimitiveTypes && !s.hasQuestionMark && primitiveName != null) { @@ -470,7 +470,7 @@ open class KotlinUsesExtractor( val signature = "$javaPackageName.$javaClassName" // TODO: Is this right? TypeResult(label, signature) } - val kotlinClassId = makeClass(kotlinPackageName, kotlinClassName) + val kotlinClassId = useClassInstance(kotlinClass, listOf()).classLabel val kotlinResult = if (s.hasQuestionMark) { val kotlinSignature = "$kotlinPackageName.$kotlinClassName?" // TODO: Is this right? val kotlinLabel = "@\"kt_type;nullable;$kotlinPackageName.$kotlinClassName\"" From 8016aa702722e76aa4b3eb7f3258c42103c636cc Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 4 Nov 2021 19:07:58 +0000 Subject: [PATCH 0694/1618] Adapt to refactor; useType changes --- .../main/kotlin/KotlinExtractorExtension.kt | 131 +++++++++--------- 1 file changed, 67 insertions(+), 64 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index fe0679c40e2..4ea1a692047 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -378,6 +378,59 @@ open class KotlinUsesExtractor( return id } + fun shortName(type: IrType, canReturnPrimitiveTypes: Boolean = true): String = + when(type) { + is IrSimpleType -> { + val primitiveInfo = primitiveTypeMapping[type.classifier.signature] + when { + primitiveInfo?.primitiveName != null -> + if (type.hasQuestionMark || !canReturnPrimitiveTypes) + primitiveInfo.javaClassName + else + primitiveInfo.primitiveName + + type.isBoxedArray || type.isPrimitiveArray() -> shortName(type.getArrayElementType(pluginContext.irBuiltIns)) + "[]" + + type.classifier.owner is IrClass -> { + val c = type.classifier.owner as IrClass + classShortName(getJavaEquivalentClass(c) ?: c, type.arguments) + } + + type.classifier.owner is IrTypeParameter -> (type.classifier.owner as IrTypeParameter).name.asString() + + else -> "???" + } + } + else -> "???" + } + + // Pretty-print typeArg the same way the Java extractor would: + fun typeArgShortName(typeArg: IrTypeArgument): String = + when(typeArg) { + is IrStarProjection -> "?" + is IrTypeProjection -> { + val prefix = when(typeArg.variance) { + Variance.INVARIANT -> "" + Variance.OUT_VARIANCE -> "? extends " + Variance.IN_VARIANCE -> "? super " + } + "$prefix${shortName(typeArg.type, false)}" + } + else -> { + logger.warn(Severity.ErrorSevere, "Unexpected type argument.") + "???" + } + } + + fun typeArgsShortName(typeArgs: List): String { + if(typeArgs.isEmpty()) + return "" + return typeArgs.joinToString(prefix = "<", postfix = ">", separator = ",") { typeArgShortName(it) } + } + + fun classShortName(c: IrClass, typeArgs: List) = + "${c.name}${typeArgsShortName(typeArgs)}" + fun extractClassInstance(c: IrClass, typeArgs: List): Label { if (typeArgs.isEmpty()) { logger.warn(Severity.ErrorSevere, "Instance without type arguments: " + c.name.asString()) @@ -550,15 +603,11 @@ class X { // array.length val length = tw.getLabelFor("@\"field;{$it};length\"") - tw.writeFields(length, "length", useType(pluginContext.irBuiltIns.intType).javaResult.id, it, length) + val intTypeIds = useType(pluginContext.irBuiltIns.intType) + tw.writeFields(length, "length", intTypeIds.javaResult.id, intTypeIds.kotlinResult.id, it, length) // TODO: modifiers // tw.writeHasModifier(length, getModifierKey("public")) // tw.writeHasModifier(length, getModifierKey("final")) - - val clone = tw.getLabelFor("@\"callable;{$it}.clone(){$it}\"") - tw.writeMethods(clone, "clone", "clone()", it, it, clone) - // TODO: modifiers - // tw.writeHasModifier(clone, getModifierKey("public")) } val javaSignature = "an array" // TODO: Wrong @@ -579,6 +628,13 @@ class X { }) TypeResult(kotlinId, kotlinSignature) } + + tw.getLabelFor("@\"callable;{$id}.clone(){$id}\"") { + tw.writeMethods(it, "clone", "clone()", javaResult.id, kotlinResult.id, javaResult.id, it) + // TODO: modifiers + // tw.writeHasModifier(clone, getModifierKey("public")) + } + return TypeResults(javaResult, kotlinResult) } @@ -654,13 +710,13 @@ class X { is IrStarProjection -> { val wildcardLabel = "@\"wildcard;\"" return tw.getLabelFor(wildcardLabel) { - tw.writeWildcards(wildcardId, "*", 1) - tw.writeHasLocation(wildcardId, tw.unknownLocation) + tw.writeWildcards(it, "*", 1) + tw.writeHasLocation(it, tw.unknownLocation) } } is IrTypeProjection -> { @Suppress("UNCHECKED_CAST") - val boundLabel = useTypeOld(arg.type, false) as Label + val boundLabel = useType(arg.type, false).javaResult.id as Label return if(arg.variance == Variance.INVARIANT) boundLabel @@ -669,7 +725,7 @@ class X { val wildcardKind = if (arg.variance == Variance.IN_VARIANCE) 2 else 1 tw.getLabelFor("@\"wildcard;$keyPrefix{$boundLabel}\"") { tw.writeWildcards(it, typeArgShortName(arg), wildcardKind) - tw.writeHasLocation(it, tw.getLocation(-1, -1)) + tw.writeHasLocation(it, tw.unknownLocation) } } } @@ -730,7 +786,7 @@ class X { return tw.getLabelFor(l) } - fun extractClassCommon(c: IrClass, id: Label) { + fun extractClassCommon(c: IrClass, id: Label) { for(t in c.superTypes) { when(t) { is IrSimpleType -> { @@ -915,59 +971,6 @@ open class KotlinFileExtractor( return id } - fun shortName(type: IrType, canReturnPrimitiveTypes: Boolean = true): String = - when(type) { - is IrSimpleType -> { - val primitiveInfo = primitiveTypeMapping[type.classifier.signature] - when { - primitiveInfo?.primitiveName != null -> - if (type.hasQuestionMark || !canReturnPrimitiveTypes) - primitiveInfo.javaClassName - else - primitiveInfo.primitiveName - - type.isBoxedArray || type.isPrimitiveArray() -> shortName(type.getArrayElementType(pluginContext.irBuiltIns)) + "[]" - - type.classifier.owner is IrClass -> { - val c = type.classifier.owner as IrClass - classShortName(getJavaEquivalentClass(c) ?: c, type.arguments) - } - - type.classifier.owner is IrTypeParameter -> (type.classifier.owner as IrTypeParameter).name.asString() - - else -> "???" - } - } - else -> "???" - } - - // Pretty-print typeArg the same way the Java extractor would: - fun typeArgShortName(typeArg: IrTypeArgument): String = - when(typeArg) { - is IrStarProjection -> "?" - is IrTypeProjection -> { - val prefix = when(typeArg.variance) { - Variance.INVARIANT -> "" - Variance.OUT_VARIANCE -> "? extends " - Variance.IN_VARIANCE -> "? super " - } - "$prefix${shortName(typeArg.type, false)}" - } - else -> { - logger.warn(Severity.ErrorSevere, "Unexpected type argument.") - "???" - } - } - - fun typeArgsShortName(typeArgs: List): String { - if(typeArgs.isEmpty()) - return "" - return typeArgs.joinToString(prefix = "<", postfix = ">", separator = ",") { typeArgShortName(it) } - } - - fun classShortName(c: IrClass, typeArgs: List) = - "${c.name}${typeArgsShortName(typeArgs)}" - fun extractClassSource(c: IrClass): Label { val id = useClassSource(c) val pkg = c.packageFqName?.asString() ?: "" From a6dc408c4e067f060334ea4d8e4ef56c41febe89 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 9 Nov 2021 18:35:07 +0000 Subject: [PATCH 0695/1618] Fix: bracket string template expression properly --- .../src/main/kotlin/KotlinExtractorExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 4ea1a692047..30dcc7fc202 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -596,7 +596,7 @@ class X { val componentTypeLabel = useType(componentType) val elementTypeLabel = useType(elementType) - val id = tw.getLabelFor("@\"array;$dimensions;{$elementTypeLabel.javaResult.id}\"") { + val id = tw.getLabelFor("@\"array;$dimensions;{${elementTypeLabel.javaResult.id}}\"") { tw.writeArrays(it, shortName(s), elementTypeLabel.javaResult.id, elementTypeLabel.kotlinResult.id, 1, componentTypeLabel.javaResult.id, componentTypeLabel.kotlinResult.id) extractClassCommon(s.classifier.owner as IrClass, it) From 0ba4753b8fec416cc8721fda0b0162bb1336ae0d Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 9 Nov 2021 18:51:57 +0000 Subject: [PATCH 0696/1618] Restrict Kotlin types describing arrays * Always use a nullable type * Never use a type projection (same behaviour as IrType.getArrayElementType) Otherwise the kotlin type doesn't functionally depend on the type label --- .../main/kotlin/KotlinExtractorExtension.kt | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 30dcc7fc202..0a2b1ab505f 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -27,6 +27,7 @@ import com.intellij.openapi.vfs.StandardFileSystems import com.semmle.extractor.java.OdasaOutput import com.semmle.extractor.java.OdasaOutput.TrapFileManager import com.semmle.util.files.FileUtil +import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.types.Variance import kotlin.system.exitProcess @@ -612,22 +613,13 @@ class X { val javaSignature = "an array" // TODO: Wrong val javaResult = TypeResult(id, javaSignature) - val kotlinClassName = getUnquotedClassLabel(s.classifier.owner as IrClass, s.arguments) - val kotlinResult = if (s.hasQuestionMark) { - val kotlinSignature = "$javaSignature?" // TODO: Wrong - val kotlinLabel = "@\"kt_type;nullable;${kotlinClassName}\"" - val kotlinId: Label = tw.getLabelFor(kotlinLabel, { - tw.writeKt_nullable_types(it, id) - }) - TypeResult(kotlinId, kotlinSignature) - } else { - val kotlinSignature = "$javaSignature" // TODO: Wrong - val kotlinLabel = "@\"kt_type;notnull;${kotlinClassName}\"" // TODO: Wrong - val kotlinId: Label = tw.getLabelFor(kotlinLabel, { - tw.writeKt_notnull_types(it, id) - }) - TypeResult(kotlinId, kotlinSignature) - } + val kotlinClassName = getUnquotedClassLabel(s.classifier.owner as IrClass, listOf(makeTypeProjection(componentType, Variance.INVARIANT))) + val kotlinSignature = "$javaSignature?" // TODO: Wrong + val kotlinLabel = "@\"kt_type;nullable;${kotlinClassName}\"" + val kotlinId: Label = tw.getLabelFor(kotlinLabel, { + tw.writeKt_nullable_types(it, id) + }) + val kotlinResult = TypeResult(kotlinId, kotlinSignature) tw.getLabelFor("@\"callable;{$id}.clone(){$id}\"") { tw.writeMethods(it, "clone", "clone()", javaResult.id, kotlinResult.id, javaResult.id, it) From 1d95431a7a035d19eef9232fac8ca4d13c66c138 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 10 Nov 2021 15:24:32 +0000 Subject: [PATCH 0697/1618] Always use the nullable type for arrays --- .../src/main/kotlin/KotlinExtractorExtension.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt index 0a2b1ab505f..09ebe1d756d 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinExtractorExtension.kt @@ -597,8 +597,20 @@ class X { val componentTypeLabel = useType(componentType) val elementTypeLabel = useType(elementType) + + fun kotlinLabelOfJavaType(type: IrType, typeLabel: Label) = + if (type.isPrimitiveType()) + // Java lowering distinguishes nullable and non-nullable, so keep the existing label + typeLabel + else + // Java lowering always concerns the nullable type, so get the nullable equivalent + useType(type.makeNullable()).kotlinResult.id + + val kotlinComponentTypeLabel = kotlinLabelOfJavaType(componentType, componentTypeLabel.kotlinResult.id) + val kotlinElementTypeLabel = kotlinLabelOfJavaType(elementType, elementTypeLabel.kotlinResult.id) + val id = tw.getLabelFor("@\"array;$dimensions;{${elementTypeLabel.javaResult.id}}\"") { - tw.writeArrays(it, shortName(s), elementTypeLabel.javaResult.id, elementTypeLabel.kotlinResult.id, 1, componentTypeLabel.javaResult.id, componentTypeLabel.kotlinResult.id) + tw.writeArrays(it, shortName(s), elementTypeLabel.javaResult.id, kotlinElementTypeLabel, 1, componentTypeLabel.javaResult.id, kotlinComponentTypeLabel) extractClassCommon(s.classifier.owner as IrClass, it) From 805b54897e1e4d709f3be276c4dcbcd61ca5f97f Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 10 Nov 2021 15:59:24 +0000 Subject: [PATCH 0698/1618] KotlinType: accept non-class-or-interface Java types --- java/ql/lib/semmle/code/java/KotlinType.qll | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/semmle/code/java/KotlinType.qll b/java/ql/lib/semmle/code/java/KotlinType.qll index 3122e124d9c..a4c07007cbf 100755 --- a/java/ql/lib/semmle/code/java/KotlinType.qll +++ b/java/ql/lib/semmle/code/java/KotlinType.qll @@ -9,18 +9,18 @@ class KotlinType extends Element, @kt_type { class KotlinNullableType extends KotlinType, @kt_nullable_type { override string toString() { - exists(ClassOrInterface ci | - kt_nullable_types(this, ci) and - result = "Kotlin nullable " + ci.toString()) + exists(RefType javaType | + kt_nullable_types(this, javaType) and + result = "Kotlin nullable " + javaType.toString()) } override string getAPrimaryQlClass() { result = "KotlinNullableType" } } class KotlinNotnullType extends KotlinType, @kt_notnull_type { override string toString() { - exists(ClassOrInterface ci | - kt_notnull_types(this, ci) and - result = "Kotlin not-null " + ci.toString()) + exists(RefType javaType | + kt_notnull_types(this, javaType) and + result = "Kotlin not-null " + javaType.toString()) } override string getAPrimaryQlClass() { result = "KotlinNotnullType" } } From 239ee588a64ab0337b29aa3d8ac73b322cd58f7c Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 10 Nov 2021 15:59:42 +0000 Subject: [PATCH 0699/1618] Update test expectations --- .../library-tests/classes/superTypes.expected | 4 +- .../library-tests/instances/classes.expected | 2 +- .../type_aliases/type_aliases.expected | 6 +- .../kotlin/library-tests/types/types.expected | 4185 +++++++++-------- 4 files changed, 2257 insertions(+), 1940 deletions(-) diff --git a/java/ql/test/kotlin/library-tests/classes/superTypes.expected b/java/ql/test/kotlin/library-tests/classes/superTypes.expected index 0883da3aafe..6a522d920ae 100644 --- a/java/ql/test/kotlin/library-tests/classes/superTypes.expected +++ b/java/ql/test/kotlin/library-tests/classes/superTypes.expected @@ -7,5 +7,5 @@ | classes.kt:28:1:30:1 | ClassSix | classes.kt:20:1:22:1 | IF1 | | classes.kt:28:1:30:1 | ClassSix | classes.kt:24:1:26:1 | IF2 | | classes.kt:34:1:47:1 | ClassSeven | file://:0:0:0:0 | Object | -| classes.kt:49:1:51:1 | Direction | file://:0:0:0:0 | Enum | -| classes.kt:53:1:57:1 | Color | file://:0:0:0:0 | Enum | +| classes.kt:49:1:51:1 | Direction | file://:0:0:0:0 | Enum | +| classes.kt:53:1:57:1 | Color | file://:0:0:0:0 | Enum | diff --git a/java/ql/test/kotlin/library-tests/instances/classes.expected b/java/ql/test/kotlin/library-tests/instances/classes.expected index bf0f7bd08d0..1b9a05856f7 100644 --- a/java/ql/test/kotlin/library-tests/instances/classes.expected +++ b/java/ql/test/kotlin/library-tests/instances/classes.expected @@ -2,4 +2,4 @@ | TestClassA.kt:2:1:3:1 | TestClassA | | TestClassAUser.kt:0:0:0:0 | TestClassAUserKt | | TestClassAUser.kt:15:1:15:24 | TestClassAUser | -| file://:0:0:0:0 | TestClassA | +| file://:0:0:0:0 | TestClassA | diff --git a/java/ql/test/kotlin/library-tests/type_aliases/type_aliases.expected b/java/ql/test/kotlin/library-tests/type_aliases/type_aliases.expected index e37597d22bc..65cc126420f 100644 --- a/java/ql/test/kotlin/library-tests/type_aliases/type_aliases.expected +++ b/java/ql/test/kotlin/library-tests/type_aliases/type_aliases.expected @@ -1,3 +1,3 @@ -| test.kt:4:1:4:24 | AliasInt | file://:0:0:0:0 | Kotlin not-null Int | -| test.kt:5:1:5:31 | AliasX | file://:0:0:0:0 | Kotlin not-null MyClass | -| test.kt:6:1:6:36 | AliasY | file://:0:0:0:0 | Kotlin not-null MyClass | +| test.kt:4:1:4:24 | AliasInt | file://:0:0:0:0 | Kotlin not-null Integer | +| test.kt:5:1:5:31 | AliasX | file://:0:0:0:0 | Kotlin not-null MyClass | +| test.kt:6:1:6:36 | AliasY | file://:0:0:0:0 | Kotlin not-null MyClass | diff --git a/java/ql/test/kotlin/library-tests/types/types.expected b/java/ql/test/kotlin/library-tests/types/types.expected index 6f1b1a62fb6..6e697c607e1 100644 --- a/java/ql/test/kotlin/library-tests/types/types.expected +++ b/java/ql/test/kotlin/library-tests/types/types.expected @@ -1,4 +1,329 @@ | file://:0:0:0:0 | * | Wildcard | +| file://:0:0:0:0 | ? extends Annotation | Wildcard | +| file://:0:0:0:0 | ? extends Attribute | Wildcard | +| file://:0:0:0:0 | ? extends BoundMethodHandle | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Callable | Wildcard | +| file://:0:0:0:0 | ? extends Certificate | Wildcard | +| file://:0:0:0:0 | ? extends ChronoLocalDate | Wildcard | +| file://:0:0:0:0 | ? extends DoubleStream | Wildcard | +| file://:0:0:0:0 | ? extends E | Wildcard | +| file://:0:0:0:0 | ? extends E | Wildcard | +| file://:0:0:0:0 | ? extends E | Wildcard | +| file://:0:0:0:0 | ? extends E | Wildcard | +| file://:0:0:0:0 | ? extends E | Wildcard | +| file://:0:0:0:0 | ? extends Entry | Wildcard | +| file://:0:0:0:0 | ? extends Entry | Wildcard | +| file://:0:0:0:0 | ? extends Entry | Wildcard | +| file://:0:0:0:0 | ? extends FileAttributeView | Wildcard | +| file://:0:0:0:0 | ? extends Identity | Wildcard | +| file://:0:0:0:0 | ? extends IntStream | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends K | Wildcard | +| file://:0:0:0:0 | ? extends LongStream | Wildcard | +| file://:0:0:0:0 | ? extends Object | Wildcard | +| file://:0:0:0:0 | ? extends OpenOption | Wildcard | +| file://:0:0:0:0 | ? extends Optional | Wildcard | +| file://:0:0:0:0 | ? extends Optional | Wildcard | +| file://:0:0:0:0 | ? extends Principal | Wildcard | +| file://:0:0:0:0 | ? extends R | Wildcard | +| file://:0:0:0:0 | ? extends R | Wildcard | +| file://:0:0:0:0 | ? extends S | Wildcard | +| file://:0:0:0:0 | ? extends S | Wildcard | +| file://:0:0:0:0 | ? extends Stream | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends T | Wildcard | +| file://:0:0:0:0 | ? extends Throwable | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends U | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends V | Wildcard | +| file://:0:0:0:0 | ? extends WeakReference> | Wildcard | +| file://:0:0:0:0 | ? extends X | Wildcard | +| file://:0:0:0:0 | ? extends X | Wildcard | +| file://:0:0:0:0 | ? extends X | Wildcard | +| file://:0:0:0:0 | ? extends X | Wildcard | +| file://:0:0:0:0 | ? super A | Wildcard | +| file://:0:0:0:0 | ? super A | Wildcard | +| file://:0:0:0:0 | ? super A | Wildcard | +| file://:0:0:0:0 | ? super A | Wildcard | +| file://:0:0:0:0 | ? super Character | Wildcard | +| file://:0:0:0:0 | ? super Class | Wildcard | +| file://:0:0:0:0 | ? super Cleaner | Wildcard | +| file://:0:0:0:0 | ? super Double | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super E | Wildcard | +| file://:0:0:0:0 | ? super Entry | Wildcard | +| file://:0:0:0:0 | ? super Entry | Wildcard | +| file://:0:0:0:0 | ? super Entry | Wildcard | +| file://:0:0:0:0 | ? super Entry | Wildcard | +| file://:0:0:0:0 | ? super Entry | Wildcard | +| file://:0:0:0:0 | ? super Entry | Wildcard | +| file://:0:0:0:0 | ? super Entry | Wildcard | +| file://:0:0:0:0 | ? super ForkJoinPool | Wildcard | +| file://:0:0:0:0 | ? super ForkJoinTask | Wildcard | +| file://:0:0:0:0 | ? super Identity | Wildcard | +| file://:0:0:0:0 | ? super Integer | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super K | Wildcard | +| file://:0:0:0:0 | ? super Long | Wildcard | +| file://:0:0:0:0 | ? super Object | Wildcard | +| file://:0:0:0:0 | ? super Path | Wildcard | +| file://:0:0:0:0 | ? super R | Wildcard | +| file://:0:0:0:0 | ? super R | Wildcard | +| file://:0:0:0:0 | ? super Reference | Wildcard | +| file://:0:0:0:0 | ? super StackFrame | Wildcard | +| file://:0:0:0:0 | ? super Stream | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super T | Wildcard | +| file://:0:0:0:0 | ? super ThreadLocal | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super U | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super V | Wildcard | +| file://:0:0:0:0 | ? super Version | Wildcard | | file://:0:0:0:0 | A | TypeVariable | | file://:0:0:0:0 | A | TypeVariable | | file://:0:0:0:0 | A | TypeVariable | @@ -17,423 +342,178 @@ | file://:0:0:0:0 | A | TypeVariable | | file://:0:0:0:0 | A | TypeVariable | | file://:0:0:0:0 | A | TypeVariable | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | -| file://:0:0:0:0 | ARRAY | Array | +| file://:0:0:0:0 | A[] | Array | +| file://:0:0:0:0 | A[] | Array | +| file://:0:0:0:0 | A[] | Array | +| file://:0:0:0:0 | A[] | Array | +| file://:0:0:0:0 | A[] | Array | | file://:0:0:0:0 | AbstractChronology | Class | | file://:0:0:0:0 | AbstractCollection | Class, GenericType, ParameterizedType | -| file://:0:0:0:0 | AbstractCollection | Class, ParameterizedType | -| file://:0:0:0:0 | AbstractCollection | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractCollection | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractCollection | Class, ParameterizedType | | file://:0:0:0:0 | AbstractExecutorService | Class | | file://:0:0:0:0 | AbstractInterruptibleChannel | Class | | file://:0:0:0:0 | AbstractList | Class, GenericType, ParameterizedType | -| file://:0:0:0:0 | AbstractList | Class, ParameterizedType | -| file://:0:0:0:0 | AbstractList | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractList | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractList | Class, ParameterizedType | | file://:0:0:0:0 | AbstractMap | Class, GenericType, ParameterizedType | -| file://:0:0:0:0 | AbstractMap | Class, ParameterizedType | -| file://:0:0:0:0 | AbstractMap | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractMap | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractMap | Class, ParameterizedType | | file://:0:0:0:0 | AbstractOwnableSynchronizer | Class | | file://:0:0:0:0 | AbstractQueuedSynchronizer | Class | | file://:0:0:0:0 | AbstractRepository | Class, GenericType, ParameterizedType | -| file://:0:0:0:0 | AbstractRepository | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractRepository | Class, ParameterizedType | | file://:0:0:0:0 | AbstractSet | Class, GenericType, ParameterizedType | -| file://:0:0:0:0 | AbstractSet | Class, ParameterizedType | +| file://:0:0:0:0 | AbstractSet | Class, ParameterizedType | | file://:0:0:0:0 | AbstractStringBuilder | Class | | file://:0:0:0:0 | AccessControlContext | Class | | file://:0:0:0:0 | AccessDescriptor | Class | | file://:0:0:0:0 | AccessMode | Class | | file://:0:0:0:0 | AccessMode | Class | +| file://:0:0:0:0 | AccessMode[] | Array | +| file://:0:0:0:0 | AccessMode[] | Array | | file://:0:0:0:0 | AccessType | Class | +| file://:0:0:0:0 | AccessType[] | Array | | file://:0:0:0:0 | AccessibleObject | Class | +| file://:0:0:0:0 | AccessibleObject[] | Array | | file://:0:0:0:0 | AdaptedCallable | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | AdaptedRunnable | Class, GenericType, ParameterizedType | | file://:0:0:0:0 | AdaptedRunnableAction | Class | | file://:0:0:0:0 | AnnotatedElement | Interface | | file://:0:0:0:0 | AnnotatedType | Interface | +| file://:0:0:0:0 | AnnotatedType[] | Array | | file://:0:0:0:0 | Annotation | Interface | | file://:0:0:0:0 | Annotation | Interface | | file://:0:0:0:0 | AnnotationType | Class | | file://:0:0:0:0 | AnnotationVisitor | Class | +| file://:0:0:0:0 | Annotation[] | Array | +| file://:0:0:0:0 | Annotation[][] | Array | | file://:0:0:0:0 | Any | Class | | file://:0:0:0:0 | Appendable | Interface | -| file://:0:0:0:0 | Array | Class, GenericType, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | -| file://:0:0:0:0 | Array | Class, ParameterizedType | | file://:0:0:0:0 | ArrayAccess | Class | +| file://:0:0:0:0 | ArrayAccess[] | Array | | file://:0:0:0:0 | ArrayAccessor | Class | | file://:0:0:0:0 | ArrayIndexOutOfBoundsException | Class | | file://:0:0:0:0 | ArrayList | Class, GenericType, ParameterizedType | -| file://:0:0:0:0 | ArrayList | Class, ParameterizedType | -| file://:0:0:0:0 | ArrayList | Class, ParameterizedType | +| file://:0:0:0:0 | ArrayList> | Class, ParameterizedType | +| file://:0:0:0:0 | ArrayList> | Class, ParameterizedType | | file://:0:0:0:0 | ArrayListSpliterator | Class | -| file://:0:0:0:0 | ArrayListSpliterator | Class, ParameterizedType | +| file://:0:0:0:0 | ArrayListSpliterator | Class, ParameterizedType | | file://:0:0:0:0 | ArrayTypeSignature | Class | | file://:0:0:0:0 | AsynchronousChannel | Interface | | file://:0:0:0:0 | AsynchronousFileChannel | Class | | file://:0:0:0:0 | AtomicInteger | Class | | file://:0:0:0:0 | AtomicReference | Class, GenericType, ParameterizedType | -| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | -| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | -| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | -| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | +| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | +| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | +| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | +| file://:0:0:0:0 | AtomicReference | Class, ParameterizedType | | file://:0:0:0:0 | Attribute | Class | | file://:0:0:0:0 | Attribute | Class | | file://:0:0:0:0 | AttributeView | Interface | +| file://:0:0:0:0 | Attribute[] | Array | | file://:0:0:0:0 | AttributedCharacterIterator | Interface | +| file://:0:0:0:0 | AttributedCharacterIterator[] | Array | | file://:0:0:0:0 | AuthPermission | Class | | file://:0:0:0:0 | AuthPermissionHolder | Class | | file://:0:0:0:0 | AutoCloseable | Interface | | file://:0:0:0:0 | BaseIterator | Class, GenericType, ParameterizedType | -| file://:0:0:0:0 | BaseIterator | Class, ParameterizedType | -| file://:0:0:0:0 | BaseIterator | Class, ParameterizedType | -| file://:0:0:0:0 | BaseIterator | Class, ParameterizedType | +| file://:0:0:0:0 | BaseIterator | Class, ParameterizedType | +| file://:0:0:0:0 | BaseIterator | Class, ParameterizedType | +| file://:0:0:0:0 | BaseIterator | Class, ParameterizedType | | file://:0:0:0:0 | BaseLocale | Class | | file://:0:0:0:0 | BaseStream | GenericType, Interface, ParameterizedType | -| file://:0:0:0:0 | BaseStream | Interface, ParameterizedType | -| file://:0:0:0:0 | BaseStream | Interface, ParameterizedType | -| file://:0:0:0:0 | BaseStream | Interface, ParameterizedType | -| file://:0:0:0:0 | BaseStream | Interface, ParameterizedType | +| file://:0:0:0:0 | BaseStream | Interface, ParameterizedType | +| file://:0:0:0:0 | BaseStream | Interface, ParameterizedType | +| file://:0:0:0:0 | BaseStream | Interface, ParameterizedType | +| file://:0:0:0:0 | BaseStream> | Interface, ParameterizedType | | file://:0:0:0:0 | BaseType | Interface | | file://:0:0:0:0 | BasicFileAttributes | Interface | | file://:0:0:0:0 | BasicPermission | Class | | file://:0:0:0:0 | BasicType | Class | +| file://:0:0:0:0 | BasicType[] | Array | | file://:0:0:0:0 | BiConsumer | GenericType, Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | -| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer> | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | +| file://:0:0:0:0 | BiConsumer | Interface, ParameterizedType | | file://:0:0:0:0 | BiFunction | GenericType, Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | -| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction,? super Entry,? extends Entry> | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction,? extends Entry> | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction,Entry,? extends Entry> | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction,Entry,? extends Entry> | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction,ArrayIndexOutOfBoundsException> | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | +| file://:0:0:0:0 | BiFunction | Interface, ParameterizedType | | file://:0:0:0:0 | BigInteger | Class | +| file://:0:0:0:0 | BigInteger[] | Array | | file://:0:0:0:0 | BinaryOperator | GenericType, Interface, ParameterizedType | -| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | -| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | -| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | -| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | -| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | -| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | -| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | -| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | +| file://:0:0:0:0 | BinaryOperator | Interface, ParameterizedType | | file://:0:0:0:0 | Boolean | Class | | file://:0:0:0:0 | Boolean | Class | -| file://:0:0:0:0 | BooleanArray | Class | | file://:0:0:0:0 | BooleanCompanionObject | Class | -| file://:0:0:0:0 | BooleanIterator | Class | | file://:0:0:0:0 | BooleanSignature | Class | | file://:0:0:0:0 | BottomSignature | Class | | file://:0:0:0:0 | BoundMethodHandle | Class | @@ -445,150 +525,151 @@ | file://:0:0:0:0 | Builder | Interface | | file://:0:0:0:0 | Builder | Interface | | file://:0:0:0:0 | Builder | Interface | -| file://:0:0:0:0 | Builder | Interface, ParameterizedType | -| file://:0:0:0:0 | Builder | Interface, ParameterizedType | +| file://:0:0:0:0 | Builder | Interface, ParameterizedType | +| file://:0:0:0:0 | Builder | Interface, ParameterizedType | | file://:0:0:0:0 | BulkTask | Class, GenericType, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | -| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask> | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | +| file://:0:0:0:0 | BulkTask | Class, ParameterizedType | | file://:0:0:0:0 | Byte | Class | | file://:0:0:0:0 | Byte | Class | -| file://:0:0:0:0 | ByteArray | Class | | file://:0:0:0:0 | ByteBuffer | Class | +| file://:0:0:0:0 | ByteBuffer[] | Array | | file://:0:0:0:0 | ByteChannel | Interface | -| file://:0:0:0:0 | ByteIterator | Class | +| file://:0:0:0:0 | ByteCompanionObject | Class | | file://:0:0:0:0 | ByteOrder | Class | | file://:0:0:0:0 | ByteSignature | Class | | file://:0:0:0:0 | ByteVector | Class | | file://:0:0:0:0 | CallSite | Class | | file://:0:0:0:0 | Callable | GenericType, Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | -| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | +| file://:0:0:0:0 | Callable | Interface, ParameterizedType | | file://:0:0:0:0 | CaseInsensitiveChar | Class | | file://:0:0:0:0 | CaseInsensitiveString | Class | | file://:0:0:0:0 | Category | Class | +| file://:0:0:0:0 | Category[] | Array | | file://:0:0:0:0 | CertPath | Class | | file://:0:0:0:0 | CertPathRep | Class | | file://:0:0:0:0 | Certificate | Class | | file://:0:0:0:0 | CertificateRep | Class | +| file://:0:0:0:0 | Certificate[] | Array | | file://:0:0:0:0 | Channel | Interface | | file://:0:0:0:0 | Char | Class | -| file://:0:0:0:0 | CharArray | Class | | file://:0:0:0:0 | CharBuffer | Class | | file://:0:0:0:0 | CharCompanionObject | Class | | file://:0:0:0:0 | CharIterator | Class | @@ -597,188 +678,204 @@ | file://:0:0:0:0 | CharRange | Class | | file://:0:0:0:0 | CharSequence | Interface | | file://:0:0:0:0 | CharSequence | Interface | +| file://:0:0:0:0 | CharSequence[] | Array | | file://:0:0:0:0 | CharSignature | Class | | file://:0:0:0:0 | Character | Class | | file://:0:0:0:0 | CharacterIterator | Interface | | file://:0:0:0:0 | Characteristics | Class | +| file://:0:0:0:0 | Characteristics[] | Array | | file://:0:0:0:0 | Charset | Class | | file://:0:0:0:0 | CharsetDecoder | Class | | file://:0:0:0:0 | CharsetEncoder | Class | | file://:0:0:0:0 | ChronoField | Class | +| file://:0:0:0:0 | ChronoField[] | Array | | file://:0:0:0:0 | ChronoLocalDate | Interface | | file://:0:0:0:0 | ChronoLocalDateTime | GenericType, Interface, ParameterizedType | -| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | -| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | -| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | -| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | -| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoLocalDateTime | Interface, ParameterizedType | | file://:0:0:0:0 | ChronoPeriod | Interface | | file://:0:0:0:0 | ChronoPrinterParser | Class | | file://:0:0:0:0 | ChronoUnit | Class | +| file://:0:0:0:0 | ChronoUnit[] | Array | | file://:0:0:0:0 | ChronoZonedDateTime | GenericType, Interface, ParameterizedType | -| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | -| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | -| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | -| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | -| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | +| file://:0:0:0:0 | ChronoZonedDateTime | Interface, ParameterizedType | | file://:0:0:0:0 | Chronology | Interface | | file://:0:0:0:0 | Class | Class, GenericType, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | -| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class[] | Array | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class | Class, ParameterizedType | +| file://:0:0:0:0 | Class[] | Array | +| file://:0:0:0:0 | Class
    Exampledeflhs
    Exampledeflhs
    x += yx += yx
    ++z.q++z.qz.q
    import { a as b } from 'm'a as bb